系统设计-Ch3-系统设计面试框架
系统设计面试框架
系统设计面试通常听上去很令人费解,它可以像:“请设计一个非常知名的产品XXX?”一样模糊且宽泛。
你的担忧情有可原----毕竟,谁能够在1小时内设计出一款由成百上千名开发人员历经数年打造的产品呢?
但好消息是,没人指望你这么做,现实世界的系统设计非常复杂,在面试时间内不可能设计出真实的系统。
在这整个系统设计面试过程中,面试官真正想要考察的是你的作为一个开发人员的综合能力,包括:
提出问题的能力:
思考对于当前的系统,什么是关键问题,然后提出;提问也是交流过程,能向面试官展现你的沟通能力
Tips:
一些可能能用到的问题:
- 系统的核心功能是什么?每个功能的具体需求是什么?(不要想当然,要主动询问确定需求)
- 公司的技术栈是什么? 我可以利用哪些现有服务简化设计?
思考问题的能力:
思考如何把这个大的系统设计,这个问题划分成多个子问题,降低问题的level有助于降低问题的难度
Tips:
问题往往需要按模块(比如功能模块)拆分
你可以打开电脑的画板,一边画出模块拆分图示,一遍解释你这样拆分的理由
解决问题的能力:
划分到不可分割的子问题模块后,你该采用哪些技术细节来解决这个子问题
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 scope | 3 - 10 min |
Step2:Propose high-level design and get buy-in | 10 - 15 min |
Step3:Design deep dive | 10 - 25 min |
Step4:Warm up | 3 - 5 min |
本博客所有文章均采用 CC BY-NC-SA 4.0 协议 ,禁止商用,转载请注明出处!