作者:吴忠强,东北大学,


1. 写在前面

从一头雾水到大厂推荐算法实习offer,短短两个月里一路摸索,经历了重重陷阱和挑战,几次差点心态崩了又挺过来。这次通过复盘找实习遇到的各种坑,进行经验总结,希望帮助大家更好地准备秋招,一起加油!

2. 这两个月的经历

首先,对过去的两个多月找实习进行回顾,大体可以分为准备实习,制作简历,开始投递和开始笔试和面试和offer这几个阶段。

准备实习

我是从3月5号开始准备找实习的,由于我也是半路出家开始学习的推荐算法(大约半年时间),所以并没有拿得出手的经历(写在简历上的),也就是大家普遍的一个问题,没啥可写的。所以3月份,我想先丰富下简历,考虑到推荐系统的话,偏实践一些嘛,所以用了大约20天的时间,学习了一个偏工业上的推荐系统项目,然后把它写到了简历上去,但学习完了之后,就到3月底了,emmm, 于是就与第一个坑有了一次邂逅,这个坑就是:工业性质的推荐项目对找实习不重要,3月份花了大量的时间做这个,性价比很低。

这个坑带来的后果就是错过了找实习的最佳时间(3月),信息闭塞再加上偷懒,导致我后面特别的被动,因为我后来知道了实习岗位是一个萝卜一个坑,时机很重要,算法岗本身就少,好多小公司三月份就完事了,早投还有很多被捞的机会等,唉,只可惜我是3月底才发现的。还好,由于我研究生一直学习着机器学习和深度学习,所以这两块没有准备太长时间,只是有些慌。而慌则乱,下面就一个接一个的坑了。

制作简历

简历总共2个晚上我就写完了,因为当时光想着要快,得抓住机会试错。一些竞赛、论文经历,技能啥的,也是写了足足两页。感觉也还可以,而且除了推荐岗,感觉也可以找数据挖掘或者机器学习岗位,就都投了。

这里面犯了三个简历大忌: 语言潦草(没好好梳理语言和包装) + 逻辑杂乱(时空序列预测和推荐写一块) + 一份简历应对所有岗位。

出问题的原因,首先是第一次找实习,没有意识到简历的重要性,之前都是听学长学姐说简历很重要啥的,但听和亲身体会真的是两码事,再加上当时有些慌乱,导致简历的环节,没有好好思考该怎么制作,又加上自以为是的小聪明……所以不用想,也知道我后面的结果了。

But,或许还不是我想的那么简单。

开始投递

4月3号,投递简历正赶上清明节放假,我打开牛客,找到暑期实习,搜推荐系统,发现这时候只有字节和快手的推荐算法实习生岗位,我天,虽然这俩是比较想去的,但也不能直接就干这俩吧,这还一点经验都没有,不过纠结了一下,还是投了,因为当时就这俩呀,无可选择,当时真以为大厂都快完事了,所以想着先投再说了。

然后再搜机器学习,发现了阿里的推荐算法岗,美团的数据挖掘岗,没有犹豫,投。

4月4号,再搜推荐系统,又出了个腾讯微保推荐算法和滴滴推荐算法以及360广告算法,不犹豫,投。

这一连串投了5到6家,然后就是等消息了。等消息可真的是煎熬。

阿里是最快的,简历过了,然后约了笔试,其次是腾讯微保,约了笔试,快手简历没过,字节和美团没消息的状态。但等了3天了,又有点小慌,再投,又去了字节的官网和走了学长的内推,又投。这时候京东又发现有搜索岗位NLP+推荐,也投了,结果岗位不匹配。而字节和美团依然没消息。这时候真的是慌得一批呀,不过又阿里和腾讯微保的笔试挂着,依然得好好复习。

阿里笔试完了之后,美团和字节也有消息了,也是约了笔试。

所以,找实习来说,简历还是能敲一下门的,不过有两个坑

(1)尽量不要只从牛客上投简历。我当时由于信息闭塞,啥也不懂也没找人问,看看身边人都这样,呵呵,殊不知进了个大坑。牛客上投简历,其实也是走内推,在这里面投,第一个是看不到地点,第二个是看不到部门,第三个是看不到实时反馈或者流程进行到第几步,第四个是如果投过去的那个人没来得及提交到相应的hr手里,那么相当于简历根本没投过去。这四个,啥后果可想而知。

(2)再就是切忌在同一阶段投一个公司的多个部门,因为只要有一个部门接了简历,这个公司里其他部门就根本拿不到了,除非前面的部门放出来。

这俩个坑带来的后果是,虽然投了简历,但对进展一无所知,只能被动等待对方联系;有一些简历白投,比如字节的那三个,其中两次投递其实浪费了。

总结一下:投简历最好考虑多个渠道,比如找靠谱人内推,比如去公司的官网投递,比如用Boss 直聘啥的,这个我还是没用过。因为我当时发现这个问题,依然是太晚了,好多都通过牛客投出去了,再用这个软件或者官网投递,又相当于走第二步坑,并且当时对自己的定位不明确,对各个部门也不了解,根本不知道对接或者想去啥部门啥的。核心还是对自己定位不太明确,兴趣太多,但不集中

笔试

4月7号到15号,是笔试的时间,字节总共参加了3场笔试,阿里,腾讯微保和美团,还是场景题算法题为主,笔试也是遇到了一些坑的,对刷题存在一些误区,这个我之前总结了​​一篇文章​​。这里就不说了。

面试

4月20号-30号期间,是面试的高峰期,10天的时间面了12面,这个过程更是高度紧张加煎熬哇。从投递简历开始的那一刻,我就无法好好的入睡了,始终把心悬挂起来,而最后的这10天,紧张和焦虑到了顶峰,10天的时间,而此时手头啥也没有,再加上我老师那边还有改论文写材料的一些事情,再加上各种孤独,我滴天,短短这10天,我心态应该是崩了两到三次,但还好都让我自己把自己忽悠过来了。这期间也需要感谢下张一鸣老师那篇"平常心"的演讲,以及中科院那个博士的感谢信,还有些类似的文章("鸡汤有时候还是挺香的")。回到正轨,谈面试。

这里具体的问题就不整理了,这个和每个人的简历有关,介绍自己,介绍项目,然后提问+手撕,基本上流程都差不多,而介绍项目基本上会占用大部分时间,所以这个不同的人不一样。而提问的知识,这个不同公司侧重点也不一样,涉及的面也很广,所以这块就需要面经来补充啦,多研究研究面经吧还是。下面说体验:

(1)第一次面试

腾讯微保一面,推荐算法的。这个是我的第一次面试,准备并不是很充分,还超级紧张,自我介绍和项目啥的说的都不是很好,面试官的问题主要包括机器学习基础,智力题,推荐场景题和开放的题目,第一次接触智力题, 一下子懵逼了,其他的感觉还好,不过最终没消息了,又从牛客上投的,所以并不知道啥情况,应该是挂了。

感想:这次挂了之后,赶紧找上面存在的问题,自我介绍和项目介绍不行,并且由于简历上时序比赛和推荐比赛同在,这次面试面推荐竟然介绍了时序比赛,所以后面又重新梳理比赛,总结语言。其次就是有些慌,智力题场景题啥的没仔细考虑,拿到问题张口就来,没有给面试官好好剖析下题目,缺乏交流,给面试官的感觉应该是这孩子分析问题比较鲁莽,现在回头想,第一次面试的问题还真不少哇。

(2)第二次面试

是字节一面,做在线教育,问的还是比较深的,主要包括项目中涉及的DL问题,推荐模型以及ML问题,然后是手撕一道hard(连续无重复子串),LeetCode上的原题改版,只可惜,思路正确,但没撕出来,那时候滑动窗口是刚接触,没弄清楚怎么滑,再加上第一次手撕,脑瓜子嗡嗡的当时。这次说实话对自信打击挺大的,但面试官给过了。所以面试这东西有时候真的是玄幻,无法预料。

感想: 刷题还是不够,手撕的能力欠缺,这个确实没有啥好方法,只能靠着不停的积累和刷题,以及不停的总结了。

(3)其他面试情况

阿里一面,推荐算法,但好像是toB的,简单谈了谈项目,问了些项目上的细节,然后让等二面,结果也没等来二面,阿里这次的体验这次并不是很好。

360一面,问的很广,多方位考察,ML,DL,C++,操作系统那一套,然后手撕,计算机基础的那些只有些潜在的印象了,回答的并不是很好感觉,但面试官人超级好感觉,过。这次认识到了基础的重要性,包括数据结构,操作系统等,也知道C++的重要性,还是要捡起来的。

字节二面,有了前面的教训,进行了一波总结和准备,二面相对来说就好多了,在一面基础上更加深挖,并伴有智力题和概率题了,过,字节体验还是可以的,不过水平也是很高。

滴滴,一面和二面持续了5个小时,这个是问的比较细了,也非常广,后面面试官直接看着我的博客和GitHub问的,所以这个不同的人会不一样。面试官水平非常高,说的时候都是让他自己能自己推出来的程度才行。这个过+OC

字节HR面,在线教育部门竟然是两面,也是出乎意料的,这个就相对来说较为轻松了,个人优缺点,前两次体验等,这个过+OC。

美团一面,这个就比较惨了,投到了数据挖掘岗,但我介绍的时候发现我找推荐,但他那部门没推荐算法,所以比较尴尬了,我也没法介绍推荐比赛,全程跟着面试官的思路跑了,问机器学习,深度学习,场景题,智力题,python基础等等,最后手撕题原地哈希的那种,也是思路对,没撕出来,但感觉没问题呀,课下写了一遍也过了,可能是太紧张有地方出错了吧,这次体验就不太好了,结果显然挂。面试官也比较严肃,自信也受到了一定的打击。不过发现了简历有问题,也发现知识上也有很多的漏洞,给了我很大的教训。

清晰的记得,4月28,目前只有一个口头oc,还是六月份才启动申请,所以当时自信即将为0。准备放弃,但突然360打来电话约二面,瞬间又看到了点希望。

360二面,由于面试官看到了我之前博客总结,发现大部分ML和DL的知识,所以直接避开不问了,介绍完项目之后,给了个数学题,主要是英文的,考察朴素贝叶斯和全概率公式,我天,之前准备实习是没看这两块的,不过,在面试官的一点点翻译帮助下,顺利搞定,这个面试官也超级nice,最后还给我讲了广告和普通推荐的区别,推荐了广告算法的一些资料,过。

这时候,进入五一了,我手里面已经没有任何牌了,本来想打算既然这样了,就好好休息休息,玩玩,毕竟一个多月的高压紧张,长时间可能会出问题,但老师那边需要改论文,并且360打电话说假期之后约三面,得,五一也没休息得逞,又进入了一个紧张状态。

360三面,这次面试官又考察的比较全,项目谈的少了点,MLDL和推荐模型挖了一些深知识,算法策略和思维能力以及基础C++,Java锁机制,数据结构底层,再加上场景题啥的,感觉这次答得就不大行了,再加上这个过了五一的一个假期,我发现ML DL的基础也记得有些模糊了,不过运气成分在,面试官给过了。

总结:通过这次,我真的发现自己有很多的知识漏洞,主要来自于计算机基础,C++,和推荐方面的算法思维,急需补充和学习,再加上之前简历方面的各种漏洞,缺少比较出色的项目等,后面的几个就没有面了,这段时间真的是压力超级大,越面自信越不行(是因为真认识到自己的各种不足了,所以到后面心理没底),而有面试根本就无心学习,所以真的想着尽快结束,然后静下心去补基础,所以大约5月10号的时候,停。当然后面几天由于焦急等offer,也没静下心来学习。

(4)offer情况

这次拿到了滴滴,字节和360的offer,前两个是做推荐,而最后一个是做广告,通过这几天的了解,发现推荐和广告真的是差别很大的,不是一回事,广告本身是很复杂的一个东西,涉及到广告主,平台以及用户的三方博弈,并且考虑的因素和推荐也不太一样。当然,这两个都是和具体的业务强相关,而这两个方向上,我都是小白,虽然都想学,但简单的衡量了下自己目前的水平,距离秋招的时间,以及自己的精力,还是选择了前者。

3. 经验总结

如今算是秋招前奏,体验了一波,对于未来找的岗位,对于找工作的整体流程等清晰了很多,这是个玩心态的过程,时间调整和各种规划调整,还是挺锻炼人的。

下面通过上面的几个坑总结下经验,助力秋招。

  1. 自我定位:先对自己的未来有个定位,然后有个大体计划,这个非常重要,得知道自己想找啥岗位,对应的每个公司有啥部门,然后提前做了解,包括部门自身信息和岗位要求,这样才能高效的"对症下药"。真的不能海投和乱投,这样会白花费掉很多心力,面试多了有时候也不是好事,第一个是费时间,第二个是有面试挂着,真的无心学习新知识。
  2. 早投早准备。一定要把握好秋招各大公司的招聘时间点,包括提前批和正式秋招的,准备好了就开始投,投递可以采用多种渠道,不要仅用牛客,可以通过找一些师兄师姐内推,这样能熟悉部门的相关情况,也有简历筛选方面的优势,但是并不会有啥捷径,不要偷懒哈哈。
  3. 写简历时考虑面试官会问什么。不要乱写,写到上面的每个点必须要彻底明白,并且还要想好可能引申的一些点,切忌太分散,这样让面试官不知道问啥,自己介绍的时候也不知道如何介绍,会很尴尬。简历上的内容要和意愿岗位匹配,然后精简。
  4. 切忌贪多。知识不要贪多,还是做减法,先以自己简历的内容为主,然后往外扩散,每个大厂侧重点都不一样,可以提前通过刷面经来了解大厂的面试风格,做相应准备,不要盲目的光补基础,这样效率不高。
  5. 重视心态。要对自己有信心,可以找几个伙伴一块准备,还能互相交个流,谈个心啥的,有些焦虑和紧张,互相聊聊就抵消了,焦虑和紧张这俩哥们肯定避免不了,大家都有,慢慢习惯了,面多了,就好啦。
  6. 最后,对于算法岗而言:

回归本真。对于算法工程师,我发现依然是算法思维最重要,也就是对于某个方法,在明白了原理之后,一定要知其所以然,为啥要这样?为啥这样就会有效?别的方法为啥就不行呢? 这种方法行了之后,还有没有啥问题?还能不能更行呢?算法工程师的话这种思维会非常重要,但需要慢慢培养的,所以找算法来说,一定要刻意去培养这种思维,而这种思维往往来源于读论文,基于真实实践等,所以打比赛,看论文,看大佬的博客,以及基于业务场景做项目是非常好的机会,一定要珍惜。

工程能力。对于推荐算法工程师,工程也很重要,也需要考虑具体业务场景,但这些东西都不是在学校能培养出来的,这也就是找实习的另一个原因。但是对于学生小白找实习的话,时间有限,还是找准重点。我花了20天准备的工业推荐项目,没给我助上一点力,反而可能会给我减分,因为这算蛮力,而不是思维。

基础扎实。算法岗,计算机的底层基础也非常重要,也得好好看看数据结构算法等基础知识,还需要学习一门硬性语言,简历上只熟悉python也有点尴尬,面试官都不好意思在语言上提问,C++和Java也应该熟悉一门的。一般python+C++组合的多。目前了解到,如果找推荐的话,往往会和四五门语言打交道,python和C++,SQL得熟悉,Java和scala现用现学。

到这里基本上就差不多了,把这些东西记录下来,一个是提醒自己后面还得好好努力,结合实际场景多思考积累经验,抓紧制定计划在实习的这段时间弥补。第二个算是还愿,希望能帮助更多的小伙伴,尤其是没机会实习的伙伴们。这是我亲自趟到的坑,如果你也趟到了一些,也欢迎偷偷的告诉我呀,秋招一起加油!


10天面了12面!_机器学习