请点击下文链接查看详细,本文章只是一个目录,具体内容去原文查看
<p align="center"> <img src="http://i.imgur.com/jj3A5N8.png"> </p>
学习如何设计大型系统。 为系统设计的面试做准备。
学习如何设计可扩展的系统将会有助于你成为一个更好的工程师。
系统设计是一个很宽泛的话题。在互联网上,关于系统设计原则的资源也是多如牛毛。
这个仓库就是这些资源的组织收集,它可以帮助你学习如何构建可扩展的系统。
这是一个不断更新的开源项目的初期的版本。
欢迎贡献!
在很多科技公司中,除了代码面试,系统设计也是技术面试过程中的一个必要环节。
实践常见的系统设计面试题并且把你的答案和例子的解答进行对照:讨论,代码和图表。
面试准备的其他主题:
<p align="center"> <img src="http://i.imgur.com/zdCAkB3.png"> </p>
这里提供的抽认卡堆使用间隔重复的方法,帮助你记忆关键的系统设计概念。
随时随地都可使用。
你正在寻找资源以准备编程面试吗?
<p align="center"> <img src="http://i.imgur.com/b4YtAEN.png"> </p>
请查看我们的姐妹仓库互动式编程挑战,其中包含了一个额外的抽认卡堆:
从社区中学习。
欢迎提交 PR 提供帮助:
一些还需要完善的内容放在了正在完善中。
请查看贡献指南。
各种系统设计主题的摘要,包括优点和缺点。每一个主题都面临着取舍和权衡。 每个章节都包含着更多的资源的链接。
<p align="center"> <img src="http://i.imgur.com/jrUBAF7.png"> </p>
基于你面试的时间线(短、中、长)去复习那些推荐的主题。
Imgur
问:对于面试来说,我需要知道这里的所有知识点吗?
答:不,如果只是为了准备面试的话,你并不需要知道所有的知识点。
在一场面试中你会被问到什么取决于下面这些因素:
那些有经验的候选人通常会被期望了解更多的系统设计的知识。架构师或者团队负责人则会被期望了解更多除了个人贡献之外的知识。顶级的科技公司通常也会有一次或者更多的系统设计面试。
面试会很宽泛的展开并在几个领域深入。这会帮助你了解一些关于系统设计的不同的主题。基于你的时间线,经验,面试的职位和面试的公司对下面的指导做出适当的调整。
短期 | 中期 | 长期 | |
---|---|---|---|
阅读 系统设计主题 以获得一个关于系统如何工作的宽泛的认识 | :+1: | :+1: | :+1: |
阅读一些你要面试的公司工程博客的文章 | :+1: | :+1: | :+1: |
阅读 真实架构 | :+1: | :+1: | :+1: |
复习 如何处理一个系统设计面试题 | :+1: | :+1: | :+1: |
完成 系统设计的面试题和解答 | 一些 | 很多 | 大部分 |
完成 面向对象设计的面试题和解答 | 一些 | 很多 | 大部分 |
复习 其它的系统设计面试题 | 一些 | 很多 | 大部分 |
系统设计面试是一个开放式的对话。他们期望你去主导这个对话。
你可以使用下面的步骤来指引讨论。为了巩固这个过程,请使用下面的步骤完成系统设计的面试题和解答这个章节。
把所有需要的东西聚集在一起,审视问题。不停的提问,以至于我们可以明确使用场景和约束。讨论假设。
使用所有重要的组件来描绘出一个高层级的设计。
对每一个核心组件进行详细深入的分析。举例来说,如果你被问到设计一个 url 缩写服务,开始讨论:
确认和处理瓶颈以及一些限制。举例来说就是你需要下面的这些来完成扩展性的议题吗?
论述可能的解决办法和代价。每件事情需要取舍。可以使用可扩展系统的设计原则来处理瓶颈。
你或许会被要求通过手算进行一些估算。附录涉及到的是下面的这些资源:
查看下面的链接以获得我们期望的更好的想法:
普通的系统设计面试题和相关事例的论述,代码和图表。
与内容有关的解答在
solutions/
文件夹中。
问题 | |
---|---|
设计 Pastebin.com (或者 Bit.ly) | 解答 |
设计 Twitter 时间线和搜索 (或者 Facebook feed 和搜索) | 解答 |
设计一个网页爬虫 | 解答 |
设计 Mint.com | 解答 |
为一个社交网络设计数据结构 | 解答 |
为搜索引擎设计一个 key-value 储存 | 解答 |
通过分类特性设计 Amazon 的销售排名 | 解答 |
在 AWS 上设计一个百万用户级别的系统 | 解答 |
添加一个系统设计问题 | 贡献 |
Imgur
Imgur
Imgur
Imgur
Imgur
Imgur
Imgur
Imgur