首先介绍一下,本人是厦大的研究生,计算机视觉方向,是一个标准的中等生,实验室重算法轻开发,找实习的过程中所用到的知识或者说是技能60%都是通过平时跟导师交流沟通学习来的(甚至很多对深度学习,最新前沿技术的理解面试过程中都是老师原话,高度自然不一样),最应该感谢的是我的导师和其他实验室老师们。
有找实习这个想法是从年后开学开始的,虽然之前工作过一年(比亚迪软件工程师),但是以后想去的还是互联网公司,在这个 “互联网+” 的浪潮下,我们总应该去在自己兴趣范围的前提下做点什么,之前的工作环境和工作内容跟互联网公司差距还是很大的,所以觉得自己应该找一个实习,去接触一下在公司里面的算法工程师和学校实验室里面的区别。接下来按照准备实习和面试两部分来总结一下:
先交代一下面试经历:
阿里一面(直接挂掉)
百度两面(百度实习生内推只有两面技术面,通过了但是实习时间不合适,有更合适的所以。。。也挂掉了)
美图两面(拿到算法实习offer,我还是很喜欢美图的,各个方面都不错)
腾讯前后总共八面(提前内推,一次面试直接挂掉了,可能那边更多偏向开发。然后正式校招,在总监面(压力面)挂掉,面试官是MIG数据端技术总监,偏向移动端。后面再次找朋友内推一次:四面技术面分别是工程师,组长,总监,总经理,还有一个HR面,bingo正好八面)
准备实习
准备实习是从年后开始的,一方面是手上有项目比较着急,压力比较大,寒假还在家做,没有时间准备思考这些东西,一方面是觉得还早,不想把战线拖得太长,那样也太累。(得瑟一下,可能潜意识里觉得自己也不需要那么久),分析了一下,因为方向很明确,就是机器学习算法工程师,主要需要准备两个方面,一个基础算法,一个项目论文拔高。(现实证明准备远远不够,后面再说)基础算法首先是机器学习十大经典算法,各种看,各种推导,因为之前师兄面试华为的时候推了两个小时的公式,所以。。。把这个作为一个重点,这个过程还是挺痛苦的,推公式的过程中会涉及到矩阵求导之类的矩阵论的东西,之前没学过,还是蛮痛苦的感觉。在面试过程中被问到挺多机器学习算法,这方面准备还是比较充分,所以表现还比较ok。另外一个方面是项目及论文拔高,在准备面试前,一定要能够用最简洁的语言,通俗易懂的方式把你的项目或者论文讲给一个完全不懂的人听,并且让他感觉你做的这个东西是有价值的,确实是解决一个比较突出的问题的。准备的时候,我是找周围的同学,讲给他听,很容易就听懂就OK,不懂的话你就需要反复的斟酌你的表述方式。
面试
3月8号找人内推的阿里的算法实习,隔了一天就接到电话面试,第一次技术面试,还是很紧张,面试官具体是做什么的说实话我虽然问了两遍都没听懂,好像跟我做的关系不大,上来就是问我项目的事情,我各种讲,他好像完全听不懂,应该是不太懂神经网络方面的东西吧。当发现他听不懂我就变得更紧张,然后就开始问各种计算机基础的东西,什么TCP/IP,数据结构,网络编程,JAVA,搜索,二叉树,红黑树,。。。。各种,很多很多,我完全没准备过,直接懵逼。。。自然顺理成章的被干掉。
之后内推腾讯TEG信息安全组,很对口,面试过程也很顺利,最后问了一个问题,我老实回答了(就不说什么问题了吧),然后就觉得面试官好像突然有点兴致不高了,然后说让我等通知,有进一步消息一周内会有通知。周一的时候听内推的朋友反馈说不是特别匹配。经验不足~
之后是朋友内推百度地图的算法实习,一面的面试官很nice,上来是读程序,然后是用面试官的话说是最难的一个题,是关于单向链表的,不出所料,最难的还是答不出来,面试官逐渐引导,中间写了链表查找中间节点的程序,链表的逆序的程序,然后有了思路。接着是关于大数据处理的问题,也是有一些提示,回答的也不是很好,最后问了一些socket编程,tcp/ip,还有很多计算机基础的问题,回答的也一般,以为必然挂了。很意外第二天下午接到了二面的电话,二面是上来先是项目,然后是地图搜索的一个规划问题,也不知道自己回答的怎么样,反正蒙着给出了答案,然后是写程序,写的是蛇形矩阵,这个不算太难,比较轻松的写出来了,面试官开始表现出比较满意的语气,然后是问了大数据处理的一个问题,跟一面的问题的相似度很高,所以答得很好,最后一个问题是指针与引用的区别,我回答出来五六条吧,还可以。面试基本结束,问我对自己的表现是否满意,我谦虚说了自己的一些欠缺的地方,然后表示会继续努力弥补。面试官表示很满意,然后说理论上不会有三面,问我能实习多久,我说三个月,然后让我等通知。结果听内推的朋友说,有个清华的可以实习六个月,然后就没有然后了。。。
之后是腾讯的校招,先是线上笔试,主要是数学方面的东西,还有一些机器学习的知识点。大题是开放性的题,顺利通过,4.10晚上八点钟收到通知,4.11号早晨十点半在广州喜来登酒店面试,只能立刻出发坐最晚的飞机从厦门飞广州,这样到广州都要半夜两点了估计,然后联系HR,问可不可以安排到下午,HR姐姐很好,说尽量安排,让我尽快过去,我买了第二天最早的高铁去深圳,然后转广州。由于下大雨各种晚点,没票。真有种人在囧途的感觉,很幸运的是我们迷迷糊糊的跟着一群人上了一趟最快去广州的高铁(我们没票,跟车站工作人员类似哀求的请让我们上去补票,说是去参加面试什么的,很远过来的。。。。第一次感觉到了车站工作人员的人情味,竟然让我们上去了)到了面试地点由于早就到我了,所以直接上去面试,面的情况比较一般,但是一个开放性的题目觉得自己回答的还是不错,面试官也比较认可:深度学习在互联网中的应用。晚上到宾馆面试状态就变成了复试中,第二天中午收到短信通知参加二面,二面面试官是MIG的,觉得沟通的还是很顺畅,是感觉最好的一次面试,面试官也很nice的跟我说让我注意关注后续通知,然后我就等啊等,等了两天他才全都面完,结果我还是复试中,去现场问,说没有被pass,应该是待定但是当时肯定是不会有HR面了,让我会学校等通知。在广州待了四天,回来之后几天发现状态变成了淘汰。
又找朋友内推到腾讯SNG的算法相关小组(保证最后一次内推,虽然关系很好,再进不去都不好意思再麻烦人了),当天(周四)接到电话面试,总共是两部分,首先是五个计算机基础的问题,就不列举了,在下面统一列出来。然后就是细致讲了我的论文,很细,很细。最后面试官的意见是:科研做的不错,去跟组长商量一下让我等消息。周五没消息,周末过后,周一早晨九点半电话二面,详细问了项目,然后是问的机器学习的算法,包括SVM和逻辑回归,答得还不错,面试官直接说:我对你很满意,很快会有三面。中午在去实验室的路上接到三面的电话,这次就没有那么友好了,我不是很擅长开发,估计一面二面全都是问的算法,他也没必要继续考察了,全都是计算机基础和开发的东西,计算机基础倒是都答上来了,但是每一个问题答案他都不满意,总是在问复杂度,然后怎么能降低复杂度,还有没有更好的方法。。。。直到我说想不出来了为止,才换下一个题目。最后还问了一些开发的问题,答得也不好,面试官结论:开发偏薄弱。并且说由于名额太少,需要多面几面,就算通过还会有接下来的面试。。。直接泪奔!觉得肯定没戏了,心情很差,玩着手机看一些笑话,突然收到短信说是通过了,预约总经理的视频面试。很难相信自己的表现竟然通过了(应该是前两面给的评价比较高)。然后就是准备总经理面,以为不会是技术面了。。。。结果还是技术面,各种深度学习模型,深度学习见解,神经网络和深度学习的渊源之类的,高度还是比较高的感觉,讲了很多很多(很多话直接从老师那拿来,觉得还是有高度的)最后问了一下对我的建议:兴趣不错,做的也不错,从他个人角度来说希望我能去实习,但是不排除一些他不太清楚的名额或者匹配度的问题,但就算进不去实习,也希望我坚持做下去,他认为这是一个很好的方向,会有很好的发展。然后就开始了漫长的等待。。。。
等腾讯的过程中,参加了美图的现场笔试和面试,技术面之后直接安排的HR面,两个小时搞定,还是比较顺利,个人觉得美图的面试还是比较简单,也许是我太对口(视觉算法工程师)所以有这种感觉,要说一句的是,美图的技术面试官,HR甚至是保安大姐都很nice,整个面试感觉都很舒服。
周四跟老师去南京出差,美图说是周五之前如果通过的话会有消息,腾讯总经理面试也过去好几天了,两边都没有消息,很煎熬,下飞机之后在出租车上接到了美图面试官的电话,说通过了面试,实习时间可以自己随意安排,只要是两个月就好了。心里算是踏实了,即使等不到腾讯也不会觉得多么失望,毕竟也很喜欢美图。周五整整一天紧张的答辩,下午答辩完回宾馆的路上,接到朋友电话说是腾讯通过了,让我安心等消息。连续两天接到最想去的两家公司的offer,觉得两个月来的抽时间来准备都没有白费。接下来是腾讯的HR面试(应该只是流程走完),面试官还是比较犀利,完全没有当时美图的那种感觉,HR面试结束面试官跟我说五一过后会有同事联系我关于正式offer的事情,至此所有面试结束。
计算机基础(我能记得的一部分):
讲一下,动态规划,贪心算法,分治算法(百度)。
如何将非平衡二叉树转化成平衡二叉树(阿里)。
几种查找方法,分别说出他们的算法复杂度及适用情况(阿里)。
快速排序与堆排序的各自优缺点及复杂度,快速排序什么情况下最糟及复杂度(腾讯)。
OSI模型,TCP运行在哪一层(阿里)。
三次握手(腾讯百度阿里)。
四次挥手(百度)。
三次握手各种情况下系统如何响应,问的很细(腾讯)。
什么是多线程,进程(腾讯 百度)。
指针与引用的区别(百度 美图)。
2n+1个数中找到只出现一次的数(腾讯)。
C开发中如何调用到动态库(腾讯)。
static如何用?(腾讯)。
单向链表的中点,逆序,写代码(百度)。
如何判断两个链表有没有交集(腾讯)。
一千万个数中找到最大的1000个,如果是一亿个数呢(腾讯)。
海量数据中找出频率出现最高的100个词条(百度)。
会不会Java(阿里)。
会不会数据库(腾讯)。
会不会linux(腾讯)。
会不会socket网络编程(百度)。
代码量多少(腾讯)。
还有一些我完全不会的也就没什么印象了。。。大致这么多能想到的。
简单罗列一下我还记得的机器学习算法问题:
逻辑回归都有哪些类,每一类什么情况,简要介绍?
逻辑回归的典型应用是什么?
逻辑回归是一个典型的回归模型吗?
经典的逻辑回归还存在哪些问题?
简要介绍一下对KNN的理解?
KNN中K怎么取,跟什么有关?(给我举了一些具体的情况让我来选择K值)
KNN算法中主要的关注点是什么?
KNN中常用的距离度量是什么,各种情况下距离度量的选择?(举了一些具体的例子,问我怎么选距离度量方式)
说出不少于5种距离度量方式
讲一下在你们项目中boosting算法怎么用的?
详细讲一下DBN的模型(项目中有用到)
详细讲一下pre-CNN的模型,特点及论文贡献(论文用到的模型)
基本就这些吧,还有一些记不太清楚了,整体感觉是十分重视最基本的东西,并且问的也比较细,有些面试官确实会让在解释不明白的时候推公式。
总结一下吧:最重要的是计算机基础,比如:数据结构,计算机网络,操作系统。之后是要有硬功夫,算法的话要对常用算法很熟悉甚至推导。然后一定要把自己的项目进行拔高并且讲清楚,最后是实事求是,不会要表现出来谦虚的态度。希望大家都能拿到自己中意的offer。
原文地址:http://blog.csdn.net/leibaojiangjun1/article/details/51302571