【转】 如何准备System Design的面试

【转】 如何准备System Design的面试

开发一个应用并不是一件难事,但是对应用的整体架构有一个深入的了解确实是一件了不起的事。一般,系统设计面试题都会放在最后来考察 candidate 的更高level的水平。

系统设计可以面试官充分地了解 candidate 的全方面的水平。涉及到操作系统,网络,模块化,设计模式,分布式等等系列的问题。面试官只要抓住一点感兴趣的点,就可以很快地了解 candidate 在这个领域的了解和深度。

一般系统设计面试题的解法分为四个步骤:

(Step 1),明确需求和规范。这个是最重要的,确保你的目标清晰明确,保证接下来的任务的分解和实施,能够保证实现你的目标。

(Step 2), 描绘出高层次的设计。 在这个阶段还不必去仔细描绘具体的实施细节。只需要将几个大的模块给确定好,就规划出他们之间的交互就行了。

(Step 3),接下来,就可以针对具体的每一个细节模块进行深入的讨论了。

比如,针对Web frontend 如何展示,backend 如何有效的处理user 的请求。

(Step 4),评估和计算。针对不同用户数量级别,不同性能需求的条件,来确定后面的机器硬件配置及数量等支撑条件。

其中,系统设计有主要的三个话题:分别是 交互,存储,CAP均衡。

(1), 交互。网络交互,是采用可靠但慢的TCP,还是采用不可靠但快速的UDP。HTTP 是在应用层,并且基于TCP协议。

(2),存储。涉及到关系型数据库,内存数据库和分布式数据库等等概念。 很多问题也不只是只能依靠某一个数据库来解决的。只要设计合理,可以满足条件就行。

(3),CAP均衡。根据CAP定理,在consistency, availability 和 partition tolerance 上的只能达到一张 trade off。

来自: http://www.puncsky.com/blog/2016/02/14/crack-the-system-design-interview/

原文地址:https://www.cnblogs.com/zhang-yd/p/7289658.html