2017年即将过去,今年是忙碌的一年,从2月17还没开学就来学校,到现在12月初,工作的事情终于尘埃落定,现将这一段经历写下来,希望能帮助来年找工作的学弟学妹,同时,对自己来说,也是一年的工作总结,总结经验教训,对自己一个提升。
简单介绍一下,北邮本硕,要找的岗位主要是算法工程师(机器学习方向)。算法工程师找实习的时候,最终的结果是找到了四家:亚马逊、京东、滴滴、腾讯地图。找工作的时候,主要有百度sp、滴滴sp、美团sp、新浪sp、搜狗sp、小米(没谈薪资直接拒了)等。总体而言,今年找工作相对以往还是很顺利的,各大公司都很缺人,各家开出的工资相对于去年都非常诱人,找工作的情况也出乎了我们很多人的意料。
年初的时候,大概2月28左右开学吧,我2月16就来了,开始准备找实习。简单的说一下面试的情况,有些可能已经忘记,现在说个大概情况。
1. 滴滴,实习的是在论坛招人内推的,两面,第一面是主要问了svm lr等原理,简历上的项目,svm怎么用于多分类。第二面写了一道算法题,leetcode 63. Unique Paths II。问我是否会用spark,我说不会。然后就给我介绍了他们所做的项目。后来回来的路上我想了想,当时问我是否会不会spark,我应该说我虽然不会,但是可以学的,留个好印象。没过多久,就发了实习offer。后来去了滴滴实习。实习转正三面,每面半小时,所以还是相对容易了很多。转正一面,主要问了在滴滴的实习,给我的柑橘是更偏重业务,对技术并不是太热衷,做的项目的业务的主要应用是什么,将来怎么评价之类的。一道算法题,leetcode上的,旋转数组,leetcode 59. Spiral Matrix II。转正二面,也是问了问滴滴的实习,问了下gbdt的原理,xgboost与gbdt的区别,gbdt用于分类时,分类概率的梯度体现在哪里。一道编程题,矩阵A与矩阵B相乘得到矩阵C,给定A和B,求C的秩。转正三面,三面面试官是一个研究员,对数学推导有独特的兴趣。问了svm的推导,什么是凸函数,为什么拉格朗日对偶方程成立。滴滴的offer大约10月初发。
2. 美团。实习的时候貌似没内推,走的校招。一面,上来让写了几个算法,一个是数组全排列,一个是二叉树的非递归先序遍历,一个是反转链表。然后问了过拟合问题,l1 l2正则区别之类的。然后进入二面,二面的时候面试官先问了一个二叉树的垂直遍历,LeetCode 314. Binary Tree Vertical Order Traversal(这个题是leetcode付费的题)。没答上来,就挂了。校招时是找斜对门的美团实习的大佬内推的。共三面,一面面完告知通过接着二面,二面面完告知通过让回去等三面,三面是电话面,晚上7点三面的,晚上12点就收到录取意向书。做完笔试,过了几天,晚上9点多美团打电话过来,说明天早上10点来某某酒店面试。第二天一面问了简历上的项目,编程题问了1到n的一个排好序的数组,少了一个元素,怎么找出来。我说二分查找,时间效率logn(也可以用位运算,时间效率n)。二面问了项目,我简历上有k-means,就问了其他聚类的方法,距离有多少种,影响聚类的因素。问了编程题leetcode 198 House Robber(动态规划)。三面电话面,问了项目,问了过拟合的问题产生、解决办法,问了两个编程题,leetcode 69 Sqrt(x),两种方法解决,一种是二分查找,一种是牛顿法。另一个编程题给忘了,想起再补充。
3. 百度。内推实习的时候,去年毕业的师兄去了百度**组,我们就找他内推的。说实话,挺后悔的,我并不喜欢他这个方向,一方面我不擅长,另一方面过了我也不会去。不该图省事找他推的。内推实习时,共二面,挂了。面试主要问的是**方面的,也没什么意思,答的也不好。问了leetcode 206 Reverse Linked List,让自己定义链表,问指针,对象,指针是对象吗,对C++的考察很多。到校招实习时,没投简历。到校招开始时,我投的比较晚,所以错过了内推机会,然后到了校招。校招共三面,都是技术面,当天状态不太好,感冒了。主要问了二分类的标准有多少种,每种都是什么。struct与class的区别。线程与进程的区别,io密集,计算密集使用多线程还是多进程。一个发生器,产生0的概率是p,产生1的概率是1-p,p!=0.5,怎么使用这个产生0和1等概率的发生器(可以每次产生两个数字,0 1判为0,1 0判为1,其他的舍弃重来)。k-means聚类相关问题,svm与lr的对比与区别。编程题问了多道,最小栈leetcode 155. Min Stack,还有几道其他题目,忘了已经。
4. 腾讯。实习投的北京微信,校招投的广州微信,然而都没找我面试。找实习时,qq空间把我捞了起来邀请我面试,我拒绝了,后来腾讯地图邀请我去面试,就去了。面试一下午,从1:40到5:20,共四面,前三个为技术面,第四个为leader面,leader也问了一些技术,未来的规划,来这里之后会干什么,反正就是泛泛的聊,还有就是你印象最深刻的一件事,最感动的,最难忘的一件事,哎,这些问题。先是40分钟一套卷子,让做题,5道编程题,3道问答题可以选择做。我当时40分钟把5道编程写完就没时间了。有一道是leetcode 300 Longest Increasing Subsequence,其他忘了,不过也不难。面试聊了项目,花了不少时间,也看了那5道编程题,怎么处理POI中的名称问题,就是说一个地点可能有很多备选的名字,怎么确定哪个更合适。爬虫相关技术。还聊了聊手头的offer情况等。到后面校招内推时,投的广州微信,但是广州微信并不怎么缺人,投的人又多,所以就没给面试机会。qq音乐把我捞了起来,但我并不想去深圳,就拒绝了。再后来校招的时候,不知道腾讯哪个部门邀请我去面试开发岗。我想了想,我并不想做开发,就拒绝了。现在看起来,腾讯我还是有很多机会的,然而我都拒绝了。哎,现在仔细想一想,虽然房价高,但是深圳其他方面都挺好的,空气质量好,各种生活还是很不错的,四个面试机会,只面了一个,其他的都自己拒绝的,感觉还是非常可惜的。
5. 新浪。实习没有投,校招投的内推,面了四面,两面技术面,三面总监面,四面hr面。主要问了项目、gbdt与xgboost的区别、贝叶斯学派和统计学派的分歧,编程题问了反转链表leetcode206,top k大的数(剑指offer题目,第一版30题)。
6. 搜狗。实习没有投,校招内推面了两面挂了,校招面了两面,发了offer。校招内推时,也是为了省事,找的搜狗**组的大大大师兄推的,跟百度那个类似,我也不感兴趣。面试问了项目,编程问了最小编辑距离leetcode 72 Edit Distance,剑指offer 31连续子数组的最大和(找到起始位置和最大和)。校招两面。主要是项目,二分类的评价标准有哪些、分别是什么。编程有二叉树的先序中序后续非递归遍历。二面面完说去看看领导在不在,回来说领导不在,就让回来了,说后面可能有hr面。我心想,这是委婉拒绝的套路吧,过了几天hr让我去公司面,问了下学历,问考研还是保研,有哪些offer,然后发了offer。
7 小米。三面技术面。面试之后,发了意向书,直到前些日子才联系我。我说我已经交其他公司三方,校招结束了。编程题问了leetcode 228. Summary Ranges, 给一个二叉树,找到最深的一个节点到最浅的一个节点之间的最小公共父节点,我的方法是层次遍历,找到最浅的节点及最深的节点,然后使用 leetcode 236 Lowest Common Ancestor of a Binary Tree中的方法去解决问题,时间效率为o(n),空间效率为o(n),面试官给的方法是保存所有路径,然后去查找。问了项目,两个项目问的非常细,使用random forest计算特征重要性,对该维特征不进行permutation,删除可以不可以。峰度、偏度的数学公式及意义。二分类中AUC的具体定义,各个分类评价方法。最后三面leader面的时候还问了两个思考问题,金融违约率,可能要房贷很长时间才能知道是否违约,数据少,实验样本回收时间长所以对于这个问题怎么处理。还有就是为何利用训练集训练,用来预测测试集可以用来预测。我说的是这是基于一个大的假设,训练样本和测试样本是基于独立同分布的,后来我想了想我觉得也可以从熵 信息增益的角度思考。
8. 京东。 京东是实习过了,校招没邀请我面试。 校招的时候,我找的京东的师兄内推的,后来也参加了校招,笔试的挺好的,就是没邀请面试,也有一些同学跟我一样的情况,可能简历挂了吧。京东实习面试是三面,两面技术面,一面hr面。感觉比较坑的是京东的三面分别安排在了三天,为此我给我们老师请了三天假。京东用的较多的是Java,我自己是cpp Python较多。面试相对简单,问了svm原理推导,两个排好序的数组怎么合并成一个排好序的数组,双指针啊。问了一个业务题场景题,给你一些恶数据,让你对顾客对一个新商品的退单率预测,如果能预测出退单率,则可以延迟或者不发货,节约物流成本。hr面的时候问了几个问题,现在厉害的很多都是博士,你怎么看,有无读博的打算?介绍一个你的项目。
9. 亚马逊。 亚马逊也是实习过了,校招没邀请我。亚马逊实习投的早,后来邀请去面试,共两面技术面。第一面是一个美丽的北邮学姐(我不认识),主要问了简历的项目,lstm的原理,lstm为何能长时记忆。二面有两位面试官同时面,主要是编程题,也问了项目。编程题相对都是比较容易的,主要是leetcode 1 Two Sum ,leetcode 15 3Sum,leetcode 16 3Sum Closest ,leetcode 18 4Sum。还问了一个业务场景预测题,亚马逊要销售很多商品,你如何去预测商品需要用到的货仓的体积。如果能预测出货仓体积,这样子就很容易去租赁仓库了。
后面的公司都是实习和校招都没过的。有的是面试未通过,有的是没有面试,也一并写下来。
10. 360。实习三面挂,校招内推一面挂。实习面试,是我第一次去面试,面的实习,路上还想,如果360过了,实习就结束了,可惜想法是美好的,现实是残酷。实习是三面,两面技术,一面hr。上午10点面,40分钟一场,等面完二面等下午1点半还是2点开始hr面。两面技术面的的确挺不好的,那是第一次去面试,也没看网上的面经,自己的技术也并不太好。技术主要问了,svm的原理,smo算法,lstm有什么好处,为何防止梯度爆炸和梯度消失,bp推导,编程题问了树的深度,这个简单,但是代码中竟然把==错写成了=,范了这样的错误。还有问了找出二叉树中和最大的一条路径,不必经过根节点leetcode 124. Binary Tree Maximum Path Sum。 hr面的时候问了以前的实习经历,考研还保研,我说考研,问考了多少分,有无对象,将来是打算在哪里发展。校招的时候,内推去面,一挂面。问了简历项目,问了聚类算法都有那些,算法的比较,cnn的原理各个层的作用,编程题问了二分搜索。感觉面的挺好的,然而还是挂了。很多同学都说360基本不缺人。的确实习还是校招,周围过360的很少,包括很多大牛。
11. 阿里。 实习内推一面视频面,后来的实习校招也是一面挂,校招也是视频一面挂。实习面的时候,主要问了简历项目,问了svm的原理,svm的核函数的作用,lr能不能用核函数,为什么。校招的时候,问了多元高斯函数的期望是什么,怎么推导?熵的定义是什么?怎么理解?编程题是剑指offer 30题,最小的k个数,也是leetcode 215 Kth Largest Element in an Array,写代码并分析时间复杂度。阿里实习投的是阿里妈妈,校招投的是蚂蚁金服。除了技术需要加强之外,视频面试也表现出了两个缺点,一个是表达沟通需要大大的加强,一个是要自信,同学在旁边表示我的表达太快,太紧张了。还有一个非常重要的一点,我校招内推投的太晚了(8.8投的)以至于错过了校招内推的时间点,没人找我面试,直接到了校招了。我为什么投这么晚呢?可以记住一个时间点,大概6月底,7月初就开始互联网的内推了。我们是7月开始放实习,7.4才开始去实习公司报到,那个时候想着,简历上没有个像样的实习,刚去实习的公司,什么也不会呢,简历也不好写。所以想稍微等一等,结果8.8再投的时候,差不多快结束了,我记得校招的内推是8.18左右。所以时间节点一定要把握好,千万不要拖。
12. 网易。实习的时候是笔试挂了,校招内推也是笔试挂了,校招的时候申的深度学习工程师,校招时二面挂。第一面是一个美女姐姐,第二面试是两位面试官一起面。主要问了项目,自己搭建网络的结构,CNN网络的结构,相关知名的cnn网络结构,编程就问了一道,一些坐标点都是(x,y)形式的让以x的大小排序,x一样的按y排序,我说很简单啊,使用sort函数写个compare函数就可以了,不知道是要考察什么,要考察现场写排序算法吗?我当时应该问问的。其实我对深度学习的了解还是太少,需要更多的学习,目前更多的是工程使用上的东西,我当时应该申机器学习工程师的,或许面试就通过了。
13. 网易游戏。 实习的时候简历挂了,校招的时候本来申的人工智能工程师,结果给我转成了游戏研发工程师,还不能更改,我去面了,一面挂。首先可以说明一点,网易和网易游戏是分开招聘的,两家可以分别投。再有就是网易游戏有两块,一块是雷火盘古,一块是互娱。我实习投的是雷火,找了互娱的同学内推了一下,最开始不知道他们内部互不承认,结果相当于没有内推,简历就给我挂了。所以投雷火一定要找雷火的人推,投互娱一定要找互娱的人推,不然等于没有推。还有就是网易游戏实习开始的特别早,去年11月还是12月,就开始内推了,现在也是12月大家可以关注下消息。今年2月份我刚过完年来学校,我同学跟我说他网易游戏已经笔试过两批了,我顿时觉得自己落后了很多,有种别人校招都结束了,你才刚来学校的feel,何况我比学校规定的开学时候早来了十多天,当时一顿慌张,赶紧问问师兄师姐到底什么情况。再有就是校招面试,先是40分钟让写道编程题,然后再去见面试官。因为他们给我调成了开发,我自己也确实没什么经验,问的全是语言细节的,算法工程师从来不怎么问的,结果可想而知,就挂了。
14. 今日头条。实习的时候一面挂,校招的时候也是一面挂。实习的时候问了简历,当时第一家面的360,挂了。貌似第二家面的头条,也挂了,挂了很多家,心情还是挺郁闷的当时。头条实习一面的时候先让写编程题,类似于剑指offer第一版的第7章的7.2里的题目,叫做多叉树(没有指向父节点指针)中两个节点的最低公共祖先。然后问了项目,问了svm的推导,问的非常细,问距离到底如何定义的,不可分的svm中松弛变量怎么理解,如果有个点特别异常,是否还能找到分割面,我自己当时水平也比较菜,他问一个我回答一个,我回答一个,他说一句靠(kao 四声),我心里一阵慌张。问了lr的公式推导。的确面的不好。校招的时候,找的内推,当时内推要内推码,但是内推有内推码也要笔试,但是内推码有一种是内推白金码,只有头条技术员工有,且每人只有一个,有了内推白金码,可以直接面试,免笔试,早面试。我就找人要了一个内推白金码,是头条的第一批面试,挂了。校招内推挂了,不能参加后续的校招,跟360一样的。校招一面,主要问了简历,问了项目,问了一些倒排索引,词向量及复杂度相关问题。编程是leetcode 57 Insert Interval,这是leetcode的hard题目,根据大家的反应,头条编程题问的普遍相对难一些。编程题我没答上来,挂了也是很正常的事情。
15. 海康威视。实习没投,校招投了。共三面。先是电话一面,后是去公司面试二面和三面,而面试技术面2v1,三面是hr面。一面就是简单的聊了聊,问了问。二面是聊聊平时用什么技术,用什么网络,业内(我的研究方向)主要用什么方法,业内(我的研究方向)都在做什么,对**了解多少,有无转**方向的意愿。也没太多的问题,更多的是发散性的问题。hr面的时候,问了有多少offer了,因为已经很晚了,我就说我现在有7家公司发了sp offer。后来没给我发offer,我觉得可能主要在于我对**方向了解甚少,我本来也不是研究那个方向,但是平时还是有很多与**方向学习的机会,我都不想去学。这给我一个提示,除了技术的深度,一定要提高的自己涉猎的广度。
16. 微策略。 先是线下笔试,然后三面技术面。微策略是先去听宣讲会,然后再线上面试。笔试面试都是全英的。笔试一小时,题目还是不太难的。面试一面,13*16 = 244,问这事几进制,答:(1*x+3)*(x+6) = 2x^2 + 4x + 4 =》 x=7。证明:n(n^2-1) 对于任何n》=3的奇数都可以整除。答:可以数学归纳法,假定n=2k+1满足条件,证明(2k+3)也满足,最后得到[(2k+1)^3-(2k+1)] + 24k^2 + 48k + 24显然成立。问一个字符串的全排列,我以为是leetcode 46. Permutations,实际上是leetcode 47. Permutations II。我按照46的思路写的代码,主要差别是47是有重复的。后来他提示是否有bug,我想到了47,然后改了重复的部分,但是竟然又忘了先sort下。所以这道题答的不好。这道题答的不好,我也反思过,自己不够灵活,没考虑那么多,直接对上题号了,思想僵(jiang)化了,一定要与自己做过的题目对一起做对比,注意差别。二面。给一段代码,让找出bug,里面涉及了指针和malloc和strcpy这些,我没找出bug。编程题1,一段链表,反转前n个节点。类似于leetcode 92. Reverse Linked List II。编程题2,leetcode 25. Reverse Nodes in k-Group。 编程题3,single number问题leetcode 136. Single Number,编程题4,leetcode 137. Single Number II。三面。编程题1, 121. Best Time to Buy and Sell Stock,编程题2, leetcode 123. Best Time to Buy and Sell Stock III,编程题3,leetcode 122. Best Time to Buy and Sell Stock II,编程题4,397 Integer Replacement 。编程题 2写了两种方法,思考花了些时间。编程题4给了几种解法,但遗憾的是没有给出最优解。
17. 商汤。实习的时候笔试过了,邀请面试,我当时有三四家都要面试,还要交ppt,听说比较难,就没去面。校招的时候笔试挂了。
18. face++,实习没投,校招笔试挂。
19. 微软。实习和校招都是笔试挂了。
20. 蘑菇街&美丽说。 实习投了没理我。校招内推把我简历挂了,校招又投了一次,又挂了一次简历。 freewheel,第四范式,hulu,快手等投了校招,没消息,应该是简历挂了。看周围人都投了链家网的内推,我就投了链家网,结果链家的校招是线下笔试,我不知道,就错过了。
以上就是详细的面试部分,下面是一些自己参考别人的经验及自身的经历,总结的一些经验教训吧,希望对自己是一个总结,对学弟学妹们也希望能有所帮助吧。
1. 把握好时间实习、校招的时间表。实习分为内推阶段和校招阶段。众所周知,互联网找工作的时间越来越早。2017年今年的情况是大部分公司在2-5月(实习包含内推和校招两阶段)。先是内推,后面就是校招。也有特别早的,比如网易游戏,去年12月左右就开始内推了。内推阶段刚走完或者没有走完就开始到了实习的校招阶段了。校招也分两个阶段,内推阶段和(正式)校招阶段。时间在6月底左右-11月。很多公司在6月底7月初就开始了,比如京东、阿里、腾讯等。京东以往貌似都是比较早的,今年也是早早的面试,早早地发了offer。除了内推和校招阶段,有的公司貌似还有提前批(京东貌似有)。
我自己的教训就是,校招投的太晚,以至于错过了很多面试机会。我为什么投这么晚呢?上面也分析过,有希望能把实习经历写上去,也有自己想好好复习好好准备的因素。实习的时候我投的就非常早,结果准备的不充分,遇到了很多被拒,也算是找实习遇到的小后遗症吧。投的太晚错过了腾讯、阿里的校招内推阶段,是非常可惜的。阿里的校招内推需要重新内推,腾讯的实习的简历会直接转成校招内推的,不用再推,可以更新下自己投的部门信息就行了。我自己也没去更新简历。总之吧,自己的简历不够好看,希望能刷新下简历再投,以至于错过了时间。还有亚马逊,亚马逊写的校招开始时9.10,结果我投的晚,人家9.5就开始第2轮还是第3轮笔试了。挺可惜的错过了。
2. 把握好内推和实习转正机会。现在大家都招内推了,然后内推跟正式的也差不多了。无论从实习还是校招的结果来看,内推会吸收很大一批人,所以留给校招的名额并不多,并且所有人都参加校招,所以竞争是非常激烈的。所以大家一定要把握好内推的机会。尤其校招的时候,很多公司的实习生都转正了,占用了很多名额,所以校招的内推和校招阶段竞争还是非常激烈的,学弟学妹们还是要加油。说是实习转正,大家要千万把握好机会。如果想在某个公司留下,我个人建议,优先去该公司实习。实习转正,尤其是实习的本部门转正是最容易的。想在哪个部门工作,实习是一个非常简单又省事的途径。
内推的时候最好要找熟人内推。可以帮忙查看简历进度。腾讯的内部可以看到简历评价S级、A+、A、B、C等。也可以看到面试官的名称等信息。阿里的也可以看到面试官的名称信息,并依此判断某些信息。找熟人推,方便后续的联系。还有最好直接推到自己想去的部门。如果自己有明确的部门,可以直接推到相关部门,如果不写部门,很多都是直接进公司简历池。如果写了,相当于先在部门简历池,然后进公司简历池,相对而言,相当于多了一次机会。找熟人内推的另一个好处是,如果是投的他的部门,他可以直接把简历扔给他老大,邀请你去面试。
3. 写好简历,讲好项目。简历肯定是特别重要的,简历是面试官对你的第一印象,一定要好好写,如实稍微修饰的写。自己的会的能讲清楚明白的都写上去,自己含糊其辞的搞不太清楚容易被问懵的就不要写了。经常更新自己的简历。我自己的简历面试完就会改一改,修一修,每次都总结一下面试,修缮一下简历。简历上的项目的细节之类的自己都要清楚地明白,一定不能给面试官问的答不出来,那面试官就很怀疑你的水平和项目是否你做的了。
4. 提高自己的编程水平。很多人都推荐剑指offer、leetcode。的确很不错的,我看现在剑指offer都更新到第二版了。至于编程提高到什么水平,剑指offer可以都看了,都搞明白了。我自己是刷了300道leetcode,刷了两遍左右的。我看周围的同学大都在100-200左右的样子,也都找到的非常不错的工作。我这里的经验是算法工程师的,很多公司的(比如滴滴、美团、百度、阿里等)算法工程岗位的面试,一场面试都是分三块,项目介绍、机器学习相关知识、编程题。一场面试一般就一道编程题。编程写不出来就基本挂了。当然面试也没有非要按一定套路的,要看面试官的,面试官喜欢问什么,我们就答什么。有的公司非常注重编程,比如微软,面试几乎全是编程题,而且编程的要求比较高。头条的编程题问的也很不容易。要是想找一般的互联网公司,感觉看完剑指offer、刷leetcode 100-200道就差不多了。当然这是我自己的判断,仅供参考,对此不负责任。还有建议是刷题的时候,要做一下笔记,经常回头看一看,我刷题的时候,使用***笔记(电子笔记类产品,避免广告嫌疑)记录一下题目,标签,解决思路与方法等。以后方便回顾。我自己就是经常看一看自己做的笔记,比每次都重头刷,思路清晰多了。建议尝试一下。
5. 提高机器学习相关的技术水平。算法工程师一定会问机器学习相关的知识,这一块一定要好好的搞清楚明白了。我自己是看了李航老师的统计学习方法+部分prml+一些其他的学习。对这一块内容的理解应该是决定是否发大offer的关键。一般编程题都能写出来,写不出来就挂了。你对机器学习相关的理解深入程度、好的实习经历、好的论文、好的竞赛都是面试中的亮点。如果你其他方面都不能闪光的话,就把对技术的理解深入作为切入点,好好的专研下去吧。
打开APP阅读更多精彩内容
点击阅读全文