最近审阅:2026-10 · 用时供参考,可分次完成。本页不是某家公司的面试题库。
面试临近时,先围绕下一轮要考的内容复习。这页按 2、6、12 小时列出练习:写代码、排错、解释原理、讲项目。做的时候发现哪里不熟,再打开对应章节补。
这里算的是有效学习时间,也就是阅读、动手和思考的时间,不含休息。六小时可以分成几晚;每次学多久,按你的日程调整。
想之后回来读的文章,点标题下的「收藏本页」,右上角「我的阅读」里能找到;换设备或清理浏览器前,记得导出备份。
按你对这部分知识的熟悉程度选,不按工作年限。比如 Python 很熟、但没学过 ML,就从起步路线的预测例子开始。
先确认面试形式
看面试邮件和职位描述,确认:这一轮是算法、ML Coding、读代码、系统设计,还是项目讨论?能否运行代码、查文档、使用指定 AI 工具?没有明确允许,就不要在正式面试里用 AI。要考读代码和排错,可以先做代码理解的练习;它不能代替算法准备。
先写下三件事:最近的一轮是什么;哪项能力最不稳;今天结束前要留下什么结果。比如“周四 ML Coding;mask 容易写反;今天写出 attention,并用未来 token 扰动测试”。这比“今天复习 Transformer”具体得多。
下面默认准备 ML / LLM 相关岗位。如果已经知道下一轮只考算法,就把 ML 部分的时间换成算法练习;如果只做项目讨论,则换成项目追问。不是每个人都要平均用力。
2 小时:先复习下一轮的重点
| 建议用时 | 做什么 | 留下什么 |
|---|---|---|
| 10 分钟 | 确认形式,选一个短板 | 一句话的练习目标 |
| 35 分钟 | 独立做一道熟悉方法、没背过答案的算法题 | 可运行实现、边界测试、复杂度 |
| 25 分钟 | 读代码小练习:先追调用,再找 bug | 一组能复现问题的输入、最小修复 |
| 25 分钟 | 选下方一个与岗位相关的原理主题 | 两分钟解释,加一个反例或限制 |
| 20 分钟 | 讲一遍自己的项目 | 问题、个人贡献、选择、证据和未做的事 |
| 5 分钟 | 记下没解决的问题,检查面试环境 | 下一次只补最重要的一项 |
合计 120 分钟。读代码先做一个练习,不是整章。算法题没做出来时,记下卡在思路、实现还是测试,再决定下次补什么;不必为了凑齐表格提前看答案。
6 小时:再加四小时实现与模拟
| 增加用时 | 做什么 | 检查什么 |
|---|---|---|
| 60 分钟 | 再练两类算法,每类 30 分钟 | 换个输入仍能解释为什么这样做,不追求刷题数量 |
| 60 分钟 | 一个 ML 小实现:softmax / loss、MLP 或 attention,按基础选 | 输出或梯度能对照;太难就缩成一个函数 |
| 45 分钟 | 从核心主题选三个,每个 15 分钟 | 每个讲清做什么、为什么、什么时候不适用 |
| 45 分钟 | 做完代码理解练习 | 先写预期,再修复,再补回归测试 |
| 30 分钟 | 做一次模拟,包含项目追问 | 记录一次真实卡顿,而不是把稿子念顺 |
累计 360 分钟。若下一轮是通用 SWE coding,可以把 ML 实现换成陌生程序的修改与测试。若是研究讨论,把部分算法加练换成自己论文的假设、对照实验与失败结果;已确认的 coding 轮仍要保留练习。
12 小时:补系统设计,重做薄弱项
| 增加用时 | 做什么 | 检查什么 |
|---|---|---|
| 90 分钟 | 选三类算法,计时写、测试、复盘 | 用错的方法能解释为什么错 |
| 90 分钟 | 一个 ML 模块的实现或排错 | 加 padding、空输入或不同 batch 后仍正确 |
| 60 分钟 | 一个系统设计 | 需求、容量、接口、瓶颈、降级(fallback)方案各有交代 |
| 45 分钟 | 核查项目和实验结论 | baseline、数据划分、成本、限制;没有结果就说明没测 |
| 45 分钟 | 模拟最接近真实形式的一轮 | 无提示完成主要步骤;允许 AI 的练习也要验证输出 |
| 30 分钟 | 重做最初做错的两个小点 | 不看上次答案,说明这次为什么成立 |
累计 720 分钟。需要更多练习时,可以从岗位指南继续选;临近面试,优先重做薄弱项,而不是临时换一个方向。
常见原理与小例子
下面用小例子串起几组常见问题,方便快速回想。它们不是完整答案;如果例子中有一步解释不清,就沿后面的链接继续读。
算法:方法背后有什么条件?
Hash Map 适合“之前有没有见过”;双指针适合利用顺序或维护窗口;二分需要能排除一半候选(candidate);DFS / BFS 负责遍历状态;heap 保留当前最需要的元素。别只凭题目里出现了哪个名词选模板。
例如找和为 8 的两个数,输入 [3, 3, 5],扫描到第二个 3 时,查的是 5 是否已出现,不是 3 是否重复。复杂度通常是平均 O(n) 时间、O(n) 空间;还要说明不能重复使用同一位置。
顺手检查:无权图最短路用 BFS;边有不同权重就不能照搬结论。返回所有路径和只返回一个距离,输出成本也不同。准备算法轮,LeetCode 仍要练,读代码不能代替从零解题。
继续:Hash Map 与前缀和 · 双指针与二分 · DFS / BFS · 栈与堆 · 回溯与 DP。先各选一个小题,不必通读。
ML:训练目标与指标
训练集上的 loss 下降,说明模型更符合当前训练目标;不自动说明新数据上更好。先说清预测什么、样本怎样划分、loss 怎样聚合,再谈模型。
比如两个 batch 的逐 token loss 分别是 [2,2] 和 [8]。直接平均两个 batch 的均值会得到 5;按全部有效 token 平均则是 4。两种算法回答的问题不同,不能把它们当同一个指标。
顺手检查:小 batch 能否过拟合(overfitting)?梯度有没有清零?训练与验证是否分开?标准化参数是否只在训练集拟合?能跑不等于目标没写错。
LLM:attention、mask 与 KV cache
普通 multi-head attention 中,Q/K/V 分头后常写成 [B,H,T,D]。Q 与 K 的转置相乘得到 [B,H,T,T],除以 sqrt(D),加上 mask,再沿最后一维做 softmax,最后加权 V。缩放发生在 softmax 前,是为了控制点积(inner product)的尺度,不是把算好的概率除小。
长度为 3 的 causal attention,第一个 token 只能看自己,第二个看前两个。改第三个 token,前两个位置的输出不该变。这个测试比只看输出 shape 更能发现 mask 写反。
KV cache 保存过去 token 的 K/V,避免每一步重新计算它们;不是缓存完整回答,也不是保存 Q。核对时固定模型、关闭 dropout,对比同一 token 序列的逐位置 logits,不先比较随机生成文本。
后训练:先分清监督从哪里来
SFT 从示范答案学习;DPO 常用成对偏好做直接优化;PPO / GRPO 会采样轨迹,再用反馈更新策略。DPO 通常不需要在优化循环里在线 rollout,但偏好对仍可能由模型生成,数据也不是免费的。
例如同一个问题采四个答案,奖励(reward)都是 0:按组中心化后,GRPO 的这一组没有相对奖励差异可学;KL 等其他项是否仍有信号,要看具体目标。此时只调学习率未必对症,先看题目难度、奖励是否可达、采样预算。
顺手检查:reference 是约束偏移的参考策略,不是某个“标准答案”;old policy 是采样这些轨迹时的策略,两者用途不同。不要把 RLVR 当作和 PPO / GRPO 同一维度的互斥选择;RLVR 怎样训出长思维链(long CoT),见测试时计算(test-time compute)。
继续:方法比较 · 为什么 RL 难训。不是相关岗位可以先跳过这一块。
数据与评估:分数能说明什么?
假设 90 个容易样本全对、10 个重要的困难样本全错,总准确率仍是 90%。先问哪些用户和错误重要,再看分组指标,而不是为了一个总分继续改模型。
一个新方案高两分,至少确认数据和候选集是否一致、有没有泄漏、是否多用了算力,以及差异在重复实验或不确定性分析中是否稳定。LLM judge 给的分也需要核对:随机交换答案顺序、抽样人工检查、看分歧样本。
继续:评估基础 · LLM-as-a-Judge · 数据为什么重要。
系统:一次请求经过哪些环节?
请求进入服务后,通常要经过校验、排队、调度、模型执行和输出处理。先说延迟目标与并发,再说瓶颈在哪:计算、内存带宽、显存容量,还是通信?计算和带宽哪个先到顶,可以用 roofline 估一下。
例如 7B 参数、每参数 2 byte,权重本身约 14 GB(十进制),不是整个服务只需要 14 GB。还要算 KV cache、临时张量和运行时;训练另外有梯度与优化器状态。量化也不能简单假设所有开销都等比例减少。
DDP 复制模型、分样本;FSDP 分片(sharding)训练状态,用通信换显存;TP 拆层内计算;PP 拆层。vLLM / SGLang 主要解决推理执行与服务问题,不是替代 FSDP 的另一种训练方案。
继续:完整 ML 系统 · vLLM / SGLang · 训练框架。
根据岗位,换掉不相关的部分
每类岗位先保留什么、时间紧时先放下什么,统一列在按岗位选练习的表里:通用 SWE、模型向 MLE / RE、RS 和 Inference / ML systems 各一行。那是分配时间的建议,不是公司题库。CV、语音、机器人等岗位,还要把 LLM 内容换成对应领域的核心问题;不了解的方向不要靠记住几个术语硬撑。
记下下次要补什么
结束前写清下一步,比如“补空输入测试”或“重新手算 softmax 的维度”。下次先重做上次的小例子,再加一个新条件,检查自己是否真的理解了。
面试前再过一遍:常犯的 coding 错误、还说不清的概念、项目里能支撑结论的证据,以及自己没做过的部分。尤其要分清亲自做过、参与过和只了解原理的工作。
本页术语 6
- 降级 fallback
- 主路径不可用时切换到较简单但语义明确的备用行为
- 候选 candidate
- 召回阶段捞出来、等待精排挑选的内容
- 过拟合 overfitting
- 训练集越来越好,没见过的数据反而变差
- 点积 inner product
- 两个向量对应分量相乘再求和,双塔的打分方式
- 奖励 reward
- RL 里指导策略更新的标量信号
- 分片 sharding
- 把参数、梯度或优化器状态切开分给多张卡,每张只存其中一份