二本本科,双非硕算法岗秋招
背景:本科科班软件开发,硕士方向机器学习,数据挖掘,目前发表四篇 SCI 一区论文,一篇EI会议,还有三篇一区在投。
秋招时间线:七月初就开始海投(主要是牛客网上的一些 sp 专场)-- 8月底差不多结束。
秋招 offer:目前是收到了百度(知识图谱),美团(推荐算法),触宝(推荐算法),腾讯实习转正(推荐算法),京东(推荐算法)的意向书;目前来说秋招基本结束,后续可能会再面一下字节,阿里。
到目前为止投了大概有30-40家公司,底下列出一些,有些记不得了,非常明显的是大公司基本上都能有面试的机会,但是中厂比较看重学历:
阿里:二面挂,流转到第二志愿;放弃
字节:放弃面试
腾讯:offer 大 sp
百度:offer sp
美团:offer 白菜拒
触宝:offer sp
京东:offer sp
其他:简历挂或者放弃面试
目前在腾讯实习,推荐算法,组里的人基本都是985硕士或者博士,当初腾讯实习面试经历了四轮技术面+1轮hr,还是要求蛮高的。
就秋招而言,我简历上有论文,有大厂实习,有项目依旧被刷简历的原因应该就是学历太差了,算法岗目前来看学历门槛还是比较高的。
秋招准备的整个过程:
首先肯定是 leetcode 刷题,我大概是刷了 250 题左右,这个题量已经可以应付大多数公司了,字节除外。其实主要还是搞明白几大类题型,比如 dfs,bfs,dp .etc。就我面试下来的感觉,面试过程中dp出现次数比较多,笔试反而是一些基础题型。刷多少题不是很重要,主要是得理解每一类题型的套路。
其次就是科班的一些基础知识储备,我面试过程中被问到过 python 的装饰器,python 的垃圾回收机制,优先队列,哈希冲突解决方法等一些基础知识,出现次数不多;基本数据结构需要完全掌握,包括排序的各种时间复杂度,以及怎么算,尤其是快排和堆排,可能问你 nlogn 怎么算的,还有可能让你写 topn 这种送分题(虽然我没遇到过)。
最后就是机器学习相关的知识,这部分非常多,也问的非常详细。这部分一般有两种问法,一种是从简历中开始发散性考察,另一种就是直接上来全是八股。比如说一些经典题型:
1. 过拟合,欠拟合;
2. BN解决的问题,怎么解决的,以及与LN的区别;
3. 各种激活函数,优化方法,损失函数;
4. 样本不均衡怎么办,采样破坏了分布怎么办;
5. L1,L2正则适用场景;
6. AUC 怎么算,为什么推荐系统用 GAUC,AUC和F1适用场景;
7. softmax上溢,下溢问题;
8. LSTM究竟是哪一步缓解了梯度消失和爆炸;
......
上述都是一些常见的问题,也是我在面试过程中被问到过的。在大部分的面试过程中,八股文是必须的,但却不是最重要的,最重要的还是对自己简历上项目,实习的理解(这其实也算在八股文的范畴),以及如何在面试过程中将自己做过的东西清楚的表述出来。比如我简历里写了bert,那么bert的整体结构以及细节就必须全部掌握,粗粒度的知识点基本上都是描述下结构,描述下多头自注意力机制,自注意力公式,说说为什么用LN,为什么用残差结构,还可能直接拓展到 transformer,问 encoder 和 decoder 哪部分不一样;再进一步就是问为什么 transformer 用 positional encodding 而 bert 自己学习 positional embedding,为什么 CV 基本用 BN 而 NLP 用 LN,自注意力相比于 RNN 的路径长度,计算复杂度,decoder 那边的 mask 机制怎么做的;再细一点直接就到代码的具体结构,比如 transformer 的隐层维度是多少,多头具体是分了几个头,bert-base 几层以及隐层维度是多少 .etc. 基本上问不到这么细,除非是熟悉 nlp 领域的面试官会这么问,但是面试官不问,不代表你不能说,在不经意间说出这些详细的数据可以极大的提升面试官对你的观感。在讲完 bert 以后可以自己拓展说 bert 的缺点,以及目前针对这些缺点的一些改进版 bert,比如面百度,就可以详细说一下 ERNIE 的三个版本分别是怎么样的。主动出击,不要等面试官问,直接把他想问的东西全部喂给他。
在面试过程中还有一点非常重要,在一面结束的时候直接询问面试官部门相关的业务,以及目前最新在做什么,面试官一般都会大致和你描述一下,比如目前在基于多模态构建推荐系统架构什么的,在拿到这些信息之后,在一面和二面之间的空隙可以进行一个充分的准备。比如我在面百度的时候,一面面试官告诉我是知识图谱相关业务,我就花了一些时间从宏观层面上研究了知识图谱目前的相关研究,然后在二面的时候全部输出给面试官。在说完这些之后还有一步就是根据自己的项目经验,输出自己对于这个业务的优势所在,比如我之前做过 NER,以及文本语义相似度匹配,那么我就直接从知识图谱构建的其中一个流程“知识抽取”切入,详细展开了目前 NER 的相关研究以及目前的难点(包括了目前难点的一些解决方案)。
在春招的时候我基本上把所有常见的机器学习,深度学习知识点,相关模型做了一个详细的笔记,所以在秋招的时候没复习多久。在项目方面把自己总结的项目流程全部写出来,之后不断演练,其实也就是背了下来(由于是自己的总结,所以并不是死记硬背),避免面试的时候紧张出现思维混乱;对于项目中的相关知识点,模型全部详细掌握,并且自己模拟有可能会问到的问题,写下来并演练。整个秋招下来,笔记大概有 50 页左右,基本上每次面试所问的问题都能涵盖在里面,所以就没有对面试做相关的总结。
每次面试流程其实大致都是相同的,自我介绍(2分钟);实习项目介绍(10分钟);聊实习项目,根据项目问一些问题(5-10分钟);聊简历其他东西(5-10分钟);刷题(20分钟)。每一面的方式有略微的不同,一面基本上是根据简历问一些八股,二面会进一步根据业务来问一些问题,三面可能会出一些场景题,具体还是因人而异。
面试流程:
触宝:3面技术面+1面hr+1面董事长面;总共5面,面试难度较大,当初投的是 sp 专场,技术面一周内约完,hr面等了两周,董事长面等了大半个月左右。 百度:3面技术;流程很快,基本一周就结束了,意向书等了一周左右;由于我之间实习拿到过百度 offer,所以感觉秋招技术面有点走过场的感觉。
美团:2面技术+1面hr;技术面流程很快,hr 等了一周,催了之后才面,意向书等了一周;实习期间面过,可能面评不错,感觉也有点走过场,倒是 hr 面很正式。
腾讯:转正答辩,主要还是看实习期间的产出,答辩过程也比较随意。
京东:2面技术+1面hr;技术面两天约完,hr等了一周,意向书等了一周。
总结:
秋招大概两个月的时间,简历被拒过很多次,已经习惯了,总共面了大概 14 次面试,其实在去年暑假就想过要不要转成开发,后来还是坚持了下来。整体看来,学历一般的人找算法岗还是需要让自己的简历丰富起来,比如好的论文,知名的比赛,大厂的实习,其实只要占了一样就可以去尝试冲一下算法岗;如果什么都没,那还是乘早转成其他方向,不然面试估计都不会有。 最后还是希望学历一般的同学不要觉得进大厂没戏,不管是算法还是开发,搞起来就行了,自信最重要。此外简历需要写的清晰一些,突出重点;在选部门的时候其实可以选一些竞争比较小的部门,这样成功几率会大一些。