System Design Interview Preparation
如何处理 System Design 面试题
System Design 面试四步法与 estimation 思路
System Design 面试是一个开放式对话,面试官希望你能主导流程。
面试中心
进入面试中心,系统化刷题训练
高频题库 + 练习模式,快速提升面试表现。
你可以用下面的步骤引导讨论。为了巩固这个方法,建议用这些步骤去做 System Design 面试题和解答 里的题目。
第一步:描述 use cases、constraints 和 assumptions
把问题拆清楚,不断提问来明确 use cases 和 constraints,并说明 assumptions。
- 谁会使用它?
- 他们会怎样使用它?
- 有多少用户?
- 系统的作用是什么?
- 系统的 input/output 是什么?
- 我们希望处理多少 data?
- 我们希望每秒处理多少 requests?
- 我们期望的 read/write ratio?
第二步:画出 high-level design
用关键组件勾勒 high-level design。
- 画出主要 components 和 connections
- 解释你的设计思路
第三步:设计核心组件
对每个 core component 做深入分析。比如你被问到 设计一个 URL 缩写服务,可以从下面开始:
- 生成并存储完整 URL 的 hash
- 把 hashed URL 解析回完整 URL
- database lookup
- API 与 OOD 设计
第四步:扩展设计
识别 bottlenecks 和 constraints,讨论是否需要引入 scalability 相关策略,例如:
- load balancing
- horizontal scaling
- cache
- database sharding
讲清楚方案的 trade-offs。每一步都有取舍,可以用 可扩展系统的设计原则 来定位瓶颈。
预估计算量(estimation)
面试中可能要求你做 back-of-the-envelope estimation。相关参考: