面试准备:系统设计
最近我一直在思考的一个话题是系统设计。在我的信息面试过程中,我收集了一些小信息,帮助我准备该公司的面试流程。其中一条信息与系统设计有关,通常被表述为“准备好构建 Twitter 或 Facebook 架构师”。
什么是系统设计?
滑铁卢大学认为:系统设计是指解决本质上跨学科问题的哲学、方法和途径。通过考虑客观和主观的性能要求,构建设计解决方案以满足客户、用户和社会的需求。一些主要工具包括有助于构建特定产品或项目的策略、程序和技术。
主要步骤
步骤 1:了解设计目标
提出一些澄清性的问题,消除面试官的疑惑。用户是谁?它的主要用途是什么?它将如何使用?可能的输入和输出是什么?
第 2 步:确定项目范围
既然已经对应用程序有了基本的了解,现在正是提问的好机会。在进一步提问之前,你的建议必须与面试官的需求一致。这个应用程序希望支持哪些类型的客户端(移动端、网页端等等)?是否需要身份验证?是否需要集成分析功能?是否需要与现有系统集成?
步骤3:设计适当的规模
我们需要确定规模,以衡量我们的数据是否兼容,并且能够容纳在一台机器上。读写比是多少?预计会有多少个并发请求?平均响应时间是多少?我们允许用户提供的数据量是多少?
第四步:从宏观角度出发,深入细节
从步骤 1中设定的目标开始,确定端到端流程。这可能涵盖 API、后端服务、网络架构、数据存储、不同客户端的概述等,以及它们如何协同工作以满足既定目标的要求。最终,讨论将涵盖潜在的性能瓶颈以及职责分配的决策。无论您如何执行此步骤,请记住从简单入手,然后逐步构建。
步骤5:DS&A - 数据结构和算法
在软件系统设计中,运行时和内存复杂度至关重要。应用程序的效率和可用性(取决于项目规模)完全取决于对 DS&A 的深入理解和实施。
第六步:权衡
你做的每一个决定几乎都会有权衡。重要的是能够实时讨论这些决定,提供解决方案,并展现你对系统复杂性的理解以及它们通常需要妥协之处,并通过每种方法的优缺点来展现你的理解。记住,没有正确答案,只需准备好解释自己,向面试官表明你逻辑清晰,并且会使用适当的工具来完成工作。
流程
这可以分为四个主要部分,最好通过以下图像来说明:
- 任务定义
- 概念阶段
- 设计阶段
- 实施阶段
基本示例
在示例部分,我将尽量简单,只使用 Twitter 并展示一些较小的示例。我相信您现在已经知道,构建一个完整的社交媒体页面会非常复杂,这又回到了本博客主要步骤部分的第二步,即确定范围。记住要多问问题,这样您就不会过度深入,浪费面试时间。
在第一个示例中,我使用图表展示如何设计 Twitter 的 REST API:
https://www.visual-paradigm.com/tutorials/rest-api-design-twitter-example.jsp
我希望这篇博文能让您对这个问题有一个更清晰的认识,并让您更好地理解下次遇到这个问题时如何处理。
祝你好运!
文章来源:https://dev.to/sofiajonsson/interview-prep-system-design-4p50