Mekal Z

Mekal Z

A programmer running out of the wall.
twitter

结构化系统设计面试

4 个步骤来进行完美的系统设计面试#

  • 第一步:理解问题并确定设计范围#

    • 我们的工作是提出尽可能多的问题,以充分理解问题。在没有首先理解我们要构建的内容之前直接跳入解决方案是一个红旗。目标是理解我们为什么要构建这个系统,用户是谁,以及我们需要构建哪些功能。黄金法则是按优先顺序理解我们要构建的功能。我们应该专注于要构建的主要功能。确保面试官同意功能列表。
    • 还需要提出一系列问题以澄清非功能性需求。对于系统设计面试,我们最好专注于规模和性能。这些非功能性需求使我们的设计独特且具有挑战性。角色越高级,展示我们处理非功能性需求的能力就越重要。
    • image
    • 为了帮助我们了解系统的规模以及潜在的挑战和瓶颈,我们可以在这里进行一些粗略的估算。请记住,我们尚未设计任何内容,因此我们在这里的计算只是粗略估计。目标是对规模有一个大致的了解。我们希望正确把握数量级。
    • 在这一步结束时,我们应该有一个简短的功能列表以及一些重要的非功能性需求。
  • 第二步:提出高层设计并获得认可#

    • 在这一步中,我们的目标是制定一个高层设计,并与面试官达成一致。
    • 对于大多数设计,采用自上而下的方法,从 API 开始是更好的选择。API 在最终用户和后端系统之间建立了合同。在收集需求后,应该清楚我们需要哪些 API。除非另有说明,我们应该遵循 RESTful 约定。仔细定义每个 API 的输入参数和输出响应。花时间仔细审查 API。验证它们是否满足功能需求。同样重要的是,不要引入与功能需求无关的 API。
    • 关于 API 的另一个考虑。有些设计可能需要客户端和服务器之间的双向通信。在这种情况下,WebSocket 是一个常见的解决方案。请注意,像 WebSocket 这样的套接字服务通常是有状态的。在大规模操作时相当具有挑战性。如果规模很大,请准备在深入讨论部分讨论我们将如何管理 WebSocket 部署。
    • 一旦我们在客户端和服务器之间建立了 API,下一步就是绘制高层设计图。该图是我们可以参考的整体设计蓝图。我们应该用它来验证设计是否满足所有功能需求的端到端。对于许多设计,它通常以负载均衡器或 API 网关开始。在其后是满足我们之前与面试官建立的功能需求的服务。
    • 许多服务需要某种形式的持久性。这是我们通过引入数据存储层来完善设计的地方。在这个阶段通常不需要指定使用的确切数据库技术。如果有必要,这应该推迟到深入讨论部分,并且仅在我们设计了数据架构之后。
    • 在开发高层设计时,保持一个讨论要点的列表以备后用。抵制过早深入细节的诱惑。在我们对设计有全面了解之前,不要给自己挖坑。
    • 高层设计的最后一步是讨论数据模型和架构。在这里,我们应该讨论数据模式和读 / 写比率。在大规模时,数据建模可能会显著影响设计的性能。如果它很简单,还应讨论选择的数据库,并可能讨论索引选项。
    • 在这里我们应该做出一些判断。如果数据建模是满足非功能性需求的设计关键部分,我们可能希望将讨论推迟到深入讨论部分。
    • 完成高层设计后,退后一步审查设计。确保每个功能都是完整的端到端。
  • 第三步:设计深入讨论#

    • 这一步的目标是展示我们能够识别可能存在问题的领域,并提出解决方案并讨论权衡。
    • 我们应该与面试官密切合作,决定深入讨论的内容。深入讨论是非功能性需求使问题变得有趣的地方。级别越高,这一部分就越重要。该部分实际上是开放式的。没有一种适合所有人的方法。在这里,能够 “读懂房间” 是有用的。有时,面试官的肢体语言可能会透露出他们对设计某些方面不满意的线索。重要的是要捕捉到这些线索,并确保所有问题都得到解决。我们可以通过提问来接近这个问题。我们可以列出选择特定解决方案的理由,并询问他们是否有任何问题和担忧。
    • 一旦我们挑选出一个或两个问题进行深入探讨,我们应该提出多个解决方案并讨论每个选项的权衡。我们可以在框定讨论时使用以下小指南。
      • 首先,我们应该清楚地阐明问题。
      • 接下来,我们提出至少两个解决方案。
      • 第三,讨论解决方案的权衡。
      • 最后,我们选择一个解决方案并与面试官讨论。
      • image
  • 第四步:总结#

    • 花几分钟时间总结设计是值得的。在这里,我们应该专注于特定情况的独特部分。保持简短明了。在面试结束时留出足够的时间向面试官询问有关公司的问题。

1 小时面试的时间分配#

  • 前 5 分钟:介绍
  • 45 分钟:面试过程
    • 第 1 步:理解问题并确定设计范围 5 分钟
    • 第 2 步:提出高层设计并获得认可 20 分钟
    • 第 3 步:设计深入讨论 15 分钟
    • 第 4 步:总结 5 分钟
  • 最后 5 分钟:问答

本文是 YouTube 视频 系统设计面试:逐步指南 的摘要笔记

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。