← 返回学习路线 ◆ 贯穿项目
综合实战与求职 · 阶段 17 · 项目实战与求职准备
Stage 17 / 17 · 综合实战与求职

项目实战与求职准备 Capstone & Career Preparation

前面 16 个阶段解决「会不会」,这一阶段解决「别人知不知道你会」。2026 年的招聘标准已经非常务实:不再唯论文论,而看实际能力与可验证的作品——企业普遍更愿意录用有开源贡献或复杂项目经验的候选人,即使没有顶会论文。但「做过」和「能证明做过」是两件事:招聘方看一个仓库平均只有 90 秒,看一页简历只有 30 秒。本阶段的目标很直接——把这 16 个阶段的知识,压缩成别人能在 30 秒内相信的能力证明。

⏱ 持续(与前面阶段并行) 🎯 综合 ◆ 里程碑 M17 2026-09-29
作品集README简历面试系统设计开源职业规划

阶段总览

✔
学完你能做到
  • 完成 3 个有区分度的作品集项目,分别覆盖「应用 / 训练 / 工程」三类能力
  • 写出让陌生人在 10 分钟内跑起来的 README,让仓库「可被验证」而不是「可被信任」
  • 把项目写成有规模、有前后对比数字、有指标定义的简历条目
  • 掌握面试四轮(编码 / 原理 / 项目深挖 / 系统设计)各自的答题结构与失分点
  • 能用六步框架现场完成一道系统设计题,并做出显存、卡数、成本的量化估算
  • 能当场手写注意力、LoRA、KV Cache 估算、DPO / GRPO 损失等核心实现
  • 建立一份清晰的求职地图与 12 周时间线,以及可持续的长期学习机制
阶段知识结构总览 · 从作品到 offer 的完整链路
阶段 17 · 项目实战与求职准备Capstone & Career Preparation · 4 大章 · 90+ 知识点
1. 作品集:三类项目应用 / 训练 / 工程三类README 六段结构评测结果基线→本项目三层追问自测
2. 简历与项目描述项目描述公式量化结果与基线简历六模块关键词对齐 JD
3. 面试体系与答题结构四类面试环节系统设计六步手写实现清单高频原理题项目深挖三层
4. 求职策略与持续学习岗位地图与投递12 周冲刺时间线三年成长路径持续学习机制
贯穿项目 · M17 收口:整合、演示、复盘与求职第 100–106 周能让人 10 分钟看懂这个系统在做什么、怎么做的、为什么这么做覆盖多模态问答、多步 Agent 任务、引用溯源三个场景完整技术报告(问题—方案—数据—取舍—复盘)压测与成本报告终版
学习路径
节奏要做什么产出自检标准
学习期(阶段 1–9 期间,并行)每完成 2–3 个阶段就交付一个能演示的小东西仓库里的可运行模块(数据管线、索引、训练脚本)能向非技术朋友讲清「它解决什么问题」
收口期(阶段 13–16 之后)把三个项目做深、补评测、补 README作品集主页 + 三份 README + 评测报告陌生人的机器上 10 分钟能跑通
投递期(4 周)简历定稿、定向投递、模拟面试一页简历 + 3 轮模拟复盘记录每个条目都能被追问三层
面试期(持续)每场面试后立刻复盘并修正表达问题清单 + 表达修正记录同一个问题第二次明显答得更好
★
2026 年的招聘现实:几个可参考的判断:大模型相关岗位需求年增长显著高于传统互联网岗位;算法 HC 中相当比例投向大模型与 Agent 方向;具备 LLM 微调或 Agent 系统落地经验的候选人通过率明显更高;企业明确把「GitHub 上有一定星数的项目、或权威竞赛前列」列为可替代论文的证明。结论:作品 > 证书,可验证 > 声称。
✔
本阶段的推进方式:不要等学完所有阶段再开始做项目。正确节奏是:每完成 2–3 个阶段就产出一个能演示的东西,边学边积累。到求职时你手里是 3–5 个递进的项目(后一个用到前一个的产出),而不是一个临时赶工的 demo。「递进」本身就是能力证明——它说明你在持续迭代,而不是在堆作品数。

1. 作品集:三类项目,覆盖三种能力

知识结构图 · 作品集
作品集:三类项目5 大知识域 · 24 个知识点
三类项目组合A 应用类 RAG+AgentB 训练类 SFT/DPOC 工程类压测成本能力覆盖而非数量
学习路径
  1. 读 1.1:理解 A 应用 / B 训练 / C 工程三类是能力覆盖而非凑数
  2. 对照 16 个里程碑,把成果归类到三类格局
  3. 完成 1.5 自测:说清为什么就这三类
  4. 对接 M17:把 hamauls 定位成 C 工程类主项目
✔ 能说清三类如何覆盖训练 / 工程 / 应用三种能力
核心知识点详解
  • 三类覆盖三种能力:A 应用类(RAG/Agent)证明能做产品;B 训练类(SFT/DPO)证明能训能调;C 工程类(压测/成本/服务化)证明能扛生产。三类是能力覆盖而非数量堆砌。
  • 为什么就这三类:岗位需求基本对应这三条线:应用 / 算法 / 基础设施。三各一个,比十个同类吊打更有说服力。
  • 常见坑:全是应用玩具:十个 Demo 加起来不如一个有数据、有取舍、能讲 20 分钟的 C 工程项目。宁缺毋滥,突出深度。
作品集纪律一键跑起来必须有数据结果写清技术取舍失败分析开源 + README
学习路径
  1. 读 1.2:对照五条纪律逐条自检自己的仓库
  2. 补一键跑起来与可复现的数据结果
  3. 完成 1.5 自测:为每个项目写清技术取舍与失败分析
  4. 对接 M17:让 README 能一键复现部署
✔ 能逐条自检作品集纪律并补齐缺项
核心知识点详解
  • 五条纪律:一键跑起来、必须有数据结果、写清技术取舍、有失败分析、开源 + README。缺任何一条都经不起一轮追问。
  • 可复现是硬指标:README「一键跑」做不到等于没做:没有 requirements.lock、路径写死、依赖没装,招聘方 90 秒直接关。用数据卡补数据与失败分析。
  • 常见坑:只写我做成了:没有失败分析的作品像造假。主动写清踩了什么坑、如果重做改什么,才是真做过。
README 六段结构一句话价值主张Quick Start 10 分钟架构与数据流评测结果基线→本项目关键技术决策 3 条已知限制与计划
学习路径
  1. 读 1.3:按六段结构重写自己项目 README
  2. 写 Quick Start 使 10 分钟能跑起来
  3. 完成 1.5 自测:自评六段是否齐全
  4. 对接 M17:产出 README + docs/architecture.md
✔ 陌生人按 README 能 10 分钟看懂并复现
核心知识点详解
  • 六段一键讲清:一句话价值主张 → Quick Start(10 分钟跑起来)→ 架构与数据流 → 评测结果基线对比 → 关键技术决策 3 条 → 已知限制与计划。
  • Quick Start 要真能跑:make up 一条命令拉起,写清依赖、安装、环境变量、离线 demo。陌生人 10 分钟复现才算合格。
  • 常见坑:缺评测结果一节:90% 项目都缺这节。没有基线对比,招聘方不知道你的东西到底多好,等于没有证明。
可验证性requirements.lock 锁版本make eval 复现数字评测方法四要素样本量 n=380离线 demo 免 key
学习路径
  1. 读 1.3:锁 requirements.lock 版本
  2. 让 make eval 能复现数字,写清评测方法四要素
  3. 完成 1.5 自测:离线 demo 免 key 可运行
  4. 对接 M17:技术报告给出可复现的基线数字
✔ 能用一条命令复现 README 里的数字
核心知识点详解
  • 锁版本 + make eval:requirements.lock 锁全部依赖,make eval 一条命令重跑评测数字。评测方法四要素(数据集、样本量、指标、基线)写进 README,样本量如 n=380 要写清。
  • 离线 demo 免 key:让 demo 不依赖 API key 能本地跑,降低上手门槛;线上对比数字保留在报告中。
  • 常见坑:数字无法复现:README 写 P99 响应快但没人能跑出来,等于给自己挖坑。能复现的数字才叫数字。
三层追问自测L1 事实与规模L2 决策与取舍L3 边界与失败README 门禁脚本
学习路径
  1. 读 1.4:对项目过 L1 事实规模 / L2 取舍 / L3 边界失败
  2. 写 README 门禁脚本拦截浅项目
  3. 完成 1.5 自测:录一段 5 分钟讲解稿
  4. 对接 M17:产出 5 分钟 / 15 分钟项目讲解稿
✔ 能连续扛住三层追问不停顿
核心知识点详解
  • L1 事实 / L2 取舍 / L3 边界失败:第一层:项目做什么、多少数据、多大模型;第二层:为什么选这个方案、取舍是什么;第三层:边界在哪、采了什么坑。
  • README 门禁脚本:写脚本检查 README 是否含价值主张、评测数字、决策、失败四要素,缺就红,防止浅项目流出去。
  • 常见坑:只准备 L1:一被问「为什么不用 X」就卡壳。每层至少准备一个数字化答案,连续扛住追问才算熟。
学习路径

1.1 推荐的项目组合

作品集的组合逻辑是能力覆盖,而不是数量。面试官看的是「训练、工程、应用,你哪一块是短板」。三类各做一个,比同类做三个更有说服力。

PROJECT A · 应用类
可信赖的领域知识助手(RAG + Agent + Evals)
选一个你真正熟悉的领域(保险条款问答、技术文档检索、财报分析)。要求:混合检索 + 重排 + 引用输出;分层记忆;带人工审批的工具调用;自建 150+ 条评测集 + CI 门禁 + 全链路 tracing;一份说明「检索与生成分别达到什么指标、失败模式是什么」的报告。价值在于展示端到端交付能力与工程严谨度。
PROJECT B · 训练类
一次完整的后训练实验(SFT + DPO 或 GRPO)
在一个 7B–8B 开源模型上完成:数据构造 → LoRA SFT → 偏好对齐或可验证奖励 RL → 评测。关键是要有对照实验与失败分析:不同数据配比的效果、DPO 与 GRPO 的差异、奖励曲线与熵曲线的异常及其解释。即使资源有限,把流程跑通并写清「踩了哪些坑」就很有说服力。
PROJECT C · 工程类
推理服务压测与成本优化报告
把 Project A 或 B 的模型部署成服务:vLLM 调优(并发、量化、前缀缓存)、量化精度验证、压测得到吞吐–延迟曲线、给出 SLA 配置与每千次请求成本,并对比 API 方案。这个项目最能体现工程 sense,也最容易被面试官记住。
⚠
什么项目会被直接忽略:① 只有 UI、没有任何技术取舍的「套壳聊天机器人」;② 抄官方教程改个数据集,没有自己的设计与分析;③ 有代码但无法复现、没有 README、没有评测结果;④ 声称「实现了 XX 优化」却拿不出前后对比数据。一个有数据、有取舍、有失败分析的朴素项目,胜过十倍花哨但无法验证的项目。

一个常被忽略的现实:2026 年企业筛选简历时,「能一键复现的仓库」通过率显著高于「只有描述的项目」;许多团队把「GitLab 上有一定星数、或有可运行 demo」直接作为替代论文的证明。所以三类项目不必都做到完美,但每类至少要有一个陌生人能 10 分钟跑起来的交付物。

python# 作品集「可验证性」自检脚本:把 README 的硬指标当门禁
import re, pathlib
REQUIRED = ["快速开始", "评测", "样本量", "取舍", "限制"]
def audit(readme_path):
    text = pathlib.Path(readme_path).read_text(encoding="utf-8")
    missing = [k for k in REQUIRED if k not in text]
    has_numbers = bool(re.search(r"\d+%|\d+\s*(ms|s|tokens/s|次)", text))
    return {"missing_sections": missing, "has_quantified_results": has_numbers,
            "pass": (not missing) and has_numbers}
print(audit("README.md"))
# 预期(合格):{'missing_sections': [], 'has_quantified_results': True, 'pass': True}
# 判据:缺「评测」或没有量化数字 -> 直接不通过;这是 90% 个人项目的通病。
项目类型典型交付物评审者最关注必备数字
A · 应用类(RAG / Agent)可用的问答 / Agent 系统 + 评测报告是否真解决业务问题、有无评测体系、失败如何兜底召回命中率、忠实性、引用正确率、p95 延迟、人工介入率
B · 训练类(SFT / RL)微调模型 + 训练与评测记录数据质量与来源、超参依据、是否验证了遗忘与 reward hacking数据量、LoRA rank/alpha、评测提升点数、训练成本(GPU 小时)
C · 工程类(推理 / 部署)可压测的推理服务 + 容量报告吞吐与延迟的真实性、压测方法、成本推导吞吐 tok/s、TTFT/TPOT、p50/p95/p99、显存占用、每百万 token 成本
✔
三类项目的分工:不必三个都做成「大而全」。合理的组合是:一个能证明你会做系统(C)、一个能证明你会做评估(A)、一个能证明你会调模型(B)。三者互相背书,任何一类被追问时都可以引到另一类上,形成「这个人真的做过端到端」的整体印象。

1.2 作品集的五条纪律

必须能一键跑起来
提供 Dockerfile 或一条命令的启动脚本、锁定依赖版本、README 写清前置条件。跑不起来 = 不存在。最好再提供一个不需要 API key 的离线 demo 路径。
必须有数据结果
哪怕只有 100 条样本的评测集,也要有指标、有对比基线、并注明样本量(因为 100 条样本上的 3% 差异通常不显著)。
必须写清技术取舍
为什么选混合检索而不是纯向量、为什么用 INT8 而不是 INT4、为什么这里不上 Agent。展示判断力比展示技术堆叠更重要。
必须有失败分析
写一节「什么情况下会失效、为什么、目前怎么缓解」。这恰恰是资深工程师与新手最明显的区别——新手只说它能做什么。
必须开源且写好 README
放上 GitLab / HuggingFace。开源项目本身就是被发现的渠道:维护者、贡献者、star 你的工程师,都可能是内推来源。
bash# 可复现性的最低标准:一条命令 + 锁定的依赖
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.lock          # 不是 requirements.txt,要锁版本
docker compose up -d                       # 向量库 / 缓存 / 服务
python scripts/demo.py --q "犹豫期可以退保吗" --offline   # 无需 API key 也能跑
# 自检三问:① 新容器里能跑通吗?② 没网能跑吗(离线 demo)?③ 跑完全程多久?
# 经验:给出「约 3 分钟、需 8GB 显存、有无需 GPU 的降级路径」比炫技更得分。
✔
把「可复现」当门禁而非口号:一个被反复验证的结论:「能跑」比「厉害」更稀缺。评审者首先验证的是「它能不能跑」,其次才看「它有多强」。把启动耗时、显存需求、是否需要 API key 写清,是把访问者从「怀疑」拉向「信任」的最低成本方式。

1.3 让仓库「可被验证」:README 的六段结构

招聘方打开一个仓库,平均只停留 90 秒:先扫 README,觉得靠谱才点开代码。所以 README 不是附属文档,而是项目的门面与唯一的「自我推销」位置。下面这个六段结构经过反复验证,能覆盖评审者的全部核心疑问。

text# 项目名 —— 一句话说明它解决什么问题(带上最关键的数字)

## 1. 它是什么 / 为什么做
   业务场景、输入输出形态、为什么值得做。2–4 句,不看代码也要能懂。
   反例:本项目使用了 RAG、Agent、vLLM 等先进技术。(没说解决什么问题)

## 2. 快速开始(目标是陌生人 10 分钟内跑通)
   git clone <repo> && cd <repo>
   cp .env.example .env          # 只有这一步需要填 key
   docker compose up -d          # 起向量库 / 缓存 / 服务
   python scripts/demo.py --q "犹豫期可以退保吗"
   - 优先提供一个无需外部 API 的离线 demo 路径,把验证门槛降到最低
   - 写清「需要什么硬件 / 显存 / 大约多久」,避免对方跑到一半失败

## 3. 架构与数据流
   [架构图]  客户端 -> 网关(鉴权限流) -> 检索(混合召回) -> 重排 -> 生成 -> 评测埋点
   每个框一句话说明职责与关键选型

## 4. 评测结果(最重要的一节,也是最多人缺失的一节)
   | 指标              | 基线   | 本项目 | 样本量 | 说明                    |
   | 检索 Top-5 命中率 | 62%    | 89%    | 380    | 混合检索 + 交叉编码器重排 |
   | 答案忠实性        | 71%    | 93%    | 160    | LLM-as-Judge,与人工校准  |
   | P95 端到端延迟    | 4.8s   | 2.1s   | 500 次 | 前缀缓存 + 重排批处理     |

## 5. 关键技术决策(3 条,每条一句话说清取舍与代价)
   - 用混合检索而非纯向量:稀疏召回补上专有名词与条款号,代价是多一个索引
   - 用 INT8 而非 INT4:精度只掉 0.4 分而速度提升 1.6 倍,INT4 掉 3 分不可接受
   - 不用 Agent 做主体:任务边界清晰,流水线更可控、延迟更低、可测

## 6. 已知限制与后续计划
   - 表格类条款(费率表)解析会丢结构,目前靠人工校对,计划引入版面模型
   - 单轮问答稳定,多轮追问超过 5 轮后上下文压缩会丢细节
text## 评测方法(让数字可信的四要素)
   - 数据集:自建 380 条(来源、构造方式、是否含难例)
   - 指标定义:Top-5 命中率 = 前 5 段含正确条款的比例
                 忠实性 = LLM-as-Judge 与人工校准(kappa=0.81)
   - 对照基线:纯向量检索 / BM25 / 混合检索
   - 显著性:n=380 时 3% 内的差异视为不显著,只报告 >5% 的改进

## 复现实验(能一键重跑评测)
   make eval            # 自动跑评测集并生成本节表格
   -> 输出 reports/eval.json + 本 README 第 4 节的表格
# 关键:把「评测方法」独立成一节,评审者才能判断数字是否可信;
#       能一键重跑评测的项目,可信度高于只有一张静态表格的项目。
text# 「陌生人 10 分钟跑通」的最小命令集(写进 README 的 Quick Start)
git clone <repo> && cd <repo>
python -m venv .venv && . .venv/bin/activate
pip install -r requirements.lock                  # 锁定版本,不用 requirements.txt

python scripts/demo.py --q "犹豫期可以退保吗" --offline      # 离线可跑,无需 key
python scripts/eval.py --suite data/eval_380.jsonl           # 复现 README 第 4 节数字
python scripts/bench.py --rps 40 --duration 120 --warmup 30  # 压测 p50/p95/p99

# 一个「可被验证」仓库的目录结构(评审者扫一眼就知道你是否专业)
repo/
  README.md              # 六段结构,第 4 节是评测结果
  requirements.lock      # 锁定版本,保证可复现
  Makefile               # setup / demo / eval / bench 一键入口
  data/eval_380.jsonl    # 评测集(含来源与构造说明)
  scripts/               # demo.py / eval.py / bench.py
  reports/eval.json      # 评测原始输出(每个数字可追溯)
  docs/decisions.md      # 关键技术决策记录(ADR 风格)

# 判据:评审者跑完上面 3 条命令,就能看到 demo 结果、评测表格、压测数据;
#       「make eval 能复现 README 里每一个数字」是可信度的硬标准。
# 经验:在 README 写清硬件需求与预计耗时(如「约 3 分钟 / 8GB 显存 / 有 CPU 降级路径」),
#       能显著降低对方中途放弃的概率。

1.4 三个项目的技术深度阶梯

每个项目都要准备好被追问三层。下面列出各项目「必须能脱口而出」的问题——答不上来,说明这个项目只是「跑通」而非「掌握」。

项目必须能答出的问题(第一层)会被追问的深水区(第二、三层)
A · 应用类chunk 怎么切?嵌入模型选谁?混合检索的融合公式是什么?为什么这个 chunk size?切小了召回多但上下文碎,你怎么权衡?重排带来了多少收益、多少延迟?RRF 的 k 取多少、为什么?评测集怎么保证不偏?忠实度指标如何定义?
B · 训练类LoRA 的 rank / alpha 取多少?SFT 数据多少条?用什么评测?为什么这些层加 LoRA 而不是全加?rank 翻倍会怎样?DPO 的 beta 怎么定?奖励曲线出现下降你怎么判断是 reward hacking 还是正常波动?灾难性遗忘你怎么验证的?
C · 工程类吞吐多少?P95 延迟多少?量化到什么精度?连续批处理为什么比静态批快?你的压测是开环还是闭环?容量拐点在哪、依据是什么?KV Cache 占了多少显存、怎么算的?每百万 token 成本怎么推出来的?如果 QPS 翻十倍先动哪一层?
✔
一个自查方法:让同伴(或另一个 AI)只读你的 README,然后向你连续追问 10 分钟。凡是需要你「回去翻代码才能答」的问题,都说明你在那块理解不足——把它补进 README 的第 5 节。能被追问三层而不慌的项目,一个就够拿 offer。
python# 项目深挖自测:给每个项目的三层追问打分(0=答不出,1=含糊,2=清楚)
# 用法:对每个项目逐题自评,任何一层平均低于阈值就先补 README 再投
PROJECTS = {
  'A_RAG_Agent': {
    'L1_事实': ['语料 2.4 万字', '评测集 380 条', 'Top-5 命中率 62%->89%'],
    'L2_取舍': ['混合检索 vs 纯向量', '交叉编码器重排的延迟代价', 'RRF 的 k 取 60 的原因'],
    'L3_边界': ['长表格 chunk 碎裂', '幻觉导致引用错', '成本随并发上升的拐点'],
  },
  'B_SFT_DPO': {
    'L1_事实': ['SFT 1.2 万条', 'LoRA r=16 alpha=32', '偏好对 8k'],
    'L2_取舍': ['LoRA 层覆盖范围', 'DPO beta=0.1 的依据', '不用 PPO 的原因'],
    'L3_边界': ['reward hacking 迹象', '灾难性遗忘的验证', '数据分布漂移'],
  },
  'C_LLM_Serving': {
    'L1_事实': ['P95 延迟 2.1s', '吞吐 1800 tok/s', 'INT8 量化'],
    'L2_取舍': ['连续批 vs 静态批', '开环 vs 闭环压测', 'KV Cache 占用推导'],
    'L3_边界': ['拐点后延迟陡增', 'QPS x10 先崩在哪', '每百万 token 成本推导'],
  },
}

def score(answers):                     # answers: 每题 0/1/2
    n = len(answers)
    return round(sum(answers) / (2 * n), 2)

for name, layers in PROJECTS.items():
    flat = [a for v in layers.values() for a in v]
    print(f'{name}: 题量={len(flat)}  满分={2 * len(flat)}')

# 判据:把每题填 0/1/2 后
#   L1 平均 < 1.5 -> 数字没记住,必被怀疑没做过
#   L2 平均 < 1.5 -> 只是跑通、没有判断,最多到一面
#   L3 平均 < 1.0 -> 及格线以下,项目会被判定为「玩具项目」
# 目标:三个项目每层平均 >= 1.5,且至少一个项目 L3 >= 1.5(offer 级项目)

1.5 动手练习与自测

✔
本节练习判据:本节练习围绕「作品集能否被陌生人复现、能否扛住三层追问」展开。每题都给出可检验的判据——判据不达标就回去改 README,而不是继续往前学。
  1. 可复现性门禁:在仓库里加 make setup && make demo,让一位没接触过项目的同伴在 10 分钟内跑出结果。判据:命令一次跑通、无需你口头解释;失败则回到 README 补依赖与数据获取步骤。
  2. 数字可追溯:为 README 里每一个百分比标注「来自哪份评测报告、样本量多少」。判据:任挑一个数字,你能在 30 秒内定位到生成它的脚本与原始输出。
  3. 三层追问自测:用上面的打分脚本对三个项目各评一次。判据:三个项目 L1 平均 ≥ 1.5;至少一个项目 L3 平均 ≥ 1.5。
  4. 对照基线:你的项目是否有一个「最简单的基线」(纯向量检索 / 未微调原模型 / 单卡无批处理)?判据:README 有一行明确写出「基线 = X,本方法 = Y,改进 = Z 个百分点」。
  5. 成本与规模:写下项目在「数据或流量 ×10」时最先崩的一环及缓解方案。判据:能说出具体瓶颈(显存 / 检索延迟 / 数据清洗耗时)而不是「加机器」。
  6. 作品集主页:把三个项目汇总成一页,含架构图、关键技术、量化结果与三个最重要的技术决策。判据:非同行也能在 2 分钟内明白你做了什么、做得多好。
门禁通过判据
可复现make setup && make demo 在新环境一次跑通,无需口头解释
数字可追溯任挑一个百分比,30 秒内定位到脚本与原始输出
三层追问三个项目 L1 均 ≥ 1.5;至少一个项目 L3 ≥ 1.5
基线对照README 明写「基线 = X,本方法 = Y,改进 = Z 个百分点」

2. 简历与项目描述

知识结构图 · 简历与项目描述
简历与项目描述3 大知识域 · 16 个知识点
项目描述公式做了什么 + 关键技术量化结果 62%→89%技术取舍 / 难点锚点优先级一页为宜
学习路径
  1. 读 2.1:用 做了什么+技术+量化结果+取舍 公式重写一条项目描述
  2. 给结果补锚点语义(如 62%→89% 的对照)
  3. 完成 2.3 自测:对照好坏写法自评
  4. 对接 M17:产出 STAR 结构的简历条目
✔ 每条描述都能用数字验证并引出追问
核心知识点详解
  • 公式:做了什么 + 关键技术 + 量化结果 + 取舍:例如「用 vLLM 部署 7B 并扫 max-num-seqs 档,P99 从 4.2s 降到 1.1s、QPS 从 12 提到 35」。有前因后果,能引出追问。
  • 量化结果要锚点:写「准确率提高」没意义,要有基线:62%→89%、成本降 2.1×、TTFT 降 5×。数字 + 对照 = 可信。
  • 常见坑:写负责 XX 系统:没有数字、没有你的决策,等于给面试官一个不够格的靶子。逐条带锚点数字重写。
简历六模块个人信息 + 仓库链接技能清单关键词项目经历占一半工作经历教育 / 论文弱化开源 / 技术写作
学习路径
  1. 读 2.2:按六模块搭建简历骨架
  2. 填技能清单关键词并与仓库链接对齐
  3. 完成 2.3 自测:让项目经历占一半篇幅
  4. 对接 M17:产出简历条目 + 项目讲解稿
✔ 一页简历结构完整、项目占一半且可深挖
核心知识点详解
  • 六模块强弱顺序:个人信息 + 仓库链接 → 技能清单关键词 → 项目经历(占一半)→ 工作经历 → 教育/论文弱化 → 开源/技术写作。重点不是放最前,而是分配最厚的篇幅。
  • 项目经历占一半:招聘方看简历平均 30 秒,项目部分必须最厚、最可深挖,其余模块短而精。
  • 常见坑:把教育放最前:工作几年还排教育在前,浪费最宝贵的前 30 秒。重点顺序要服务求职目标。
排序与关键词按岗位相关性排序关键词对齐 JD ≥60%精通只留能讲 20 分钟每条留追问钩子非科班不解释
学习路径
  1. 读 2.2:按岗位相关性给简历模块排序
  2. 核对关键词与 JD 对齐度(≥60%)
  3. 完成 2.3 自测:只留能讲 20 分钟的精通项
  4. 对接 M17:按目标 JD 定制简历版本
✔ 关键词对齐 JD 且每个精通项都能讲 20 分钟
核心知识点详解
  • 关键词对齐 JD ≥60%:把 JD 里的技术词(vLLM、RAG、量化、P99、K8s)写进技能清单与项目描述,对齐率至少 60%,过机器初筛才有面试。
  • 每条留追问钩子:让面试官自然追「这个数字怎么来的」。精通只留能讲 20 分钟的项,其余如实降级;非科班不必在前面解释,用项目证明。
  • 常见坑:技术栈一大堆:把看过的都写上、被追三层就崩。只留经得起深挖的项,删掉讲不了的。
学习路径

2.1 一条合格的项目描述

公式:做了什么 + 用了什么关键技术 + 量化结果 + 技术取舍 / 难点。避免「负责 AI 相关开发」这种无法验证、也无法引出追问的表述。

text# 差的写法
负责公司知识库问答系统的开发,使用了大模型与 RAG 技术,效果良好。

# 好的写法
- 从零搭建保险条款问答系统(RAG + Agent,2.4 万字语料 / 380 个条款文档):
  采用「向量检索 + BM25 混合召回 + 交叉编码器重排」,将 Top-5 命中率从 62% 提升至 89%;
  答案忠实性(自建 160 条评测集,LLM-as-Judge 与人工校准)从 71% 提升至 93%,
  引用正确率 96%。加入 3 类高风险工具的审批门禁与全链路 tracing,
  线上人工介入率从 18% 降至 4%。

# 好的写法的四个特征:
#  1) 有具体规模(多少文档 / 多少评测用例)—— 说明你真的做过
#  2) 有前后对比数字(62% -> 89%)—— 说明你的改动真的有效
#  3) 有指标定义(命中率、忠实性、引用正确率)—— 说明你懂评估
#  4) 有工程细节(审批门禁、tracing)—— 说明你不只是会调 API
text# 简历条目自检:每条项目描述都要能通过下面 5 个断言
# 断言 1 有规模:句子含具体数字(文档数 / 样本量 / 请求量 / 参数规模)
# 断言 2 有基线:明确「从 X 提升到 Y」,而不是只写「效果良好」
# 断言 3 有指标定义:命中率 / 忠实性 / P95 延迟 / 每百万 token 成本 …
# 断言 4 有取舍:写出关键技术选择的代价(延迟、成本、复杂度)
# 断言 5 有钩子:留下 1-2 个你想被追问的关键词(前缀缓存 / 重排 / GQA)

# 反例 -> 正例
负责公司知识库问答系统的开发,使用了大模型与 RAG 技术,效果良好。
- 从零搭建保险条款问答(RAG + Agent,380 个条款文档,自建 160 条评测集):
  混合检索(向量 + BM25)加交叉编码器重排,Top-5 命中率 62% -> 89%;
  懒加载加前缀缓存把 p95 从 3.4s 降到 2.1s;每千次请求成本 $1.9。

# 一句话公式
做了什么 + 用了什么关键技术 + 量化结果(基线 -> 提升)+ 技术取舍 / 难点

2.2 简历的六个模块与排序策略

模块作用常见错误
个人信息联系方式 + GitLab / 博客链接写身高体重、政治面貌、无关证书;GitLab 链接放在最末尾
技能清单给关键词匹配用(很多公司先做机器筛)写「精通」但答不出细节;罗列 20 个名词稀释重点
项目经历主战场,占篇幅一半以上只写职责不写结果;三个项目写得一模一样没有层次
工作经历证明工程素养与协作能力只列职责清单,没有产出与影响
教育 / 论文加分项而非必需,没有就弱化用大段篇幅解释「非科班」——反而放大了短板
开源 / 技术写作差异化项,最容易被忽略的加分位有 GitLab 却不写链接;有博客却不挑最相关的三篇
⚠
两个会被直接扣分的写法:① 技术名词堆砌——「精通 PyTorch / TensorFlow / JAX / vLLM / SGLang / Kubernetes / K8s / CUDA / Triton」,面试官随机挑两个就能问倒你;② 无法验证的成果——「提升系统性能 300%」却不说什么指标、什么基线。宁少勿虚。
python# 简历关键词覆盖度自检:把目标 JD 与简历都转成小写文本后比对
JD_KEYWORDS = ['rag', 'agent', 'mcp', 'evaluation', 'vllm', 'sglang',
               'quantization', 'lora', 'grpo', 'distributed', 'kubernetes',
               'tensorrt', 'kv cache', 'sft', 'dpo']

RESUME = '''负责知识库问答系统;使用 rag 与 agent;
用 vllm 部署并做 quantization;用 lora 做 sft。'''

def coverage(jd, resume):
    r = resume.lower()
    hit = [k for k in jd if k in r]
    miss = [k for k in jd if k not in r]
    return hit, miss

hit, miss = coverage(JD_KEYWORDS, RESUME)
print(f'覆盖 {len(hit)}/{len(JD_KEYWORDS)}: {hit}')
print(f'缺失: {miss}')
# 示例输出:覆盖 6/15: ['rag','agent','vllm','quantization','lora','sft']
#           缺失: ['mcp','evaluation','sglang','grpo','distributed','kubernetes','tensorrt','kv cache','dpo']

# 判据:目标岗位 JD 的核心关键词应覆盖 >= 60%(机器筛常按此打分);
# 但缺失的关键词不要硬凑——要么补真实经验,要么在简历里不提。

2.3 动手练习与自测

✔
本节练习判据:简历是「可被追问的承诺」。本节练习要求你把每一条都改到经得起三层追问,而不是写得漂亮。
  1. 改写一条描述:挑你现有一句最弱的项目描述,按「做了什么 + 关键技术 + 量化结果 + 取舍」重写。判据:新版至少含 2 个数字、1 个基线、1 个取舍,且不超过 3 行。
  2. 关键词对齐:把目标岗位 JD 复制出来,用上面的脚本算出覆盖率。判据:核心关键词覆盖 ≥ 60%;未覆盖的要能区分「该补经验」还是「本就不相关」。
  3. 一页裁剪:把简历裁到一页,删掉所有不能被追问的内容。判据:删完后仍保留 3 个项目、每项目 ≥ 2 个量化结果,且有开源链接。
  4. 方向微调:为「应用 / Agent」与「推理 / 基础设施」两个方向各做一版,调整项目排序与突出侧面。判据:两版第一屏内容明显不同,且各自与该方向 JD 关键词最匹配。
  5. 「精通」审查:把简历里所有「精通 / 熟悉」列出来,逐个自问「我能不能讲 20 分钟」。判据:讲不到 20 分钟的一律降级为「有实践经验 / 了解」。
条目通过判据
描述改写≥ 2 个数字 + 1 个基线 + 1 个取舍,且不超过 3 行
关键词对齐目标 JD 核心关键词覆盖 ≥ 60%
一页裁剪保留 3 个项目、各 ≥ 2 个量化结果、有开源链接
方向微调两版第一屏内容不同,且各匹配对应 JD

3. 面试体系与答题结构

知识结构图 · 面试体系与答题结构
面试体系与答题结构5 大知识域 · 29 个知识点
四类面试环节编码 / 手写实现八股原理四段法项目深挖三层系统设计六步STAR 行为面
学习路径
  1. 读 3.1:理解编码 / 原理 / 项目 / 系统设计 / 行为五类环节的重点
  2. 对每类环节写下准备清单并各模拟一次
  3. 完成 3.6 自测:用原理四段法答一道题
  4. 对接 M17:把讲解稿切成能应对各环节的话术
✔ 能按环节分配准备时间且每类都有可复用模板
核心知识点详解
  • 四类重点:编码/手写实现(注意力、LoRA、KV 估算);原理题用四段法(定义→因果→数字→边界);项目深挖三层;系统设计六步。
  • 每类一套模板:把每类都准备可复用结构、各模拟一次,提前找到表达含糊处,把准备时间分配到最弱环节。
  • 常见坑:只练编码不练原理:权重失衡,考原理 + 项目时露怯。四类均衡准备,准备多少提升多少。
系统设计六步澄清需求与约束整体架构逐层选型取舍容量与成本估算质量与安全演进路线
学习路径
  1. 读 3.2:背熟澄清约束 / 架构 / 选型 / 容量 / 质量 / 演进六步
  2. 拿 hamauls 当素材完整跑一遍六步框架
  3. 完成 3.6 自测:做一次容量与成本估算
  4. 对接 M17:用 5 分钟讲清最难的三个技术决策
✔ 能对任意设计题走完六步并给出可检验的估算
核心知识点详解
  • 六步框架:澄清约束 → 定架构 → 选技术 → 容量/成本估算 → 质量与可靠性 → 演进与扩展。步骤顺序不能跳。
  • 容量估算要做:给出显存、卡数、QPS、成本的可检验估算:权重 + KV + 并发换算副本数,面试官要看到你算过数。
  • 常见坑:上来就画架构:不澄清需求就给方案是最大失分。先问清 QPS、P99、数据量、可用性,再动手。
手写实现清单Scaled Dot-Product AttentionLoRA 层KV Cache 估算GRPO 组相对优势DPO 损失top-k / top-pRRF 融合
学习路径
  1. 读 3.3:逐项默写 Scaled Dot-Product Attention / LoRA 层 / KV Cache 估算
  2. 限时在白板写 top-k / top-p 与 RRF 融合
  3. 完成 3.6 自测:当场写 GRPO 与 DPO 损失
  4. 对接 M17:把这些写进面试脚本
✔ 清单每一项都能在 10 分钟内无注释写出
核心知识点详解
  • 核心清单:Scaled Dot-Product Attention、LoRA 层、KV Cache 估算、top-k/top-p 采样、RRF 融合、GRPO/DPO 损失,每一项 10 分钟内无注释默写。
  • 数值稳定是底线:attention 要先减 max 再 softmax、mask 用 −inf 而非 0——这是工程能力最直接的露出。
  • 常见坑:只背代码不写:看着会写和能白板默写是两回事。限时冷启动默写,直到肌肉记忆。
高频原理题RMSNorm + Pre-LNGQA 省显存RoPE 长度外推warmup 1%–3%DPO vs PPO连续批处理decode 为何 memory-bound
学习路径
  1. 读 3.4:逐个过 RMSNorm / GQA / RoPE / warmup / DPO vs PPO
  2. 为每道原理题写作答提纲
  3. 完成 3.6 自测:随口解释 decode 为何 memory-bound
  4. 对接 M17:用本项目实例支撑每条原理讲解
✔ 高频原理题随口能答且能用自己的项目举例
核心知识点详解
  • 高频十题:RMSNorm + Pre-LN、GQA 省显存(KV 缩到 1/2–1/4)、RoPE 长度外推、warmup 1%–3%、DPO vs PPO、decode 为何 memory-bound,每题能随口答。
  • 用自己的项目支撑:每题配一个本项目实例:谈 GQA 就说「我压测发现长上下文 KV 是瓶颈,就量化 KV」。有实例才不像背八股。
  • 常见坑:只背标准答案:答案对但不迁移,被追问就崩。把每题跟「我项目里怎么发生」绑死。
项目深挖三层L1 事实与规模L2 决策与取舍L3 边界与失败常见失分表现
学习路径
  1. 读 3.5:对项目过 L1 事实 / L2 取舍 / L3 边界失败三层追问
  2. 为每个追问准备数据与数字答案
  3. 完成 3.6 自测:录一段模拟深挖问答
  4. 对接 M17:能答出如果重做你会改什么
✔ 能扛住三轮追问并说出真实的取舍与失败
核心知识点详解
  • 三层追问:L1 事实与规模(数据多少、模型多大)、L2 决策与取舍(为什么不是 X)、L3 边界与失败。常见失分:答不出数字、辩解、说没失败。
  • 准备好数字:每个追问备好数据:改了哪个参数、前后对比多少、怎么验证的。
  • 常见坑:答不出如果重做改什么:这道题几乎必考。提前想至少 3 个可改进点,能说清自己看到的问题。
学习路径

3.1 四类环节与准备重点

环节考察什么准备方式典型时长
编码 / 手写实现工程基本功与对原理的掌握程度LeetCode 中等难度 + 手写注意力 / LoRA / KV 估算 / DPO 损失45–60 分钟
八股原理概念是否真理解,能否推到细节按「是什么 / 为什么 / 怎么用 / 什么时候不要用」四段准备每个知识点30–45 分钟
项目深挖是不是真的做过,能否解释取舍与失败每个项目准备三层追问:架构决策、指标来源、失败模式与修复30–60 分钟
系统设计需求抽象、方案取舍、容量与成本估算用固定六步练习 5–8 个经典题,每题写出量化估算45–60 分钟
行为面 / 文化协作、主动性、学习能力、稳定性准备 5 个 STAR 故事:最有挑战的项目、一次失败、一次技术决策、一次冲突、一次快速学习30 分钟
✔
面试中最能拿分的三件事:① 主动说出权衡——「我选 A 是因为…而 B 的代价是…」,展示判断而非记忆;② 主动说出失败与限制——「这个方案在 XX 情况下会失效,我们的缓解措施是…」;③ 给出量化估算——被问设计题时先问清规模,再当场算显存 / 卡数 / 成本 / QPS。这三点是资深候选人最明显的标志,因为它们无法靠背题获得。
bash# 用纯文本维护一份面试准备看板(放进仓库 docs/interview.md)
# 每轮面试前打开,面完 24 小时内更新

## 待办
- [ ] 手写清单 6 项独立写出(注意力 / LoRA / KV 估算 / GRPO 优势 / DPO / softmax)
- [ ] 原理题四栏表填满 30 个知识点
- [ ] 系统设计 5 题,每题写到第 4 步容量估算
- [ ] 项目 A/B/C 各做一次三层追问自测

## 进行中
- [ ] 项目 C:补齐「开环压测」与「容量拐点」两节 README

## 已完成
- [x] 简历两版(应用方向 / 基础设施方向)
- [x] 作品集主页上线

# 统计已完成条数
grep -c '\[x\]' docs/interview.md
# 经验节奏:练手 3-5 家 -> 复盘修正表达 -> 重点公司 8-12 家 -> offer 比较

3.2 系统设计题答题框架(六步)

澄清需求与约束
用户量、请求量、输入输出长度分布、延迟 SLA、成本上限、数据合规与私有化要求。这一步既体现需求抽象能力,也避免整题答偏。
给出整体架构
从客户端到模型到数据的完整链路,标出关键组件与数据流。先画框再填细节——不要一上来就讨论某个组件的实现。
逐层技术选型与取舍
检索方案、模型选型(大 / 小 / 路由)、部署方式(商业 API / 自托管)、缓存策略。每项都说清「为什么是它、代价是什么」。
做容量与成本估算
用真实数字估算:显存占用、需要几张卡、每千次请求成本、p95 延迟。这是区分度最高的一步,也是最多人跳过的一步。
质量与安全
评测体系、可观测与 tracing、限流与降级、提示注入防御、人工审批、合规与留痕。
演进路线
说明如果流量增长 10 倍、延迟要求再严一倍、或要支持多模态,架构怎么改。体现长期视角。

第 4 步最容易被答成一句空话(「加机器就行」)。下面给出一个可以当场口算的估算模板——面试时只要能把这张表写出来,这一轮基本就稳了。

python# 题目:设计一个日请求 100 万次的大模型问答服务,估算资源与成本
import math

REQ_PER_DAY = 1_000_000
RPS_AVG     = REQ_PER_DAY / 86_400          # ≈ 11.6 请求/秒(平均)
PEAK_FACTOR = 4                              # 峰值系数,业务通常取 3–5
RPS_PEAK    = RPS_AVG * PEAK_FACTOR          # ≈ 46.4 请求/秒(峰值)

IN_TOK, OUT_TOK = 800, 300                    # 输入 / 输出 token 长度(来自线上分布)

# 单卡吞吐必须来自压测,不能拍脑袋。经验量级:
# 7B 模型 / FP16 / A100-80G / 连续批处理 + GQA + 前缀缓存
#   满足 p95 < 3s 时,约 1500–2500 output token/s(强依赖输入长度与并发)
SINGLE_GPU_OUT_TOK_S = 2000

RPS_PER_GPU = SINGLE_GPU_OUT_TOK_S / OUT_TOK        # ≈ 6.7 请求/秒/卡
GPUS        = math.ceil(RPS_PEAK / RPS_PER_GPU)      # ≈ 7 张
GPUS_HA     = GPUS + max(1, GPUS // 5)               # N+1 冗余 ≈ 9 张

GPU_USD_HOUR = 2.5                                    # 云上 A100 量级单价
MONTH_COST   = GPUS_HA * GPU_USD_HOUR * 24 * 30       # ≈ 16,200 美元/月

MONTHLY_OUT_TOK = REQ_PER_DAY * 30 * OUT_TOK          # 输出 token 总量
PER_M_TOK = MONTH_COST / (MONTHLY_OUT_TOK / 1_000_000)  # ≈ 1.8 美元/百万 output token

# 面试时还要主动补三句:
#  1) 这些数字里哪个最不确定 —— 单卡吞吐(依赖压测),所以要说明测量条件
#  2) 能怎么把成本压下来 —— 前缀缓存(命中率高可省 30%+ prefill)、
#     语义缓存(重复问题占比通常 10–30%)、模型路由(简单问题走小模型)
#  3) 什么时候该用商业 API —— 峰值稀疏或总量不大时,API 的弹性优于自建固定成本

经典练习题:① 设计企业内部知识库问答(10 万文档 / 5000 员工 / 私有化部署);② 设计能跑长任务的 Agent 平台(工具注册、审批、可观测、断点恢复);③ 设计日请求 100 万次的推理服务(含成本优化与降级);④ 设计多模态文档处理流水线(含复杂版面);⑤ 设计客服 Agent 的评测与回归体系。每题都按六步写一遍,并强制写上第 4 步的数字。

text# 系统设计六步答题模板(把每步写成一句话,面试时照这个节奏走)
1. 澄清:用户量 __ / 请求量 __ / 输入输出长度 __ / 延迟 SLA __ / 成本上限 __ / 私有化 __
2. 架构:客户端 -> 网关(鉴权/限流) -> 编排 -> 检索/工具 -> 模型(路由) -> 缓存 -> 观测
3. 选型:检索=? 模型(大/小/路由)=? 部署(API/自托管)=? 缓存(前缀/语义)=?
        每项补一句「为什么是它、代价是什么」
4. 估算:显存=? 卡数=? 每千次请求成本=? p95=?
5. 质量与安全:评测集 / tracing / 限流降级 / 注入防御 / 审批 / 合规留痕
6. 演进:流量 x10 / 延迟要求 x2 / 多模态 时,架构怎么改

# 示例(企业内部知识库问答 5000 员工 / 10 万文档 / 私有化)
估算(粗算,口算级):
  10 万文档 x 平均 6 chunk = 60 万 chunk;
  向量索引 60 万 x 1024 维 x 4B ≈ 2.4 GB(HNSW 常驻内存,单机可放);
  Qwen3-14B INT4:权重约 8-9 GB,KV Cache 单请求 4k 上下文约 0.4 GB;
  A100-80G 单卡 2 并发稳妥,4 并发建议 TP=2;日均约 8000 次问答,单卡足够。
  延迟预算:检索 80ms + 重排 120ms + 生成 1.8s ≈ 2.0s,满足 p95 < 3s。

3.3 手写实现清单(必须能当场写出来)

python# 面试高频手写清单 —— 每一项都应能在 10 分钟内写出核心逻辑

# 1) Scaled Dot-Product Attention(含因果掩码)
def attention(Q, K, V, mask=None):
    d_k = Q.shape[-1]
    scores = Q @ K.transpose(-2, -1) / d_k ** 0.5
    if mask is not None:
        scores = scores.masked_fill(mask == 0, float("-inf"))
    w = scores.softmax(dim=-1)
    return w @ V, w

# 2) 手写 LoRA 层(并说明参数量)
class LoRA(nn.Module):
    def __init__(self, in_f, out_f, r=8, alpha=16):
        super().__init__()
        self.A = nn.Parameter(torch.randn(r, in_f) * 0.01)
        self.B = nn.Parameter(torch.zeros(out_f, r))     # B 初始化为 0 -> 初始等价于原模型
        self.scale = alpha / r                            # 缩放,使 r 变化时效果稳定
    def forward(self, x):
        return x + (x @ self.A.T @ self.B.T) * self.scale

# 3) KV Cache 显存估算(容量规划必考)
def kv_bytes(layers, seq, kv_heads, d_head, batch=1, bytes_per=2):
    return batch * layers * seq * kv_heads * d_head * 2 * bytes_per

# 4) GRPO 组相对优势
def group_adv(rewards, eps=1e-4):
    r = torch.tensor(rewards, dtype=torch.float)
    return (r - r.mean()) / (r.std() + eps)

# 5) DPO 损失
def dpo_loss(p_chosen, p_rejected, r_chosen, r_rejected, beta=0.1):
    c = beta * (p_chosen - r_chosen)
    rj = beta * (p_rejected - r_rejected)
    return -torch.nn.functional.logsigmoid(c - rj).mean()

# 6) softmax(含数值稳定处理)—— 别在这里翻车
def softmax(x, axis=-1):
    x = x - x.max(axis=axis, keepdims=True)
    e = torch.exp(x)
    return e / e.sum(axis=axis, keepdims=True)

# 加分动作:写完后主动补充说明
#   · 这段的复杂度是多少
#   · 数值上有什么风险、怎么解决
#   · 生产环境会怎么优化(F.scaled_dot_product_attention / 融合内核)
⚠
手写题的三个隐藏考点:① 数值稳定性——softmax 必须先减最大值;注意力分数的 mask 要用 −∞ 而不是 0;② 形状与维度——面试官会问 d_k 从哪来、为什么除 √d_k、多头时怎么切分;③ 能否主动说优化——手写完后主动补一句「生产上会用 FlashAttention,因为它避免把 n×n 分数矩阵写入显存」。主动补充的这几句,往往就是通过与否的差别。
python# 高频手写续:采样与结果融合(都要能现场写出并解释)
import torch

def top_k_top_p_filter(logits, top_k=0, top_p=0.9, temperature=1.0):
    logits = logits / max(temperature, 1e-6)
    if top_k > 0:                                   # 只保留概率最高的 k 个
        kth = torch.topk(logits, top_k).values[..., -1, None]
        logits = torch.where(logits < kth, float('-inf'), logits)
    if top_p < 1.0:                                 # 核采样:按累积概率截断
        s, idx = torch.sort(logits, descending=True, dim=-1)
        cum = torch.cumsum(torch.softmax(s, dim=-1), dim=-1)
        cut = cum > top_p
        cut[..., 1:] = cut[..., :-1].clone()         # 移位:保留跨越阈值的那个
        cut[..., 0] = False
        s = s.masked_fill(cut, float('-inf'))
        logits = torch.empty_like(logits).scatter_(-1, idx, s)
    return torch.softmax(logits, dim=-1)

def rrf(rank_lists, k=60):                           # 混合检索的融合公式
    scores = {}
    for ranks in rank_lists:
        for pos, doc in enumerate(ranks, start=1):
            scores[doc] = scores.get(doc, 0) + 1.0 / (k + pos)
    return sorted(scores, key=scores.get, reverse=True)

# 预期:rrf([[1,2,3],[3,1,4]]) -> [1, 3, 2, 4]
#   doc1 两表都靠前:1/61 + 1/62 ≈ 0.0325(最高);doc3 次之 ≈ 0.0323
# 预期:top_p=0.9 通常保留 5-20 个候选;温度常用区间 0.7-1.0

3.4 高频原理题速查表

原理题的答题要求不是「说对名词」,而是说出因果链。下表列出最常被问的问题,以及回答里「必须触及的点」——缺了这些点,面试官会认为你只是背过。

类别高频问题回答里必须触及的点
架构为什么现代 LLM 用 RMSNorm + Pre-LN?RMSNorm 去掉均值中心化收益有限但省算力;Pre-LN 让残差通路保持恒等映射、梯度尺度稳定,深模型不必依赖复杂 warmup;代价是最终层表达略弱,需在末层补归一化
注意力GQA 为什么能省显存?KV 头数从 h 降到 g,KV Cache 与读取带宽同步降为 1/(h/g);对精度影响很小因为多 query 头共享 KV 的冗余度高;直接提升 decode 吞吐(decode 是带宽瓶颈)
位置RoPE 怎么做长度外推?旋转角与位置线性相关导致超出训练长度后分布外;位置插值压缩频率;NTK-aware / YaRN 对高低频分段处理;都需要少量长文本继续训练来对齐
优化为什么需要 warmup?训练初期二阶矩估计方差大、梯度方向噪声大,大学习率容易把参数带进坏区域;预热让统计量先收敛。经验值:占总步数 1–3%
后训练DPO 与 PPO 的本质区别?DPO 用重参数化把奖励隐式表达为策略与参考模型的 log 比,从而变成离线分类损失;PPO 在线采样、有探索、需额外训练奖励模型;DPO 便宜但不探索、对偏好数据分布敏感
后训练GRPO 为什么能去掉 Critic?同一 prompt 采样一组的奖励均值就充当基线,组内标准化得到优势;省掉价值网络(约等于省一半显存);代价是必须多次采样 rollout,且在不等长子轨迹场景假设失效
部署连续批处理为什么比静态批快?静态批要等整批中最长序列结束,短序列的算力被浪费;连续批按 token 迭代,序列一结束就补新请求进批,GPU 利用率与吞吐大幅提升;配合 PagedAttention 才能做显存层面的动态拼接
部署量化为什么能加速?decode 阶段是显存带宽瓶颈,权重读取字节数减半/减到 1/4 直接提升速度;代价是精度损失,且需要处理激活的离群值(SmoothQuant / AWQ 都在解决这个);通常权重量化比激活量化更安全
✔
准备原理题的正确方法:不要按「知识点列表」准备,要按「问题 → 因果链 → 数字 → 边界」四栏做一张表。每个知识点填四栏,填不满的说明还没掌握。这张表本身就是你的复习材料,也是面试前的最后一小时要看的东西。
高频问题(部署与推理方向延伸)回答里必须触及的点
为什么 decode 阶段是 memory-bound?每生成 1 token 只需约 2N FLOPs,但要读取全部权重(N x bytes);算术强度远低于 GPU 的 ops:byte 比,所以被显存带宽卡住。对策:量化、投机解码、提高并发(连续批处理)
PagedAttention 解决什么问题?传统 KV Cache 要求连续显存、按最大长度预留,内部碎片严重(实测浪费常达 60-80%);分页把 KV 切成固定大小 block、用 block table 间接映射,做到接近 0 浪费并支持共享前缀
FP8 与 INT8 的区别?FP8(E4M3) 动态范围大、对离群值更鲁棒、可直接走张量核;INT8 需要 per-channel scale,激活离群值处理成本高。Hopper / Blackwell 上 FP8 是训练与推理低精度首选
TP 与 PP 怎么取舍?TP 每层都要通信,量大、适合单机 NVLink(延迟低);PP 通信量小但有空泡,适合跨机。大规模常组合为 TP(机内) + PP(机间) + DP
怎么评测工具调用能力?不能只看文本相似度;要测「该调时是否调、参数是否正确、不该调时是否忍住」。用带 ground-truth 工具调用的评测集,报告调用准确率与幻觉调用率
如何防 prompt 注入?输入与指令分层、工具白名单与最小权限、输出侧校验、高风险动作走人工审批、对检索内容标注「这是数据不是指令」;再把注入样本做成回归测试集
python# 把原理题按「四栏」结构化:填不满的栏目就是你的短板
KNOWLEDGE = {
  'continuous_batching': {
    'what':  '按 token 迭代调度,序列一结束就补新请求进批',
    'why':   '静态批要等最长序列结束,短序列算力被浪费',
    'how':   'vLLM/SGLang 默认开启;调 max_num_seqs 平衡吞吐与延迟',
    'num':   '相比静态批吞吐常提升 2-4 倍;max_num_seqs 常取 256',
    'limit': '超长序列会拖慢整批;需配合 chunked prefill 与抢占',
  },
  'paged_attention': {
    'what':  '把 KV Cache 切成固定大小 block,用 block table 间接寻址',
    'why':   '连续分配按最大长度预留,实测内部碎片常达 60-80%',
    'how':   'block_size(如 16)需与内核对齐;支持前缀共享',
    'num':   '显存浪费接近 0;前缀缓存命中时可省 30%+ prefill',
    'limit': 'block 太小调度开销大、太大碎片多;需实测取平衡',
  },
}

def audit(kb):
    for name, cols in kb.items():
        empty = [c for c, v in cols.items() if not v]
        print(f'{name}: {"OK" if not empty else "缺 " + ",".join(empty)}')

audit(KNOWLEDGE)
# 判据:每题的 what/why/how/num/limit 都不能为空;
#   「num」栏空 = 没有量化认识;「limit」栏空 = 没理解边界条件。
# 目标:把 30-50 个高频知识点全部填满——这就是面试前最后要看的东西。

3.5 项目深挖的三层追问模型

项目深挖环节的提问逻辑是固定的三层结构。提前按这三层为每个项目准备好答案,这一轮就很难失分。

第一层:事实与规模
做了什么、多大规模、什么技术栈、指标多少。「多少文档 / 多少样本 / 多少 QPS」这类数字必须张口就有——答不出数字,面试官会立刻怀疑项目真实性。
第二层:决策与取舍
为什么这么选?备选方案是什么?代价是什么?例如「为什么用混合检索而不是纯向量」「为什么 INT8 而不是 INT4」「为什么不上 Agent」。这层考察判断力,也是最容易出彩的地方。
第三层:边界与失败
什么情况下会失效?怎么发现的?怎么缓解?如果数据量或流量 ×10 会先崩在哪?这层考察深度与反思能力,是资深候选人与新手的真正分界线。
常见失分表现面试官的解读改法
只讲做了什么,不讲为什么照着 README 背,理解不深每讲一个技术选择,主动补一句「备选是 X,代价是 Y」
所有问题都答「效果很好」没有真正评估过,或不敢给数字提前把指标与样本量背下来,哪怕数字不好看也照说
被问到失败就回避没做过真实的迭代,或者不诚实主动准备 1–2 个失败案例(模型不收敛、指标反降、成本失控)及修复过程
技术栈一口气说十个不聚焦,可能都不精只保留能讲三层的那几个,其余用「了解」
答完就停,不补充被动、缺主动性每答完一段主动补「这里还有个细节/权衡是…」,把节奏握在自己手里
text# 三层追问应答自检:把每个项目的答案写成三行,缺行的就是漏洞
项目 A(RAG + Agent)
  L1 事实:380 条款文档 / 160 条评测集 / Top-5 62%->89% / 引用正确率 96%
  L2 取舍:混合检索 vs 纯向量(召回 +12%,代价是索引复杂度上升);
           重排 +9%,代价 p95 +120ms;RRF 的 k=60 是经验默认
  L3 失败:长表格被切碎导致召回漏 -> 改按版面切;
           成本随并发非线性上升 -> 前缀缓存 + 语义缓存,降本约 35%

# 自检断言(每条为真才继续)
#   L1 行至少 3 个数字?            -> 否则被怀疑没做过
#   L2 行每个选择都带「代价是…」?  -> 否则被判定只会用、不会判断
#   L3 行有具体失败 + 修复闭环?    -> 这是资深与新手的真正分界
# 提醒:L3 一定要讲真实失败;编一个「完美项目」比讲一次失败更减分。

3.6 动手练习与自测

✔
本节练习判据:面试能力只能靠「输出」检验。本节练习全部要求限时、口头、可录音复盘,做完你会立刻知道哪一环是空的。
  1. 限时手写:10 分钟内默写 Scaled Dot-Product Attention(含 mask 与数值稳定)+ KV Cache 显存函数。判据:一次写对,且能解释 √d_k、mask 用 −∞ 的原因。
  2. 原理题四段:随机抽 10 个知识点,按「是什么 / 为什么 / 怎么用 / 何时不用」口述。判据:每题都能给至少 1 个数字,且第四段(边界)不空白。
  3. 系统设计限时:45 分钟内完成「日请求 100 万次问答服务」六步,必须写出显存 / 卡数 / 每百万 token 成本。判据:第 4 步有可复算数字,且明确标出最不确定的假设。
  4. 三层追问录音:让同伴对项目 C 连续追问 10 分钟并录音。判据:无「要回去翻代码」的回答;至少主动说出 1 个失败与 1 个权衡。
  5. 采样 / 融合实现:现场写出 top-k / top-p 与 RRF。判据:能说清 top_p 的累积概率截断逻辑,且 RRF 例子输出为 [1,3,2,4]。
  6. 复盘归因:每次模拟面试后写下「哪一问答得含糊」,并给出 48 小时内的补救动作。判据:含糊点在下一次模拟中不再出现。
练习通过判据
限时手写10 分钟写对注意力(含 mask / 数值稳定)+ KV 显存函数
系统设计45 分钟走完六步,第 4 步有可复算容量数字
三层追问录音无「要回去翻代码」的回答;至少 1 个失败 + 1 个权衡
复盘归因含糊点在下一次模拟中不再出现

4. 求职策略与持续学习

知识结构图 · 求职策略与持续学习
求职策略与持续学习4 大知识域 · 25 个知识点
岗位地图与投递应用 / Agent 工程算法 / 后训练推理 / 训练基础设施多模态 / 生成Evals / LLMOps投递漏斗 15–25%
学习路径
  1. 读 4.1:对照岗位地图定位自己的目标岗位类型
  2. 用投递漏斗(15–25%)规划渠道与节奏
  3. 完成 4.5 自测:写目标岗位清单与匹配证明
  4. 对接 M17:按岗位排版简历与讲解稿
✔ 能定位目标岗位并给出一份可产生面邀的投递计划
核心知识点详解
  • 六类岗位定位:应用/Agent 工程、算法/后训练、推理/训练基础设施、多模态/生成、Evals/LLMOps。先选一类主攻,再用作品匹配。
  • 投递漏斗 15–25%:面邀率一般 15–25%。投 100 家才有 15–25 个面试的基础量,渠道 + 节奏要规模化。
  • 常见坑:只投最想去的:没有练手机会、表达未经修正就消耗了宝贵机会。先用中等公司练手再冲刺目标。
12 周冲刺时间线W1–3 修作品 READMEW4 简历一页版W5 原理题四栏表W6 系统设计 5 题W7 投练手目标W8–9 面试复盘W12 offer 谈判
学习路径
  1. 读 4.2:把 W1–12 的冲刺拆进每周行动清单
  2. 对照 W4 简历一页 / W5 原理题 / W6 系统设计 5 题逐周推进
  3. 完成 4.5 自测:每周自测进度
  4. 对接 M17:让求职节奏与本里程碑收口同步
✔ 有可执行的周行动清单且每周有明确产出
核心知识点详解
  • W1–W12 关键节点:W1–3 修作品 README、W4 简历一页版、W5 原理题四栏表、W6 系统设计 5 题、W7 投练手目标、W8–9 面试复盘、W12 offer 谈判。
  • 每周有明确产出:时间线要能打勾:每周一个可交付物、进度可视化,防止战线拖长。
  • 常见坑:把求职拖成无限准备:「再学一周就投」的惯性永远学不完。时间线定死,到点必须投。
职业路径应用 / 工程型算法 / 训练型平台 / 基础设施型研究型第一年做完整一件事第二年形成标签
学习路径
  1. 读 4.3:对照四种职业路径选自己的方向
  2. 写下第一年做完一件完整事的目标
  3. 完成 4.5 自测:定义自己的标签与两年路线
  4. 完成本章自测:让路线与作品集方向一致
✔ 能说清选哪条路径与第一年的可交付里程碑
核心知识点详解
  • 四种路径:应用/工程型、算法/训练型、平台/基础设施型、研究型。按简历里最强的能力选主路径,别贪全。
  • 第一年做完一件事:第一年目标不是广而是深:把一件完整的事做到可交付(上线项目 / 可复现训练),第二年再形成个人标签。
  • 常见坑:一年换三个方向:标签靠「一件做完的事」堆出来,换来换去永远没有代表作。
持续学习机制论文追踪每周 1–2h每月最小复现每两周写一篇社区 issue / PR跟踪 JD 变化季度能力自评
学习路径
  1. 读 4.4:搭论文追踪 + 每月最小复现机制
  2. 每周投入 1–2h 追踪 + 每两周产出一篇
  3. 完成 4.5 自测:建立季度能力自评
  4. 完成本章自测:把机制固化到日历与模板
✔ 有一套可持续运转的学习节奏与输出清单
核心知识点详解
  • 固定节奏:论文追踪每周 1–2h、每月一个小复现、每两周写一篇、碎片参与社区 issue/PR、每季度一次能力自评。
  • 输出倒逼输入:「每两周写一篇」比「每天读十条」更有价值:写不出说明没吃透。把机制固化成日历与模板。
  • 常见坑:只输入不输出:追无数论文、从不落地与写作,能力增长难被看见。输出列进日历,不做就算逾期。
学习路径

4.1 岗位地图与投递策略

岗位方向核心要求适配背景准备重点
大模型应用 / Agent 工程Context Engineering / Harness / Agent / MCP / Evals后端、全栈、有系统经验阶段 13、14、15 + 项目 A
大模型算法 / 后训练预训练、SFT、RL 后训练、数据管线有训练资源或研究背景阶段 5–9 + 项目 B
推理 / 训练基础设施vLLM、CUDA、分布式、性能优化系统、运维、性能优化背景阶段 7(训练工程)、16 + 项目 C
多模态 / 生成模型VLM / DiT / 视频生成 / 语音CV、图形学、音频背景阶段 11 + 相关项目
Evals / LLMOps评估体系、可观测、质量工程测试、质量、数据背景阶段 15 + 项目 A 的评测部分
具身 / 自动驾驶VLA、世界模型、仿真、控制机器人、控制、自动驾驶阶段 12 + 仿真项目
text# 投递看板(docs/jobs.md,也可用飞书多维表格维护)
公司 | 岗位 | 渠道 | 投递日 | 阶段 | 下一步
-----|------|------|--------|------|------
A    | 大模型应用 | 内推 | 03-01 | 一面 | 约二面时间
B    | 推理基础设施 | 官网 | 03-03 | 笔试 | 刷 2 题
C    | 后训练算法 | 内推 | 03-05 | 待回复 | 一周后跟进
...

# 漏斗经验(AI 岗位,2026)
投递 15-25 家 -> 面试 8-12 家 -> 终面 4-6 家 -> offer 2-3 个
即 投递->面试 约 15-25%;面试->offer 约 20-30%
# 策略:先用 3-5 家练手目标修正表达,再投重点公司;练手目标不要用最想去的公司

4.2 12 周求职冲刺时间线

假设前面阶段已完成、三个项目已具备雏形,那么从「决定求职」到「拿 offer」的 12 周可以这样安排。这个节奏的核心是先修作品,再修表达,最后集中投递——顺序颠倒会浪费大量机会。

周次动作产出物
第 1–3 周补完三个项目的评测与 README,统一代码风格与可复现性三份达到「陌生人 10 分钟跑通」标准的仓库
第 4 周写简历(先写长版,再裁到一页),按 2–3 个岗位方向各做一版一页简历 × 2–3 个方向
第 5 周整理高频原理题表(四栏法),手写清单全部实现一遍原理题表 + 6 个手写实现都能独立写出
第 6 周系统设计题按六步框架练习 5 题,每题写出容量估算5 份系统设计答题笔记
第 7 周作品集主页上线;开始投递练手目标(3–5 家)作品集主页 + 第一批投递
第 8–9 周每场面试后 24 小时内复盘,修正表达与知识漏洞面试复盘记录 + 简历迭代
第 10–11 周投递重点公司(内推优先);并行做模拟面试重点投递清单 + 3 轮模拟复盘
第 12 周offer 比较与谈判;对失败场次做归因决策依据表 + 下一轮改进项
★
一条最容易被忽视的建议:面试复盘要当天做,并且要写下来「哪一问答得含糊」。含糊的地方就是你下次一定还会被问、还会答不好的地方。把每场面试当成一次带反馈的模拟考——不复盘的面试,等于白面。
text# 12 周冲刺清单(勾选式;每周只聚焦 1 个主产出)
W1-3  [ ] 项目 A/B/C README 补齐评测节,达到「陌生人 10 分钟跑通」
      [ ] 统一代码风格;加 make setup / make demo / make eval
W4    [ ] 简历长版 -> 一页版;按 2-3 个方向各做一版
W5    [ ] 原理题四栏表填满 30 个知识点;6 个手写实现全部默写一遍
W6    [ ] 系统设计 5 题(每题写到第 4 步容量估算)
W7    [ ] 作品集主页上线;投 3-5 家练手目标
W8-9  [ ] 每场面试 24h 内复盘,记录「答得含糊」的问题并修补
W10-11[ ] 投重点公司(内推优先);做 3 轮模拟面试
W12   [ ] offer 比较与谈薪;对失败场次做归因

# 判据:每周结束时能回答「本周的可交付物是什么」;答不出说明这周在空转。
# 反模式:先疯狂投递再回头修作品 —— 顺序颠倒会浪费前 20% 的宝贵机会。

4.3 职业路径与三年成长路线

路径日常在做什么适合什么人三年后大致位置
应用 / 工程型(最宽)设计 Agent 与 RAG 系统、做评测、上线与运维、和业务对齐有工程背景、喜欢端到端交付、能接受需求变动资深应用工程师 / Tech Lead,可独立负责一条产品线
算法 / 训练型数据管线、SFT 与 RL、实验设计与调参、模型评测有耐心做实验、能忍受高失败率、数学基础扎实算法工程师 / 高级算法,负责某个能力方向
平台 / 基础设施型推理优化、训练框架、调度与容量、可观测与成本喜欢性能与系统、对数字敏感、偏爱稳定性工作基础设施负责人,成为团队的成本与效率守门人
研究型(门槛最高)读论文、做实验、写论文与报告有研究训练、能接受长周期不确定性研究员 / 科学家,产出方法论而非系统
判断维度偏向应用 / 工程偏向算法 / 训练偏向平台 / 基础设施
最享受的环节端到端交付可用系统设计并跑通一个实验把延迟 / 成本压到极限
对不确定性的容忍中(需求会变)高(实验常失败)低(偏好稳定与可预测)
数学 vs 系统偏好系统强、数学够用数学扎实系统工程与性能
典型日课写 Agent、做评测、对齐业务洗数据、调参、看曲线压测、调并行、做容量
三年后常见落点Tech Lead / 资深应用高级算法 / 方向负责人基础设施负责人
本计划对应阶段13-15 为主5-9 为主7、16 为主
text# 路径选择打分(自评 1-5 分,加权后看哪一列最高)
维度(权重)            应用  算法  平台
喜欢的交付物(3)         ?     ?     ?
数学基础自信(2)         ?     ?     ?
性能 / 系统兴趣(3)      ?     ?     ?
实验耐心(2)             ?     ?     ?
可获得的资源(2)         ?     ?     ?   # 有无 GPU / 数据 / 导师
# 打分规则:每列 = Σ(自评分 x 权重);最高列即优先方向。
# 但三条路不是互斥的——应用型也能往平台靠,
# 关键是在第一年先「把一件事做完整」,再谈方向标签。

4.4 持续学习机制:让能力不贬值

ℹ
一个残酷的事实:AI 岗位的技能更新速度显著快于其他技术岗位——2024 年的「进阶知识」在 2026 年已经变成基础要求。因此建立学习机制比掌握任何具体技能都重要。有机制的人两年后仍在牌桌上,靠热情的人半年后就开始掉队。
论文追踪(每周 1–2 小时)
固定信息源:arXiv 的 cs.CL / cs.LG 摘要、各家实验室技术报告、Hugging Face Daily Papers。不要试图读完,只挑与方向相关的 1–2 篇精读——筛选能力比阅读速度重要。
动手复现(每月 1 次)
挑一个小而具体的技术点做最小复现(一个注意力变体、一个新的 RL 目标、一种量化方法)。复现一次胜过读十篇。
写下来(每两周 1 篇)
把学到的东西写成技术笔记或博客。写作会暴露理解漏洞,也是被人发现的最好方式——很多机会来自「有人读到了你的文章」。
社区参与(持续)
给开源项目提 issue / PR、参与讨论、回答别人的问题。这既是学习,也是求职渠道与个人品牌。
跟踪招聘 JD(每月)
定期看目标岗位 JD 的变化,反推自己该补什么。这是最直接的市场需求信号,比任何技术趋势文章都准确。
季度自评
每季度用本计划的 17 个阶段清单打一次分,找出真实短板,而不是凭感觉觉得自己「应该差不多了」。自评要写下来,写下来才会诚实。
信息源频率怎么用
arXiv cs.CL / cs.LG 摘要每周只在标题摘要层筛选,挑与方向相关的 1-2 篇精读
各家实验室技术报告发布时重点看「方法 + 消融 + 数字」三节,忽略营销话术
Hugging Face Daily Papers每天 5 分钟看社区投票,快速感知哪个方向在升温
目标岗位 JD每月把新增关键词列出来,反推自己该补哪个阶段
开源仓库 issue / PR持续参与讨论既能学习,也是被发现与内推的渠道
自己的评测集与实验记录每次迭代把每次改动的数字记下来,避免重复踩坑与凭记忆决策
★
最后一句实在话:这个领域最大的风险不是「学不会」,而是一直在学却从未交付。前面 16 个阶段的知识,只有变成跑得起来的系统、写得清的文档、拿得出的数字,才是真正的能力。所以:每学完一段就做一个小东西,把它开源出去。一年后,你的 GitLab 就是最好的简历;两年后,会有人主动来找你。
python# 季度能力自评:把 17 个阶段按「能否独立交付」打分,而不是「是否学过」
# 分值:0=没学过 1=看过 2=跑通过 3=能改写 4=能设计与排错
SELF = {
  '05_数学与优化': 2, '06_Transformer': 3, '07_训练工程': 2,
  '08_后训练_SFT': 3, '09_RL后训练': 2, '13_RAG': 4,
  '14_Agent': 4, '15_Evals': 3, '16_推理优化': 2, '17_求职': 3,
  # ... 其余阶段自行补全
}

def summary(self_score):
    weak  = [k for k, v in self_score.items() if v <= 1]
    solid = [k for k, v in self_score.items() if v >= 3]
    avg   = sum(self_score.values()) / len(self_score)
    return weak, solid, round(avg, 2)

weak, solid, avg = summary(SELF)
print('平均分', avg)                 # 期望随季度单调上升
print('短板(<=1)', weak)              # 下季度学习清单就来自这里
print('已扎实(>=3)', solid)           # 可以作为简历上的标签

# 判据:季度平均分应比上季 +0.3 以上;
#   「>=3 的项」至少覆盖一个岗位方向所需的关键阶段(如应用方向需 13-15 均 >=3)。
# 反模式:把所有阶段都自评 3+,等于没评——自评要写下来才会诚实。

4.5 动手练习与自测

✔
本节练习判据:求职策略的练习全部落地为「可执行的文档与动作」。做完整节,你会得到一份可投递的作战计划。
  1. 建立投递看板:按上面的表格建一个 jobs 看板,填满 10 家目标公司。判据:每家有明确渠道(内推优先)、投递日与「下一步动作」。
  2. 制定 12 周计划:把 12 周清单复制成你自己的版本,标出每周唯一的主交付物。判据:每周都能回答「本周交付什么」;前三周先修作品再投递。
  3. 路径打分:用打分表给自己三个方向各算一次加权分。判据:得出一个优先方向,并写出「第一年要把哪一件事做完整」。
  4. 季度自评:用脚本给 17 个阶段打分。判据:得出「短板清单」与「可作为简历标签的 3 个已扎实项」,并据此安排下季度学习。
  5. 漏斗校准:记录你实际投递的前 10 家的转化率,与 15–25% 的经验值对比。判据:若面试率明显偏低,优先修简历与作品集而非扩大投递量。
  6. 谈薪准备:写下你的市场区间、不可替代点与期望职级。判据:能给出「总包区间 + 支撑该区间的项目证据」,且不先出底牌。
动作判据
投递看板10 家目标公司,含渠道(内推优先)、投递日、下一步
12 周计划每周唯一主交付物;前三周先修作品再投递
漏斗校准面试率对照 15–25% 经验值,偏低先修作品而非加大投递
谈薪准备给出总包区间 + 支撑证据,且不先出底牌

项目里程碑

贯穿项目 · Hamauls Orion
M17 收口:整合、演示、复盘与求职 第 100–106 周

把 16 个里程碑合成一个完整产品:统一 README 与架构文档、录制演示、写技术报告、做完整压力测试,并把这套经历翻译成简历条目与面试话术。

本阶段产出(直接进入项目仓库)
验收标准:陌生人读完 README 能复现部署;你能在 5 分钟内讲清最难的三个技术决策及取舍,并回答「如果重做你会改什么」。

阶段练习项目

PROJECT 1
作品集主页
做一个单页站点汇总三个项目:架构图、关键技术、量化结果、GitLab 链接,以及「我在其中做的最重要的三个技术决策」。这是投递时最先被看到的东西,也是面试官的开场话题。
要达成的效果
  • 单页站点在 90 秒内讲清三个项目:做什么、关键技术、量化结果
  • 把「最重要的三个技术决策」呈现得可被面试官追问并展开
功能需求
  • 汇总 A 应用 / B 训练 / C 工程三类项目,各含架构图、关键技术、量化结果与仓库链接
  • 首页 30 秒能说清价值主张,深入页有数据支撑与决策理由
  • 为每个项目写「我在其中做的最重要的三个技术决策」,避免泛泛点评
  • 链接可点开:仓库 / README / 报告文档
交付物
  • 作品集主页(静态站点 + 部署地址或本地可开)
  • README 入口与仓库、决策文档导航
边界 · 不做

不做新的功能开发,只做信息呈现与导航;不做在线持久化服务。

PROJECT 2
模拟面试循环
找同伴或使用 AI 做模拟:一次完整的四轮面试(编码 / 原理 / 项目深挖 / 系统设计),录音复盘并修正表达中的含糊之处。至少做 3 轮,每轮只针对上一轮暴露的短板改进。
要达成的效果
  • 至少完成 3 轮四轮面试(编码 / 原理 / 项目深挖 / 系统设计)模拟并录音复盘
  • 每轮针对上一轮短板改进,末轮在原理题与系统设计上达到自评达标
功能需求
  • 用同伴或 AI 做完整四轮模拟,每轮切换不同类型的题
  • 每轮录音 + 复盘:列出含糊表述、卡壳点、失分处并记录改进动作
  • 针对上一轮短板准备新材料 / 练习,每轮只聚焦若干问题
  • 把高频题与话术沉淀进个人题库,供反复自测
交付物
  • 3 轮模拟的记录与复盘文档(含每轮短板与改进)
  • 一套可复用的问答提纲 / 话术库
边界 · 不做

不做真实投递与笔试;不做求职渠道运营。

PROJECT 3
技术写作三篇
围绕你最熟的方向写 3 篇有深度的技术文章(如「RAG 混合检索与重排的实测对比」「GRPO 训练中熵曲线的异常诊断」「推理服务的吞吐–延迟权衡」)。这是成本最低的个人品牌建设,也是最好的自我检验。
要达成的效果
  • 产出 3 篇有深度、可发表的原创技术文章,覆盖你最熟的方向
  • 每篇能被同行追问并经受数据 / 取舍核查(不是泛泛科普)
功能需求
  • 围绕最熟方向选题(如 RAG 检索对比 / 训练曲线诊断 / 推理吞吐权衡)
  • 每篇有实测数据或可复现实验,写清方法四要素与结论
  • 按每两周一篇的节奏固定产出,提交到技术社区或博客
  • 写完后自检「这句话能被追问吗」并补齐数据与替代方案
交付物
  • 3 篇成稿 + 可复现代码 / 数据链接
  • 读者可验证的实验说明
边界 · 不做

不做论文投稿 / 专利等学术产出;不写无数据的营销软文。

PROJECT 4
原理题四栏表
按「问题 → 因果链 → 关键数字 → 边界条件」四栏,把 30–50 个高频知识点做成一张可检索的表,填不满的栏目就是你的短板清单。这是面试前最后一小时唯一需要看的东西。
要达成的效果
  • 把 30–50 个高频知识点做成「问题 → 因果链 → 关键数字 → 边界条件」四栏可检索表
  • 填不满的栏目成为短板清单,评估覆盖度并持续补齐
功能需求
  • 覆盖编码 / 原理 / 项目三类高频考点,每个知识点四栏齐全
  • 关键数字要有依据(如 P99/P50 健康度、KV 显存、量化位宽退化)并能随口讲出
  • 做成可检索格式(Markdown 表或脚本),面试前最后复习只用它
  • 标注每个知识点的边界条件 / 例外,避免回答被追问就翻车
交付物
  • 原理题四栏表(30–50 条)与短板清单
  • 自测脚本 / 抽查工具与检查清单
边界 · 不做

不做系统设计题的正规体系(归独立模块);不做刷题题库积累。

常见误区

面试高频问题速答

介绍一个你最有挑战的项目,重点说技术难点与你的决策。

推荐结构(STAR + 技术取舍):① 背景与约束——业务目标、数据规模、延迟与成本约束;② 方案与备选——提出 2–3 个方案并说明为什么选这个(如为什么用混合检索而不是纯向量、为什么不上 Agent 而是流水线);③ 关键难点——具体到技术细节(召回率不足、重排延迟过高、长上下文成本失控),以及你怎么定位与解决;④ 结果与验证——量化指标、评测集规模、对比基线;⑤ 限制与后续——已知失效场景与下一步计划。第五点最容易加分,因为它证明你在持续思考而不是结项就忘。

如果让你设计一个日请求 100 万次的推理服务,你会怎么估算资源?

步骤:① 明确输入输出长度分布与延迟 SLA;② 选模型与量化方案,估算单次请求的显存与算力需求;③ 通过压测得到「满足 p95 延迟前提下的单卡 QPS」——注意不是峰值吞吐,而是满足 SLA 的 QPS;④ 用日请求量除以 86400 得平均 QPS(约 11.6),再乘峰值系数 3–5 得峰值 QPS(约 35–58);⑤ 除以单卡 QPS 得卡数,加 N+1 冗余;⑥ 计算月度成本并与商业 API 对比。同时主动说明优化手段能把成本降低多少:前缀缓存(命中率高时省 30%+ prefill)、语义缓存(重复率通常 10–30%)、模型路由(简单问题走小模型)、量化(INT8 约 1.5–2 倍加速)。

你没有训练大模型的资源,怎么证明你有训练能力?

三条路径:① 在 7B–8B 级模型上用 QLoRA + 梯度检查点 + 梯度累积完成 SFT(单卡或少量卡可行),再做 DPO 或小规模 GRPO;② 在 1B 以下模型上从零训练一个 MiniGPT,展示对训练全流程、损失曲线与初始化问题的理解;③ 用公开数据集做数据管线与质量分析(清洗、去重、配比、污染检测),这是训练能力中最被低估但最重要的一环。关键在于呈现「对照实验 + 失败分析」,而不是指标有多高。面试官想看的是你能否设计实验并对结果做出正确解释。

你的项目里最失败的一次尝试是什么?

这类题在考察反思深度,不是在找弱点。合格答法要包含四段:① 具体做了什么(可验证的细节);② 期望是什么、实际发生了什么(承认偏差,敢给数字);③ 你怎么定位原因(诊断过程比结论更重要);④ 学到什么并如何改变了后续做法。例如:「我一度用纯向量检索,Top-5 命中率只有 62%,起初怀疑是嵌入模型不行,换了两三个模型都没改善;后来把失败样本捞出来逐个看,发现失败集中在含条款编号与专有名词的查询上——稀疏检索恰好擅长这个,于是改成混合检索 + RRF,命中率直接到 89%。这让我形成了习惯:先看失败样本,再动方案。」

你怎么跟进 2026 年快速变化的 AI 技术?

机制化而不是靠感觉:① 每周固定时间看 arXiv 摘要与实验室技术报告,只精读与方向相关的 1–2 篇;② 每月做一次最小复现(一个小技术点),复现一次胜过读十篇;③ 每两周写一篇技术笔记,写作会暴露理解漏洞;④ 持续参与一个开源项目(issue / PR / 讨论),这是最好的学习与求职渠道;⑤ 每月看一次目标岗位 JD 的变化,用市场需求反推学习优先级;⑥ 每季度用结构化清单自评,找真实短板。重点是「固定时间 + 固定产出」,而不是「有空就看」。

你为什么想做这个方向?如果模型能力再大幅提升,你担心自己的工作被替代吗?

答题要点是展示对岗位本质的理解,而不是表达热情。可以这样组织:① 说明你关注的是把能力变成可靠系统这件事,而不是某个具体模型的调参技巧——模型越强,把能力工程化、评测化、可控化的需求反而越大;② 举一个你实际遇到的例子,说明「模型本身没问题但系统失败」的场景(检索召回不足、上下文冲突、工具调用错误),这类问题是模型能力提升无法自动解决的;③ 承认会被替代的部分:纯提示词调优、机械的 API 拼接确实在贬值,所以我把精力放在评测体系、系统设计与成本控制这些更靠工程判断的地方。这个回答的关键是诚实地区分「会贬值的能力」与「会升值的能力」。

你手上如果有多个 offer,你会怎么选?

给出结构化的比较维度,而不是只说「看成长」:① 方向匹配度——是否在做你想深入的领域(做三年非目标方向的机会成本极高);② 团队与直属 leader——面试时可以反向面试:团队规模、技术决策谁拍板、最近半年做了什么;③ 工程成熟度——有没有评测体系、有没有真实流量、还是长期做 demo;④ 成长曲线——你能接触到的是「一个模块」还是「一条链路」;⑤ 回报结构——总包构成、股权与兑现条件、职级与晋升通道。把这些写成一张表再比较,会比凭感觉靠谱得多。

学习资源

Hugging Face Daily Papers信息源 huggingface.co/papers 每日精选论文,社区投票排序,是最高效的前沿追踪入口。 arXiv cs.CL / cs.LG论文 arxiv.org/list/cs.CL/recent 论文原始出处,配合摘要筛选使用,避免被二手解读带偏。 The AI Index Report(Stanford HAI)报告 aiindex.stanford.edu/report/ 年度权威数据:岗位需求、技能变化、模型进展,用于写行业分析时的可靠数据源。 Papers with Code / SOTA 榜平台 paperswithcode.com/ 查看某个任务当前最强方法与开源实现,做技术选型调研的起点。 LangChain / LlamaIndex 博客博客 blog.langchain.com/ 工程侧的最佳实践与行业调研数据(如 Agent 工程现状报告),了解落地真实状态。 vLLM 发布说明GitHub github.com/vllm-project/vllm/releases 推理优化进展最快的地方,读 release notes 比读综述更实用。 SGLang 仓库与文档GitHub github.com/sgl-project/sglang RadixAttention 与结构化输出加速的实现,推理岗位面试常被问。 Hugging Face 模型与数据集平台 huggingface.co/models 找底座模型、量化版本与训练数据集的入口,做复现实验的起点。 GitHub Trending(Python / AI)GitHub github.com/trending/python 发现新工具与新项目,保持对生态变化的敏感度。 OWASP Top 10 for LLM Applications文档 genai.owasp.org/ LLM 应用安全的标准清单,写项目安全章节与准备安全类面试题的依据。
★
2026 形势提示:2026 年的 AI 岗位呈现明显的结构性分化:只会调 API 的岗位在收缩,而三类人极度稀缺——能把能力工程化落地的人、有真实训练与后训练经验的人、能把推理成本压下来的人。同时企业的选拔标准明显务实化:开源作品与竞赛成绩可以替代论文。这意味着对于有工程背景的人,「做出可验证的系统」是被市场认可的捷径。你不需要成为论文作者,你需要成为那个能让模型真正跑起来、跑得住、跑得起的人——而这一点,恰好可以用 16 个阶段的知识,在 3 个项目里证明。