注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号 
x
对于刚毕业初入职场的同学甚至是有一些工作年限的老司机来说,系统设计都是老大难的问题。一方面是系统设计题总数虽然不多,但同一题都能从不同角度考出花来,没有标准答案。另一方面是系统设计结构性不强,面试官讲一下设计个什么就等着同学解题,同学们不知道怎么一步步下手破题。
我在业界摸爬滚打近十年,曾在一线大厂做过近百场面试,其中一大部分都是系统面试,希望能够回馈社区,分享一些自己的干货,解答大家一些困惑,也希望抛砖引玉,大家一起讨论,不对的地方欢迎大家批评指正。
今天这篇文章会针对Software Engineer System Design Interview, 从面试官的角度解构系统设计面试。这篇文章不会给具体的题做过多的分析,也不对网上有很多资料的问题做赘述,而是给系统设计的考察目标,优秀答案的特征和破题的步骤三个角度给大家分析,作为别的资料的补充。
第一, 面试官的考察目标。
跟算法面试类似的,面试官需要能从人群里分辨出谁强谁弱。算法面试因为大家都刷Leetcode,如今已经很难分辨谁是当场想出来的,谁是刷过题记住的答案。系统设计面试因为覆盖面广,而网上资料又不能面面俱到,对于面试者的区分会更容易一些,这也是为什么系统设计越来越流行的,越来越年轻化的原因。
由于系统设计对面试官的知识和设计能力要求更高,通常系统设计的面试官更为资深,在debrief中话语权也更大(尤其是在定级别的时候),大家千万要重视起来,不要因此拿不到想要的offer和级别。
拆开来说,面试官会从以下四个角度去考察:
- 交流沟通和理解能力 - 跟面试官充分交流理解所设计系统的目标,方便做设计中的tradeoff,在厂里干过的就知道日常工作中这个非常重要
- 设计和架构能力 - 很多我见过的面试者都只注重在这块而忽略了其他,很可惜
- 扩展性,容错性,延迟要求 - 跟Opeartion相关的要求,如今Dev和Ops不分家,希望面试者了解系统今后能如何扩展,易于maintain。
- 资源需求 - 对于我们所要求的QPS和latency,需要多少台机器,其中CPU, 内存,硬盘等资源都是如何配置
大家看到这里可能要说,我要是有这个本事把这些都做的面面俱到,我就是顶尖的构架师了,自己做startup也不在话下。不得不说,要求确实很高,但不要忘记面试官除了决定给不给offer,还要决定给几级的offer, 面试官就是考你怎么造火箭,然后好给你定级别说去拧几级的螺丝钉。
当然,以上四点,根据同学们的实际情况,并不用在每一点上都给出完整的回答,面试官会在面试过程中指出深挖的方向,有可能是根据同学的专业或者职业背景,有可能是根据所面试的岗位,有可能是根据面试中同学提到的他熟悉的技术。
第二,优秀答案的特征。
在面试生涯中,我见过的最优秀的面试者比我的级别要高,让我印象非常深刻,四个字,深不见底。
面试的前半段,面试官会先从广度下手,要求受试者对题目的大框架给出一个完整的正确的解法。如果受试者给出了足够好的解法,那么面试官会从受试者的提过的某一个细部进行深挖,可能是深挖scalability,可能是改变一个需求要求重新做tradeoff,可能是某一个service的细节设计。因为其中的细节足够多,受试者一般很难准备得面面俱到,面试官可以比较清楚的画出受试者的能力边界。前面提到的这个受试者之所以让我感到深不见底,是因为我才疏学浅,画不出他的能力边界,不得不赞叹大神,在debrief中好好膜拜了一番。
说了这么多,还是想说平时的积累很重要,面试速成能够让你在广度上做的很好,深度方面还是要多花时间学习。
讲完了废话,讲一些可以操作性强的,我们来把前面说的考察目标和优秀回答的特征做进一步表述。
交流沟通和理解能力- 询问系统的商业目的,建这个系统是为了解决什么问题 (相关的问题比如这个服务的受众有什么特点,是商业用户还是个人用户。很多时候问不问这个问题就能看出Senior的程度)
- 询问系统的功能和技术需求(比如DAU, QPS, Latency,包含哪些子功能。这部分网上内容很多,不赘述了)
- 定义成功 (前面问了那么多,我们要总结说我们在面试结束前我们的设计要实现什么功能,达到什么QPS,latency或者availability指标。写下来并跟面试官确认。如果这里牵涉到一些ballpark calculation,跟面试官确认是不是需要算。)
- 整场面试过程中跟着面试官的引导走(有的同学看到准备过的题就很兴奋,文思泉涌面试官都拉不住,会让人觉得理解能力不足)
说了这么多,希望对大家有帮助。作为纯原创内容,希望也能给点大米。
文中提到了很多大块的内容没有深入去写,如果大家觉得哪一块想听,可以在帖子里留言,我也可以进一步说说。
另外,欢迎大家私信我你的问题和微信(大米少啊),我会尽量回复。
补充内容 (2020-1-6 07:40):
文中 扩展性是Scalability的翻译,中文有含糊的地方,大家照英文来理解。
补充内容 (2020-1-6 07:41):
我没有要贬低算法题的意思,算法题仍是面试最重要的部分,拿到offer的基础。
|