如何处理一个系统设计的面试题
系统设计面试是一个开放式的对话。他们期望你去主导这个对话。
你可以使用下面的步骤来指引讨论。为了巩固这个过程,请使用下面的步骤完成系统设计的面试题和解答这个章节。
第一步:描述使用场景,约束和假设
把所有需要的东西聚集在一起,审视问题。不停的提问,以至于我们可以明确使用场景和约束。讨论假设。
- 谁会使用它?
- 他们会怎样使用它?
- 有多少用户?
- 系统的作用是什么?
- 系统的输入输出分别是什么?
- 我们希望处理多少数据?
- 我们希望每秒钟处理多少请求?
- 我们希望的读写比率?
第二步:创建概要设计
使用所有重要的组件来描绘出一个概要设计。
- 画出主要的组件和连接
- 证明你的想法
第三步:设计核心组件
对每一个核心组件进行详细深入的分析。举例来说,如果你被问到设计一个 url 缩写服务,开始讨论:
- 生成并储存一个完整 url 的 hash
- 将一个 hashed url 翻译成完整的 url
- 数据库查找
- API 和面向对象设计
第四步:度量设计
确认和处理瓶颈以及一些限制。举例来说就是你需要下面的这些来完成拓展性的议题吗?
- 负载均衡
- 水平拓展
- 缓存
- 数据库分片
论述可能的解决办法和代价。每件事情需要取舍。可以使用可拓展系统的设计原则来处理瓶颈。
信封背面的计算
你或许会被要求通过手算进行一些估算。涉及到的附录涉及到的是下面的这些资源:
相关资源和延伸阅读
查看下面的链接以获得我们期望的更好的想法: