2019-02-06 系统设计入门(增长面试经验)

请点击下文链接查看详细,本文章只是一个目录,具体内容去原文查看

系统设计入门

<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>

学习指引

基于你面试的时间线(短、中、长)去复习那些推荐的主题。

《2019-02-06 系统设计入门(增长面试经验)》 Imgur

问:对于面试来说,我需要知道这里的所有知识点吗?

答:不,如果只是为了准备面试的话,你并不需要知道所有的知识点。

在一场面试中你会被问到什么取决于下面这些因素:

  • 你的经验
  • 你的技术背景
  • 你面试的职位
  • 你面试的公司
  • 运气

那些有经验的候选人通常会被期望了解更多的系统设计的知识。架构师或者团队负责人则会被期望了解更多除了个人贡献之外的知识。顶级的科技公司通常也会有一次或者更多的系统设计面试。

面试会很宽泛的展开并在几个领域深入。这会帮助你了解一些关于系统设计的不同的主题。基于你的时间线,经验,面试的职位和面试的公司对下面的指导做出适当的调整。

  • 短期 – 以系统设计主题的广度为目标。通过解决一些面试题来练习。
  • 中期 – 以系统设计主题的广度初级深度为目标。通过解决很多面试题来练习。
  • 长期 – 以系统设计主题的广度高级深度为目标。通过解决大部分面试题来练习。
短期中期长期
阅读 系统设计主题 以获得一个关于系统如何工作的宽泛的认识:+1::+1::+1:
阅读一些你要面试的公司工程博客的文章:+1::+1::+1:
阅读 真实架构:+1::+1::+1:
复习 如何处理一个系统设计面试题:+1::+1::+1:
完成 系统设计的面试题和解答一些很多大部分
完成 面向对象设计的面试题和解答一些很多大部分
复习 其它的系统设计面试题一些很多大部分

如何处理一个系统设计的面试题

系统设计面试是一个开放式的对话。他们期望你去主导这个对话。

你可以使用下面的步骤来指引讨论。为了巩固这个过程,请使用下面的步骤完成系统设计的面试题和解答这个章节。

第一步:描述使用场景,约束和假设

把所有需要的东西聚集在一起,审视问题。不停的提问,以至于我们可以明确使用场景和约束。讨论假设。

  • 谁会使用它?
  • 他们会怎样使用它?
  • 有多少用户?
  • 系统的作用是什么?
  • 系统的输入输出分别是什么?
  • 我们希望处理多少数据?
  • 我们希望每秒钟处理多少请求?
  • 我们希望的读写比率?

第二步:创造一个高层级的设计

使用所有重要的组件来描绘出一个高层级的设计。

  • 画出主要的组件和连接
  • 证明你的想法

第三步:设计核心组件

对每一个核心组件进行详细深入的分析。举例来说,如果你被问到设计一个 url 缩写服务,开始讨论:

  • 生成并储存一个完整 url 的 hash
    • MD5Base62
    • Hash 碰撞
    • SQL 还是 NoSQL
    • 数据库模型
  • 将一个 hashed url 翻译成完整的 url
    • 数据库查找
  • API 和面向对象设计

第四步:扩展设计

确认和处理瓶颈以及一些限制。举例来说就是你需要下面的这些来完成扩展性的议题吗?

  • 负载均衡
  • 水平扩展
  • 缓存
  • 数据库分片

论述可能的解决办法和代价。每件事情需要取舍。可以使用可扩展系统的设计原则来处理瓶颈。

预估计算量

你或许会被要求通过手算进行一些估算。附录涉及到的是下面的这些资源:

相关资源和延伸阅读

查看下面的链接以获得我们期望的更好的想法:

系统设计的面试题和解答

普通的系统设计面试题和相关事例的论述,代码和图表。

与内容有关的解答在 solutions/ 文件夹中。

问题
设计 Pastebin.com (或者 Bit.ly)解答
设计 Twitter 时间线和搜索 (或者 Facebook feed 和搜索)解答
设计一个网页爬虫解答
设计 Mint.com解答
为一个社交网络设计数据结构解答
为搜索引擎设计一个 key-value 储存解答
通过分类特性设计 Amazon 的销售排名解答
在 AWS 上设计一个百万用户级别的系统解答
添加一个系统设计问题贡献

设计 Pastebin.com (或者 Bit.ly)

查看实践与解答

《2019-02-06 系统设计入门(增长面试经验)》 Imgur

设计 Twitter 时间线和搜索 (或者 Facebook feed 和搜索)

查看实践与解答

《2019-02-06 系统设计入门(增长面试经验)》 Imgur

设计一个网页爬虫

查看实践与解答

《2019-02-06 系统设计入门(增长面试经验)》 Imgur

设计 Mint.com

查看实践与解答

《2019-02-06 系统设计入门(增长面试经验)》 Imgur

为一个社交网络设计数据结构

查看实践与解答

《2019-02-06 系统设计入门(增长面试经验)》 Imgur

为搜索引擎设计一个 key-value 储存

查看实践与解答

《2019-02-06 系统设计入门(增长面试经验)》 Imgur

设计按类别分类的 Amazon 销售排名

查看实践与解答

《2019-02-06 系统设计入门(增长面试经验)》 Imgur

在 AWS 上设计一个百万用户级别的系统

查看实践与解答

《2019-02-06 系统设计入门(增长面试经验)》 Imgur

    原文作者:Albert陈凯
    原文地址: https://www.jianshu.com/p/e63c11a375c1
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞