【译】ML 求职面试:终极指南
原文链接:https://silviasapora.github.io/blog/ml-interviews.html
说明:本文为英文原文的中文翻译与排版优化,尽量在不改变原意的前提下,提升中文阅读体验。
ML 求职面试:终极指南
我觉得把自己在机器学习方向(Machine Learning)读完博士后、去找 Research Scientist 工作的经历写下来,可能会对一些人有帮助。关于这件事的信息几乎为零;如果当年我刚开始准备时有人写过这篇文章,我会非常感激。
希望你无论正身处面试战场,还是只是想提前了解一下流程,都能从中获得一些帮助。
整体而言,我的求职过程是成功的:凡是我走完整个面试流程的公司,我都拿到了 offer,包括 DeepMind(我最终接受了)、Isomorphic Labs、Cohere、Meta,以及一家处于隐身状态(stealth)的创业公司。
对这句“每家都拿到 offer”做几点补充:Anthropic、Mistral 和 TeslaAI 也联系了我,但时间太晚,我没能完成他们的流程。唯一一次“真正意义上的拒绝”来自 ReflectionAI:他们不认为我适合 RS(Research Scientist)轨道,但把我转到了 Engineering 轨道继续面。
我投递的大多数公司都给了面试机会,少数例外是:SpaceXAI、Waymo 和 Wayve。SpaceXAI 这次投递是我让朋友当玩笑帮我写的,但我也不觉得写得有那么糟。Waymo 和 Wayve 这两家……我是真的喜欢自动驾驶。我博士期间每半年就投一次 Waymo(先投实习再投全职),一次回音都没有;反而我实验室里有人能收到回复。Waymo,如果你看到这里,我愿意原谅你。我写的情书式求职信堪称艺术品。你可以用你们系统里已经存了好几次的邮箱联系我。
1. 如何拿到面试(Getting Interviews)
拿到面试本身就是一项挑战。如果你卡在这一步,能拨动的杠杆通常还是那几类:更多论文、更“潮”的研究方向、更好的实习经历。
你可以去我个人网站上看我的 CV(简历)作参考。这里简单概括一下我的背景:
- 博士期间有 4 篇一作(或共同一作)论文;
- 发表在 ICLR / NeurIPS / ICML;
- 研究方向既有热门(LLMs、RL),也有没那么热门(Meta-Learning、Evolution Strategies);
- 有 Apple 实习经历;
- 之前还在 Meta 做过 Software Engineer。
如果硬要给一个粗略的“门槛”参考:想在顶尖实验室持续稳定地拿到面试回访,通常需要 3+ 篇一作论文,并且至少有 一次实习或行业经历。
但如果你已经开始拿到面试了:
继续发更多论文,此时基本不会再帮到你。 你接下来要做的,是通过面试。而且面试官往往根本不会认真看你的简历。所以别再把精力全押在研究和论文上了——请开始准备面试。
我理解那种“想等自己更准备好再开始”的拖延冲动,但现实是:你永远不会觉得自己完全准备好了。现在就开始准备。
1.1 一些额外但很重要的细节:求职信、内推、冷邮件、以及 LinkedIn/X
LinkedIn / X:
很多公司会在这些平台上发布岗位,尤其是实习岗位,有时这甚至是唯一的申请渠道。你通常需要填写帖子里的 Google 表单才算正式投递。关注你心仪公司里你欣赏的人,避免错过机会。
内推(Referrals):
有帮助,但不是必须。以 DeepMind 为例,我三个岗位里两个有内推、一个没有:最终我拿到面试的,反而是其中一个“有内推的”和那个“没内推的”。Anthropic 这边我最初毫无回音,后来发现有位前同事刚加入,就请对方帮我内推后才有进展。
结论:能拿就拿,但不要因为没有内推就不投。
冷邮件(Cold emails):
如果你知道 hiring manager 或团队里合适的人是谁,直接邮件联系往往会被欣赏。不要在邮件里复述简历(可以附上),而是解释:你为什么适合这个团队、你真正兴奋的点是什么。
就我而言:DeepMind 我给 hiring manager 发过邮件,对方很开心也回了;另一个岗位我看到 hiring manager 明确鼓励大家在 X 上私信……但我懒得做,因为我当时已经在面其他团队了。最后我即便没发消息也拿到了面试。
求职信(Cover letters):
很少是硬性要求,但一旦要求了,就值得认真写。
拜托,真的拜托:不要直接让 Claude / Gemini / ChatGPT 给你从零写一封求职信。
你完全可以自己写,然后再让模型帮你润色,这是没问题的。但请尽量把你的个性和兴奋感写出来。
2. 公司选择:创业公司 vs 大厂(Startups vs Big Tech)
一句话总结:取决于你个人情况。任何泛泛的优缺点清单都很难替你做决定。
但下面这些因素值得认真考虑:
- 找创业公司更难。 没有一个“集中入口”。多问实验室同学、朋友、前同事——口碑传播往往是找到优质创业公司的最好方式。与此同时,因为更难被发现,竞争也常常没有那么激烈。
- 创业公司的面试流程差异更大。 大厂相对套路化,创业公司更随意。平均难度差不多,但方差很大。你需要观察面试流程传递出的信号:如果面起来太容易,可能意味着你未来的工作复杂度也没那么高。
- 工作内容两极分化。 好的创业公司可能比大厂更有趣、更有影响力;但也可能意味着更大压力、更多你原本没打算做的工程/基础设施工作,以及频繁变化的研究方向。面试时请大胆问:
- 谁决定研究优先级?
- 盈利路径是什么?
- 竞争对手是谁?
- 如果 OpenAI 明天醒来决定做同样的事怎么办?
- 成长空间。 创业公司通常能让你更快成长、承担责任、塑造方向。在大厂你是很多人之一,在创业公司你更“被看见”。这点可能非常重要。
- 简历含金量。 简历上写 OpenAI / Anthropic,几乎人人都懂;而“某家隐身创业公司”往往需要解释。不是说因此就不要去创业公司,但这是现实,需要纳入考量。
- 关于“稳定性”。 我不会用“安全感”来给大厂背书。过去几年大厂大规模裁员毫不手软,所以两条路都不是 100% 稳。
2.1 薪酬里最容易被误解的一块:RSU vs 期权(Stock options)
我花了很久才真正搞懂这一点,写在这里希望能省你一些弯路(以下以英国税法为背景)。
RSU(大厂常见):
你拿到的是公司真实股份,按归属(vesting)计划发放。归属时你可以卖掉或持有。通常会有大约一半自动卖出用来缴纳所得税(没错,RSU 计入收入)。
期权(创业公司常见):
你不是直接拿股票,而是获得“以固定价格 X 买入股票”的权利。届时市场价为 Y:
- 如果 Y > X:你可以用 X 买入,再以 Y 卖出,赚差价。
- 如果 Y < X:期权基本作废。
真正“疯狂”的地方在这里:期权通常在你离职后 90 天内过期;如果公司还没上市,你行权后也未必能卖出股票。于是你可能需要先拿现金支付 (X × 期权数量) 来买股票,但没有任何保证将来能卖掉。
更糟的是(在英国):你一行权就要为 (Y−X) 的账面收益缴纳所得税——即便你一股都没卖,也一分钱没拿到。
所以如果你在创业公司干了两年离职,决定行权,而公司尚未上市,你可能需要同时支付:
- 买股票的钱:X × 期权数量
- 以及对账面收益缴税:((Y−X) × 期权数量 × 税率)
在你真正赚到任何钱之前。
一些补充:很多公司会提供“无现金行权”(cashless exercise)方案,用部分期权抵扣成本;也可能有回购或流动性事件。但请记住:每一轮融资都会稀释;资本利得税(~20%)也会进一步降低收益;而流动性事件给的估值往往还低于公司官方估值。
总结:当招聘方报给你一个包含创业公司股权的总包(total compensation)数字时,请微笑点头,然后在心里把那部分价值打个大折扣。更可能的现实是:你明年不会退休。但还是祝你好运。
3. 面试结构(Interview Structure)
多数公司整体结构相似,但每个环节占比差异很大。
Recruiter screen(HR/招聘初筛):
通常是轻松、低风险的聊天。你需要证明自己具备相关技能,并且能清晰谈论自己参与/署名的论文。
技术面(Technical interviews):
这才是主体,也是准备最重要的部分。不同公司会有 3–8 轮技术面,可能覆盖:
- 技术主题讨论(Technical Topics)
- 编程:LeetCode 风格题目,通常 Medium 或 Hard
- ML 编程/Debug:比如实现 attention、写 backward pass、找训练 loop 的 bug
- ML 知识:基础理论、应用 ML、系统设计(system design)
行为面(Behavioural interviews):
大致有两类:
1) 经典行为题(例如“讲一次你与人冲突”“讲一次你收到负面反馈”)
2) 更偏研究风格的对谈(例如“你对什么方向感兴趣?”“你觉得领域会怎么发展?”)
行为面通常比技术面更“随意”,但千万别低估它:请认真复盘经历、准备回答。
4. 我如何准备:技术部分(How I Prepared: Technical)
这是最关键的一部分。别跳过。
我认识一些非常厉害的研究者,最终被拒的原因仅仅是:没有准备面试。每天做 ML 研究并不等于你能在面试里从零写出 attention、推导 backward pass、或者写出 flash attention。
请至少留出 一个月 的规律学习时间。
一个对我特别有效的“元策略”是:
我几乎不做泛泛的准备。我的准备几乎全部是围绕“下一场具体的面试/公司”来做的。
这样我会更聚焦,并且被问到的内容往往还“新鲜地留在脑子里”(对我这种金鱼记忆很重要)。等面完一轮,你会发现你其实也覆盖了大多数知识。
到面试结束时,我整理出了一套相当全面的资源目录和策略,下面会分享出来。是的,内容很多——但 ML Research Scientist / Engineer 的面试覆盖面就是这么广:从过拟合这种基础概念,到 LeetCode,到从零实现 transformer,到一些相对新的架构(Griffin、TransformerXL、S4),什么都可能问。
4.1 闪卡(Flashcards)
用于 ML 基础、应用 ML、以及研究讨论。
我试过 Anki,但不太合适;实体闪卡反而更适合我。更重要的是:自己写卡片,本身就是学习的一半,不要只下载别人的卡组。
复习时保持好奇心:不断追问自己,确保每个点都真正理解。多次在学习时我问自己的问题,后来真的在面试里被问到。提前把疑惑解决掉总比临场卡住好。
4.2 用大模型做模拟面试(LLM mock interviews:Claude / Gemini)
每次面试前,我会把岗位描述、公司背景、面试信息贴给当时我最喜欢的 LLM(通常是 Claude),让它来“面试我”。令人惊讶的是,模拟题和真实面试经常会有重合。
强烈建议:每一场面试都做一次。
如果你觉得难度不对,就开新对话,并更明确地说明你的水平和背景。
我的主观感受:Claude 在学习上最好;Gemini 的反馈有时过于“彩虹屁”(“他们能面到你真是幸运”——大概就是这种)。
4.3 LeetCode / NeetCode
至少刷完 Blind 75;可选再加 NeetCode 150,重点放在 Medium。
目标是拿到每题的最优解:Two Sum 的 O(N²) 不算“解出来”。Hard 不要花太多时间。
如果你以前没刷过 LeetCode:
一开始会非常痛苦,你会觉得自己很蠢——这是正常的,也会过去。
刷到第 100 题时你会自信很多。
确保你掌握并能快速、稳定实现基础模式:DFS、BFS、Graphs、Backtracking、DP、Binary Search……
建议目标:每道 Medium 20 分钟以内。
如果卡超过 15 分钟:直接看答案,理解它,标记为需要复习,然后继续下一题。这里广度比深度更重要。
我总共做了大概 150 道 Medium。
4.4 书籍(Books)
- Designing Machine Learning Systems(Chip Huyen):覆盖大量基础与应用 ML 面试题。建议做高亮和笔记。
- The JAX Scaling Book:我是在面试后才发现的,但非常优秀;如果当时看到,我会重度使用。
- Reinforcement Learning(Sutton & Barto):只建议 RL 新手读;如果你已经做 RL 研究,我认为有点过度。
4.5 课程(Courses)
- 线性代数:Gilbert Strang 的 YouTube 课程。2x 速一天内就能看完(我亲测)。他是我本科线代及格的唯一原因,愿他再活 91 年。
- Diffusion / Flow Matching:MIT 和 Stanford 的课程都不错,但偏数学。如果你不是做这块研究,面试题多半也不会深挖;把高层直觉建立起来,记住关键概念即可(比如 diffusion SDE、flow matching ODE)。
4.6 ML 编程与 Debug(ML coding and debugging)
这是我最难找到优质资源的一块,也最依赖真实经验。
Debug 面试尤其难练,因为让 LLM 生成“看起来真实的 bug 代码”并不稳定。复盘自己(或朋友)的代码库,可能是最好的练法。
DeepML 有一些题,但我个人不太满意。我也觉得 Tensor Puzzles 很有帮助。
你可以把自己练到的“基准线”设为:
- 从零实现一个 transformer(端到端)
- 实现 causal / cross / self attention
- 实现 flash attention
- 实现 attention 的 backward pass
- 实现一个 MLP 的 forward 和 backward pass
- 用 PyTorch 或 JAX 写一个简单的 SGD 训练 loop
如果你能在时间压力下从零写出这些,你就非常稳了。
5. 我如何准备:情绪部分(How I Prepared: Emotional)
我不能代表所有人,但对我来说,这个过程几乎把我的心理韧性耗光了。
过去我对面试和考试一直表现不错,也没什么特别策略……但这一次完全不同。
如果你目前情绪状态很好,可以跳过这一节。我不想把不存在的焦虑“种”到你心里。
5.1 先说最实用的部分
我最大的问题是睡眠:面试前一晚很难睡好;当你一周有 10 场面试时,这会变成严重问题。
我也几乎吃不下东西,面试前看到食物就反胃。我的解决方案是:灌可乐,用糖顶住。我不说这是什么最佳实践,但这是我能想到的最可行方案。
除了“活下来”,我建议:规律运动、固定晚间作息、别把自己社交隔离。
面试前去跑步对我帮助很大:消耗紧张能量,重置大脑。(如果你也这么做:别跑太狠,碳水要补够。)最艰难的几周里,我给自己定了一个规则:只要第二天早上没面试,当晚就一定要和朋友吃饭。真的有用。
5.2 面试前仪式感
我从一个稳定的“面试前仪式”里获得了很多安定感:
- 在背景里放上新鲜的花(收到过不少夸奖)
- 化妆(让注意力从焦虑转移到别处;如果你不化妆,也许可以试试护肤)
- 看固定的舒适视频
我的固定片单是:Alysa Liu 的花滑与人生教学,以及《指环王》《指环王》《指环王》。想要更多 wholesome 视频推荐可以邮件我。
5.3 更难的部分
某个阶段,我的焦虑已经比准备不足更影响发挥了。我会在面试中途突然大脑空白。
我当时真的考虑过在面试期间开始心理咨询,但时间不够。
现在回头看,这类反思如果在面试开始前做更有价值:了解触发点、与失败的关系、自我价值感到底绑定在什么上——避免在战场上临时“发现自己”。不太推荐我这种方式(lol)。
但我最想说的是:
你作为一个人的价值,不会由这些面试决定。
我知道几个月前的我可能会翻白眼,但这是真的。整个过程具有很强的随机性,有时候宇宙甚至会开玩笑。
比如 DeepMind 面试那天早上 5 点,我冷汗醒来,突然想起自己没复习 topic X。我立刻拿起手机让 Claude 总结 topic X,然后回去睡了。9 点上线时,面试官第一句话就是:“你对 topic X 了解多少?”
我不是说真的有神,但如果有,那天显然站在我这边。
同时你也要允许自己有状态差的一天:面试里解释不清“forward KL 为何 mean-covering、reverse KL 为何 mode-seeking”,不代表你就不是一个好研究者。
我曾经在一个面试里把这个问题答砸了,明明我写过两篇论文都涉及 forward vs reverse KL。我面完后直接大哭。
你会失误,甚至会在你明明会的东西上失误——这没关系。
5.4 对我有帮助的书
这些书不一定专门讲“面试焦虑”,但对底层心态建设很有帮助:
- The Now Habit(Neil Fiore)
- The Gifts of Imperfection(Brené Brown)
- Mindset(Carol Dweck)
- The Tyranny of Merit(Michael Sandel)
6. 我如何准备:流程与节奏(How I Prepared: Logistics)
一天一场面试。 我个人更喜欢这种节奏(如果能做到)。不总是可行,但面试很消耗;你一天第三场面试的表现,很可能天然会下滑。
我的节奏是:早上面试,剩下的时间准备下一场。这样我不会在一天内不断上下文切换。
先从你没那么在意的公司开始。 小创业公司、你不太想去的地点、你觉得有意思但不是第一选择的岗位……先用它们来熟悉流程,校准信心,同时也更早获得对薪酬区间的现实感,等你真正谈你最想要的 offer 时更从容。
考虑时间线。 有的公司推进很快,有的极其慢,而且慢得不可预测。一旦流程启动,节奏通常会变得相对可预期。
所以如果 A 公司给你一个“随时可做、做完就启动流程”的测试链接,而你还在等 B 公司安排第一轮……先等 B 公司把第一轮约下来,再做 A 的测试。
你的目标是让多个 offer 尽量落在同一时间窗口,这样你才有真实杠杆和真实选择。当然现实仍然随机性很强。
比如我当时试图联系 Anthropic 的熟人加速,但最终没能在 DeepMind 的截止日期前把 Anthropic 的流程启动起来。
把你同时在进行的其他流程告诉每家公司。 我知道这对一些人来说不舒服,但这非常正常、也符合预期。它可以让时间线更透明,也常常会促使公司在感兴趣时推进更快。
我也觉得:当公司知道“其他公司也认为你是个认真候选人”时,会更认真看待你。
7. 薪资谈判(Negotiation)
我当时觉得这篇文章很有帮助(作为起点),但说实话我并没有完全照做。
文章建议把谈判当成“盲拍卖”,不要透露竞争 offer 信息。但在我这里不太奏效:
- 有几家公司明确要求我提供其他 offer 的证明,才愿意加价
- 甚至有一家质疑我的截图(lol)
“扑克脸策略”就这样破产了。
我学到的几点:
- 如果公司真的想要你,数字能调得比你想象的大得多。永远值得开口问。 大多数公司愿意谈。
- 截止日期(deadline)差异很大:一周、两周、或者“合理时间”。以我的经验,公司通常不太愿意延长(当然我也听说有人可以),所以你在排时间线时要把它考虑进去。
- 招聘方(recruiters)非常擅长读你。即便只是一些模糊问题,他们也可能推断出你的真实偏好。小信号都很重要:你提某家公司频率有多高、你怎么评价他们……都会被记录。
- 如果 recruiter 知道你已经把他们当第一选择,谈判会更难。
- 公司会用历史数据判断你的“威胁”是否可信:如果你告诉 Anthropic 你在认真考虑 Peppers Burgers 的 offer,他们会用数据判断“拿到这两家 offer 的人,最终选后者的概率”。如果几乎没人这么选,你的 bluff 就没用。
- 这也是为什么来自真正同量级公司的竞争 offer(例如 OpenAI、另一家顶级实验室)会更有分量。
- 但这也意味着:想把流程对齐很难。
8. 做决策(Decision Making Process)
我无法替你做决定,但就我个人而言:这个过程一开始我很不自信,所以很容易想早早接受前几个 offer(而不是让它们过期、继续面更多公司),因为害怕“后面可能什么都没有”。
但事实是:我后来确实拿到了更好的选择。
当然,你永远无法预测未来的流程会怎么走,但请相信你的直觉。
在我这里,权衡因素包括:地点、薪酬、名声、工作内容、免费食物和可乐(后两项对我非常重要)。
我在开始前大概有一份粗略的偏好排序,但随着我了解更多团队、文化和薪酬,它也在变化。
我那套极其先进的“氛围评分系统”后来在我爱上 Isomorphic Labs、同时 DeepMind 给我发 offer 后彻底崩溃。
我的解决方法是:和两家公司几乎所有人都聊了一遍。
结果很戏剧:DeepMind 的每个人都说会选 DeepMind,Isomorphic 的每个人都说会选 Isomorphic。非常有帮助。
最终真正有用的是:和真正了解我的人把它讲透(对我来说是伴侣),然后做决定。
9. 如果重来一次,我会怎么做(What I'd Do Differently)
即便整个过程总体成功,如果未来重来,我会做几件事:
- 建一个表格(spreadsheet)。 我当时坚信自己能用脑子记住所有流程。技术上可以,但一个简单表格(申请公司、流程进度、截止日期、联系人)本来可以避免我忘记投一些我其实很想去的公司。
- 情绪准备要和技术准备同等重要。 面试会让你感觉它像是在宣判“你作为研究者是否合格、你的博士是否值得”。这不是理性的框架,但身处其中很难不这样感受。我当时处理得不好,提前做心理咨询或至少认真自我反思,会有帮助。
- 对那些无视你的公司更主动。 现在回头看,我应该去给对方发冷邮件,表达真实兴趣,尝试真正进入某个人的视野,而不是把希望寄托在申请表上。
如果你真的很想去某个地方、但一直没回音:请做点什么。
10. 技术面高频话题清单(Technical Topics)
下面是我在开始面试前列出的学习话题清单。
对我而言,被问到最多的是 LLM 和 RL,符合我的背景。如果你做 diffusion,可能会被问更多 diffusion 相关。
我在至少一场面试里以某种形式被问到了几乎所有我学过的主题——所以请尽量把每个点都覆盖到位。
Reinforcement Learning
- Q-Learning / TD Learning
- Bellman Equations
- PPO
- GRPO
- GAE
- Variance Reduction in RL
- DPO (Direct Preference Optimisation)
- Policy Gradient Theorem
- On-Policy vs Off-Policy
- Exploration vs Exploitation Dilemma
- Credit Assignment Problem
- MuZero
- World Models / Dreamer
- AlphaGo
- Soft Actor-Critic
- Model-Based vs Model-Free
- Markov Property
- Monte Carlo vs TD
- Actor Critic
- SARSA
- Importance Sampling
- Markov Decision Process
- Curriculum Learning
LLMs
- Flash Attention
- LoRA
- TransformerXL
- Griffin
- Perceiver
- Scaling Laws
- Mixture of Experts
- LLM scaling factor
- RoPE
- Sinusoidal embeddings
- Relative positional embeddings
- LLM vs RNN vs S4
- Tokenisation
- Pretraining
- Finetuning
- RLHF
- Decoding techniques
- Causal Attention
- Cross Attention
Generative Modelling
- GANs
- VAEs and VAE ELBO
- Score Function
- Diffusion Forward Process
- Diffusion Reverse Process (DDIM / DDPM)
- Diffusion Forward / Reverse SDE
- Flow Matching ODE
- Classifier Free Guidance
Applied ML
- Tensor Parallelism
- FSDP
- DDP
- Pipeline Parallelism
- Communication Primitives
- Mixed precision training
- Gradient checkpointing
- Gradient accumulation
- Profiling
- Gradient clipping
- Numerical precision tricks
- Exploding / vanishing gradients
- Floating point representation
- JIT compiling
- JAX, PyTorch, TensorFlow
General ML
- Curse of dimensionality
- S4
- CNNs
- RNNs / LSTMs
- Autoencoders
- Gumbel-Softmax
- MLE vs MAP
- Newton's Method
- Linear Regression
- Activation Functions
- Loss Functions
- No Free Lunch Theorem
- BatchNorm / LayerNorm / RMSNorm
- Variance and Covariance
- Adam / AdamW / Adagrad
- Bias-Variance Tradeoff
- Backprop
- Regularisation Methods
- Unsupervised vs Supervised
- Clustering Algorithms (e.g. k-means)
- K-Nearest Neighbours
- SVMs
- Boosting
- Bagging
- Decision Trees
- Ensembles
- Bayes Theorem
- Precision / Recall / F1 / AUC-ROC
- KL Divergence
- Jensen-Shannon Divergence
- Weight initialisation
- Gradient Descent / SGD
- Overfitting / Underfitting
- Cross validation
- Data Whitening
- Convex functions
- Early Stopping
- Domain Adaptation
- Dimensionality Reduction
- Transfer Learning
- Few shot / Zero shot learning
- Second Order Methods
- Expectation
- Entropy
- PDF / PMF
- Confidence Intervals
Linear Algebra
- Positive Semi-Definite
- Jacobian
- Eigenvectors / Eigenvalues
- Hessian
- Inverse of a matrix
- Dot product
- Null space / Image space
- Orthogonality
- Linear independence
- Singular matrices
- Rank / Span
- Determinant