Approach a System Design Interview

Posted by chunyang on July 18, 2019

翻译自:Approach a System Design Interview

所有权归原作者所有。仅供参考学习

本博客会教你如何在短时间内系统地处理系统设计的面试。总所周知,这个主题十分宽泛,要想成为 这方面的专家,需要持续阅读相关主题、书以及实践。

我会撰写一系列的博客来理清系统设计面试。

请记住:除非你声明你知道设计大的系统,否则不要害怕系统设计面试问题,因为你的面试官 可能不会期望你自动知道这件事。他们只想知道你如何解决这些问题。

让我们从一个初学者开始,面试官希望从我们这里得到什么?有太多的概念,方向,元素,利与弊,一个人 不可能在 4 个小时内描述这些,更不用说 45 分钟。

当公司问设计问题时,他们想要评估你的设计能力和在设计大型分布式系统方面的经验。在这种面试中的 表现会决定的招聘级别(以及某些情况下,薪水)。所以,有一个计划,并且为这种面试准备是对你很有利的。 所以,我们开始准备吧!

问题:面对系统设计问题,我们的方法应该是什么?

答案: 采用一些你将要遵从的步骤,然后在 30 ~ 45 分钟内结束讨论。我们都知道,所有的工程师 都不是工作在系统的方方面面(注:感觉作者写错了,是 system wide,不是 system side)。对!

我们会创建一些解决设计问题的步骤,然后在我们的面试过程中遵从它。这样我们就知道我们在说什么了。对!

记住

  1. 需求收集(和面试官讨论 2 分钟)
  2. 系统接口定义(暂定 1 到 2 分钟,记录下你的想法,利用 5 分钟时间解释你有什么)
  3. 容量预估(记录下你的想法,10 到 15 分钟展示时间)
  4. 定义你的数据模型( 10 到 15 分表述所有事情,例如:实体,之间的交互,数据管理,例如存储,转移 加密等)
  5. 上层设计(3 到 5 分钟展示时间,配以手绘图,试着总结)

如果你记住这些步骤,而且对系统设计中的一些基本概念都有了解,你可以轻松顺利通过 1 到 2 轮的面试。 但是有些公司只有系统面试,你需要更多的时间和支持来面试。这两方面我们都会考虑(部分系统面试以及 全部都是系统面试)

我们将会在后续的博客中涉及如下主题,也会有奖励时间:

  1. Scability(扩展性)
  2. Sharding or Data Partitioning (数据分区)
  3. Load Balancing (负载均衡)
  4. Caching (缓存)
  5. Indexes
  6. Proxies
  7. Queues
  8. Redundancy and Replication
  9. SQL v.s. NoSQL 10 CAP Theorem 11 Consistent Hashing
  10. Security
  11. Analytics

译者注

这篇文章非常通用。主要告诉用户一些基本的路子。当我们面对一个新的系统设计时,我们可以按照上面的 步骤来思考和回答面试官的问题。我觉得 step by step 可以解决。

本文完