#十四、手撕代码题专项
这部分在算法工程、推理工程、平台工程岗位里越来越常见。很多公司不会让你现场写完整训练框架,但会让你实现一个最小核心模块,或者写伪代码、写关键函数。
#1. 手撕代码最常考的 4 大类型
- 基础张量计算题
- 例如 softmax、attention、mask、采样。
- 模型模块题
- 例如实现一个简化版
Multi-Head Attention、RoPE、LoRA线性层。
- 例如实现一个简化版
- 工程链路题
- 例如写一个简化版
RAG pipeline、batching、缓存、日志聚合。
- 例如写一个简化版
- 算法/数据结构题
- 例如 top-k、heap、LRU cache、并发队列、滑动窗口。
#2. 高频手撕代码题清单
#基础难度
- 实现
softmax,并说明如何做数值稳定。 - 实现
scaled dot-product attention。 - 实现 causal mask(因果掩码)。
- 实现 top-k sampling。
- 实现 top-p sampling。
- 实现 nucleus sampling 中累计概率截断。
- 写一个函数统计 batch 内 token 长度,并按长度分桶。
#中等难度
- 手写一个简化版
Multi-Head Attention前向。 - 给定
Q/K,实现RoPE的旋转位置编码。 - 实现一个带
KV cache的 decode step。 - 实现一个最小版
LoRA Linear。 - 写一个简单的 BPE merge 过程。
- 写一个最小版向量检索 + top-k 返回。
- 写一个 reranker 输入构造函数,把 query 与文档拼成模型输入。
#进阶难度
- 实现一个支持 padding mask + causal mask 的 attention。
- 写一个 continuous batching 的简化调度器。
- 写一个 prefix cache 命中逻辑。
- 写一个简化版 speculative decoding 框架。
- 实现一个最小 RAG 系统:切块、编码、检索、拼接 prompt。
- 设计一个 Agent tool executor,支持超时、异常和重试。
#3. 高频伪代码题
有些公司不要求完全可运行,而要求你说清主流程。最常见的是:
- 画出 RLHF 三阶段伪代码。
- 写出 DPO 的训练主循环。
- 写出 RAG 从 query 到 answer 的完整主流程。
- 写出在线推理服务的 batch 调度主流程。
- 写出 Agent 的 observe-think-act loop(观察-思考-行动循环)。
#4. 手撕代码题到底在考什么
不是考你背 API,而是在考:
- 你是否知道张量维度怎么流;
- 你是否知道 mask、cache、采样这些细节为什么存在;
- 你能不能把一个“概念”落成一个“最小可执行模块”;
- 你写代码时是否有边界意识:数值稳定、shape 正确、异常处理、复杂度。
#5. 手撕代码常见追问
- 你的
softmax为什么可能 overflow(上溢)? - 你的 attention 输出 shape 是什么?
- 为什么
KV cache更新时只追加K/V,不用重算历史? - top-p 相比 top-k 为什么更自适应?
- 你的 RAG 检索结果为什么还要 rerank?
#6. 最值得准备的手撕代码题单
如果只能准备一小套,我建议按下面顺序刷:
softmax(数值稳定)masked softmaxscaled dot-product attentionmulti-head attention forwardcausal mask + padding masktop-k samplingtop-p samplingRoPE applyLoRA LinearKV cache append + decode step简化版向量检索 top-k最小 RAG pipeline
#7. 面试官通常怎么打分
手撕代码题一般不只是看你“写出来没有”,而是会看这 6 件事:
- shape 是否清楚;
- 数值稳定性是否想到;
- mask / cache 这类细节是否漏掉;
- 时间复杂度和空间复杂度是否说得出;
- 边界条件是否考虑;
- 能否从代码反推回原理。
#8. 常见失分点
softmax没减最大值,导致上溢;- attention 忘了除
sqrt(d_k); - causal mask 的上三角 / 下三角方向写反;
top-p先截断再排序,逻辑顺序错;KV cache每步重算历史,而不是只追加;LoRA没讲清 base weight 冻结、增量矩阵可训练。
#9. 准备建议
如果你要专项准备手撕代码,建议至少把下面这些写熟:
softmaxattentionmasktop-k / top-pRoPELoRA LinearKV cache decode- 一个最小
RAG pipeline