作者:理性思考
链接:https://www.nowcoder.com/discuss/123128?type=post&order=time&pos=&page=4&channel=1009&source_id=search_post
来源:牛客网
0、写在前面
大家好,相信大家对于我这个ID并不陌生了,这个ID其实是我硕士论文的题目。过去一年一直在牛客网上看到了很多高质量的面经和一些对自己有用的帖子,受益很多,在这里也要特别感谢下叶神创立的牛客网(这是一件非常有意义的事)。所以秋招结束后,我也一直想从我求职的亲身经历包括我看到的身边的人的一些情况出发,写一个这样的帖子回馈牛客。我想写得很认真,就是希望自己能做一些有意义的事情,目的只有一个就是能真正帮到后面要找工作的同学(就像一年前我受到其他人写的帖子对我的帮助一样),希望能把这些有意义的东西在牛客网传承下去。这个帖子的内容大概可以分成五个部分吧:个人读研和准备秋招的经历、秋招面经、秋招的零碎感受、推荐的学习方法与资料、最后的话。
【注】:这篇帖子的内容仅仅代表我个人的观点,肯定有些观点不够客观,但是我的初衷就是想做点有意义的事,希望真正帮助到大家。大家觉得有道理的就听下,没有道理的可以直接忽略。
先介绍一下我的基本情况:本科双非一本,硕士985,都是科班出身。然后是我最终的offer情况,因为自己之前找工作的目标比较明确,只想去一些Big Name名气比较大的公司(算法岗)。所以也只投了BAT、网易等其他一些中厂,并没有投太多公司。最终收获了三个offer:
1、华为消费者BG(终端)云服务 算法工程师岗位 SP 14级。
2、小米南京 普通开发岗位 白菜价。
3、百度共享技术平台部(SRE) AI研发工程师岗位 白菜价。
最终主要考虑大厂光环的因素选择了百度SRE,说实话这个岗位也不能算是我理想中那种纯贴业务的机器学习算法工程师,还是有点区别的,就算是打了算法工程师的擦边球吧。所以我也是菜鸟,跟巨佬们手里的无人车、凤巢、大搜、微信、阿里妈妈啥的牛逼算法offer没法比,当然后面我也会分享自己的渣渣面经。
1、个人读研和准备秋招的经历:
秋招想找机器学习、数据挖掘算法工程师的工作,其实当初就是觉得这个岗位可能好找工作一点毕竟AI很火(但实际上打脸了并不好找),然后过去研一、研二一直在准备这方面的东西目标比较明确,还有就是觉得这个世界、中国的发展后面是不会缺数据的,做一些围绕数据的工作(机器学习)在很长时间内不会被淘汰,而且看了Kaggle、天池、DF的一些比赛,觉得这种还是能解决很多很多实际问题的,很有趣也很有意义。所以,研一刚来东大就开始想做这方面的事情了,先是自己瞎摸索,看看西瓜书、统计学习方法什么的觉得太枯燥然后就看看机器学习实战相对比较有趣一点,后来尝试自己做一些Kaggle、Titanic这种入门级的比赛、自得其乐因为可以解决实际生活中的问题,但是自己的进步还是太慢了。
后来上课时一次偶然的机会,从同学口中得知有个实验室的学长曾经拿过天池比赛的亚军和Top10,非常厉害但是为人很低调所以知道的人不多,那个学长跟我在同一层楼(计算机楼4楼),老师也跟我老师一个团队的。问我同学要了这个学长的联系方式,于是在某一天傍晚的时候我鼓起勇气找到了那个学长,求他以后还有比赛的时候能带上我一块参加,学长人超级好没有拒绝我,还耐心给我解答了很多的问题,至今特别感谢他。在研一上冬天快来的时候,我把握住了机会跟这个学长一起参加了DF上客户用电异常行为分析的比赛,接近两个月的时间里,虽然最终没有能取得特别好的名次,但是那段时间是我读研最快乐的时光,全身心地投入了这个比赛,他跟我说思路,我学习他的思路,然后负责思路实现的所有Coding工作。这个过程真的跟着这个学长学到好多好多东西,远不是自己摸索能达到的程度:怎么针对特定数据做特定的数据清洗、线下线上怎么同步、不平衡的处理等…跟优秀的人一块工作是特别快乐的,这里也给想打好比赛的同学一个建议:想要快速提高最好的方式就是一定要能找到一个真正厉害的人带着你一块进步,一个人搞很难得到快速提升。接着是寒假快开始的时候的一次比赛:IJCAI2017天池口碑客流量预测比赛,这次一直持续到研一下开学的前几周,那次寒假就相当于一直在搞这个了,具体过程非常艰辛这里就不多说了,唯一不同的是这次基本是一个人在瞎搞,也差不多搞了两个月多吧其实还是付出了很多心血的,最后是实现了我当时的小梦想:在比赛临近快结束的时候,打入天池的首页,并且差不多呆了好几天,哈哈,之前从来没想过自己也能凭一己之力到天池的首页去,反正当时就是超级开心。看着自己的名次从500多名几乎因为找不到好的方法快要放弃了,到探索出到关键的方法上升到200多名,100多名,50多名,30多名到天池首页14名…虽然最后还是实力不济掉了下去,但这个过程确实是很锻炼人。研一主要就是背着老师偷偷地参加了两次比较高质量的机器学习、数据挖掘竞赛(刚来实验室就知道我的研究方向没前途,为了自己前途就抓紧偷偷搞点比赛了),反正基本没怎么去上课所以有充足的时间弄自己感兴趣的东西吧。研一下还有剩下的时间就被我老师逼着弄论文,东西很难其实还是非常有压力的因为老师不指导我但要我出科研成果。不过这个阶段我很幸运地认识了另一个读研阶段对我很有影响的人:一个东大计院 & 吴健雄学院超级牛的本科生(后来全奖直博去了美国伊利诺伊大学香槟分校),忐忑地花了差不多一个月时间看懂了他写的代码、理解了他代码里的每一个细节,后来我们两个人就合力把科研里比较重要的一个点给实现了。这个过程我同样跟着这位大牛本科生学到很多,真的没想到自己读研会跟如此优秀的同学一块工作一个学期,感觉自己真的赚了哈哈。所以,整个研一主要的成果就是跟着天池的亚军学长做了两次高质量的数据挖掘竞赛,然后跟着UIUC的直博生做出了科研的一个点,所以我研一虽然没怎么参加活动但还是过得很充实的。
接着是最黑暗的研二,庆幸自己研一的时候抓紧时间拼了命地做了那些对我自身前途真的有用的事情救赎了自己,因为研二我再也没时间做这些比赛什么自己感兴趣的东西了。研二学院要开题大家就都在准备开题,你们真的想象不出自己的导师对科研要求贼高、学生有很大科研压力但是自己已经不懂学术指导不了你、并且给你的科研题目是根本从技术上做不了或者毫无意义的东西、并且因为看到你做不出来或者告诉他做不了而当众对你冷嘲热讽是一种什么样的感受?所有的东西我都在一个老师身上看到了,只能说无比酸爽,只能忍着。研二上反正是我老师让我做什么我就做什么,不管能不能做,他说什么就是什么照着去做,这样子的状态持续了一个学期左右,到学期末肯定是没有能找出一个像样的题目可以开(根本就是做不了的东西还能指望怎么写开题报告?)嗯,没错就是差不多浪费了大半个学期时间。过了一个寒假就到了研二下,那时候心态真的崩,身边的同学基本开题都在上学期开完了,都在准备春招找实习了,可我开题都还没开。看老师的意思就是不找出一个高质量的题目就是开不了,后来实在没办法,强行在研一下的成果上加了几个点把他忽悠过去让我开题了。总算把题开完了过了这个劫终于能参加秋招了,后面就是断断续续地看书、刷题、偶尔投个春招实习面面,这样的状态一直持续到6月末。这个时候华为南京FX的招聘项目启动了,从这个项目起我的秋招找工作之路就开始了,接下来就是我的秋招面经。(PS:当然暑假找工作的时候其实我的心情也超级差,因为我那傻叉导师居然这个时候了还强迫自己参加一个毫无意义的学术竞赛:很多track工作量真的特别大。没办法只能照做,时间肯定是被这个耽误掉很多的,难受的一比)
2、秋招面经
华为FX:消费者BG云服务
坐标:华为南研所,时间:6月末7月初,面试岗位:机器学习算法工程师
这个项目FX相当于就是华为的sssp的性质吧,反正就是找几个极其优秀的大佬出来,不清楚别的城市的华为有没有这个项目,反正我去面试的时候基本都是南京地区的高校。建议后面南京地区高校的同学都去投递一下,因为即使你拿不到FX的offer后面也是可以回退到优招序列的,而且这个批次基本不会进入备胎池,官网显示录用排序中就基本上能拿offer了,所以还是很保险的一个项目,我觉得华为手机卖的不错,就报了个自己感兴趣的部门:终端消费者BG云服务,有很多环节吧:简历筛选、现场交流投递简历、笔试等,相当于是秋招开始自己的第一次正式面试了。
电话面:
介绍自己的口碑比赛,亮点和难点是什么?
HashSet和ArrayList的区别?Python和Java的多线程?
介绍一下部门相关的工作。
一面:
跟电话面同一个面试官,对我电话里已经有基本的了解了,所以没怎么问,聊了人生。
二面:
一个主管级别的人,介绍一下科研的项目,以及其他一些零碎的关于项目的东西和技术,主要感觉是考察我这个人怎么样,靠不靠谱。
hr面:
一些常规的问题,是个从华为海外工作了十几年的大佬,很和善。虽然他的地位很高,但是说话很谦虚很和蔼,值得我去学习。
结果:
7月末拿到了秋招、也是人生中的第一个offer,这个offer让我在后面的秋招过程中都没有很慌的感觉,感谢华为消费者BG云服务。这个部门据说是华为南研所最好、最赚钱的部门了,如果有在南京定居的打算的话是很不错的选择。
高德地图
视频远程面试,时间:7月6号,面试岗位:机器学习算法工程师
这个是看到牛客网有次有人发的内推信息就投了简历,主要是看这个高德地图被阿里巴巴收购了,虽然肯定不是纯正阿里但是也算是自带点阿里光环。后来hr加了微信,安排了线下的视频面试,当时简历被筛选出来还很开心于是约的7月6号下午14:00的面试,一个人在实验室忐忑地等着面试,没想到等了差不多45分钟还没来面试,联系了hr才知道面试官都忘了,真的很无语这种迟到的面试官:一个秃了大半个头戴着眼镜的40多岁的人。
一面:
让我介绍下偷电的比赛。
让我说几个熟悉的模型,我说了随机森林。都说完了夸我讲的很清楚很完整。
手撕代码:LeetCode easy的一道Fizz Buzz。
结果:
一面直接挂,因为是头几次面试,而且面试感觉还是不错的,也都回答出来了,居然挂了,真的是相当的难受。也许是我做的比赛他们觉得太LOW或者我学历太LOW吧,反正不知道高德地图原来被阿里收购了以后这么吊,打扰了。
苏州微软暑期名校优招
坐标:东大计算机楼,时间:7月17号,面试岗位:机器学习算法工程师
这个项目相当于是苏州微软提前的线下校园招聘吧,好像有四站:中科大、浙大、南大和东大。笔试面试地点都在计算机楼所以走几步就到了,先是hr现场发卷子笔试,一共两道编程题,有一道忘了,还有一道是合并两个有序链表,做完了现场通知笔试结果,有面试资格的直接开始面试,地点在四楼的一个会议室。
一面:
稍微让我介绍下偷电的比赛。
白纸手写代码:平面上有很多个点,判断他们是否能被两条直线全部穿过?
白纸手写代码:给定一个精度,要求实现sqrt函数。
二面:
白纸手写代码:给定一个数K,找出这样的a和b使得a^2 + b^2 = K。
看我研究知识图谱的,介绍什么是知识图谱?他是微软Bing知识图谱小组的,然后给了我很多开放性的题目,我也学到很多吧。比如Bing搜索结果右边栏的实体推荐可能是怎么实现的?为什么这么快?怎么去动态更新等等,小哥看上去很年轻像刚毕业的,给我讲了很多工业界落地的细节,真的受益匪浅。
还有一些基础:怎么建堆?证明时间为什么建堆是线性的等。
三面:
用英文跟我嗨了半个小时,让我用英文解释随机森林啥的,我用我蹩脚的英文强行跟他尬聊了半个小时。后来就直接开始虐我了,因为那时候我还没开始刷LeetCode很多还不怎么会做,本来算法就渣。
白纸手写代码:LeetCode hard 第44题,通配符匹配 20min。
白纸手写代码:也是LeetCode上的LCA最近公共祖先的变种,要求找出所有的公共祖先并打印出来 20min。
结果:
三面两道都没有写出来直接挂了,由此可见我算法有多菜逼确实刷题太少了。从微软面试结束以后我真正意识到了算法的重要性,疯狂地去刷LeetCode了。
总结:
微软这种属于外企顶尖名企,外企的一些面试就不要想着项目不项目了,都是直接手撕代码加一点开放性的问题,所以外企的面试多刷LeetCode把算法好好准备好就行,算法不行微软、谷歌这种大厂很难进去。
阿里巴巴集团 口碑BU
电话远程面试,时间:7月25号晚上8:30,面试岗位:机器学习算法工程师
秋招第一个面的互联网大厂,找人内推的口碑BU,因为之前做过口碑的天池比赛也取得了一定的成绩,所以觉得报这个BU的话可能经历更matching,拿offer的几率更大一点。官网完善了简历没过几天就联系面试了,面试官是一个非常Nice的东大校友。
一面:
让我介绍偷电和口碑两次比赛中有什么亮点想跟他说的?(这里给了我一个小时)下面是一些相关问题:
树模型对连续型、离散型特征有一套统一的理论,是什么?
树模型在数据挖掘竞赛中的优势?
在线写代码:实现两个String的加法,相当于是模拟大数相加。
海量数据处理:5亿条数据做排序,内存有限怎么排?(我的回答是经典的分治 + 归并,但是最优解是字典树)
概率题:有一个随机数生成器,不断生成[0,1]的浮点数n次,把这n个数放入到一个数组中,但是这个数组里面的值你都看不到是个黑箱,要求用概率的角度分析出第K小的数是什么?
开放性问题:已知某口碑用户的物理坐标(x0,y0),要求在500ms内返回出离用户最近的100家店铺,其中有10万个店铺做候选,该怎么做?(不能算距离值,所以不是对数组的一个简单的TopK问题,所以不能用最小的K个数这种partition思路、大根堆来求解)后来面试官提示我是一种数据结构,当时没回答出来,后来才知道是KD树。
开放性问题:给你100万,设计一种红包分发策略,要求用户安装口碑app的人数最多。(抽象建模很困难,每个用户对红包容忍度不同,有的用户给3块就会安装口碑,有的要给30……要你设计出一种策略使最后安装人数最多)
总结:
第一次体会到互联网大厂的专业面试,面试体验非常非常好。后来才知道面试官跟我是校友,是10年前东大自动化毕业的。面试官一上来就给了自己一个小时让我尽情地把我想说的话、比赛的一些亮点都跟他讲一遍,而且特别认真地在在听我讲很尊重我,真的特别感谢一面的面试官,给我留下了特别好的印象。在面试的过程中,不仅题目难度不偏不倚、很专业,而且我还能从中学到很多很多东西,真的觉得学校做的东西跟工业界差好多,更坚定了以后要去工业界做算法业务落地的工作。然后是现场在线手写算法,他在一端看着你写代码,还是蛮紧张的,所以平时刷算法的时候就要当成面试现场来训练,看到算法题一开始能想出大概的思路就好做了;还有知识的广度得有,比如字典树、KD树神马的比较重要的东西我都没复习到,所以这些计算机经典的知识平时要有一定广度的积累。总之,这次面试是我整个秋招过程中体验最好的一次面试。
二面:
二面说来话长,听内推人说是一个女博士,本来是8月1号差不多下午4点50的时候电话打过来的,但是那时候我跟我基友在外面,所以只面了十几分钟,因为在外面听不清楚的缘故约了2号早上的11点,其实这一面面试官还是很和蔼的听上去像个学姐一样温和,然后我也讲的很爽。但是第二天早上11点她打过来的时候,真的就像变了一个人一样,语气很凶,把我按在地上摩擦,当我好好回答了一个问题的时候,她一句“同学同学,这不是在上课这是面试,我必须要知道你跟别的同学的优势在哪里?”把我噎住了,反正后面就是虐我吧,感觉他看不出我身上的优势,然后就把我挂了,心塞的一比,很难受还以为可以一直顺利到后面几面,看来是我想多了,还是太菜。还记得一些技术问题吧:
特征为什么要做归一化,归一化的三种方式各有什么优缺点?(确实不会)
归一化之后一般还要做什么?
树模型的优势?为什么说对离散、连续特征有统一的处理?
特征选择的方法?(我说我比赛里面两三千个特征做特征选择,被她嘲笑了一波:两三千个特征还要做特征选择啊?)
其他不记得了,感觉这些机器学习预处理的东西自己没准备太好,所以特征工程的一些理论的东西最好复习下吧:
https://www.zhihu.com/question/29316149
总结:
二面这里感觉自己有点作死了,所以如果大家以后碰到我这种情况,千万不要擅自约面试官其他时间(感觉很没礼貌因为面试机会本身就是很宝贵的),面试本来就是受面试官心情影响的,也许那天傍晚人家心情好过一天心情不好自己的面试就会受影响,反正我是明显感觉到擅自改约了时间以后面试官的态度有很大的转变。当时应该立马去一个安静的地方,礼貌地打回去的,也是自己经验不足,希望大家这点留个心眼。
腾讯秋招 IEG安全部门
电话远程面试,时间:8月09号下午14:00,面试岗位:后台策略安全
也是在暑期的内推阶段(不能实习的话就只能提前批积极点了),本来是听师兄说SNG那边算法坑可能比较多就投的SNG,没想到居然被IEG捞走了,这个岗位后台策略安全也不知道干嘛的,反正当时还是很高兴的,因为阿里挂了很疼,当时觉得只要有面试机会就有希望,心情也会好很多。这时候我的心态已经好很多了:只要自己尽力就行,结果随缘。
一面:
还是介绍CCF偷电的比赛,亮点和难点是什么(面试官是广东本地人有很强的广东口音)?
10%的已标签数据和90%的未标签数据,怎么处理这种问题?
对于错误型噪声怎么去识别和处理?
C++学的怎么样?
Python的内置字典怎么实现对value排序?
用shell怎么实现一个文件中的qq号出现次数统计?(不会shell说了Java)
树模型有什么优势?(几乎场场面试问,所以经典基础知识很重要)
结果:
过了一天看了join.qq的官网状态,变成了灰色,可能hc本来就不多,而且倾向于要C++的人吧,反正就是看不上我。
这里顺便再补充一下春招的腾讯面经吧,因为不能实习所以相当于随便投了一下体验体验,面的部门是MIG应用宝。
腾讯春招 MIG应用宝
一面:
介绍偷电的比赛,清洗数据用的什么特殊的方法?为什么这么做?
逻辑回归里面是线性可分的,怎么做才能让它变成非线性可分?
SGD你觉得在使用的过程中有什么缺点?
紧接着问你知道什么是在线学习吗?有没有看过谷歌的那篇论文?
为什么传统的机器学习方法在解决不平衡问题的时候会出现问题?
树模型(非线性模型)和线性模型的区别?树模型的优势是什么?
随机森林还是哪个模型忘了怎么才能学习出特征和特征之间的关系?
二面:
介绍天池的口碑比赛,跟前面的队伍差距在哪里?
逻辑回归里面SGD有时候步长设置的不对,收敛会出现问题,该怎么解决?(减小学习率或者增大Batch Size)
如果在逻辑回归模型里面有时一直收敛不到阈值以下的参数解,该怎么做?
逻辑回归里L1和L2正则化的区别?
一些优化方法的区别?(BGD、SGD等)
问我深度学习Deep Learning的一些知识?(不会)
结果:
二面挂。逻辑回归的东西被问得还是很多的,也许是他们平时在业务里面就是用的逻辑回归吧,反正LR这种经典的模型肯定要精通的。
总结:
后来正式秋招的时候做了笔试,到10月了就一直没有被通知面试,感觉今年腾讯秋招算法岗已经不怎么招人了。春招和秋招(内推 + 正式)都跟腾讯无缘,其实我个人还是很喜欢腾讯的,因为这家公司真正抓住了人与人的联系,连接一切的战略,个人感觉在BAT里是最有前景的,qq和微信这两款超级成功的产品也成为了老百姓生活中缺少不了的软件。反正校招是进不去腾讯了,不知道以后社招的时候还有没有可能去鹅厂啊…
网易云音乐
地点:网易杭州总部,时间:2018年8月24号,岗位:数据挖掘算法工程师(内推阶段)
印象最深刻的一次面试。网易因为也是我比较想去的公司,毕竟名气还可以,就选了个逼格比较高的部门:网易云音乐,暑假一个下午做了笔试以后就在等笔试结果,那天回家傍晚收到了笔试通过的消息很高兴,因为无论如何可以去杭州面试了。第一次去杭州吧,24号开始的云音乐的面试,网易是有个公众号叫号的感觉效率比较高,本来是4点开始面试但是工作人员3点就叫我了搞得我很紧张因为当时还有很多没有复习好,就跟工作人员说先安排别的人,再看一个小时书抱抱佛脚(抱佛脚还是很管用的)。回来看到牛客网讨论区上好多人吐槽网易云音乐算法面试劝退,但是我觉得还好啊,面试体验还不错,可能是我运气比较好吧。
一面:
一面是一个很温柔的小姐姐很年轻大概不超过30岁,长得很漂亮,没有怎么为难我。
介绍口碑的比赛,口碑比赛没有全部讲完就停了。然后是问了一些常见的ML的算法问题。
讲一下RF,讲一下GBDT、XGBoost和RF三者的区别?(这里需要注意的是:不要以为别人问的问题简单就得意,每轮面试有面试评级,目标不是过这个面试,而是要刷高面试评级,即使简单的问题也要回答精彩和深入才可能得到高的面试评级,否则录用Ranking的时候会被刷。)
编程题也比较常规不难:把I am a Student. 翻转成 Student. a am I。
让我写一下信息增益、信息增益率、基尼系数三个公式。(抱佛脚很有用刷刷刷写出来了)
问我冒泡排序是否稳定?(我说不稳定,这个简直拉低了我的这次面试评级,由此可见基础有多重要)。
结果:
几分钟后,公众号上显示面试通过,还是很高兴的,兴奋地等下一轮面试。
二面:
二面是一个略胖有点东北口音的人,态度感觉不是很好,心不在焉的样子。
手写冒泡排序,因为上一轮面试没把这个回答好,所以相当于是在纠正我。写出来让我给他讲,我才发现原来冒泡排序是稳定的,很尴尬。
问我还有哪些算法是稳定的?还有哪些是不稳定的?
编程题:给定一个链表,找第K大的数。
概率题:有一个桶,给你一万个黑球、一万个白球,每次摸出两个球,如果说你发现是相同颜色的球再放一个黑球,否则放一个白球,问你摸到最后只剩下一个黑球的概率。(这道面试题我感觉还是有点难度的,因为他一定要让我算出一个概率出来,算不出来就会挂很有压力。我一开始用的枚举,2黑2白四个球,后来发现所有的情况居然都是100%,后来他提示我用异或,我就做出来了,确实是100%,还挺巧妙的这题)
结果:
几分钟后公众号上显示二面通过,心里超级开心,因为下一轮就是hr面了,能走完所有流程了,网易云音乐的offer离我越来越近。
hr面:
是一个姓曾的hrbp,男的,本以为是漂亮的小姐姐,面试的工作很认真,面试的内容非技术比较常规这里就不写了,面试官说我的思想有点太理想化了,要跟现实结合起来。也是第一次经历真正互联网大厂的hr面试吧,很有新鲜感。
结果:
其实等hr面的时候还是认识了很多全国各地的优秀大佬的:浙大的、复旦的、华科的都有很长见识,能交到朋友还是此行不虚。
那天hr面面完了差不多9点了晚上,居然回南京的动车都没有了,所以下一届来杭州面试的提前买好回去的火车票感觉杭州到南京的车次不多,后来跟一个合工大的学弟连夜坐绿皮车赶回南京去了,凌晨的火车赶回去的,等火车的时候简直不要太累,发誓下次再也不坐绿皮车,到南京8点早上。
然后就是漫长地等待差不多等了一个礼拜吧,回学校一边熬夜带着压力做坑逼的OAEI学术竞赛(8月末截止),一边忐忑地等网易的结果,每天想着网易云音乐给我发offer,因为感觉云音乐算法走完流程的貌似不多,觉得这个offer没什么问题了。结果到9月3号晚上网易开发的开奖了,朋友圈里面我的同学基本上全部都拿到了offer,都在晒offer,一夜间跟他们的差距就出来了,那一晚我没睡好觉。4号是算法开奖的一天,一直在刷新官网的状态:等待面试结果,傍晚的时候在图书馆听百度的宣讲会,7点的时候再次刷新了面试状态,醒目的简短的红色小字:面试不通过,当时的心简直是跌倒了谷底,失望到了谷底:https://www.nowcoder.com/discuss/103299 回到实验室以后,忍不住偷偷哭了,上次哭还不知道是什么时候,真的太难受了,就两个字伤心,就是心很疼很疼的那种感觉,很失落。
总结:
所以说这一次是我秋招过程中最难忘的一次面试。但是冷静下来还是可以看到自己的很多问题,细节决定成败:有可能就是因为冒泡排序是否稳定这种基础的问题回答错误导致一面的面试评级不高录用Ranking被刷,所以基础最重要,基础的东西确实是被我忽略了。这个offer没拿到我就觉得大厂的算法岗也许是没什么希望了。
小米南京
地点:南京建邺区,时间:2018年9月15号,岗位:普通开发岗(南京好像都是开发的岗位)
这个是直接线下面试不走系统的,因为还是不想去华为就去面面了,以前不知道南京还有小米。
一面:
介绍了一下口碑商家客流量预测的比赛。
编程题:二叉树求节点数最多的那一层。
编程题:求100的阶乘末尾有多少个0。
二面:
一个南大的胖胖的技术大牛,很年轻,能学到很多东西。
一些经典的数据结构的知识:从数组、链表的区别问到二叉树(堆结构的意义)、图(图的最短路径、最小生成树、拓扑排序)。
编程题:不用加减乘除实现加法。
编程题说思路:求p的q次方。
三面:
还是一个年轻的瘦瘦的技术大牛,很严谨也很认真。
问了很多关于Java static变量、方法、代码块的作用,给了一段代码问输出结果(感觉面试官对Java很精通,自己也学到了很多吧)。
编程题:给定中序、先序序列要求在内存中重建出二叉树。
编程题:最大字段和。要求写出两种方式,DP和非DP(单变量)的方法。
编程题:接上,这时不只是求一段,要变种求解两段的最大字段和。
还有一些比较零碎的,比如HashMap的一些知识:扩容,装载因子等。
总结:
小米的面试还是比较偏技术的,很专业同时在面试过程也能学到很多东西,最后拿到了offer,谢谢小米公司对我的认可。
百度SRE
地点:南京玄武湖假日酒店,时间:2018年9月14、16号,岗位:智能平台研发工程师
百度的这个部门今年来南京单独线下招聘,和百度南京秋招的笔试的批次在一块,笔试我也做了但一开始投的机器学习岗位。然后这个部门里面貌似是没有这个TITLE的算法岗的,唯一比较matching的就是这个职位,也是做机器学习、数据挖掘的不过数据是运维数据。反正就是阴差阳错地投了简历过去了,这种线下的优先级貌似是要比笔试批次高的。
一面:
一个胖胖的但是很和蔼的男面试官。面试官很尊重我,我在讲项目的时候他很认真地在听;我写完代码以后,他看的也超级认真,面试体验还是很棒的(50min左右)。
介绍CCF的偷电比赛(我按照之前准备的提纲很详细地把亮点和难点讲了出来,所以项目的准备永远是面试最核心的内容)。
白板手写编程题:实现Java自带的indexOf函数(经典字符串匹配)。
经典的海量数据处理:给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4GB,请找出两个文件共同的url。(百度好像蛮喜欢问海量数据处理的题目的,这个我在王道的那本书上看到过这点,事实上也确实如此)
使用GBDT的时候一些参数(比如树的深度、树的颗数等)是怎么调的?
Linux基础:给定服务器上的一个100G的文件,如何打开它?
经典网络基础:描述下浏览器输入baidu.com后背后发生的全部过程。
问我有什么要问他的?
二面:
一个白白的清秀小哥略胖,戴***很和蔼,同样没有为难我。
先介绍一下自己的科研项目:本体匹配调谐。在本体匹配中做参数全自动调谐的关键是什么?科研难点在哪里?特征是怎么想的?(对着我的论文跟他讲的)
场景题:访问百度的流量中有很多是攻击者或者爬虫机器人贡献的,如果让你去和正常用户行为做区分的话,能提取出哪些特征?然后他提示说现在的爬虫机器人能做到完全模拟正常用户,让我进一步思考可能的特征?
场景题:百度的底层服务器调度模块中存在一些可调的参数(响应超时时间等),设置太长和太短都不行,怎么自动确定每个服务器调度模块的最优参数?能否用我本体匹配调谐的技术去解决?
写Linux脚本:找出文本中包含某个词的行并且按照字典顺序排序(grep)。
结果:
这一面应该是我运气好,面试官觉得我的科研项目做的不错,后面没有为难我,所以有一个高质量的科研项目很重要。二面完直接让我酒店楼上去找三面的面试官了。
三面:
是一个大概30多岁的经理级别的人,长的很像刘翔,面试过程半技术半hr(80min左右)。后来让师兄内网查了下,是一个在百度工作了快9年的老百度人。他替我申请了南京地区的offer,谢谢我的经理,感恩的心。
自我介绍一下,实验室的研究方向是什么?因为我是做(知识图谱、本体)匹配、消歧的,问我匹配消歧里面有哪些算法?然后问了下知识图谱构建的过程?
继续让我介绍本体匹配调谐的科研项目,并问了我相关的一些问题,这一块还是占据最长面试时间的。(比较好奇百度sre的面试官好像不怎么关注竞赛,但是会比较关注面试者的学术研究)。
博弈智力题:一张圆形或者正方形的桌子,两个人在下棋,一人下一次,当某人下到棋子没有地方放的时候那个人就输了,现在让我先下,要求设计出一种必赢的策略(3min)。
然后他又问了一些数据挖掘竞赛的东西,团队分工,过程等,还有一些有无女友,工作期望城市,家庭状况等内容,还介绍了一下百度和他部门的一些情况,以及聊了聊最近百度的事件等,都聊的相当的愉快。
总结:
还是那句话,简历上如果能有一个高质量(能吹)让面试官感觉眼前一亮的项目,那么通过这次面试的几率就会大很多,百度这个offer说实话有点阴差阳错的意思,拿到应该也是我运气好吧。
搜狗 网页搜索部
地点:南京怡莱酒店,时间:2018年9月17号下午14:30,岗位:机器学习、数据挖掘算法工程师
搜狗南京算法岗的招聘有以下几个特点:1、笔试的编程题没办法切出,必须在牛客网页上编码完成;2、来南京招聘的面试地点(怡莱酒店)地方特别难找,还必须要校园大使带路;3、只有一次面试,通过就是offer。4、会让你复现笔试编程题。
反正还是挺蛋疼的,那天通知我去面试,从学校(江宁)赶到仙林去的,坐地铁远的一比,然后校园大使带我上的一个酒店,进去后是一个满脸黑痣的面试官,应该是一个Leader,先让我还是介绍下本体匹配调谐的科研项目(我的这个科研项目后期好多人问,捂脸),然后简单介绍下数据挖掘竞赛,最后现场复现搜狗笔试的一道编程题。面试官最后跟我说了谢谢你过来面试哈,我就知道凉了哈哈哈。
结果肯定是凉,这里可以给大家一个小Trick也是我切身体会和在微信公众号上看到的,如果面试官最后跟你说谢谢你来面试哈,这种基本都凉了。
美团点评
地点:南京黄埔大酒店,时间:2018年9月20、21号上午9:30,岗位:机器学习、数据挖掘算法工程师
一面:
感觉美团点评的面试还是比较技术的,也有同学被问到POJ上ACM题目或者被一面刁难的,感觉还是要看运气,我问的难度还可以,所以说面试的运气还是很重要的。一面在一个酒店的大厅里面,是一个年轻漂亮的小姐姐。
介绍我的两个机器学习、数据挖掘竞赛(偷电赛、口碑赛)。
介绍知识图谱消歧的方法。(女面试官很认真也很尊重我,一直在用心记录我介绍的比赛和科研的东西,这些面试官的面试体验是很好的)
差不多上面两个花的时间很久了,最后手写一个快排结束。
二面:
二面是一个瘦瘦的中年人,像是一个Leader,感觉技术很牛逼。
有些杂但具体已经忘记了,介绍科研的项目(本体匹配调谐明显他不感兴趣),树模型的优势等,Xgboost的改进点等一些常规的问题。
手写编程题:LeetCode medium 数塔问题(经典DP)。当场手撕了出来,过了。
hr面:
一个超级漂亮的小姐姐,但是吃了一些坑。内容就不说了,就是一些常规的东西。但是有一点这里一定要提醒大家:就是在这一面的时候千万不要表露出你是拿美团点评做备选的意愿,楼主当时基本拿到了百度offer,没小心说漏了嘴,意思是最终会在美团和百度里面选,给hr的感觉很不好。所以以后大家面hr的时候即使心里这么想,也不要表露出这种意思。结果hr面挂,但是美团点评给我的面试体验还是很技术的,本身也是一家由技术基因驱动的公司,还是很不错的。
网易传媒
后面网易传媒还有一次远程电话面试,这个相当于是秋招的最后一次面试了。因为网易云音乐残忍被拒了,所以赶紧投了正式秋招,换了部门传媒技术部,等了很久才远程电话面试的,当时还在宿舍。主要围绕比赛,基础的数据结构知识等,写几个还记得的。没过,那个时候基本没hc了吧。
还是经典的海量数据处理:有限的内存很多数据……(经典的Hash + 分治)
二叉排序树插入、删除的算法,以及最好、最坏的时间复杂度。
会不会Hadoop、Spark这些,感觉这些还是很重要的,会的话有加分。
3、秋招的零碎感受
找工作对大部分人来说都会经历一个受挫、被打击、怀疑人生的过程。可能大家一开始对自己的学历、项目、能力都充满信心,也确实这些是足够优秀的,可能大家会对比身边一些找到BAT、TMD网易等公司的学长学姐们,觉得自己确实不比他们差啊肯定也能轻松找到这些大公司的。但是,由于每一年的互联网需求形势不同、每个人的运气不同等因素,后面大家或多或少都会经历这个过程:被打击、被理想公司拒绝、怀疑人生,甚至会有多次这种过程。我觉得这种感觉是相当相当难受的,心里会很疼,因为毕竟是自己预期的公司被拒确实不好受,但是一定要有一个心理准备就是肯定会经历这个过程的。正确的心态就是,失败一次别气馁,好好总结失败的原因,有时候也不要太在意,也有可能是hc不够了或者那边有更合适的人选了或者碰到一个奇葩面试官。所以心态一定要放好:自己努力尽了力就行,结果的话就顺其自然随缘就好。反正始终要保持一个乐观的心态,别放弃,坚持下去,要坚信肯定能找到好工作的。
能否拿到心仪的offer不仅是靠自己的实力,还取决于形势和运气。对于有绝对实力的超级大佬而言形势再差也可以拿到,但对于大部分人来说,拿不到心仪的offer有时候其实不是实力本身的问题,可能是你投递的那个岗位、那个部门本身那年的hc就不多,人家不缺人,于是竞争就会相对很激烈,因为hc不多,所以拿到offer的几率就会小很多。反之,如果一个公司一个部门新成立疯狂扩招或者去年离职率较高今年要多招人,那么offer相对来说拿到的几率就会大很多因为真的缺人。这样关于形势的例子还有很多很多,随便说几个:A、大家都知道今年AI算法岗想进大公司是很难的,但是据我所知14、15年那个时候确实是没这么难的,那个时候找算法岗的肯定没现在压力这么大,因为现在AI在媒体的炒作下火了转AI的多了形势就显得不太好;B、百度上海让我师兄内推机器学习岗的时候,我和我同学的简历都没人捞起来面试的,也许是今年百度上海机器学习岗我师兄那个部门根本就不缺人的缘故吧,去年听我师兄说进去还是不难的;C、有个朋友去年暑假在上海某个小公司实习,临近结束的时候被今日头条收购了,秋招面试的时候简历上自带TMD实习光环,然后这个公司去年还来我们学校校招,今年被收购了就没来了;D、去年百度凤巢来南京招人了但是今年听学长说并没有来南京,所以身在南京的话即使想进也进不去因为没在南京招,一个同学去了合肥曲线拿到了offer……总之身边有太多太多这样的例子了,形势这两个字真的很重要,尤其是互联网这个行业形势就更加瞬息万变了。然后是运气二字,这个词我觉得找过工作的人肯定是深有体会的,有的人拿到了BAT、TMD的offer,但他的面试过程没想象中那么难,而有的人就拿到就感觉超级难;也有一些人运气不好,碰到素质不高的面试官(网易暑期内推看到那次讨论区很多人吐槽),有些人碰到不为难你的面试官看你技术差不多就行了那你就很容易过这次面试,但有些人碰到那种很较真的死磕你的面试官就很难过这轮面试了,或者还有的面试官跟你有眼缘,通过几次问答喜欢上你了,这种基本也过了……所以你的简历被什么部门捞,捞完了被什么面试官面,这些都是有很大的运气成分在里面的。总之就是想说,运气真的挺重要的,碰到跟你有缘分的面试官那你基本就过了,以前都听别人说什么看缘分,其实缘分这东西真的还挺重要的。但是,所有的前提还是你得有很好的实力,实力还是占据70%的。很多牛友都说过:offer = 70%的实力 + 30%的形势运气 就是这个道理,记住这个公式,运气和形势我们是控制不了的,只能平时多做做好事积攒一下RP,我们能做的是不断提高自身的实力,让自己的技术能力变得更好。
实习机会真的非常非常重要,没能实习的同学会吃很大亏。实习本身就相当于秋招多一次机会(实习转正),如果不能实习,就相当于直接错过了这个机会,后果可想而知。实习出来的同学即使没能转正也有宝贵的实习经历,还能认识很多小伙伴赚点小钱。我身边去BAT、微软这种级别公司的学长学姐,几乎都是实习转正,很少有参加秋招拿到offer的,所以本身参加秋招拿offer就非常苦逼了。实习的面试跟正式秋招的面试比(就我看到的)还是相对简单很多的,有时候碰到一些大厂正好疯狂缺人那么通过实习混进去是一个非常不错的选择。总之,我想说的是实习机会非常重要,实习回来的同学跟他们交流就会发现,阅历什么的跟人家根本没法比,人家实习了三个月对互联网以及各个技术栈的前景一目了然,瞬间觉得自己LOW爆了,当然我也是没法实习的。
刷高质量的经典算法题很有必要,无论对秋招还是对日后的工作都很有帮助。常听人说美国的IT公司面试程序员基本都是算法,我感觉这么做还是很靠谱的,因为算法真的是可以考出东西来的,以后我们去工作肯定要写代码,算法是一个基石,算法不行工作的一些功能很难实现好,所以刷算法不仅仅是为了秋招找个好工作,而是一个持续的过程,这对我们日后的工作都很有意义。我觉得算法不用刷太难,但是一些经典的算法题一定要熟练掌握,要做到一看到题目就知道解题思路,比如全排列、矩阵旋转、链表找环的入口、Two Sum、Three Sum、逆序对等等,这些经典的算法、经典的题目肯定是要去做的,不仅仅因为他们是面试高频,而且里面的思想真的很棒很值得去学习。
后面找算法岗的同学千万不要死磕算法,经典的后台开发等也要准备下。就我身边今年秋招找工作的情况来看:开发找到BAT、网易的比例远远大于算法,难度也相对小很多。算法的竞争真的是太激烈了,全国各地的大佬都在竞争为数不多的几个大厂算法hc,秋招的过程中我真的能感受到这种难度,今年算法去大厂如果不是凭借运气的话还是很有难度的,所以如果你想稳稳地去大厂而自己又不是能力碾压的超级大佬的话就不要死磕算法,因为算法的竞争激烈程度是很大的,而开发的竞争相对没这么激烈,确实更容易进大厂一点(我身边的情况就是如此)。总之我的建议就是,找算法的同学开发也要有所准备,要给自己留一条后路,不能把事情做太死,搞高大上的NLP、CV、ML的时候也别忘了弄弄经典的服务器后台开发等。
基础的东西很重要,以不变应万变。因为你不知道会被什么样的面试官面,不知道会问你什么问题,你能做的就是把基础打好,以不变应万变。说具体一点就是,你所投递岗位的一些基础知识肯定要牢固,如果这些基础的东西都不能很快答上来这轮面试表现肯定是不行的。比如HashMap底层的所有细节,海量数据处理常用的处理方式,各种排序算法的源码和时间复杂度、稳不稳定,LeetCode的经典编程题,剑指offer的题目,LR、XGBoost、GBDT、RF等经典模型的推导等,这些都必须要熟练掌握。因为这些是很经典很基础的东西,这些都不会的话就不用再继续面试了。而且这些经典的知识里面本身包含了有计算机中的一些经典思想,很容易迁移到新的面试题里面去。所以,经典基础的知识要牢牢掌握住。
手里要准备几个高质量的比赛或者项目。这一块是几乎每轮面试都要问的东西,也是面试时间相对占据最长的部分所以一定要好好准备好(比赛的背景、亮点、难点是什么),我的话对我的两个比赛,我是事先写好了比赛难点、亮点的一个word提纲的,然后把他们打印出来面试的时候对着提纲讲。如果比赛、项目本身的质量比较高,基本上给面试官讲懂了以后让他觉得很厉害了,他都不怎么会问你别的东西的,所以这一块是面试比较核心的工作,建议大家不仅可以带着提纲,也可以把自己项目比赛的关键方法流程图、证书等都带着,现场讲项目的时候可以图文并茂地讲出来,让面试官听懂很重要因为你懂不代表别人懂,你得让面试官觉得你这个项目牛。讲的时候要注意不要打断面试官的发问做到相互尊重,定心点一句一句把要说的讲清楚不要慌,事先要用简洁清晰的语言组织好,然后就跟讲故事一样讲出来。项目质量越高越有利于过面试。
面试本身没有你想象中那么高大上,所以不必紧张、一颗平常心就好。没有参加过面试的同学看了很多牛客网上那些高端的面经啥的肯定觉得面试过程很高大上、很牛叉,但是就我参加了这么多大厂面试的情况来看,面试也就跟普通的聊天一样还是比较放松的,跟我之前想的“牛逼”场景也很不一样,聊天的过程中听你讲项目 + 问你一些技术的问题。所以不要把面试看得好像很神圣一样,其实就跟聊天差不多;不要去把这件事想得太有压力,更不要去因为紧张而导致自己本有的能力发挥不出来,保持一颗平常心就好,面试的时候记得不要打断面试官,认真听他把问题问完再冷静作答,相互尊重。
4、推荐的学习方法与资料:
这一部分本来想混在前面的部分中说的,但感觉不成体系就单独拎出来讲吧。因为我之前也说了想找的工作是机器学习、数据挖掘算法岗的工作,所以也一直准备的这方面的东西,就说下我是怎么准备的吧,我觉得有些对开发的同学也是有帮助的。
1、去剑指offer & LeetCode上刷高质量的经典编程题。刷题的重要性和必要性之前已经说过了,这里就推荐两件套:剑指offer和LeetCode。首先是剑指offer,我想说的是这本书入坑简直是太赞了,里面的题目都很经典。我剑指offer这本书前前后后看了3、4遍,里面的题目基本都肉眼记住了,这本书上的题目反复看是很有价值的,面试的时候要能做到如果碰到剑指offer的原题,5分钟就要能写出Free Bug的代码,剑指offer上的题是最基本的必须要会。然后是LeetCode,研一就有别的实验室的同学在刷,一开始还没重视,觉得算法没啥用。但是当我真正去刷的时候才知道这个平台的价值,多刷LeetCode对编程能力真的会有潜移默化的提高,是一件非常有价值的事情。我一开始接触LeetCode的时候刷easy的都很费劲,medium的更是只能看着答案做,还是很痛苦的,这说明我的算法根本就不行。然后也是经过了几个月日积月累、痛苦的训练,慢慢找到了“感觉”,有了这种感觉以后就发现easy的看一眼就会,medium以前很难去动的也能自己AC了。我真的觉得LeetCode上的很多题目质量都好高,相当于必须要刷一遍的节奏,下图就是我刷LeetCode的情况,一开始刷的都是easy后来medium也越来越多差不多刷了100多道medium吧,自己确实是有进步的。关于刷LeetCode的必要性就不强调了反正就是很重要,建议大家如果有时间的话,可以按照题号,从第一道2sum开始向下刷,因为前150道是超级经典的,这150道涵盖了基础算法的很多方面,先刷easy再刷medium,hard可以先不做一般除了微软这种外企,不会考这么难。时间不够可以按照TAG 【Top 100 Interview 或 Top 100 Liked类似】,这些TAG里的题目还是挺高频的。刷题要坚持,循序渐进、不要着急、多总结,对题目一定要有自己的理解和思考,最后用自己擅长的方法实现出来。
图片说明
2、记忆本身就是很好的学习方式。虽然说算法这种肯定是需要理解的,死记硬背是没有意义的,这个是肯定的,对算法要有自己的思考最后用自己的方式实现出来。但是对大部分同学来说,现场面试手撕代码其实还是很有压力的,所以说如果你以前做过这道题并且记住了这道题目的思路就可以很快手撕出来,用不着现场带着压力再去想了。所以,对LeetCode的一些经典算法题,在理解的基础上不妨记忆这道题的思路和关键代码,对现场面试很管用,可以让你保持不慌、很稳的感觉。我在后面就是一直这么干的,把LeetCode上我认为没掌握好的经典编程题都打印了出来,有空就拿出来看一看、记一记(LeetCode有道经典的Merge K Sorted Lists,它Solution上有一段非递归分治的代码我觉得写得很棒,我写不出这样牛逼的代码然后我就直接把它背下来了,面试手撕到这题的时候可以直接复现不会出差错),见下图。对机器学习中一些经典模型的推导也是一样的,在理解他们的基础上不妨记忆住模型推导的关键步骤、关键的公式等,真的很管用。
图片说明
3、临时抱佛脚对面试来说很管用。面试其实就跟考试一样,很多东西特别容易忘,但是如果能在面试前看一眼,就立马能记住它们并且在面试中很好的表现出来了。所以这些容易忘的知识点需要提前做好准备,我是把这些容易忘的东西事先整理在一张纸上(下图),面试前几十分钟反复看、反复记忆(抱佛脚),到面试的时候如果被问到相关知识点我就可以顺理成章地写出来啦(比如经典的ML模型的一些关键步骤推导)。网易云音乐一面让我手写树模型的信息增益、基尼系数的公式,因为之前抱过佛脚所以很快凭借记忆复现出来了,我一般面试前都会这么干:在理解了知识的基础上事先写在纸上,面试前抱一下佛脚强行记忆一波。
图片说明
4、机器学习算法岗求职可以推荐的一些资料。因为之前说了后面找工作的同学不建议头铁算法岗了,但是我还是可以分享下我当时看的一些东西。A、ML经典书籍:我就看了李航的统计学习方法和西瓜书的部分内容,感觉两本书在某些方面讲的各有长处吧,比如SVM我就觉得李航地讲得稍好些,后面又刷了下机器学习实战。B、视频资料:吴恩达的斯坦福公开课肯定是要看看的,还有一个牛客网出品的机器学习特训营感觉挺赞的,我看完后收货很多;C、其他的话就是要组队实战多做点天池等高质量的比赛了。D、对了还有一本书也是必须要去看的就是《王道程序员面试经典》,考过研的都知道王道出品的东西质量都非常高,所以这本书作为面试经典也很值得一看。最后分享三个我花了很多时间和心血整理的独家资料:LeetCode经典编程题、直通BAT经典编程题整理、机器学习经典零碎面试题&解答。
网盘链接:https://pan.baidu.com/s/1LsKjdb2E4zLmg6wKu6R48Q
5、最后的话:
终于写到这个部分了,这个帖子自己在实验室写了好多天了,就跟标题说的一样,想写一点真正对后人有用的话,想做一件有意义的事情,想真正帮到后面找工作的同学,希望后面找工作的同学可以从我的经历中得到一点启发和帮助,凡事都靠自己。我最终找的工作说实话还是跟我理想中有差距的,还是比较妥协的,也许老师不剥夺我那次宝贵的实习机会,不那么坑我,秋招的形势和运气再好一点,说不定能拿到更加好一点更理想点的offer,但是这些都不重要了。最后,感谢自己在东大两年的努力化解了一个又一个的坑,最终还是完成了自我救赎,感谢我百度的经理在秋招快要结束的时候给我发的offer,感谢秋招过程中鼓励我、真正伸手帮助过自己的人:涛哥、小豪、师父、我实验室的师弟师妹们,谢谢你们。希望我的实验室KGCODE能越来越好,希望所有看到这个帖子的人最终都能拿到理想中满意的offer以及找到自己挚爱的另一半。
(如果有后续问题或求助可以联系我的邮箱:[email protected] 或者 [email protected])