关于 ml-system-design-interview
ML System Design Interview 是面向资深及以上 ML 工程师的系统设计面试辅导技能。它按需求、指标、数据、特征、模型、服务和监控组织回答,不讲授 ML 基础知识。
主要功能
- 01七阶段设计框架
- 0245 分钟面试时间安排
- 03典型 ML 系统题目集
- 04服务模式权衡对比
- 05资深级回答的区分信号
- 06白板策略与常见误区
适用场景
- 01练习 45 分钟 ML 设计面试
- 02组织推荐系统设计回答
- 03分析服务架构权衡
- 04评审系统设计回答
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ curiositech/ some_claude_skills --skill ml-system-design-interview安装后在 Claude Code 中输入/ml-system-design-interview确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
.claude-plugin/plugin.jsonreferences/evaluation-metrics-guide.mdml-design-templates.mdserving-tradeoffs.md详细介绍
ML 系统设计面试
面向资深及以上工程师的端到端 ML 流水线设计辅导。涵盖从问题定义到生产监控的完整流程——这是顶尖 ML 组织 L6+ 面试所要求的范围。
此技能面向拥有 15 年以上 ML/CV/AI/NLP 经验的人士,不讲解基础知识,而是帮助你将已有知识组织成面试官认可的形式。
适用场景
适用于:
- 练习 45 分钟的 ML 系统设计面试
- 组织推荐、排序、RAG、欺诈检测、感知系统的白板演示
- 分析服务架构的权衡(批处理、在线处理与流处理)
- 识别 L6+ 的差异化信号(问题主导权、组织约束、数据飞轮)
- 审阅并评估 ML 系统设计回答
不适用于:
- 编码面试(使用
senior-coding-interview) - 行为面试/领导力问题(使用
interview-loop-strategist) - ML 理论或数学推导
- 实现模型或编写训练代码
- 论文阅读或研究评审
7 阶段设计框架
每个 ML 系统设计回答都遵循这一流程。各阶段按顺序进行,但随着约束条件逐渐明确,你需要回到前面的阶段。下方的 Mermaid 图是你的白板框架。
flowchart TD
R[1. Requirements\n- Business goal\n- Users and scale\n- Latency/throughput SLA\n- Constraints] --> M[2. Metrics\n- Offline: precision, recall, NDCG\n- Online: CTR, conversion, revenue\n- Guardrails: latency p99, fairness]
M --> D[3. Data\n- Sources and collection\n- Labeling strategy\n- Pipeline: ETL, validation\n- Freshness and staleness]
D --> F[4. Features\n- Engineering and transforms\n- Feature store architecture\n- Online vs offline features\n- Freshness requirements]
F --> Mo[5. Model\n- Architecture selection\n- Training pipeline\n- Iteration strategy\n- Baseline and ablation]
Mo --> S[6. Serving\n- Batch vs online vs streaming\n- Caching and precomputation\n- Scaling and cost\n- Canary and shadow mode]
S --> Mon[7. Monitoring\n- Data drift detection\n- Model degradation alerts\n- A/B testing framework\n- Rollback strategy\n- Feedback loops]
Mon -.->|Feedback loop| D
Mon -.->|Retrain trigger| Mo
阶段详情
阶段 1 —— 需求(5 分钟) 在设计之前先提出澄清问题。明确:用户是谁?业务指标是什么?延迟 SLA 是多少?规模有多大(QPS、数据量)?有哪些硬性约束(成本、隐私、法规)?L6+ 候选人应主导问题定义——不要等面试官把需求告诉你。
阶段 2 —— 指标(3 分钟) 定义部署前可衡量的离线指标,以及对业务至关重要的在线指标。说明两者之间的差异:“离线 NDCG 提升并不总能转化为在线 CTR 提升,因为存在位置偏差和新颖性效应。”定义护栏指标:p99 延迟、不同用户群体之间的公平性、单次预测成本。
阶段 3 —— 数据(7 分钟) 训练数据从何而来?如何标注(人工、弱监督、隐式信号)?类别分布如何?数据需要多新?数据流水线是什么样的(批量 ETL 还是流处理)?有哪些数据质量检查?这一阶段能区分 L6+ 和 L5 候选人——初级候选人往往会假设数据都是干净且已标注的。
阶段 4 —— 特征(5 分钟) 模型需要哪些特征?哪些是预先计算的(离线),哪些是在请求时计算的(在线)?特征存储架构:在线存储(低延迟查询)与离线存储(批量训练)。特征新鲜度:用户特征每天更新,物品特征每小时更新,上下文特征实时更新。
阶段 5 —— 模型(8 分钟) 从简单基线(逻辑回归、XGBoost)入手并说明原因。然后提出生产架构(双塔、Transformer 等),并说明升级理由。讨论训练流水线:训练频率、数据量,以及如何处理分布偏移。迭代策略:优先开展哪些实验。
阶段 6 —— 服务(8 分钟) 系统设计与 ML 在此交汇。讨论:推理延迟要求、批量预计算与在线推理、GPU/CPU 的权衡、模型服务框架、缓存策略、成本优化(量化、蒸馏、竞价实例)。绘制服务架构图。
阶段 7 —— 监控(5 分钟) 部署之后会发生什么?数据漂移检测(PSI、KL 散度)。模型性能下降告警(指标随时间衰减)。A/B 测试框架(样本量、持续时间、新颖性效应)。回滚策略(影子模式、金丝雀流量比例)。随着时间推移不断改进模型的反馈闭环。
45 分钟时间规划
| 阶段 | 分钟数 | 覆盖内容 |
|---|---|---|
| 需求与澄清 | 5 | 业务目标、用户、规模、SLA、约束 |
| 指标 | 3 | 离线、在线、护栏指标、指标对齐 |
| 数据 | 7 | 来源、标注、管道、质量、时效性 |
| 特征 | 5 | 工程、存储架构、在线与离线拆分 |
| 模型 | 8 | 基线、生产架构、训练、迭代 |
| 服务 | 8 | 延迟、架构、成本、部署策略 |
| 监控 | 5 | 漂移、告警、A/B 测试、回滚、反馈 |
| 问答缓冲时间 | 4 | 面试官深入提问、为权衡取舍辩护 |
如果面试官插入问题,请灵活调整,但要简要覆盖全部 7 个阶段。漏掉监控是 L5 候选人最常犯的错误。
典型题目集
| 题目 | 关键挑战 | 必须讨论的内容 |
|---|---|---|
| 推荐系统 | 冷启动、位置偏差、多目标优化 | 双塔召回 + 重排序、探索与利用 |
| 搜索排序 | 查询意图分类、相关性与互动度的权衡、大规模场景下的延迟 | 倒排索引 + 向量嵌入检索、L1/L2 排序级联 |
| 内容审核 | 多模态(文本+图像+视频)、对抗性规避、精确率与召回率的权衡 | 人工参与闭环、分级升级、申诉工作流 |
| RAG 管道 | 检索质量、分块策略、幻觉检测、评估 | 嵌入模型选择、混合搜索、重排序、引用 |
| 欺诈检测 | 极端类别不平衡、对抗性适应、实时要求 | 特征时效性、图特征、集成模型 + 规则、反馈延迟 |
| 自动驾驶感知 | 传感器融合、安全关键延迟、长尾分布 | 多任务架构、仿真、OTA 更新、监管 |
服务架构对比
| 模式 | 延迟 | 新鲜度 | 成本 | 最适用场景 |
|---|---|---|---|---|
| 批量预测 | 不适用(预先计算) | 滞后数小时 | 计算成本低、存储成本高 | 邮件推荐、每日报告 |
| 在线推理 | 10-500ms | 实时 | 计算成本高(GPU) | 搜索排序、欺诈检测 |
| 准实时 | 1-60s | 延迟数分钟 | 中等 | 信息流排序、内容审核 |
| 流式处理 | 亚秒级 | 持续 | 高(始终运行) | 欺诈、异常检测、竞价 |
详细的服务权衡、框架对比和成本优化策略见 references/serving-tradeoffs.md。
L6+ 级别的差异化信号
Staff+ 级别的回答与 Senior 级别的回答有何不同:
1. 明确问题定义的责任 不要照单全收问题的表述。要问:“我们要优化什么业务指标?这是营收问题还是参与度问题?目前的解决方案是什么,为什么不够好?”L5 候选人会接受“构建一个推荐系统”这样的要求。L6+ 候选人会追问:“我们要推荐什么、推荐给谁,以及怎样才算成功?”
2. 讨论组织约束 真正的系统存在于组织之中。要考虑:团队规模(我们能否维护自定义模型,还是应该使用托管服务?)、值班负担、跨团队数据依赖、合规要求,以及从旧系统迁移的路径。
3. 数据飞轮策略 展现你对良性循环的思考:更好的模型 -> 更高的参与度 -> 更多数据 -> 更好的模型。讨论如何加速这一循环:主动学习、隐式反馈循环、探索策略、冷启动引导。
4. 自建还是采购 并非所有东西都应该定制开发。适当时选择托管服务(嵌入 API、特征存储、服务平台);在竞争优势有此需求时采用自定义方案。展现你对总拥有成本的理解。
5. 多目标思维 真正的系统会同时优化多个目标:相关性 AND 多样性、准确性 AND 公平性、质量 AND 延迟。讨论如何处理冲突:帕累托优化、约束优化、多任务学习、业务规则后处理。
白板策略
画什么,以及何时画:
| 时间 | 绘制内容 | 目的 |
|---|---|---|
| 0-5 分钟 | 带项目符号的需求框 | 为讨论定下基调,展现结构化思考 |
| 5-8 分钟 | 指标表(离线与在线) | 表明你考虑的不只是模型准确率 |
| 8-15 分钟 | 数据流水线图(来源 -> ETL -> 存储) | 展现你对数据工程的理解 |
| 15-20 分钟 | 特征架构(离线存储 + 在线存储) | 展现你对特征存储的了解 |
| 20-28 分钟 | 模型架构 + 服务图 | 核心系统设计图示 |
| 28-36 分钟 | 标注延迟的完整系统图 | 串联所有内容,展现你交付系统的能力 |
| 36-41 分钟 | 监控面板草图 + 反馈箭头 | 闭合反馈环路,展现你对生产环境的思考 |
组件用方框表示,数据流用箭头表示,并标注延迟/吞吐量数值。图示应让第 30 分钟走进来的人也能看懂。
反模式
模型优先思维
新手:在了解问题、定义指标或讨论数据之前,就在前 2 分钟内跳到“我会使用 Transformer”或“让我介绍一下注意力机制”。70% 的时间花在模型架构上,0% 的时间花在服务上。
专家:前 10 分钟用于讨论需求、指标和数据,然后才提及任何模型。先提出一个简单的基线(基于人工设计特征的逻辑回归),只有在明确基线的局限性后,才论证增加复杂度的必要性。为服务和监控分配同等时间。
识别方式:架构图中有一个详细的模型框,却没有数据流水线、特征存储、服务层或监控组件。开场第一句话就提到模型架构。
忽略数据
新手:假设大规模的干净标注数据唾手可得。会说“我们会使用数百万个标注样本进行训练”,却不讨论标签从何而来、成本有多高、类别分布如何,或数据会变得多陈旧。
专家:会询问数据来源、标注策略(人工、弱监督或隐式信号)、类别不平衡处理方式、数据新鲜度 SLA 以及数据质量监控。会讨论标注成本,并提出降低成本的策略(主动学习、半监督方法、合成数据)。
判断标准:回答中完全没有讨论数据收集、标注成本、类别不平衡、数据质量检查或数据新鲜度。全文没有出现“标签”一词。
没有监控方案
新手:设计止步于服务层。完全不提模型部署后会发生什么,也不讨论如何检测性能下降、如何回滚,或如何随着时间推移改进模型。
专家:会讨论数据漂移检测(总体稳定性指数、特征分布监控)、模型性能衰退告警、具备严格统计方法的 A/B 测试框架、金丝雀部署策略、安全发布所用的影子模式,以及将数据反馈到重新训练流程中的明确反馈闭环。
判断标准:架构图中没有监控组件。没有从生产环境回到训练环节的反馈箭头。没有提及 A/B 测试、金丝雀部署或回滚。
参考文件
深入了解时请查阅以下文件——默认不会加载:
| 文件 | 适用场景 |
|---|---|
references/ml-design-templates.md | 解决具体问题(推荐、搜索、RAG、欺诈、内容审核、感知)。包含 6 个完整设计及 Mermaid 图表。 |
references/serving-tradeoffs.md | 深入了解服务架构、框架选择、缓存、成本优化和部署策略。包含框架对比及按用例划分的延迟目标。 |
references/evaluation-metrics-guide.md | 选择指标、理解指标一致性、设计 A/B 测试、评估生成式 AI。包含指标决策树和公式。 |