Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

第 37 章 系统设计题库:使用说明、双索引与训练路线

本题库把系统设计面试拆成可限时练习、可追问、可复盘的题卡。候选人用题卡训练稳定的判断和表达;面试官用相同结构观察需求理解、权威状态、链路设计和取舍能力。

题卡标签、难度与建议用时约定

每张题卡的元信息使用同一套口径,便于候选人选题和面试官配题:

  • 能力标签标记需要展示的可迁移能力,例如领域建模、状态机、容量规划、数据一致性、可观测性或架构演进;每题保留 2 至 4 个标签,避免只罗列中间件名称。
  • 场景标签标记题目的业务和运行条件,例如商品供给、交易主链路、大促峰值、支付回调、故障演练或运营后台;它用于组合题目,不替代能力标签。
  • 范围区分组件级、领域级、系统级和平台级问题。先从范围相近的题开始,再跨域组合。
  • 难度分为基础中等进阶:基础题要求能说清核心概念和边界;中等题要求给出主链路、状态和失败处理;进阶题要求量化约束、权衡一致性与性能,并覆盖恢复和演进。
  • 建议用时是一次完整口述练习的参考:基础题约 15 分钟,中等题约 30 分钟,进阶题约 45 分钟,综合案例可延长至 60 分钟。时间不足时优先保留目标、状态、主链路、失败处理和取舍。

候选人训练工作流

每次练习先选一张题卡和时长,按下面顺序作答:

  1. 澄清目标、核心用户、成功指标、约束和非目标。
  2. 估算峰值请求、读写比例、数据增长、延迟预算和容量余量。
  3. 先画高层主路径,再说明关键状态放在哪里。
  4. 分开讲读路径如何加速、写路径如何保证正确性。
  5. 补充超时、重试、幂等、降级、补偿、监控和人工处理。
  6. 收束当前方案的边界、代价与下一阶段演进。

开场可先说明:“我先确认目标和约束,再估算规模,画出主链路并拆开读写路径,随后说明失败处理,最后补充演进和取舍。”这能让面试官知道回答结构,也方便被打断后回到主线。

练习结束后,不要只检查是否提到缓存、消息队列或分库分表;应检查每个组件是否有明确职责、权威事实是否清楚、失败后果是否被覆盖。

面试官评估工作流

面试官先给出题干中的必要约束,观察候选人是否主动量化不完整信息,再沿候选人自己的假设追问。评估重点是:

观察点合格表现深入表现
问题定义先问目标、规模和边界说明不同约束会改变哪些方案
主链路能顺序说明请求流转明确同步点、异步点和用户可见结果
状态与数据能给出存储选择区分权威状态、缓存和派生读模型
风险处理提到常见故障说明幂等、补偿、对账和恢复责任
取舍与演进能说出优缺点能给出当前边界和逐步演进条件

递进追问应优先围绕候选人主动提出的数字、组件和承诺,例如“峰值再放大十倍怎么办”“缓存失效时谁是事实来源”“重试导致重复副作用如何收敛”。

白板与容量表达

白板从少到多展开,避免一开始堆满组件:

  1. 写出目标、核心指标和非目标。
  2. 写出容量假设和峰值放大口径。
  3. 画入口、应用服务、权威存储、缓存、异步链路和关键下游。
  4. 用不同箭头或编号拆读路径与写路径。
  5. 在有风险的边上标记超时、限流、幂等、重试或补偿。
  6. 在图旁写当前瓶颈、监控指标和演进方向。

容量估算至少覆盖读请求、写请求、峰值并发、读写比例、数据增长、带宽、热点、异步重试流量和外部依赖。估算不需要假装精确到机器数,但必须说明口径如何影响选择:读高时优先设计缓存和读模型,写高时考虑削峰、分片和异步化,热点集中时考虑预热、隔离和限流,消息量大时考虑积压、回压和消费恢复。

可使用稳定句式:

  • “这里先把权威数据和读模型分开。”
  • “这条链路允许最终一致,但需要补偿和对账兜底。”
  • “这个组件解决吞吐或延迟问题,不替代业务幂等。”
  • “规模未到阈值前先保持简单实现,同时保留分片键和归档策略。”
  • “故障时优先保护核心交易,非核心推荐、通知和营销能力可以降级。”

自我复盘方法

每道题结束后按三层复盘:

层次检查问题
结构是否按目标、规模、链路、状态、失败、演进的顺序展开?
内容每个关键结论是否有业务约束或数量级依据?是否说明权威来源和失败处理?
表达是否先报结构、避免术语堆叠,并在结尾说明取舍和边界?

把失分点记录为下一次可验证的动作,例如“下次先写读写比例”“下次补充支付回调的幂等键”,而不是笼统记为“加强可靠性”。复练时改变一个约束并重答,确认模板能够适应变化而不是死记答案。

按能力索引

能力题卡
需求澄清与范围Q-GEN-SCOPE-01Q-GEN-SCOPE-02
容量估算Q-GEN-CAP-01
权威状态与一致性Q-GEN-DATA-01Q-GEN-DATA-02Q-GEN-DATA-03Q-GEN-DATA-04Q-GEN-DATA-05Q-GEN-DATA-06
可靠性Q-GEN-REL-01Q-GEN-REL-02Q-GEN-REL-03
中间件选型Q-GEN-MW-01Q-GEN-MW-02Q-GEN-MW-03Q-GEN-MW-04Q-GEN-MW-05
架构抽象与演进Q-GEN-EVO-01Q-GEN-EVO-02

按场景索引

场景题卡
面试方法与白板表达Q-GEN-SCOPE-01Q-GEN-CAP-01Q-GEN-EVO-02
秒杀、库存与交易Q-GEN-SCOPE-02Q-GEN-DATA-03Q-GEN-DATA-04
缓存与并发控制Q-GEN-DATA-05Q-GEN-DATA-06
异步消息Q-GEN-MW-01Q-GEN-MW-03Q-GEN-MW-04
搜索与复杂查询Q-GEN-MW-02Q-GEN-MW-05
故障治理与演进Q-GEN-REL-01Q-GEN-REL-02Q-GEN-REL-03Q-GEN-EVO-01

训练路线

先完成 Q-GEN-SCOPE-01Q-GEN-CAP-01,建立答题顺序;再选择数据、可靠性和中间件题卡练习权威状态、异常和取舍;最后用 Q-GEN-EVO-01 做综合归纳,并以 Q-GEN-EVO-02 把失分点转成下一轮训练动作。短时练习先保证结构完整,长时练习再增加容量、追问和演进约束。