当前位置: 首页 > news >正文

3 系统设计面试的框架

前言

你刚刚获得心仪公司的现场面试机会。招聘人员给你发送了当天的时间表。 扫了一眼这个时间表,你感觉非常好,直到看到其中的这个面试环节——系统设计面试。

系统设计面试往往令人生畏,因为它的题目可能非常模糊,比如让你“ 设计一个知名的产品 X” 。 这类问题不明确,听起来宽泛得不可理喻。你感到疲惫是可以理解的。 毕竟,怎么可能有人可以在1小时内设计出原本需要成百上千个工程师才能创建的受欢迎的产品呢?

好消息是没有人期待你能给出完美的答案。真实世界的系统设计是极其复杂的。 举个例子,谷歌搜索看似简单,但其背后有数量惊人的技术在提供支持。如果没有人期待你能在1小时里设计出一个真实世界的系统,那么系统设计面试有什么用呢?

考察能力:协作、压力下工作、建设性解决模糊问题、提问等。
警惕:过度设计、忽视权衡、想法狭隘、固执等。

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

每家公司的系统设计面试都不一样。好的系统设计面试是开放式的,没有万能的解决方案。尽管如此,系统设计面试还是有一些通用步骤和常见套路的。

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

别急着给出解决方案,慢一点,深入思考并提几个问题来厘清需求和假设。
工程师最重要的技能之一就是问正确的问题,做合适的假设,并收集构建系统需要的所有信息。所以,不要害怕提问。

当你提出一个问题时,面试官要么直接回答你的问题,要么让你做出自己的假设。如果是后者, 请把你的假设写在白板或者纸上。之后你可能会需要用到它们。
问什么样的问题呢?问问题是为了准确理解需求。你可以从下面这些问题开始:

  • 我们要构建什么样的具体功能?
  • 该产品有什么用户?
  • 公司预计多久需要扩展系统?预计3个月、6个月和1年后的系统规模是怎样改的?
  • 公司的技术栈是什么?有哪些现有服务可以直接用来简化设计?

示例:
如果你被要求设计一个news feed(新鲜事信息流)系统,你想问几个问题来弄清楚需求,那么你和面试官之间的对话可能是下面这样的。

候选人: 这是一个移动应用, 还是一个网页应用?或者都是?
面试官:都是。
候选人: 这个产品最重要的功能是什么?
面试官: 可以发布帖子,幵且可以看到朋友的动态。
候选人: 这个news feed系统中的帖子是按时间倒序排列的, 还是按其他特定顺序排列的?特定顺序指的是每个帖子都有不同的权重。比如,和你亲近的伙伴的帖子比其他人的帖子更重要。
面试官: 简单点吧,我们假定是按时间倒序排列的。
候选人: 一个用户最多可以有多少个好友?
面试官: 5000。
候选人: 网络流量有多少?
面试官: 日活用户(DAU)为1000万。
候选人: 帖子中包含图像、 视频吗?还是只有文字?
面试官: 可以包含多媒体文件,包括图像和视频。

以上是你可以问面试官的一些样例问题。理解需求并厘清不明确的地方很重要。

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

步骤:

  • 为设计制定一个初始蓝图。
  • 在白板或者纸上用关键组件画出框图,可能包括客户端(移动端/Web端)、 API、Web服务器、数据存储、 缓存、 CDN、消息队列等。
  • 做封底估算, 评估你的初步设计是否满足系统需求。你需要表达出自己的思考过程,将思考过程公开。在深入研究之前,如果有必要做封底估算,要先就此和面试官进行沟通。

feed发布构建流程的高层设计:
在这里插入图片描述
news feed构建流程的高层级设计:
在这里插入图片描述

第三步:设计继续深入

目标:

  • 就系统的整体目标和功能范围,与面试官达成一致;
  • 勾画出系统整体设计的高层级蓝图;
  • 从面试官那里得到关于系统高层级设计的反馈;
  • 基于面试官的反馈,大概知道自己需要在哪些地方继续深入研究。

你应该和面试官一起识别架构中的组件并对它们划出优先级顺序。值得强调的是,每次面试都是不同的。有时,面试官可能会透露她想要专注于高层级设计。有时,在高级候选人的面试中, 讨论可能会集中在系统性能特征上,重点关注系统瓶颈和资源估计。在大部分情况下,面试官可能希望你深入探讨一些系统组件设计的细节。

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

第四部:总结

方向:

  • 识别出系统的瓶颈并讨论潜在的改进方案。永远不要说你的设计是完美的, 不需要改进。
  • 给面试官扼要复述你的设计方案是有用的。如果你提出了几个设计方案,那么这一点就特别重要。

正确的操作:

  • 总是向面试官寻求明确的解释,不要认为你的假设是对的;
  • 理解问题,及要求;
  • 没有正确的答案或最佳答案。为了解决创业公司的问题而设计的方案与为了解决拥有数百万用户的成熟公司的问题而设计的方案是不相同的。要确保你理解了需求;
  • 让面试官知道你在想什么,与面试官持续沟通;
  • 如果有可能,请提出多个方案;
  • 一旦你和面试官就设计蓝图达成一致,接下来就要深入讨论每个组件的细节。先设计最重要的组件;
  • 试探面试官的想法,好的面试官会和你一起解决问题;
  • 永不放弃。

禁忌:
对于常见的面试问题没有做好准备;

  • 在没有弄清需求和假设之前就给出解决方案;
  • 在面试一开始就讨论关于某一组件的大量细节。请先给出高层级设计后再深入讨论细节;
  • 思路卡住时干着急。如果你一时找不到解题的突破口,去找面试官要点提示,不要犹豫;
  • 不沟通。再说一次,一定要沟通。别在那里一个人默默思考;
  • 认为给出设计方案后面试就结束。面试官说结束才是真的结束。要尽早且尽量频繁地征求面试官的反馈。

面试中的每一步的时间分配

如果面试是45分钟:

  • 理解问题并确定设计的边界,3~10分钟;
  • 提议高层级的设计并获得认同,10~15分钟;
  • 设计继续深入,10~25分钟;
  • 总结,3~5分钟。
http://www.dtcms.com/a/350138.html

相关文章:

  • Odoo 企业版用户手册[新版]-前言 00.1-手册说明与使用指南
  • EasyClick 生成唯一设备码
  • SP95N65CTO:一款高性能650V SiC MOSFET的全面解析
  • 数据赋能(409)——大数据——合规性和伦理性原则
  • 强化学习基础总结
  • 《分布式系统跨服务数据一致性Bug深度复盘:从现象到本质的排查与破局》
  • 2025年优化算法:雪雁优化算法(Snow Geese Algorithm,SGA)
  • 2025 JVM 并发革命:虚拟线程与结构化并发,引领性能飞跃(35)
  • 京东前端社招面经
  • Pandas 高效数据处理:apply、向量化与分组
  • Qt——多媒体(音频、视频播放)
  • 艾利特石油管道巡检机器人:工业安全的智能守护者
  • 系统数据库
  • WRC2025 | 澳鹏亮相2025世界机器人大会,以数据之力赋能具身智能新纪元
  • 2025年9月计算机二级C++语言程序设计——选择题打卡Day6
  • 神经网络模型搭建及手写数字识别案例
  • 关于“程序=数据结构+算法”的深层认识
  • Java图形图像处理【双缓冲技术与游戏】【九】
  • Java全栈开发面试实战:从基础到微服务的深度解析
  • IDEA2022开启新版UI
  • 系统架构设计师备考第4天——计算机软件概述操作系统
  • Aligning Effective Tokens with Video Anomaly in Large Language Models
  • 储能防逆流:智能守护电网稳定的核心技术
  • 大数据毕业设计选题推荐-基于大数据的餐饮服务许可证数据可视化分析系统-Spark-Hadoop-Bigdata
  • 阿里云OSS文件上传_对象存储服务全流程
  • Android横竖屏切换的“数据保卫战”:如何优雅地保存和恢复表单数据
  • 用 python 开发一个可调用工具的 AI Agent,实现电脑配置专业评价_python ai agent
  • 常见前端性能优化讲解
  • 在分布式计算区域中通过VPC搭建私有网络
  • Ansible 任务控制与事实管理指南:从事实收集到任务流程掌控