系统设计与行为面试:白板画图与 STAR 故事库
0. 元信息
- 主题路径:
docs/topics/career-and-interview/subtopics/system-design-and-behavioral/README.md - 父主题:
career-and-interview - 适合对象:L5+ 工程师面试必备;尤其是”系统设计讲不清”或”行为面试被追问就崩”的人
- 建议周期:3~4 周
- 前置知识:
system-design(容量、缓存、一致性、可观测基础);≥ 3 个完整工程交付经验 - 最终目标:完成 4 套 45 分钟系统设计白板(短链 / Twitter timeline / 限流 / 排行榜);完成 10 道 STAR 答案;完成 5 次完整 mock 录音
1. 学习路线
ByteByteGo 4 步法(容量 → API → 数据模型 → 深入设计)
→ 4 套经典白板(短链 / Feed / 限流 / 排行)
→ 行为 8 大主题(Conflict / Failure / Leadership / Ambiguity / Influence / Prioritization / Technical / Customer)
→ STAR 故事库(10 个项目故事覆盖 8 主题)
→ 5 次完整 mock(编码 + 系统设计 + 行为)
每一步都是下一步的前置:没有白板练习就上系统设计会被秒拒;没有 STAR 库就上行为面试会卡壳。
2. 阶段周数分配
| 阶段 | 3 周方案 | 4 周方案 | 备注 |
|---|---|---|---|
| 1. 白板 4 步法(容量 / API / 数据模型 / 深入设计) | 0.5 | 0.5 | 模板 + 5/5/10/25 时间分配 |
| 2. 4 套经典白板 | 1 | 1.5 | 短链 / Twitter timeline / 限流 / 排行榜 |
| 3. 行为 8 主题 + STAR 故事库 | 1 | 1 | 10 个故事覆盖 8 主题 |
| 4. Mock 综合(编码 + 系统设计 + 行为) | 0.5 | 1 | 5 次 mock + 复盘 |
| 合计 | 3 | 4 |
3 周方案面向系统设计有经验、行为面试 STAR 已熟练的资深工程师;4 周方案面向 L5+ 第一次走完整流程的求职者。综合项目(白板 + STAR + mock)作为求职 Sprint 的子模块。
3. 核心知识 / 产出 / 标准表
| 阶段 | 核心知识 | 实践产出 | 可观察学会标准 |
|---|---|---|---|
| 1. 白板 4 步法 | 容量估算(5 分钟)+ API(5 分钟)+ 数据模型(10 分钟)+ 深入设计(25 分钟) | 一张白板模板 + 时间分配表 | 45 分钟内能完整讲清一套系统 |
| 2. 4 套经典白板 | 短链生成、Twitter timeline、限流、排行榜 | 4 套白板录音(每套 45 分钟) | 每套能让 mock 面试官听懂 |
| 3. 行为 8 主题 | Conflict / Failure / Leadership / Ambiguity / Influence / Prioritization / Technical / Customer | 8 主题清单 | 每主题能讲 1~2 个项目故事 |
| 4. STAR 故事库 | 10 个项目故事,覆盖 8 主题,每故事 3 分钟 | 10 个 STAR 文本 + 录音 | 录音回听时能 60 秒讲完 |
| 5. Mock 综合 | 编码 60 分钟 + 系统设计 45 分钟 + 行为 30 分钟 | 5 次完整 mock 录音 + 复盘 | 真实面试前后 5 分钟内进入状态 |
4. 第一周任务
Day 1 约定:本计划以”4 步白板法 + 行为 8 主题 + STAR 故事库 + mock 录音 + 复盘”为最小循环。所有产出必须有可见证据(白板录音、STAR 卡片、mock 录音、复盘清单)。
| 日 | 任务 | 当天交付 |
|---|---|---|
| Day 1 | 学 ByteByteGo 4 步法(5/5/10/25 分钟分配),用 Excalidraw 画 1 张白板模板(含容量估算公式) | 白板模板 + 时间分配表 |
| Day 2 | 短链系统白板:容量估算(DAU 10M / QPS 590 / 存储 549GB)+ API + 数据模型 + Redis 缓存,45 分钟讲解并录音 | 短链白板录音 + Mermaid 组件图 |
| Day 3 | 行为 8 主题清单(Conflict / Failure / Leadership / Ambiguity / Influence / Prioritization / Technical / Customer),从 8 个项目中各选 1~2 个最强故事 | 8 主题清单 + 故事池 |
| Day 4 | STAR 故事 1:技术领导(Leadership)— 团队 5 人无 owner,引入 on-call 制度 + 事故复盘 + SLO 看板 | 1 张 STAR 卡片 + 录音 |
| Day 5 | STAR 故事 2:失败与反思(Failure)— 发布 bug 影响 10% 用户,5 分钟回滚 + 1 小时定位 + 写复盘 + 加自动化测试 | 1 张 STAR 卡片 + 录音 |
| Day 6 | 找 1 位 mock 搭档:1 道系统设计(45 分钟)+ 2 道行为(30 分钟)= 75 分钟,录音回放 + 记 3 个改进点 | mock 录音 + 反馈清单 |
| Day 7 | 步骤 A:跑通白板模板 + 1 套白板 + 2 张 STAR + mock 录音;步骤 B:补齐 4 类边界(白板超时 / 行为用”我们”开头 / Result 无量化 / mock 没录音) | 面试工具包 v0.1 + 4 类问题清单 |
Day 7 步骤 A 把面试资产跑通;步骤 B 每类问题先在文档里复现,再讲清补救路径。
5. 阶段通用验收
- 不看笔记 45 分钟内完整讲清任意 1 套白板(含容量 / API / 数据模型 / 深入设计 4 步);
- 用 STAR 4 段讲完任意 1 个项目故事(S/T 各 30 秒,A 2 分钟,R 30 秒含量化);
- 画一张图:白板组件图(短链 / Twitter timeline / 限流 / 排行榜 4 选 1,Mermaid 渲染);
- 测试 4 类边界:白板超时 / 行为用”我们”开头 / Result 无量化 / mock 紧张;
- 准备 10 道 STAR 故事覆盖 8 主题,每道录音 ≤ 3 分钟;
- 容量估算能从 DAU 起步算到 QPS / 存储(白板录像可证);
- 能修改已有白板与 STAR 故事(换受众、加 follow-up、加 learning),不是只照抄。
6. 最终验收
- 完成 4 套 45 分钟系统设计白板(短链 / Twitter timeline / 限流 / 排行榜),每套留录音;
- 完成 10 道行为题 STAR 答案,覆盖 8 主题(Conflict / Failure / Leadership / Ambiguity / Influence / Prioritization / Technical / Customer);
- 完成 5 次完整 mock(编码 60 + 系统设计 45 + 行为 30 = 135 分钟),每次留录音 + 复盘清单;
- 现场拿到任意 1 套白板题,45 分钟内讲清关键权衡(含容量估算数字);
- 现场拿到任意 1 道行为题,能用 STAR 模板 3 分钟内讲完(Action 段具体 + Result 含量化);
- 能用 15 分钟讲清自己的白板方法、STAR 故事库、mock 复盘习惯、容量估算经验。
7. 综合项目
首选:求职 Sprint 的 design + behavioral 子模块(必做:4 套白板 + 10 道 STAR + 5 次 mock)。
- 输入:过往工程交付经验、目标公司岗位需求;
- 输出:必输出(1)4 套系统设计白板录音(短链 / Twitter timeline / 限流 / 排行榜)+ Mermaid 组件图;(2)10 道 STAR 答案文本 + 录音(覆盖 8 主题);(3)白板模板 + 时间分配表;(4)5 次完整 mock 录音(编码 + 系统设计 + 行为);(5)mock 复盘清单(每场 ≥ 3 个改进点);(6)容量估算练习 ≥ 50 题;(7)1 份 retrospective;(8)1 份 mock 评价表(自评 + 他评);
- 关键指标:白板 45 分钟内讲清 4 套、行为题 3 分钟内 STAR 答完、mock 紧张感 5 次后基本消除;
- 进阶可选:写技术博客(ByteByteGo 风格系统设计图解)+ 给朋友 mock 并给反馈(升级 L4 能力)。
备选:dream company 岗位的 mock 包(针对 1 家目标公司岗位 JD:定制 3 套白板 + 8 道 STAR + 3 次 mock + 1 份讲解策略),适合”已锁定 dream company”的求职者。
任何综合项目都必须包含:
- 白板 4 步法与时间分配(5/5/10/25 分钟);
- 4 套经典白板(短链 / Feed / 限流 / 排行)+ 组件图 + 录音;
- 行为 8 主题清单与覆盖;
- 10 道 STAR 答案(含 S/T/A/R + 量化 + learning);
- 5 次完整 mock 录音 + 复盘;
- 容量估算练习(≥ 50 题);
- README(含 mock window、目标、产出、复盘);
- retrospective.md(含教训、改进、下一轮)。
notes/ 与 README 存放规范
所有”白板组件图 / STAR 卡片 / mock 复盘 / 容量估算”类交付物统一存放在项目根目录的 notes/ 子目录或 README 的对应章节;提交时一并带上,避免散落在聊天或临时文件里。综合项目的 notes/ 至少包含:
notes/whiteboard-template.md:4 步法模板(5/5/10/25 分钟分配)+ 4 套白板组件图(Mermaid);notes/star-stories.md:10 道 STAR 答案(S/T/A/R + 量化 + learning,每段标秒数);notes/mock-retro.md:5 次 mock 录音链接 + 复盘清单(每场 ≥ 3 个改进点 + 下次改法);notes/capacity-estimation.md:50 题容量估算练习(DAU → QPS → 存储,含公式与答案)。
8. 推荐开源资料
| 阶段 | 角色 | 资料 | 链接 | 用法 |
|---|---|---|---|---|
| 全部 | 经典书 | Alex Xu《System Design Interview》Vol 1 & 2 | https://bytebytego.com/ | 系统设计白板事实标准 |
| 全部 | 经典书 | Gayle McDowell《Cracking the Coding Interview》 | https://www.crackingthecodinginterview.com/ | 行为面试 + 策略 |
| 1 | 原理 | Martin Kleppmann《Designing Data-Intensive Applications》 | https://dataintensive.net/ | 数据系统原理(必读 5~9 章) |
| 1 | 视频 | Hello Interview | https://www.hellointerview.com/ | 视频白板 + 评分标准 |
| 2 | 题库 | Educative Grokking System Design | https://www.educative.io/courses/grokking-the-system-design-interview | 题库 + 图解 |
| 2 | 集合 | Donne Martin《System Design Primer》 | https://github.com/donnemartin/system-design-primer | GitHub 系统设计集合 |
| 2 | 视频 | System Design Fight Club | https://www.youtube.com/@hickeyandco | 真实白板演练 |
| 3 | 行为 | Lewis Lin《Decode and Conquer》 | https://www.decodenconquer.com/ | PM/Engineer 行为题库 |
| 3 | 行为 | Haseeb Qureshi《My Ten Rules》 | https://haseebq.com/my-ten-rules-for-negotiating-a-job-offer/ | 行为 + 谈判 |
| 5 | mock | Pramp | https://www.pramp.com/ | 免费 mock |
| 5 | 白板 | Excalidraw | https://excalidraw.com/ | 白板工具(虚拟白板) |
默认使用顺序:先读《System Design Interview》Vol 1 建立 4 步法 → 读《Designing Data-Intensive Applications》5~9 章补底层 → 看 Hello Interview 视频白板 → 用 Excalidraw 画 4 套组件图 → 用 Educative 补题库 → 用 Lewis Lin《Decode and Conquer》准备 STAR 故事库 → 用 Pramp 做 5 次 mock → 写复盘到
notes/mock-retro.md。
9. 学习资料汇聚(v0.3 自包含)
9.1 背景与动机
系统设计与行为面试是 L5+ 工程师的硬门槛。系统设计从”画组件图”到”讲清 5W”是 2015 年后 Alex Xu、Hello Interview 等平台把它工程化的结果;行为面试的 STAR 框架来自 HR 行业,但被 Gayle McDowell、Lewis Lin 等人系统化。今天每个 senior 工程师面试都过这两关:系统设计证明你能做大,行为证明你能合作。
9.2 概念地图
flowchart LR
Whiteboard[白板 4 步法] --> Capacity[容量估算]
Whiteboard --> API[API 设计]
Whiteboard --> Schema[数据模型]
Whiteboard --> Deep[深入设计]
Capacity --> Short[短链]
Capacity --> Feed[Twitter timeline]
Capacity --> Rate[限流]
Capacity --> Rank[排行榜]
Behavioral[行为 8 主题] --> STAR[STAR 故事]
STAR --> Conflict[Conflict]
STAR --> Failure[Failure]
STAR --> Leadership[Leadership]
STAR --> Ambig[Ambiguity]
STAR --> Infl[Influence]
STAR --> Prio[Prioritization]
STAR --> Tech[Technical]
STAR --> Cust[Customer]
Whiteboard --> Mock[完整 mock]
STAR --> Mock
关系说明:白板练的是”做大”的能力,STAR 练的是”讲清自己”的能力,两者通过 mock 串联。
9.3 基础知识讲解
9.3.1 系统设计经典
| 资料 | 影响 | 用法 |
|---|---|---|
| Alex Xu, System Design Interview Vol 1 & 2 | 白板事实标准 | 必读 Vol 1 |
| Martin Kleppmann, Designing Data-Intensive Applications | 数据系统原理 | 必读 5~9 章 |
| Hello Interview | 视频白板 | 必看 |
| Educative Grokking System Design | 题库 + 图解 | 必刷 |
| Sahn Lam, Beyond Cracking the Coding Interview | 系统设计扩展 | 选读 |
| Donne Martin, System Design Primer(GitHub) | 系统设计资源集合 | 字典 |
| Hickey & Co, System Design Fight Club(YouTube) | 真实白板演练 | 必看 |
9.3.2 行为面试经典
| 资料 | 影响 | 用法 |
|---|---|---|
| Gayle McDowell, Cracking the Coding Interview | 行为题库 | 必读第 9 章 |
| Lewis Lin, Decode and Conquer | PM/Engineer 行为题 | 必读 |
| Haseeb Qureshi, My Ten Rules for Negotiating | 行为 + 谈判 | 必读 |
| Julie Zhuo, The Making of a Manager | 行为 + 管理 | 选读 |
9.3.3 ByteByteGo 白板 4 步法
1. 容量估算(5 分钟)
- DAU / QPS / 读写比 / 对象大小 / 留存期
- 用 DAU × 操作数 × 对象大小 × 留存期 / 86400 计算 QPS
- 用 QPS × 对象大小 × 留存期 × 副本系数 计算存储
2. API 设计(5 分钟)
- 列出 3~5 个核心 endpoint
- 说明请求/响应 schema
- 标注延迟目标
3. 数据模型(10 分钟)
- 关键表 / collection
- 索引(primary + secondary)
- 分区 / 分片策略
4. 深入设计(25 分钟)
- 缓存层(CDN / Redis / 本地)
- 消息与异步(Kafka / SQS)
- 一致性(CAP / PACELC / Saga)
- 可观测(SLI / SLO / 告警)
- 故障应对(限流 / 熔断 / 降级)
9.3.4 STAR 故事库结构
故事 1:技术领导(Leadership)
Situation:团队 5 人,无 owner,事故频发
Task:被任命为 Tech Lead,3 个月内稳定系统
Action:引入 on-call 制度 + 事故复盘 + SLO 看板
Result:事故率降低 70%,团队满意度提升
故事 2:冲突处理(Conflict)
Situation:与同事对架构选型意见分歧
Task:作为 Tech Lead,需要达成共识
Action:用数据 + prototype 说服,引入 2 周 spike
Result:团队达成共识,性能提升 3x
故事 3:失败与反思(Failure)
Situation:发布时引入 bug,影响 10% 用户
Task:作为 on-call,需要快速恢复
Action:5 分钟回滚 + 1 小时内定位 + 写复盘 + 加自动化测试
Result:下次同类 bug 0 复发,团队加测试覆盖率门槛
(覆盖 8 主题,共 10 个故事)
9.4 经典问题与经典案例
| # | 问题 | 重要性 | 最简答案 |
|---|---|---|---|
| 1 | 短链生成器(百万 QPS) | 容量 + 缓存 + ID 生成 | Snowflake / base62 + Cache-Aside + 302 |
| 2 | Twitter timeline 设计 | 推 / 拉 / 推拉混合 + 热点 | 写扩散 + 读扩散 + 大 V 单独通道 |
| 3 | 限流系统设计 | 算法 + 分布式一致性 | 令牌桶 + Redis Lua + 滑动窗口 |
| 4 | 排行榜系统设计 | 实时性 + 准确性 | ZSet + 定时刷新 + 多级缓存 |
| 5 | 如何讲清 conflict 类行为题 | 高频且易翻车 | 用具体场景,避免负面,强调 learning |
| 6 | 如何讲 failure 类题 | 决定可信度 | 必须诚实,重点是 process 与 growth |
| 7 | 如何讲 leadership 类题 | 决定 TL 路径 | 用 influence / 推动 / 辅导 / mentor 框架 |
| 8 | 如何讲 ambiguity 类题 | 决定 senior 路径 | 讲清如何拆解、如何定优先级 |
| 9 | 如何讲 influence 类题 | 决定跨团队能力 | 用数据说服、prototype、stakeholder management |
| 10 | 如何讲 prioritization 类题 | 决定产品 sense | 用 RICE / ICE 框架 + 量化 |
| 11 | 设计消息系统(kafka) | 消息语义 + 一致性 | partition 保序 + exactly-once |
| 12 | 设计搜索系统 | 倒排 + 排序 + 高可用 | Elasticsearch + 分片 + 副本 |
| 13 | 设计打车系统 | 实时 + 匹配 + 地图 | geo 索引 + 流式计算 + 推送 |
| 14 | 设计网约车定价 | 实时计算 + 一致性 | 流式 + Redis + 回放 |
| 15 | 设计 stock trading | 强一致 + 高可用 | Raft / Paxos + 同步复制 |
9.5 学习难点
- 概念难点:白板时间分配(5/5/10/25)容易超时;用计时器训练。
- 思维难点:行为题”无故事可讲”;用 STAR 故事库覆盖 8 主题,每主题 1~2 个。
- 工程难点:mock 紧张;5 次 mock 后基本消除,前 2 次会很糟。
9.6 技术标准与接口
Entity
白板组件图、容量估算表、API schema、数据模型、STAR 故事卡、mock 录音。
Scope
系统设计不替代系统实现,行为面试不替代工作能力;只解决”现场讲清”与”现场答好”。
Structure
- 白板:容量估算(5 分钟)+ API(5 分钟)+ 数据模型(10 分钟)+ 深入设计(25 分钟);
- 容量估算:DAU × 操作数 × 对象大小 × 留存期 / 86400;
- STAR:Situation(30 秒)+ Task(30 秒)+ Action(2 分钟)+ Result(30 秒);
- Mock:编码 60 分钟 + 系统设计 45 分钟 + 行为 30 分钟 = 135 分钟。
Ecosystem
- 系统设计题库:ByteByteGo、Hello Interview、Educative、DesignGurus;
- 白板工具:Excalidraw、tldraw、Miro、Google Jamboard;
- Mock 平台:Pramp、IGotAnOffer、朋友 mock;
- 录音:OBS、Audacity、手机录音;
- 复盘:Notion、Markdown、Google Docs。
Depth Tiers
- L0:知道系统设计与行为面试存在;
- L1:能讲 1 套系统设计 + 1 个 STAR 故事;
- L2:能讲 4 套系统设计 + 10 个 STAR 故事;
- L3:能在 mock 中连贯讲清,节奏与时间可控;
- L4:能指导他人 mock 并给反馈。
本子主题要求:L3。
Source
- Alex Xu《System Design Interview》:白板题库;
- Hello Interview:视频白板;
- Cracking the Coding Interview:行为题库;
- Decode and Conquer:行为题库;
- 版本快照日期:2026-07-30。
9.7 关键代码
9.7.1 容量估算器
# 9.7.1 容量估算:DAU → QPS → 存储
def estimate(dau: int, ops_per_user: float,
read_write_ratio: float, obj_size_bytes: int,
retention_days: int, replicas: int = 3) -> dict[str, float]:
qps_total = dau * ops_per_user / 86400
qps_read = qps_total * read_write_ratio / (1 + read_write_ratio)
qps_write = qps_total / (1 + read_write_ratio)
storage_bytes = qps_write * 86400 * retention_days * obj_size_bytes * replicas
return {
"qps_total": round(qps_total, 2),
"qps_read": round(qps_read, 2),
"qps_write": round(qps_write, 2),
"storage_gb": round(storage_bytes / 1024**3, 2),
}
if __name__ == "__main__":
# 短链:DAU 10M,每人写 0.1 次/天,读 5 次/天,对象 200B,留 3 年
print(estimate(
dau=10_000_000,
ops_per_user=5.1,
read_write_ratio=50,
obj_size_bytes=200,
retention_days=365 * 3,
))
# {'qps_total': 590.28, 'qps_read': 583.33, 'qps_write': 11.57, 'storage_gb': 549.32}
9.7.2 系统设计白板组件图(Mermaid)
%% 9.7.2 短链系统白板:组件 + 数据流
flowchart LR
Client --> DNS --> CDN --> LB[Load Balancer]
LB --> API[API Gateway]
API --> App[短链服务 无状态]
App --> Cache[(Redis)]
App --> DB[(MySQL)]
App --> IDGen[ID 生成 Snowflake]
IDGen -.返回 ID.-> App
Cache -.读.-> App
DB -.读/写.-> App
App --> Redirect[302 跳转]
9.7.3 STAR 故事模板检查
# 9.7.3 STAR 答案检查器:四段时长 + 量化
from dataclasses import dataclass
@dataclass
class StarAnswer:
situation: str
task: str
action: str
result: str
def star_score(ans: StarAnswer) -> dict[str, bool]:
"""返回各段是否合规"""
return {
"situation_clear": len(ans.situation) > 50,
"task_role_clear": "I" in ans.task or "we" in ans.task.lower(),
"action_specific": len(ans.action) > 200,
"result_quantified": any(
c in ans.result for c in ["%", "x", "ms", "$", "k", "M"]
),
}
if __name__ == "__main__":
ans = StarAnswer(
situation="电商平台每秒 10k 订单,原同步调用 P99=5s",
task="I was the Tech Lead, tasked with redesigning order service",
action="I introduced Kafka async, Outbox pattern, cache prewarming",
result="P99 dropped from 5s to 180ms, 10x capacity, saved $200k/year",
)
print(star_score(ans))
10. 常见误区
- 系统设计只画组件图,不写容量估算;
- 白板时间分配失衡,前 5 分钟讲完所有内容;
- 行为题用”我们”开头,不讲”我”做了什么;
- STAR Answer 没有量化指标;
- 用 failure 类题编故事,面试官一追问就崩;
- mock 不录音,事后想不起哪里卡了;
- mock 只做编码,不做系统设计与行为;
- 行为故事库只有 1~2 个,被追问就重复;
- 系统设计讲完不总结关键权衡;
- 不讲 follow-up,面试官以为你不会;
- 系统设计不画数据流图,只画组件图;
- 行为面试背稿,被追问就崩;
- 用 conflict 类题讲负面八卦;
- 不讲 learning 与 growth;
- 真实面试不提前 5 分钟进入状态。
11. 所有知识点分类(统一规则)
- 编程语言
- 数据结构与算法
- 计算机基础
- 工程技术
- Web 与后端
- 前端与客户端
- 数据与人工智能
- 项目与职业能力
本计划归属:项目与职业能力 主 + 工程技术 辅(系统设计)。
本主题贡献
- 职责:用白板画图把系统边界与数据流讲清;通过 back-of-envelope estimation 建立容量假设;以 DDIA 的一致性、可靠性与扩展性视角组织权衡。
- 交付物:4 套白板画图录音与组件图;back-of-envelope estimation 计算表;结合 DDIA 原则的设计权衡卡与行为 STAR 故事库。
- 指标:每套设计 45 分钟内完成;容量估算覆盖 DAU、QPS 与存储三步且误差 ≤20%;完成 ≥5 次 mock,行为题 3 分钟内讲完。