系统设计面试的框架

系统设计面试往往令人生畏,比如让你“设计一个知名的产品X”,没人能在1小时内设计出原本需要成百上千个 工程师才能创建的受欢迎的产品。

这个问题是开放的,没有完美答案,与你在设计过程中付出的努力相比,最终的设计结果并不重要。在这个过程可以展示自己的设计能力,为自己选择的设计方案辩护,建设性地回应反馈。

有效的系统设计面试的四个步骤

每家公司的系统设计面试都不一样,好的系统设计面试是开放式的,没有万能的解决方案。

一 理解问题并确定设计的边界

在系统设计面试中,不假思索快速给出答案并不会为你加分,在没有彻底了解需求之前就回答问题是面试中的大忌, 因为面试不是知识问答竞赛,它没有正确答案。

工程师要 问正确的问题,做合适的假设,并收集构建系统需要的所有信息,不要害怕提问。

例如,要求设计一个 news feed (新鲜事信息流)系统,你想问几个问题弄清楚需求

二 提议高层级的设计并获得认同

指定高层级的设计,与面试官与设计达成一致。

设计一个 news feed 系统,从高层级来看,系统的设计分为两个流程:发布 feed 和 创建 news feed。

图3-1
图3-2

三 设计继续深入

你应该和面试官一起识别架构中的组件并对它们划出优先级顺序。

面试中的时 间 管理是至关重要的,因为你很容易就会陷入一些无法证明自己能力的小细节中。你必须向面试官展示自己的能力 。 尽量不要陷入不必要的细节讨论 。

接下来,探讨两个最重要的用例。

  1. feed 发布
  2. news feed 获取
图3-3
图3-4

四 总结

在最后 一 步 ,面试 官可能会对你之前的 回答进一步追问, 或者让你自由讨论一些其他问题。下面是一些你可以尝试的方向。

面试中每一步的时间分配

系统设计面试的问题非常广泛,45分钟或1小时的面试往往不够讲完整个设计。所以,时间管理很重要。

  1. 理解问题并确定设计的边界(3-10分钟)
  2. 提高高层级的设计并获得认同(10-15分钟)
  3. 设计继续深入(10-25分钟)
  4. 总结(3-5分钟)