System Design Case Studies
System Design Interviews
面试流程与思路
System design 是个很广的主题,面试评估的是你能否针对抽象问题提出合理的技术方案,而不是唯一正确答案。System design 面试也是双向沟通,你需要主动引导对话。
免费资源
面试相关免费资料合集
题库、模板、学习资料一站式获取。
不同工程级别的期待也不同:有经验的人会从实践角度推进,而新人会更侧重结构化思考。因此很难给出唯一策略,但可以用清晰的流程组织答案。
System Design Case Studies
- System Design Interviews
- 设计 Pastebin/Bitly
- Design URL Shortener
- 设计 Twitter Timeline
- Design Twitter (course)
- 设计网页爬虫
- 设计 Mint.com
- Design WhatsApp
- 设计社交网络数据结构
- 设计 Key-Value 存储
- 设计 Amazon 销售排名
Requirements clarifications
System design 题目往往模糊,需要先明确范围与需求。通常分为三类:
Functional requirements
终端用户必须要的核心功能。
示例问题:
- “这个系统需要哪些核心功能?”
- “有哪些 edge cases?”
Non-functional requirements
系统质量约束,例如 portability、maintainability、reliability、scalability、security。
示例问题:
- “每个请求 latency 要多低?”
- “系统需要多高 availability?”
Extended requirements
“Nice to have” 的需求,非核心。
示例问题:
- “要不要记录 metrics/analytics?”
- “需要健康监控与性能指标吗?”
Estimation and Constraints
估算系统规模:
- “期望用户规模?”
- “读写比是多少?”
- “QPS 多少?”
- “需要多少 storage?”
这些会影响后续架构设计。
Data model design
先定义 database schema,明确 entities 与关系:
- “有哪些实体?”
- “实体关系如何?”
- “需要多少表?”
- “SQL 还是 NoSQL?”
API design
定义系统对外接口,明确参数与返回结构。无需写实现代码,只需清晰接口。
例如:
createUser(name: string, email: string): User
先保持简洁,后续扩展。
High-level component design
确定系统组件(Load Balancer、API Gateway、DB 等),画出高层设计,并解释其工作流程。
- “Monolith 还是 microservices?”
- “用哪类 database?”
Detailed design
深入关键组件,展示你的经验与权衡:
- “如何分区数据?”
- “如何做 load distribution?”
- “是否使用 cache?”
- “如何处理流量峰值?”
避免过于武断。用事实与案例解释选择,体现专业与谦逊。
Identify and resolve bottlenecks
讨论瓶颈与优化策略:
- “DB replicas 足够吗?”
- “有哪些 single point of failure?”
- “需要 sharding 吗?”
- “如何提高 cache availability?”
建议阅读目标公司的工程博客,了解其技术栈与关注问题。