系统设计-Ch3-系统设计面试框架

系统设计面试框架

系统设计面试通常听上去很令人费解,它可以像:“请设计一个非常知名的产品XXX?”一样模糊且宽泛。
你的担忧情有可原----毕竟,谁能够在1小时内设计出一款由成百上千名开发人员历经数年打造的产品呢?

但好消息是,没人指望你这么做,现实世界的系统设计非常复杂,在面试时间内不可能设计出真实的系统。
在这整个系统设计面试过程中,面试官真正想要考察的是你的作为一个开发人员的综合能力,包括:

  • 提出问题的能力

    思考对于当前的系统,什么是关键问题,然后提出;提问也是交流过程,能向面试官展现你的沟通能力

    Tips:

    一些可能能用到的问题:

    • 系统的核心功能是什么?每个功能的具体需求是什么?(不要想当然,要主动询问确定需求)
    • 公司的技术栈是什么? 我可以利用哪些现有服务简化设计?
  • 思考问题的能力

    思考如何把这个大的系统设计,这个问题划分成多个子问题,降低问题的level有助于降低问题的难度

    Tips:

    1. 问题往往需要按模块(比如功能模块)拆分

    2. 你可以打开电脑的画板,一边画出模块拆分图示,一遍解释你这样拆分的理由

  • 解决问题的能力

    划分到不可分割的子问题模块后,你该采用哪些技术细节来解决这个子问题

    Tips:

    巧妇难为无米之炊,你不可能没有任何经验,然后凭空设计出一些不合理的方案丢给面试官;
    因此,你需要阅读一些经典案例,看看成功企业是如何设计的,站在巨人的肩膀上,汲取经验。

作者这里也给出来了系统设计面试框架的4个步骤,

Step1:Understand the problem and establish design scope

问正确的问题,做出合理的假设,然后整合所有信息再去构建整个系统框架。

Step2:Propose high-level design and get buy-in

提出一个整体上的系统框架蓝图,并与面试在设计上达成一致。

如果面试官给出了某些数据需求(QPS、Memo等)的话,尝试与面试官讨论封底计算(ch2)。

Step3:Design deep dive

这里就是具体的设计细节实现(组件设计),需要你有一些经验功底才能完成,但不要担心,记住下面提示:

  • 激发面试官的想法:把技术实现引导到你了解过的技术上,然后面试官会对你的实现做评价反馈
  • 不要放弃:总有你没碰到过的技术难题,但就算你毫无头绪,也不要直接放弃—你可以向面试官寻求提示
    积极沟通、把你目前的想法说出来,不要陷入长时间的沉默思考,这样会让双方都很尴尬

Step4:Warm up

在完成设计后,面试官可能会提出一些follow up的问题,比如这个系统的瓶颈在哪里?有没有潜在的改进措施?或者让你自由讨论其它要点等等。

首先明确:永远不要说你的设计是完美的,没有什么可改进的。
这是一个很好的展示你的批判性思维的环节,指出瓶颈或提出好的改进措施可以留给面试官良好的最终印象。

时间分配

把握面试时间很重要,这里给出每个步骤的时间分配供参考:

Step时间
Step1:Understand the problem and establish design scope3 - 10 min
Step2:Propose high-level design and get buy-in10 - 15 min
Step3:Design deep dive10 - 25 min
Step4:Warm up3 - 5 min