系统设计入门指南 (System Design Primer) 是一个综合资源,旨在帮助软件工程师学习如何设计大规模系统并为系统设计面试做准备。本文档概述了该仓库的目的、结构和关键组成部分。
系统设计入门指南主要有以下两个目的:
该仓库包含系统设计主题、实践示例、面试策略、常见系统设计问题的示例解决方案以及像抽认卡之类的额外资源。
有关面向对象设计面试准备,请参阅面向对象设计。
系统设计入门指南仓库分为几个主要部分,如下所示:
来源: README.md1-91
系统设计入门指南根据您的面试准备时间线提供不同的学习路径
| 时间线 | 方法 | 重点 |
|---|---|---|
| 短期 | 广度 | 阅读系统设计主题、公司工程博客,回顾真实世界架构,解决一些面试问题 |
| 中等 | 广度 + 一些深度 | 与短期时间线相同,外加解决许多面试问题 |
| 长期 | 广度 + 更多深度 | 与中期时间线相同,外加解决大多数面试问题 |
推荐的准备方法会根据您的可用时间和经验水平进行调整。通常期望经验更丰富的候选人对系统设计有更深入的了解。
来源: README.md181-217
系统设计面试是一种开放式对话,您需要在其中主导讨论。以下四步法提供了一种结构化的方法来应对系统设计面试问题:
来源: README.md218-286
系统设计入门指南涵盖了设计可扩展系统所必需的广泛主题。这些主题相互关联并层层递进,如下所示:
来源: README.md90-180 README.md372-411
该仓库提供了常见系统设计面试问题的详细解析,包括:
| 系统设计示例 | 涵盖的关键概念 |
|---|---|
| Pastebin / Bit.ly | URL缩短、哈希函数、数据库存储 |
| Twitter时间线 | 信息流生成、扇出、缓存策略 |
| 网络爬虫 | 分布式处理、URL前沿、礼貌性 |
| Mint.com | 金融数据聚合、安全性、数据处理 |
| 社交图谱 | 图数据库、关系建模、遍历 |
| 键值存储 | 分布式存储、一致性、分区 |
| 销售排名 | 实时分析、聚合、缓存 |
| 在 AWS 上进行扩展 | 云基础设施、微服务、弹性 |
每个解决方案都包括讨论、图表和实现注意事项,以帮助理解设计过程。
来源: README.md287-352
该仓库还涵盖了面向对象设计示例,包括:
这些示例侧重于类结构、继承、封装以及设计模式的应用。
来源: README.md353-371
系统设计入门指南包含 Anki 抽认卡牌组,以帮助记忆关键概念
这些抽认卡利用间隔重复来巩固学习,并专为随时随地学习而设计。
该仓库还提供:
来源: README.md46-73 README.md1579-1598 README.md1599-1636 README.md1747-1798
系统设计入门指南是一个开源项目,欢迎以各种形式的贡献:
贡献者可以帮助完善需要改进的内容,这些内容在仓库中被标记为“开发中”。