面试求职AI 工程师LeetCode

拿下 OpenAI Offer 后,她复盘了 57 场面试:Transformer 要会手写,LeetCode 还得刷

InfoQ··原文链接
收录于 2026/6/24 09:56:37

背景:57 场面试的样本意义

Alisa Liu 在华盛顿大学读了 6 年 NLP 博士,目标岗位是研究科学家(RS)和技术团队成员(MTS)。她最终选择了 OpenAI。

样本规模:

  • 11 家公司57 场正式面试
  • 另外还有 46 次招聘沟通16 次 offer 后谈判
  • 评论区里 Meta 研究员 Mimansa Jaiswal、Ravid Shwartz Ziv 等都附议——顶级 AI 实验室真正会把你 KO 的,不是论文不够亮眼,而是两轮 Colab 编程没发挥好

样本足够说明问题:当候选人池里全是博士 + 顶会论文时,研究背景已经只是入场券,技术基本功才是 differentiator。

面试题型分布

Alisa 把 57 场面试归为 7 类,频次从高到低:

算法(LeetCode / 数据结构)

  • 基本就是 LeetCode 原题或微变体
  • 即使面 AI 岗,动态规划、图、哈希表、树、堆、双指针、二分仍然会决定结果
  • 这块基础没打好,会反过来污染 ML 编程面试(很多算法概念是嵌在 ML 题里的)

系统设计 / ML System Design

文中没有单列传统系分,更多是混在"技术讨论"里——围绕一个研究目标展开实验设计:

  • 如何设计实验回答某个研究问题
  • 解读假设性的实验结果,并据此规划后续实验
  • 不断追问你的设计选择和 trade-off

手写 Transformer / 深度学习基础

出现频率最高的一类,叫"机器学习编程面试":

  • 现场手写一个模型架构、解码策略、或传统 ML 算法
  • PyTorch 必须熟练;少数场次只允许用 NumPy(如从零写反向传播)
  • 不要求记 NumPy 语法,但要求你真的懂梯度怎么流

她的核心准备资源是 Stanford CS336 Language Modeling from Scratch 的 Homework 1:

  • 从零实现 byte-level BPE tokenizer
  • 从零实现 decoder-only Transformer:embedding、Transformer block、causal self-attention、RoPE、FFN、输出层
  • 自己写交叉熵、AdamW、训练循环、checkpoint
  • 除了 torch.nn.Parameter、容器类和 Optimizer 基类,禁用 torch.nn / torch.nn.functional / torch.optim 里的高级组件
  • 作业明确禁止用 Cursor Agents、Codex、Claude Code 等编码代理,连 Cursor Tab 和 Copilot 补全都要关

她原话:"Transformer 的实现和调试在面试中出现得太频繁了,把它练成肌肉记忆,会带来非常大的回报。"

行为面 + 案例追问

  • 大体是标准 BQ,偶尔夹一两个 AI safety / societal impact 的开放题
  • 她在这上面翻过车——简单问题反而容易卡住,因为临场要一边回忆经历一边组织成"符合问题的故事"
  • 解法:提前把博士期间印象深刻的经历列出来,对应到常见 BQ 模板,面试时直接 retrieval

另外还有两类辅助题型:

  • 技术讨论(不写代码):从位置编码的种类、5D 并行、PPO vs GRPO 这种连环快问快答,到围绕一个主题深度讨论;前者考广度,后者考思考方式
  • 研究讨论:基于简历项目深挖——为什么选这个问题、过程中的洞察、未来方向;建议按岗位关键词调整项目讲法,帮助疲惫的面试官快速对齐
  • 数学:概率、线代、微积分,从逻辑谜题到纸笔严肃推导都有
  • Job Talk:工业界版本更短、更聚焦在 1 篇一作 + 几篇相关工作串成一个完整研究方向

高频考点与坑

  • Transformer 全栈手写:tokenizer → embedding → attention(含 mask 和 RoPE)→ FFN → loss → optimizer → 训练循环 → checkpoint。任何一环卡住都可能直接挂
  • 张量维度和 attention mask 是最高频翻车点
  • LeetCode 中等难度 必须能在 25 分钟内稳定输出
  • 行为面第一轮容易死:Alisa 自己第一次 BQ 就挂了,原因是"大脑一片空白"
  • 关掉 AI 补全练编码:否则会严重低估自己对 AI 的依赖度,进面试室就废
  • 数学常识:概率分布、线代矩阵分解、求导链式法则等要随手能写

复盘里值得借鉴的策略

  1. 把找工作当全职:她形容是"重回本科——整天泡咖啡馆做笔记、画图、刷题"
  2. 从一门系统课起步:先用 Stanford CS336 把 LLM 知识图谱补完整,再去深挖单点
  3. 三条腿并进:读 blog/paper + 与 ChatGPT/Claude 大量对话 + 从零实现各种功能
  4. CS336 HW1 当圣经:因为它把"手写 Transformer"的所有零件覆盖了,是 ROI 最高的单一资源
  5. 面试模式切换:练习时强制关闭 AI 补全,模拟真实环境
  6. 行为面要提前"建库":列经历 → 映射到常见问题 → 形成可快速调用的故事索引
  7. 简历讲法按岗位定制:同一个研究项目,对 RS 和 MTS 要换不同关键词
  8. 接受"每场面试都像一门陌生课的期中考,只给三天复习" 的心态——别期待靠研究惯性赢

我的判断

站在 PC 前端工程师的视角,几条直接的看法:

  1. "研究背景拿入场券、工程能力拿 offer"这条规律对前端转 AI 完全成立,甚至更友好。我们没有论文这块敲门砖劣势,但日常就在写代码,LeetCode 和"从零实现 X"的肌肉本来就比纯科研背景的人更强——真正的差距在于深度学习内功对训练栈的端到端理解。补这块的 ROI 比想象中高,因为博士们卡的恰恰是工程,而不是 paper。

  2. "Transformer 手写"既是真考察,也是装逼门槛。在 OpenAI/Anthropic 这种地方它有意义——你日常工作就在改 attention 实现、调 kernel、debug 梯度流。但如果一家公司的真实工作是接 OpenAI API + 调 prompt,还要求候选人现场手写 RoPE,那就是纯粹的门面工程。面试官的题目,往往泄露了这家公司想招你来干什么——这是判断岗位含金量的反向指标。

  3. LeetCode 复兴对一线工程师的真实影响是负面的。它把"应试能力"再次抬到"长期工程素养"之上,而 AI 编程工具又让日常代码写作越来越不像 LeetCode。结果就是:面试场景和工作场景的剥离比 2018 年还严重。对 IC 来说,刷题不再是"顺手补一补算法基础",而是要主动做一份独立训练计划,否则跳槽时会真切感到自己"做了三年工程反而退化了"。

  4. Alisa 那句"关掉 AI 补全练编码",是这篇复盘里最反直觉、也最值得抄作业的一条。我自己(以及绝大多数前端)现在写代码 Copilot/Cursor 几乎不离手,能力曲线已经被工具拉平。一旦进入有人盯着的白板/Colab 场景,会瞬间退回到三年前的水平。定期做 "AI-off Friday" 这样的训练,可能是当下 IC 最便宜的防内卷保险。

  5. 对内卷期 IC 的现实启示:高强度求职准备本质上是"把自己重新过一遍本科"。它说明在这个周期,没有"工作年限"这种被动复利可言——每隔两三年都要主动把自己拉回 fundamentals 上跑一遍。这件事痛苦,但它把"经验"重新换算成"能力",而后者才是真正能跨周期的资产。