求职者最怕问题No.1!系统设计面试到底该如何准备?

在面试阶段,很多的大公司都会考到系统设计问题,比如Google、Facebook、Uber、LinkedIn等等。之前看到有刚刚面了Airbub的同学说,Airbub面试还会考经典的RSS系统设计,不仅如此,最近还有同学反映,Google的实习SDE都要开始考系统设计了!看来大厂们对系统设计的要求真的是越来越高了。

然而系统设计问题又是一个老大难问题。系统设计的难点在于它的完全开放性。这个问题没有一个标准答案,没有标准答案也就意味着同学们不能在面试之前做一些针对性的准备,所以在拿到题之前,你都完全不会知道自己会遇到什么样的问题,甚至不知道自己辛辛苦苦写下来的代码到底会不会工作。

求职者最怕问题No.1!系统设计面试到底该如何准备?

一般来说,在面试中会遇到的系统设计问题可分为以下两类:

设计一个具体的系统:

  • 设计滴滴;
  • 设计微博;
  • 设计人人;
  • 设计微信;
  • 设计推特;
  • 设计一个搜索引擎;
  • 设计一个NoSQL数据库系统......

或者是设计实现系统中的某一个功能:

  • 设计一个为用户定期推送内容的功能;
  • 设计一个能统计某个历史事件发生次数的功能;
  • 设计邮件系统中把所有未读文件改为已读的功能;
  • 设计一个限制用户访问频率的功能......

具体考察内容

系统是非常复杂的。当你在设计一个系统时,你必须直面所有的复杂性。基于这一点,你必须熟知以下内容:

1.并发性(concurrency)

你知道线程(threads)、死锁(deadlock)和starvation吗?

你知道如何并行化算法吗?

你了解一致性(consistency)和连贯性(coherence)吗?

你大概了解IPC和TCP/IP吗?

你知道吞吐量(throughput) 和延迟(latency)的区别吗?

2.现实表现(real-word performance)

你应当熟悉你电脑的速度和性能,包括RAM、硬盘、SSD以及你的网络状况。

3.估计(estimation)

估计在帮助你缩小可能性解决方案的范围时起到了重要的作用。这样,你就只需写少数几个原型或微基准。

4.可用性和可靠性(availability and reliability)

你是否考虑过系统什么时候会出现bug无法运行吗(特别是在分散式的环境中)?

你知道如何设计一个系统以应当网络故障吗?

你了解持久性吗?

切记,我们并不是要寻找一个熟悉以上所有的问题的“全才”。我们想衡量的是你的熟练程度。我们只需要你对系统设计方面有一定的基础,并且知道什么时候应该寻求专家的帮助。

那么要如何准备系统设计面试呢?

就像你在准备算法面试和程序面试时一样,你必须刷无数的题,系统设计同样需要练习。以下提供一些可以帮助你提高的建议:

▪ 模拟系统设计面试。邀请一个工程师帮你模拟面试。让他提出一个系统设计问题,如果正好是他正在做的项目那就再好不过了。不要把它当成是一个面试,而是放轻松地去思考问题,并提出你能想到的最佳解决方案。

▪ 在实际的系统中去实践。你可以在既有的OSS中去练习,也可以与朋友合作搭建一个系统。对于课堂中的系统设计作业,不再把它仅仅当成一个学术训练,而是把它当成实际问题,思考系统设计过程中的架构和博弈。正如我们生活中遇到的大多事情一样,只有做了才知道其中会遇到什么问题,从而真正学到东西。

▪ 深挖开源系统的运行特点。例如,你可以看看levelDB。这是一个干净、小、且编写良好的系统。你可以读读执行命令,了解它是如何在硬盘中存储数据的,如何将数据压缩成不同的层?你也可以多多反思一下的博弈问题:哪种数据和大小是最优的?什么情况下会降低读写速度?(提示:比较一下随机写和顺序写)

▪ 多了解一下系统中数据库和操作系统是如何运行的。这些技术并不只是你口袋中的工具,它们往往会在你设计系统的时候给你带来启发。如果你经常像DB或OS一样思考它们如何处理各自的问题,你也会把这些思考方式应用到其它的系统设计中去。

最后,放轻松,表现出你的创造力。

系统设计或许比较难,但它也是可以让你表现自己创造力的地方。在面试时,注意聆听问题,确保你了解该问题,并且直接、清晰地向面试官表达你的想法,你的表现肯定会得到面试官的认可。

系统设计面试真题:

FB 系统设计真题解析 & 面试官评分标准

系统设计面试真题 | Post 系统的设计

系统设计面试真题 | 设计Ticket Master

最新系统设计面试真题

Palanir系统设计面经

Google系统设计面试真题

相关课程推荐:

系统设计班理论加实战相辅相成,通过真实案例深入分析,增加网络爬虫内容,更深入了解系统设计。视频录播,随时学习。点击免费试听。


九章算法,硅谷一线工程师在线直播授课,已经帮助30000+人成功拿到心仪offer。

更多课程信息请访问:九章算法