来自22届字节算法工程师的秋招经验(可以内推2023提前批)
字节跳动2023届校招提前批开始了~
校招内推码: HGMSKP7
背景
首先介绍一下我个人的背景。我本硕都毕业于北航计算机学院,研究生阶段的方向是知识图谱问答,0论文,有两段实习经历。秋招投递了大概10家公司的广告算法岗位,几乎都走到了HR面,最后收到了5家公司的offer。最终选择了字节广告算法团队。
个人感觉算法方向的竞争还是非常激烈的,所以秋招一定要认真准备。
秋招怎么准备
我个人把秋招的经验总结为十六个字:熟读八股,勤刷力扣,早去实习,海投简历。
一次面试通常是由自我介绍、八股、代码题、项目经历这几个部分组成。八股和代码题可以在短时间内突击准备,但项目经历和整个面试体现出来的思维能力和实践经验是需要更长时间去规划和积累的。
熟读八股
这里八股指的是计算机基础和机器学习算法知识,因为面试的时候这方面的考察通常是千篇一律,问题的集中度非常高,有套路可循,所以被称为八股文。八股不是面试考察的重点,因为这些知识非常基础,面试官只是想了解一下候选人对这些基础知识的掌握程度。当然八股中的这些问题也可以深挖,触及到非常底层和学术前沿的部分,考察候选人知识的深度。
我在面试过程中常见的一些八股问题:
- 介绍几种优化器的原理和区别
- 介绍BERT/Transformer/Multi-head Attention
- 交叉熵和MSE两种损失函数的区别
- 写出SGD求解LR的伪代码
- 介绍正则化方法
- Batch Normalization和Layer Normalization的原理与区别
- 模型评价指标
- RNN梯度爆炸的原因
在有一些基础的情况下,可以在网上搜罗面经,针对面经中提到的问题做准备。但如果本身相关的基础就不是很好,先从头学起吧。这里推荐复旦邱锡鹏老师的《神经网络与深度学习》这本书,上面提及的许多问题都可以在书中找到答案。李航老师的《统计学习方法》和《百面机器学习》也是不错的参考资料。
勤刷力扣
刷题用哪个平台其实都无所谓,国内主要是力扣和牛客。代码题这部分考察的是基本的代码能力,面试过程中是一定要做出来的,所以要多加练习。无所谓使用什么语言,哪个熟练用哪个就好了。我自己使用的是C++。
我从找实习的时候就开始在力扣上做题,到秋招结束的时候一年多的时间做了600多道题。需要做多少题看个人,没有定数,时间允许的条件下当然是越多越好。
刷题不能随机刷题,要按照知识点类别,逐个击破。刷题网站上的每道题都有对应的分类。需要学习的包括链表、栈、队列、二叉树、堆、哈希表、并查集等基础数据结构,以及二分、排序、搜索、图论、贪心、动态规划等算法。
建议先学习知识,再练习解题。这里推荐OI Wiki,里面的讲解非常清楚,也有对应的代码实现。
刷题的时候遇到不会的题,15分钟没有思路就可以直接看题解了,不要浪费时间。
会的题也要看一下题解,学习最优解的方法,一般面试中都要求写出最优时间复杂度的解法。
早去实习
我在实验室只做了一些落地的项目,没有产出可以发表论文的成果,所以很早就去找实习了。
相信大多数人都和我一样没有论文。从我秋招面试的经历来看,实习的经历非常重要,面试的大部分问题都在围绕着实习中的工作。
一方面,在实习过程中可以获取实践的经验,丰富自己的经历,在大厂对口方向的组实习并且能够有产出的候选人是非常受重视的,因此实习经历在秋招过程中非常重要;另一方面,实习可以了解实际工作的内容是什么样的,了解到工作环境氛围等外界不知道的信息,避免出现正式入职才发现不适应的情况。
如果没有顶会论文并且在实验室也没有希望发论文的话,非常建议尽早去实习,不然很容易发现时间过去了,但是什么收获也没有。在公司实习就算没有知识和能力上的收获,至少还能拿到钱。
有一段实习经历以后,无论是秋招还是找下一段实习都是非常容易的事情,所以不要因为自己没有准备好而害怕投实习被拒。如果真的没有准备好,简历上一片空白,可以先自己找比赛和项目做,或者投小公司的实习。
无论是实习、论文、竞赛还是项目,都是个人的产出,体现个人的能力。无论是在简历上还是面试过程中向别人讲述的时候都一定要注意体现出自己的能力。因此讲述项目经历也是非常重要的。
要按照背景、难点、解决方案和结果四个方面讲。
- 背景。有时候面试官和你的方向不同,不太清楚你的项目是解决什么问题,这时候就需要快速清晰地讲出这个项目的背景。包括但不限于 满足什么需求,在什么场景,是什么样的任务。
- 难点。一个项目中肯定有它的难点,是这个项目着力去解决的问题,如果是一个非常简单的事情肯定不太值得说。需要提炼出项目中困难的点,例如缺少数据、大模型训练成本高、已有的方法忽略了XX信息/条件等等。
- 解决方案。项目中做的事情,包括但不限于 怎样分析问题,针对难点如何设计。面试官经常会问的一个问题是为什么用了A而不用B,A比B有什么优势,这种问题要提前做好准备。这里是面试过程中非常体现面试官水平的地方,厉害的面试官会在这里问很多尖锐深刻的问题。
- 结果。结果最好要以直观的方式展现,例如对比基线准确率提升XX%,比赛排名XX,PV增加XX%等。
海投简历
投递简历一定要早投和海投。
我从7月底开始投递简历,到9月底结束所有面试。尽管如此,还是有某些公司在我投递的时候已经不招人了。金九银十已经成为过去式。所以要在各家公司提前批开始的时候就投递简历。
另外就是要海投。在面试到offer转化率不变的情况下,投递越多最后获得的offer就越多,就有更多的选择。面试有很多运气成分在里面,投递少的话风险也是比较大的。
当然在秋招期间也要不断地提升自己,优化这个转化率。建议先投递小厂或者不想去的公司,可以先积攒面试的经验,然后再投递想去的公司。每一次面试完以后要立刻记录下这次面试中出现的问题,对这次面试中暴露出的不足做改正。例如没做出来的代码题,没记住的八股文,没学过的知识点,没讲清楚的项目经历,这些都要在面试完以后查漏补缺。
从投递简历到HR面,整个周期会长达一个多月,所以按照自己的能力和面试情况灵活安排当前面试的公司数量。
面试经验
面试考察的内容一方面是知识和代码能力,另一方面是沟通和团队协作的能力。
面试过程中遇到不会的问题很常见,如果不会不用强答,表达出自己在这点确实有些不足,会加强学习就好了。另外也要能够引导面试官向自己熟悉的领域提问,如果面试官问A你不会,你可以表达不会A,但熟悉与A相似的B,引导他对B提问。
面试官的题目逐渐变难,说明面试官对候选人感兴趣,并不是刁难。此时不要慌,说明比较稳了,正常回答就好了。但如果一开始题目就非常难,那可能是被刷KPI了。