2018年春招实习面试经验总结

本文转自我的个人网站:http://cuijiahua.com/

一、前言

最近一直在参加各种面试,感觉自己面试表现很弱鸡,虽然已经有了点offer,但跟那些offer收割机比起来,差得太远。本篇文章记录了自己在面试过程中被问到的各种问题以及一些经验之谈。对于后续碰到的一些面试题,我会在个人网站持续更新持续更新。:点击查看

我选择岗位的标准是,找各个公司最适合我的实习岗位,有就投,没有就pass,因此我投递的岗位有些多样,主要投递的岗位:算法工程师、机器学习/深度学习工程师、数据挖掘工程师。

参加过的面试形式有:电话面、视频面、现场面。

对了,找面试期间,如果你的来电标有房产中介之类标识,也要接起来,不要直接挂断,因为没准这就是你面试官的副业(尴尬脸)。

二、经验总结

参加面试各种不顺,深感自己的弱项在于数据结构掌握不行,剑指offer刷了一遍,怎奈脑子不够用,总是忘记,还需继续努力才是。

刚开始面试的时候,遇到了各种问题,也办了一些傻事。此处总结下,说下自己的感受:

1、认真思考

刚开始参加面试的时候,很不自信。远程电话面试的时候,面对面试官的一个问题,我的第一反应是这个问题在哪看过,网上是怎么说的,甚至是在哪能找到答案。当时的我忽略了思考这个问题本身,而去想从何处能找到所谓的正确答案,自己的这一问题是准备不充分、不自信、紧张共同造成的结果。其实,如果认真的思考问题本身,答案并不难想到,而我往往是撂下电话,自己认真思考一下,然后悔恨不已:哇,刚才怎么没有想到!所以一句话:面对面试官的问题,一定要自己认真思考问题本身,自信一些,说出自己的想法,如果碰到耐心的面试官,他会一步一步引导你的。

2、做好准备

刚开始我是“佛系”面试,一切随缘,真的一点不准备,也不知道自己应该看啥,然后面试了还蒙逼,明明有些不自信,还这么浪,可想而知,面试结果也很惨,二连跪,三连跪,跪得我都快站不起来了。当然,如果是真大牛,“佛系”面试也可以,怎奈我是一个渣硕,准备还是需要好好做的,因此决定痛改前非,重新做人。经过一段时间的准备,终于有些思路了,我认为需要着重准备以下几点:自我介绍、数据结构、简历项目、岗位需求。

  • 自我介绍:这个是最好准备的东西了,根据自己的实际经历,组织好语言即可。有些面试官会问,或者刚开始面试的时候,面试官正在看你简历时,你可以主动提:那我先做下简单的自我介绍吧。
  • 数据结构:数据结构不是说我刷过剑指offer就算准备好了,应该在面试之前,把常规的数据结构题目过一遍,比如八大排序算法默写一遍,不要在IDE里调试着写,在纸上写或者在文本编辑器中写。因为面试让你写的时候,就是如此。个人感觉,面试的时候,在线编程出的题不会很难,无非就是字符串类型、数组类型、二叉树类型、堆栈类型、链表类型,把这几种常见类型题都过一遍,比如两个单链表如何判断是否相交、知道有相交怎么找到这个交点诸如此类的问题,都自己写一遍。剩下的拔高题可以适当看一下,然后就是临场发挥和积累了。
  • 简历项目:面试官问的一些问题往往都是针对项目经历问的,比如我写了基于嵌入式平台的目标检测系统,那么面试官就会问yolo、ssd原理可以说一下吗olo v2做出了哪些改进对自己简历上写的项目,好好想一想可能出哪些问题问自答走一波。
  • 岗位需求:这个就需要我们针对岗位要求进行准备了,比如对于深度学习岗位,会问下神经网络基础,卷积核是怎么计算的积层、全连阶层都有什么作用会用哪些深度学习框架,可以简述下使用流程吗认为深度学习和传统机器学习本质上有什么不同于这些问题,我们都可以提前准备,面试前一个小时,好好过一遍,会有意想不到的收获的。

3、时刻准备

有些公司电话说不定什么时候就打进来了,可能投递简历半个月了,你都忘记了。本以为是直接约个面试时间,结果上来直接面试。当然此时,可以说下自己现在不方便,可不可以另约时间。但是心里总会有疑虑:哇,这样到时候他会不会忘了到时候满了,自己进不去了如此类的想法。其实,大多时候是没有问题的,不必有这些想法。不过,也不排除罕见的个别情况。所以,为了完全避免这些忧虑,时刻做好面试准备,保持电话时刻畅通是很有必要的。

4、尽量内推

内推很重要,如果没有内推,那么需要走简历筛选流程,就是HR从简历池把你的简历捞出来,如果没有捞出来,也就是没有相中你的简历,很可能你连个面试机会都没有,直接把你bass了。但是如果有内推,就会好很多。而且内推可以走提前批,大厂都有这些流程,意思就是不用等后面的统一笔试,直接面试。从哪找内推呢/p>

  • 通过师兄、师姐;
  • 有的公司没有师兄师姐在怎么办以通过各个QQ群,比如一些春招内推群、秋招内推群;也可以通过各大学校的BBS,对于外校不能访问的BBS,例如北邮人,可以找同学借帐号,或者通过镜像站进入;还有就是公众号了,现在好多公众号都在做这个方面的东西,比如:校招导师、校招日历、内推军等。校招导师不用发朋友圈广告就能获得内推邮箱,其他需要转发,自行斟酌吧。
  • 最后就是一些学习群,比如机器学习相关的大群,偶尔也会有一些内推信息。

5、不要着急

这一点我感觉也很重要,别上来就投BAT大厂的岗位,先试试其他公司,试试水。不过话又说回来,其实一些初创公司反而面试可能会更难,因为BAT这些大厂出题都是有迹可循,而一些初创公司说不定考你什么题,并且可能岗位要求比大厂还高。

值得注意的一点是,如果对于部门不了解,一定要好好了解一番,不要急着投递简历,咨询咨询别人,选择部门也是一门学问。

同时,比如一些笔试,如果没有信心,可以等一等,等第一波人做完了,咨询一下,至少什么类型的题你是能知道的。

6、博客、Github没那么重要

曾经以为有个好的博客,牛的Github项目,就能有一些加分。现在发现,这个就要看面试官怎么看了,面试官感觉好,就有用。如果面试官感觉没用,那就作用不大。

个人感觉,这些东西只能算作一块好看一点的敲门砖。如果把没有这些的简历比作一个没用使用美颜和滤镜的摄像机拍下的砖头,那么有这些东西的简历就是开了美颜和滤镜的磨了皮的砖头。好看了一点,但是面试的时候,还是要看你的本质,需要好好准备内功才是。

尽管用处不是很多,我依然很喜欢做这些工作。因为我一直感觉自己脑子不够用,需要靠这些笔记回顾自己所学。别人看过的东西,等到用到的时候可以第一时间想起来;但是我有时候真的想不起来,但是我可以想起我在哪写过,我可以第一时间找到这篇自己写的文章,并且迅速回顾,然后用起来。所以,天赋不同,注定我要靠这种方式去弥补自己的不足。

除此之外,我感觉另一个好处就是,会有一些人主动联系你,帮你内推吧。当然,后续的面试情况还是要看你自己的。

7、运气也很重要

感觉面试也很看运气,与其说是运气,不如说是面试技巧。感觉这个挺玄学的,不过它确实存在,你跟面试官很match,问的题目刚好是自己都会的,那么恭喜,这轮面试你就轻松过去了。不能否认运气的存在,更不能全靠运气,自身实力过硬,一切OK。

三、问题汇总

我遇到的问题,总共可分为六类:计算机基础、数据结构、机器学习相关、深度学习相关、项目相关、业务场景。

项目相关是根据个人简历问的,每个人的项目经历都不同,只需要根据事情阐述即可,此文不做记录,本文主要记录另外五类问题。

1、计算机基础

对于我找的方向来说,一般都会问一些linux基础,比如常用linux指令,这个如果平时经常用linux的话,问题不大。如果没有这方面基础的,就需要提前学一学了。还有就是会问一下关于你熟悉的计算机语言的基础知识,比如我说我更熟悉python,那么面试官可能就会问一些关于python基础的问题。

总结下我曾被问到的相关问题:

1、进程和线程的区别/p>

答:进程拥有一个完整的虚拟地址空间,不依赖于线程而独立存在;反之,线程是进程的一部分,没有自己的地址空间,与进程内的其他线程一起共享分配给该进程的所有资源。

比如:开个QQ,开了一个进程;开了迅雷,开了一个进程。在QQ的这个进程里,传输文字开一个线程、传输语音开了一个线程、弹出对话框又开了一个线程。所以运行某个软件,相当于开了一个进程。在这个软件运行的过程里(在这个进程里),多个工作支撑的完成QQ的运行,那么这“多个工作”分别有一个线程。所以一个进程管着多个线程。通俗的讲:“进程是爹妈,管着众多的线程儿子”。

参考自:https://www.zhihu.com/question/25532384

2、为什么说python的线程是伪线程/p>

答:在python的原始解释器CPython中存在着GIL(Global Interpreter Lock,全局解释器锁),因此在解释执行python代码时,会产生互斥锁来限制线程对共享资源的访问,直到解释器遇到I/O操作或者操作次数达到一定数目时才会释放GIL。

所以,虽然CPython的线程库直接封装了系统的原生线程,但CPython整体作为一个进程,同一时间只会有一个线程在跑,其他线程则处于等待状态。这就造成了即使在多核CPU中,多线程也只是做着分时切换而已。

参考自:https://www.zhihu.com/question/23474039

3、python的append和extend有什么区别/p>

答:extend()接受一个列表参数,把参数列表的元素添加到列表的尾部,append()接受一个对象参数,把对象添加到列表的尾部。

例如:

输出结果为:

而:

输出结果为:

4、linux下创建定时任务使用什么指令/p>

答:可以使用crontab命令。

2、数据结构

个人感觉数据结构最重要,面试过一些公司,五花八门什么题都有,但是唯一统一,都考的就是数据结构基础了。但是考法不同,区别在于有的让说思路,有的让在线写代码。

私以为,复习的方法应该是:审题->思考->表达->码字。

首先,审题很重要无需废话,拿到题目,我们需要认真思考一番。然后就需要组织语言,把自己所想表达清楚。别小看这一个步骤,组织语言表达清楚很重要。一些公司都是先让说思路,再让写代码的,甚至是只说思路。所以,在复习的时候,把每道题的思路想清楚,说明白很重要。最后,我们再将自己的想法写成代码。

其实,这部分的数据结构基础题,只要《剑指Offer系列刷题笔记汇总》这些题目都掌握好,就足以应付,不会出太难的题目难为人,都是常规题。

下面对一些常见题型进行汇总,这些也是我面试时,真实被问到的题以及相关扩展题。

链表:

1、找出单链表的倒数第K个元素(仅允许遍历一遍链表)

答:使用指针追赶的方法,定义一个fast指针和一个slow指针,fast指针先走K步,然后fast和slow同时继续走。当fast指针走到链表尾部时,slow指向的位置就是倒数第K个元素。注意:要考虑链表长度应该大于K。参考:剑指Offer(十四):链表中倒数第k个结点

2、找出单链表的中间元素(仅允许遍历一遍链表)

答:使用指针追赶的方法,定义一个fast指针和一个slow指针,两个指针同时走,fast指针每次走两步,slow指针每次走一步。当fast指针到链表尾部时,slow指针指向的就是链表的中间元素。

3、判断单链表是否有环/p>

答:使用指针追赶的方法,定义一个fast指针和一个slow指针,两个指针同时走,fast指针每次走两步,slow指针每次走一步。如果有环,则两者会相遇;如果没有环,fast指针会遇到NULL退出。

4、已知单链表有环,如何知道环的长度/p>

答:使用指针追赶的方法,定义一个fast指针和一个slow指针,两个指针同时走,fast指针每次走两步,slow指针每次走一步,找到碰撞点。然后使用slow指针,从该碰撞点开始遍历,绕着走一起圈,再次回到该点,所走过的结点数就是环的长度。

5、如何找到环的入口结点/p>

答:先使用题4的方法,计算出环的长度。然后重新从头结点开始遍历,定义定义一个fast指针和一个slow指针,fast指针先走l(环的长度)步,然后两个指针以相同的速度在链表上向前移动,直到它们再次相遇,那么这个相遇点即为环的入口结点。参考:剑指Offer(五十五):链表中环的入口结点

6、判断两个无环单链表是否相交/p>

答:一旦两个链表相交,那么两个链表从相交节点开始到尾节点一定都是相同的节点。所以,如果他们相交的话,那么他们最后的一个节点一定是相同的,因此分别遍历到两个链表的尾部,然后判断他们是否相同。

7、如何知道两个单链表(可能有环)是否相交/p>

答:根据两个链表是否有环来分别处理,若相交这个环属于两个链表共有

(1)如果两个链表都没有环,如题6所示方法。

(2)一个有环,一个没环,肯定不相交。

(3)两个都有环。在A链表上,使用指针追赶的方法,找到两个指针碰撞点,之后判断碰撞点是否在B链表上。如果在,则相交。

8、寻找两个相交链表的第一个公共结点。

答:我们也可以先让把长的链表的头砍掉,让两个链表长度相同,这样,同时遍历也能找到公共结点。此时,时间复杂度O(m+n),空间复杂度为O(MAX(m,n))。参考:剑指Offer(三十六):两个链表的第一个公共结点

9、反转链表。

答:我们使用三个指针,分别指向当前遍历到的结点、它的前一个结点以及后一个结点。在遍历的时候,交换当前结点的尾结点和前一个结点的。参考:剑指Offer(十五):反转链表指

数组:

1、给定一个数组(非递减排序),同时给定一个目标数字,找出这个数字在该数组中第一次出现的位置,如果不存在,返回-1。例如[1,3,5,5,5,5,8,9,13,15],输入5,返回2,输入8,返回6,输入18,返回-1。

答:使用二分查找法即可。

运行结果如下图所示:

2018年春招实习面试经验总结

运行结果如下图所示:

2018年春招实习面试经验总结 Jack Cui 2018年春招实习面试经验总结 微信公众号 2018年春招实习面试经验总结 一名热爱技术的算法工程师~

来源:Jack-Cui

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2018年3月16日
下一篇 2018年3月16日

相关推荐