翻译自:Approach a System Design Interview
所有权归原作者所有。仅供参考学习
本博客会教你如何在短时间内系统地处理系统设计的面试。总所周知,这个主题十分宽泛,要想成为 这方面的专家,需要持续阅读相关主题、书以及实践。
我会撰写一系列的博客来理清系统设计面试。
请记住:除非你声明你知道设计大的系统,否则不要害怕系统设计面试问题,因为你的面试官 可能不会期望你自动知道这件事。他们只想知道你如何解决这些问题。
让我们从一个初学者开始,面试官希望从我们这里得到什么?有太多的概念,方向,元素,利与弊,一个人 不可能在 4 个小时内描述这些,更不用说 45 分钟。
当公司问设计问题时,他们想要评估你的设计能力和在设计大型分布式系统方面的经验。在这种面试中的 表现会决定的招聘级别(以及某些情况下,薪水)。所以,有一个计划,并且为这种面试准备是对你很有利的。 所以,我们开始准备吧!
问题:面对系统设计问题,我们的方法应该是什么?
答案: 采用一些你将要遵从的步骤,然后在 30 ~ 45 分钟内结束讨论。我们都知道,所有的工程师 都不是工作在系统的方方面面(注:感觉作者写错了,是 system wide,不是 system side)。对!
我们会创建一些解决设计问题的步骤,然后在我们的面试过程中遵从它。这样我们就知道我们在说什么了。对!
记住
- 需求收集(和面试官讨论 2 分钟)
- 系统接口定义(暂定 1 到 2 分钟,记录下你的想法,利用 5 分钟时间解释你有什么)
- 容量预估(记录下你的想法,10 到 15 分钟展示时间)
- 定义你的数据模型( 10 到 15 分表述所有事情,例如:实体,之间的交互,数据管理,例如存储,转移 加密等)
- 上层设计(3 到 5 分钟展示时间,配以手绘图,试着总结)
如果你记住这些步骤,而且对系统设计中的一些基本概念都有了解,你可以轻松顺利通过 1 到 2 轮的面试。 但是有些公司只有系统面试,你需要更多的时间和支持来面试。这两方面我们都会考虑(部分系统面试以及 全部都是系统面试)
我们将会在后续的博客中涉及如下主题,也会有奖励时间:
- Scability(扩展性)
- Sharding or Data Partitioning (数据分区)
- Load Balancing (负载均衡)
- Caching (缓存)
- Indexes
- Proxies
- Queues
- Redundancy and Replication
- SQL v.s. NoSQL 10 CAP Theorem 11 Consistent Hashing
- Security
- Analytics
译者注
这篇文章非常通用。主要告诉用户一些基本的路子。当我们面对一个新的系统设计时,我们可以按照上面的 步骤来思考和回答面试官的问题。我觉得 step by step 可以解决。
本文完