在 0xFFFF 潜水了这么久,也看了很多符合自己认知的言论,也该回馈社区啦,这是 23 届硕士算法岗秋招的经验贴,行情有变化,但内容我想不太过时,大家也可以直接拉到最下面看参考的文章,他们写的都比我好多了,欢迎交流~
去年的秋招算法岗可谓是诸神下凡,各路大佬斩获 offer 时还有很多同学仍在努力奔赴下一场面试。我有幸上岸并且是我自己认可的企业和方向,但我更愿意把自己定义为去年秋招的幸存者。高情商说法是给我面试的企业我都通过了,但真实情况是只有少数企业给了我面试机会,更多的企业我并没有走到面试。但秋招这段旅途啊,总要去走走的。我的研究生室友写过一句话,我们无法预估行业的寒气会持续到什么时候,只好努力给自己增添些取暖的底气。接下来是我整理的秋招方法论,希望能给大家添一把柴火,走过这个寒冬。也希望大家走过这趟秋招之旅后,能够更好地认识自己。
1. 认识自己,定所去之处 -- 目标篇
秋招的首要任务是确定岗位、赛道、企业及工作地点。在这个过程中需要不断地去认识自己,我们才能更加笃定去之所处。
1.1 确定求职岗位
求职准备期首要的目标是确定岗位!
大体而言分为技术岗和非技术岗,而其下又有各种分支
- 技术岗包括:研发、 算法、测试。研发包括前端、后端、客户端、数据库、操作系统、云计算、游戏等等;算法岗位包括视觉、语音、文本、搜广推、规划等;而测试的细分方向我本人不太了解。
- 非技术岗:产品经理,考公,文职 等等
另外值得一提的是,大家还是需要尊重每个人的选择,计算机专业的同学去做非技术岗也能展示出自己的优势。这里做岗位的确定并不是排除其他的可能性,而是调高某一项的优先级。并在这一过程中做排除法,试错后能够更加认清自己,去收敛自己的选项。
1.2 翔实调研确定去处
确定岗位之前或者之后,都需要大量的阅读 JD(Job Description,岗位描述)来进行信息壁垒的消除。具体的做法是:搜集各家各类企业(上市企业、国企研究所、独角兽等)的的 JD,找到其公共的要求和特殊的要求。例如研发下面会要求编程语言:Golang、C/C++、Java 等。以及更细化的要求,例如 Linux 下编程经验、网络编程等等。自己整理一个表格将所有的岗位描述整理之后,就能大致明晰当前就业环境的倾向性了,也能够和自己的技能树算一个最大交集,查漏补缺,来找到适合自己的岗位。在投资领域,百个行业术语足以消除行业的信息壁垒,那么经历了大量 JD 的阅读之后,你也能读懂求职期间的行业黑话,并且对技能树的要求也更加了解,而如果是共性的内容,频次最高的术语就是最重要的。
在此基础上,你可以进一步做排除法,去将自己的求职画像更加清晰了:赛道、企业和工作地点。自己是在什么赛道和行业内去工作呢,航空航天、自动驾驶、医疗AI、AIGC 等等,每个赛道和行业都有自己的特性,需要去好好调研。企业方面,扪心自问自己的倾向性,国企研究所还是互联网,又或者是独角兽、创业公司呢,这个涉及到工作生活的平衡、薪资待遇、个人成长等角度,千人千面,要更加地认清自己才能做出对的决策。最后就是工作地点,一些同学会将地点确定的很快,但有的同学会拖到最后一刻才决定,我个人一直在回四川发展和外面卷几年这两个选项中摇摆,最终还是决定暂离舒适圈,到更广阔的外面来看看机会,毕竟少不入蜀。
每个人都有自己的理由去确定这四个维度,这些问题在求职前可能都会各种各样的变动,但我想,做排除法是更好的,先画一个圈,不断缩小这个圈,也能够逐渐地认清自己想要的是什么了。
1.3 个人求职思路
我个人求职的主要思路如下:
- 岗位:计算机视觉算法工程师;
- 企业:逃离互联网,拥抱独角兽;
- 赛道:自动驾驶;
- 地点:成都 / 长三角。
我逃离互联网的理由是:一些推荐算法正在尝试剥脱人们本可用于提升创造力的时间,一些公司利用算法作恶等等。(我见过了美团压榨外卖员的算法、抖音的推荐算法、微博微信蚂蚁的风控和内容审核的算法。)所以互联网企业的技术或许是顶尖的,但我想如果去做一个我不喜欢/价值观不认同的产品,我想我也是不快乐的。走出求职的第一步就很难,因为确定这些岗位、赛道、企业都需要费不小的力气,希望大家能够在求学期间多认清自己,多和自己对话,找出心中真正所求。一旦确定,就义无反顾地去做吧!
- 简历和面试准备
首先,求职主要过程有两项:投递简历 -> 面试(后续的 offer 选择、谈薪之类的操作本篇文章均不涉及)
那么我们的目标其实就分为两部分:通过简历筛选、通过面试筛选
我个人情况是南航本硕,且只做了算法岗方向的求职,所以我的经验可能也对硕士阶段,且求职方向类似的同学比较适用。接下来我将从简历和面试两个方向重点讲一下目标拆解和优化思路。
2. 整理过往,取开山之斧 -- 简历篇
在确定想要去的地方后,需要一份简历来展示出你的优秀。下面分别展示了我认为的算法岗之简历三板斧:科研论文、项目经历、实习经历
2.1 科研论文
硕士的同学应该或多或少会有科研论文的产出,应当来讲这是硕士期间的主要成果。近几年,AI 算法领域顶会录用稿件数量的增长也造就了严重的论文通货膨胀,知乎脉脉上疯传着无顶会不算法,甚至一篇顶会都过不了简历筛选之类的论调。但大家一定要谨记:相关性不等于因果性。不是因为只有一篇顶会论文过不了简历,过不了简历很大部分原因是因为简历和岗位不匹配,近年来算法岗的匹配程度被愈发看重,这或许才是有顶会的简历也过不了筛选的原因。科研论文方面没什么办法能够速成,只能靠平时的努力和勤奋。
2.2 项目经历
注:文中所述的项目包括校企合作项目、算法竞赛、开源项目。
- 校企合作项目:这个和研究组高度相关,看导师是否接横向,以及是否把横向分配给你做。做的时候可能会很痛苦,但写简历的时候会感受到痛苦是值得的。如果没有太多信心给自己的简历上出彩,做一些校企合作项目也会为自己打下扎实的基础,而且也许会产出论文的点子,一举多得。
- 算法竞赛:随着将 AI 算法落地的企业越来越多,也不断有企业开办算法竞赛(此处特指计算机视觉和自然语言处理等 AI 算法,不包括 ACM)设立奖金来套大家的算法方案。而算法竞赛的周期往往是三个月到半年的时间,适合喜欢实操和获得竞赛排名正反馈的同学参与。
- 开源项目:近几年的趋势是,面试官见过了太多的简历上描述的项目,大部分项目没有什么含金量,细节也经不起推敲。而如果你是开源项目的 Contributor,面试官多数时候会对你有一个好印象,因为你有一些有价值的 PR 被合入这件事至少能够反映几件事:对 Git 的使用比较熟悉;能够搞懂中高级复杂的项目并发现 Bug 和修复;代码风格尚可;写代码的自驱力不错等等。你能够在开源项目的 issue 中发现很多明确的问题,维护者也会抛出一些待修复的问题,渴望社区同学来贡献,不用像科研一样费尽心力去想点子。诸多的优点让我也十分推崇大家用为开源项目贡献的方式来提升自己的竞争力。拓展阅读可以看刘未鹏老师的文章:怎样花两年时间去面试一个人
如何参与开源项目呢,这里列出一些开源项目的平台:
2.3 实习经历
在投递实习的时候大部分同学是没有实习经历的,这也包括我。所以在投递实习的时候可以空着,而在秋招时,如果能够有一段较高质量的实习经历并且善于总结(用 STAR 原则进行总结),会大大提升面试通过的成功率。
2.4 简历准备建议
这三板斧大家要根据自己所在研究组和个人的实际情况来准备。就这几年的行情来看,某一方面做的特别好的同学都能够在人才市场上炙手可热,例如竞赛大佬/Kaggle Master、手握多篇顶会的学术大佬、多段高质量实习的大佬;但更多的同学不能这么专注,那么能够在两个方面做到还不错的也能够有不错的去处。而如果是三角形战士,一定要突出自己的相对长处,侧重讲其中两个方面即可。
那应该如何准备呢。针对算法岗来讲,竞争力最强的是顶会论文,如果能够有顶会论文产出的组可以投入更多的时间到科研中去。但这种组毕竟是少数,如果组里的论文情况堪忧,那么首要的事情是调整重心到实习和项目中去,而实习的前置条件是导师放人出去实习,建议提前和导师沟通好需要什么条件出去实习(我们组基本是完成两篇工作,不耽误毕业论文的情况下可以放实习),由此来规划自己的时间节点。
简历撰写方面,一定是使用 STAR 法则 来撰写简历。我个人常用的句式是:
- 该项目/论文/竞赛旨在解决 XX 问题,我们提出了 XX 算法框架。个人负责内容为:XXX。最终我们获得了 XX 成果(达到了 SOTA 性能 / 提升算法效率 / 获得竞赛名次)
3. 不断精进,悟行路之法 -- 面试篇
简历是一把开山斧,用一把开山斧可以敲开山门,有了上路的机会。但如何更好的上路,是需要我们对面试有着更充足的准备,不断精进自己,下面分别展示了我认为的算法岗面试三板斧是:沟通能力、基础能力、洞察能力;
3.1 沟通能力
首要的是沟通能力,包括自我介绍和对自己过往经历的简要介绍,以及在对经历细节提问时的答复。这块能力依赖对自己项目内容的熟练度,自己简历上的内容一定要打磨的足够深足够细,将故事讲的足够好。
3.2 基本能力
基础能力包括对代码能力和领域知识的考察。
代码能力就是面试官会问一些需要编程实现的题目,有的是算法题,类似 Leetcode,提供输入输出的样例,让你编写代码,并且会有时间复杂度和空间复杂度的要求。还有一类就是岗位相关的代码实现,以 AI 算法岗举例,商汤很喜欢让你手写一个 BN、交叉熵函数、残差模块、评价指标等。我本人还遇到过让我手写生产者消费者模式的(操作系统的知识范畴)。
领域知识的考察一般包含通用知识以及岗位相关的知识,我们俗称为八股文,因为大部分都是可以靠背诵和理解来记住的。以算法岗为例,会问 BN 的原理,卷积参数计算,损失函数等基础知识,还会结合岗位问一些岗位相关的,例如目标检测算法的发展历程,anchor-free 和 anchor-base,transformer、自监督等等。有时候面试官也会根据你简历的内容来考察你对自己所研究领域的熟悉程度。
3.3 洞察能力
洞察能力这一节就比较泛了,包括很多内容,下面举几个例子
例一:针对某个场景的问题,给出一个解决方案。我字节一面时就给了这样一个题目:抖音直播带货时,如何从直播间内识别到所对应的商品是什么。
例二:问你对某个领域的看法,开放式问答。谈谈你对 Transformer 的理解;你觉得生成式的自监督算法为什么能够起作用。
例三:对编程习惯或者研究习惯的询问。我在华为诺亚主管面时被问到这样一个问题:你所研究领域中比较资深的学者和组有哪些;你觉得做研究最重要的是什么
其中例一这种情况很常见,面试官可能会拿他正在做的内容来提问你,可以理解成面试官在套取方案,但这也确实能够筛选出优质的候选人。
3.4 面试准备建议
- 自我介绍和写简历一样,要遵循 STAR 法则来讲述自己的过往经历。对于经历的细节一定要足够熟悉,避免模糊其词的描述,会导致面试官的不信任。此外,如果能够引导面试官往自己熟悉的方向上引领也很重要。例如对你的经历理解有偏差时,你可以先回答他然后再加以解释,“实际上,我在校期间的研究工作更关注于 xxx,我认为 xxx”。另外沟通能力也体现在一些细节上,例如他在给你出算法题时,你如果想出一个思路,你要和面试官先沟通思路的正确性,比较 nice 的面试官会有一定提示;如果没有思路,你也可以说下自己的大致想法,以避免尴尬的局面出现。沟通能力的培养有两种比较好的方式:在公共平台上进行内容创作和输出;和方向类似的小伙伴开展模拟面试(Mock Interview),互相查漏补缺,并逐渐习惯面试的状态。
- 代码能力来说,我个人刷题量没有那么多,大概有 150 道左右。刷题历程就是先跟着代码随想录把大部分题目刷完,大概的思路和代码模板掌握之后,开始去刷 codetop,因此我所用到的刷题平台也仅仅是代码随想录和codetop。事实证明,你只要掌握 codetop 的高频题,你大概率遇到的也都是原题或者变形题。刷题过程中最重要的一点是,要记得复习,我会开一个 GitHub 仓库来记录自己的刷题历程,每一次做错的点都会以注释的形式写在那里,每天其实会以不会的旧题为主去复习,新题刷的比较有限。到最后有的题目甚至会刷上七八遍。这是属于我的笨方法,但我个人感觉是符合艾宾浩斯遗忘曲线的,适用性比较强。至于编程规范,可以参考大厂的代码风格指南,例如《Google 开源项目风格指南》;还可以做个人开源项目以及对现有开源项目贡献代码。
- 至于八股文,自己开个文档不断对着牛客的面经去总结(可以和求职小伙伴一起添加),以问题的形式不断去拓展一个知识的边界,直到完全弄懂。以点成面,你其实可以预判面试官会问你哪些问题了。网上能搜集到很多总结好的八股资料,里面有很多问题可用于查漏补缺。
- 至于洞察能力,则不太能够通过提前准备来完全,因为不能预判面试官会出什么场景的题目。但是一些比较通用的场景可以自行积累解决方案,然后在分析问题的时候可以往上面靠。例如小目标检测分割的优化,标签有噪声应该如何检出等等。此外,可以多关注一些企业的技术公众号,会给出一些高屋建瓴的技术方案,不过技术细节会比较少,需要自己再进一步搜集。例如美团技术、得物技术、爱奇艺技术、腾讯技术、小红书技术等、快手音视频技术等等
在求职准备阶段,一定要摆脱思考惰性。在不断的了解术语的过程中记录知识,这仅仅是输入;将知识串到一起,去输出观点,这才是知识内化。个人习惯是用卡片笔记法记录知识,将碎片化知识和输出集中到一处,不定期地回顾与总结。另外要积极地获取评价和反馈:不论导师是否允许实习,要勇敢地投递简历和面试,在不断被评价的过程中成长。还有我自己常用的方法是,利用 RSS + RSSHub 构建自己的信息简报,让信息流主动输入,比被动投喂要好很多。
4. 万事俱备,行秋招之旅 -- 实战篇
经过简历准备和面试准备,实战阶段想更多地讲讲其他内容。
4.1 调整心态和预期
希望大家能够保持思考、成功去实习之后,对自己有更深的了解了,个人判断会更加准确。需要自己定义什么 Offer 是满意的。这阶段要做的是心态的调整:认识自己,调整预期:
- 多看看一些相似的案例,多听听自己内心的声音
- 多感受当前就业市场的情况,及时调整预期(22 年的求职市场冷冷清清,大家一定要坚持下去)
- 做选择的时候还是征求他人的建议:家人朋友和前辈
4.2 鼓起勇气争取,适量权衡
最后是谈薪和选择,这部分我并没有太多经验,甚至因为等待太久,开奖时太过兴奋都忘记争取一些期权了,所以给大家两点建议吧:
- 要有勇气地去谈薪和等待自己的心仪公司
- 如果自己还是没有满意的 Offer,撰写论文积极准备春招。不要高估自己对不理想工作的容忍度
最后有一点小 tips :
- 可以多关注其他学校的官方就业公众号。例如想回四川工作,那么就关注川大成电的就业公众号、如果是想到长三角,那么就关注南大、东南、浙大、上交、复旦、同济等高校的就业公众号,甚至可以去参加他们的就业会霸面。求职的时候,莽是一个优势,是勇敢的体现。
5. 秋招寄语
研究生生活不限于简历,我很多内容没写到简历上。硕士期间我参加了学生工作认识了一些好朋友,参加了学校的合唱团去上海保利大剧院演出等等。这些都构成了我读研生活中的闪光点,和同学们的交流中也进一步明晰了我的求职方向。「不可否认我们所有人都对“宏大叙事”有偏爱。但其实宏大叙事能够成功,往往都是从最重要的一两个点来突破的,而这一两个点,必须有人从头到尾,从始至终的关注细节,否则就是一堆处处漏风的空中楼阁」(出自 算法工程师的天地之间)。
去年的求职季,身边的同学大多不太如意。这股焦虑也蔓延到了下一届的同学身上,他们就像快要被打针的下个同学一样,笑不出来🥲。秋招时间会拉的很长,从夏天到冬天,寒气非常真切地传递到我们身上,大家一定要坚持住。我中午在准备部门研讨会的分享流鼻血,好在下午的分享比较成功。请假回家的路上,买了水果发现天上有彩虹🌈。晚上面试的面试官人特别nice,第二天的早上收到了转正通过的邮件。好消息纷至沓来
现在是在走上坡路,走起来会很辛苦,但其实这段时间是会特别特别快的。我这人比较笨,过去的日子我其实走的不是很快,我很欣慰的是:我慢慢在走,在尝试不同的方向和输出文字,记录心中所想,慢慢形成了稳定的思考范式。这无数的过往经历给了我信心:问题总能找到解决方式的,只要我继续走就行了 。也印证了慢就是快这个观点。人类的赞歌是勇气的赞歌,我一直在提到我们要有勇气,走出思考舒适圈,去投递简历和面试,去等待心仪的公司等等。
”人生的过度,当时百般艰难,一天蓦然回首,原来已经飞渡千山”,这是我大一辅导员见面会给我们说的话,我一直觉得很有力量,分享给大家。希望大家的付出有所回报,研究生生活愉快,秋招顺利!
6. 参考资料(建议多看看,兼听则明)