CHAPTER 3: 《A FRAMEWORK FOR SYSTEM DESIGN INTERVIEWS》第3章 《面试系统设计框架》

news2024/10/5 20:23:18

CHAPTER 3: A FRAMEWORK FOR SYSTEM DESIGN INTERVIEWS

你刚刚获得了梦寐以求的理想公司的现场面试机会。招聘协调员给你发送了当天的日程安排。浏览列表,你会感觉很好直到你的目光落在这个面试环节——系统设计面试

系统设计面试通常很吓人。它可以像“设计一个非常知名的产品X?”一样模糊。这些问题含糊不清,似乎过于宽泛。你的厌倦是可以理解的。毕竟,谁能在一个小时内设计出一款受欢迎的产品呢 这需要数百甚至数千名工程师来建造。好消息是没人指望你这么做。现实世界的系统设计非常复杂。

例如,谷歌搜索看似简单;然而,数量支撑这种简单性的技术确实令人惊讶。如果没有人期望你一个小时去设计真实的系统,

系统设计面试的好处是什么?

系统设计面试模拟现实生活中两个同事解决问题在一个模棱两可的问题上合作,并提出一个满足他们目标的解决方案。问题是开放式的,没有完美的答案。最终的设计并不那么重要,与你在设计过程中投入的工作相比。这可以让你展示你的设计技巧,捍卫你的设计选择,并以建设性的方式回应反馈。

让我们把桌子翻过来,想想面试官走进来的时候脑子里在想什么在会议室等你。

面试官的首要目标是准确评估你的能力。如果会议进行得很糟糕,而且没有足够的信号,她最不想做的就是给出一个不确定的评价。面试官想要的是什么?

在系统设计面试中,许多人认为系统设计面试是关于一个人的技术设计技能。其实它远不止这些,一个有效的系统设计面试会希望你有一个强有力的信号,协作能力,在压力下工作,并解决歧义的,有建设性的

提出好问题的能力也是一项基本技能,而且很多面试官特别看重这项技能。 一个好的面试官也会寻找危险信号。过度工程设计是许多人的顽疾,工程师们喜欢设计的纯粹性,而忽略了权衡。他们往往没有意识到 过度设计系统的复合成本,以及许多公司为此无知付出的高昂代价。
您肯定不希望在系统设计中展示这种负面情绪面试。面试危险的信号包括心胸狭窄、固执等。
在本章中,我们将回顾一些有用的技巧,并介绍一种简单有效的方法 框架解决系统设计面试问题。

有效的系统设计面试的四步流程

每个系统设计面试都是不同的。一个优秀的系统设计面试是开放式的
没有十全十美而标准的解决方案。然而,有一些步骤和共同点在每个系统设计面试中。

步骤1 -理解问题并确定设计范围

“老虎为什么吼叫?”
教室后面突然举起一只手。
“什么事,吉米?”老师回答。
“因为他饿了。”
“很好,吉米。”
在他的童年,吉米总是第一个在课堂上回答问题。每当老师提问时,教室里总有一个孩子喜欢提问试试这个问题,不管他知不知道答案。那是吉米。吉米是个优等生。他以能很快知道所有答案而自豪。在考试中,他通常是第一个完成问题的人。他是老师对任何学生的首选竞争。别像吉米那样
在系统设计面试中,不加思考地迅速给出答案,就等于否定加分。在没有透彻理解需求的情况下回答是一个巨大的错误因为面试不是一场琐事竞赛。没有正确答案。所以,不要直接给出解决方案。慢下来。深入思考并提出问题澄清需求和假设。这是非常重要的。作为一名工程师,我们喜欢解决难题,并直接进入最终设计;然而,这方法很可能导致您设计错误的系统。最重要的技能之一是工程师要提出正确的问题,做出正确的假设,并收集所有的信息构建系统所需的信息。所以,不要害怕问问题。当你问一个问题时,面试官要么直接回答你的问题,要么让你回答
做出你的假设。如果发生后一种情况,写下你的假设白板或纸。你以后可能会用到它们。要问什么样的问题?通过提问来了解具体的需求。这是一个帮助你开始的问题列表:

  • 我们将构建哪些特定功能?
  • 产品有多少用户?
  • 公司预计扩大规模的速度有多快?第3章的预期尺度是什么几个月,六个月,还是一年?
  • 公司的技术栈是什么?您可以利用哪些现有服务简化设计?

例子

如果你被要求设计一个新闻推送系统,你想问一些问题来帮助你澄清
需求。你和面试官之间的对话可能是这样的:

应聘者: 这是一个移动应用程序吗?还是网页应用?还是两个?
面试官: 这两个。
候选人: 这个产品最重要的特性是什么?
采访者: 能够发帖和查看朋友的动态消息。
候选人: 新闻提要是按时间倒序排序还是按特定顺序排序?的特定的顺序意味着每个帖子被赋予不同的权重。
例如,从你的帖子亲密的朋友比来自一个群体的帖子更重要。
采访者:为了简单起见,让我们假设提要是按时间倒序排序的秩序。
候选人:一个用户可以有多少朋友?
面试官:5000
候选人:交通流量是多少?
面试官:1000万DAU(日活跃用户)
应聘者:feed可以包含图片、视频还是只包含文本?
采访者:它可以包含媒体文件,包括图像和视频。
以上是一些你可以问面试官的问题。重要的是理解需求并澄清歧义

步骤2 -提出高层次的设计并获得支持

在这一步中,我们的目标是开发一个高层次的设计,并与面试官对设计的看法。在面试过程中与面试官合作是个好主意的过程。

  • 提出设计的初步蓝图。寻求反馈。对待你的面试官视面试官为队友,一起工作。许多好的面试官都喜欢说话和回答问题参与。
  • 在白板或纸上绘制关键部件的框图。这可能包括客户端(移动/web)、api、web服务器、数据存储、缓存、CDN、消息队列等。
  • 做一些粗略的计算来评估你的蓝图是否符合标准约束。大声地想。如果信封背面有问题,请与面试官沟通在深入研究之前是必要的。如果可能的话,浏览几个具体的用例。这将帮助您构建高层设计。用例还可能帮助您发现您没有发现的边缘用例然而,考虑。

我们应该在这里包括API端点和数据库模式吗?这取决于问题本身。对于像“设计谷歌搜索引擎”这样的大型设计问题,这有点太低了。对于设计多人扑克游戏后端这样的问题,这是一个公平的游戏。与面试官沟通。

例子

让我们用“设计一个新闻提要系统”来演示如何接近高层次设计。在这里,您不需要了解系统的实际工作原理。所有的详情将在第十一章解释。
在高层次上,设计分为两个流:提要发布和新闻提要构建。

  • Feed发布:当用户发布一个帖子时,相应的数据被写入缓存/数据库,帖子将被填充到朋友的新闻提要中。
  • 新闻提要构建:新闻提要是通过反向聚合朋友的帖子来构建的时间顺序排列。

figure3-1和figure3-2给出了提要发布和新闻提要的高级设计分别是建筑流程
在这里插入图片描述
在这里插入图片描述

步骤3 -设计深度潜水

在这一步,你和你的面试官应该已经达到了以下目标:

  • 就总体目标和功能范围达成一致
  • 勾勒出总体设计的高层次蓝图
  • 从面试官那里获得关于高层次设计的反馈
  • 根据她的反馈,对深度潜水的重点领域有了一些初步的想法

您应该与面试官一起确定体系结构中的组件并确定其优先级。值得强调的是,每次面试都是不同的。有时候,面试官可能会放话暗示她喜欢专注于高层次的设计。有时候,是为了一个资深的候选人面试时,讨论可能会集中在系统的性能特点上关于瓶颈和资源估计。在大多数情况下,面试官可能希望你这么做深入了解一些系统组件的细节。对于URL缩短器,深入研究是很有趣的将长URL转换为短URL的哈希函数设计对于一个聊天系统,如何减少延迟和如何支持在线/离线状态是两个有趣的主题。时间管理很重要,因为我们很容易被无关紧要的小细节冲昏头脑展示你的能力。你必须准备好向面试官展示的信号。尽量不进入不必要的细节。

例如,谈论的EdgeRank算法在系统设计面试中,详细了解Facebook动态排名并不理想,浪费宝贵的时间,并不能证明您在设计可扩展系统方面的能力。

例子

至此,我们已经讨论了新闻提要系统的高级设计,以及面试官对你的建议很满意。接下来,我们将研究其中最重要的两个
用例:

  1. 提要发布
  2. 新闻提要检索

两个用例的详细设计如figure3-3和figure3-4所示在第11章详细解释
在这里插入图片描述
在这里插入图片描述

步骤4 -打包

在最后一步,面试官可能会问你一些后续问题,或者给你一些面试的机会讨论其他附加问题的自由。以下是一些可以遵循的指导:面试官可能希望你找出系统的瓶颈,并讨论其潜力
改进。**永远不要说你的设计是完美的,没有什么可以改进的。**有总有需要改进的地方。这是一个展示你的谦虚,善于思考的机会,并给人留下良好的最终印象。

  • 向面试官简要介绍一下你的设计可能会很有用。这是特别的重要的是,如果你提出了一些解决方案。刷新面试官的记忆可以在长时间的治疗后很有帮助。
  • 错误案例(服务器故障,网络丢失等)是一个有趣的话题
  • 运营问题值得一提。您如何监控度量标准和错误日志?如何推出该系统?
  • 如何处理下一个比例曲线也是一个有趣的话题。例如,如果你的目前的设计支持100万用户,你需要做什么改变来支持10个百万用户?
  • 如果你有更多的时间,提出其他需要改进的地方。最后,我们总结了一份该做和不该做的清单。

- Dos

  • 总是要求澄清。不要以为你的假设是正确的。
  • 了解问题的要求。没有正确的答案,也没有最好的答案。一个解决方案,旨在解决一个年轻的创业公司的问题不同于一个拥有数百万美元的成熟公司的问题的用户。确保你理解了需求。
  • 让面试官知道你的想法。与面试官沟通。
  • 如果可能,建议多种方法。
  • 一旦你同意面试官对蓝图的看法,就要详细说明组件。首先设计最关键的组件。
  • 向面试官征求意见。一个好的面试官就像你的队友一样。
  • 永不放弃。

Don’ts

  • 不要对典型的面试问题毫无准备。
  • 在没有明确需求和假设的情况下,不要贸然提出解决方案。
  • 不要在一开始就在单个组件上投入太多细节。先给出较高的关卡设计,然后再深入。
  • 如果你被困住了,不要犹豫,向别人寻求提示。
  • 再次强调,沟通。不要在沉默中思考。
  • 不要以为一旦你给出了设计方案,面试就结束了。你还没有完成,直到你面试官说你完了。尽早并经常寻求反馈。

每一步的时间分配

系统设计面试的问题通常是非常宽泛的,而45分钟或一个小时的面试问题则不是足以覆盖整个设计。时间管理是必不可少的。你应该花多少时间每一步的花费?下面是一个关于如何分配你的时间的粗略指南一分钟的面试时间。请记住这是一个粗略的估计,和实际的时间分配取决于问题的范围和面试官的要求。

步骤

1了解问题并确定设计范围:3 - 10分钟
2 .提出高层次的设计方案并获得支持:10 - 15分钟
3 .设计深度潜水:10 - 25分钟
4 .包裹:3 - 5分钟

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/456134.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Redis】缓存同步

【Redis】缓存同步 文章目录 【Redis】缓存同步1. 数据同步策略2. 异步通知策略3. Canal3.1 Canal客户端3.2 监听器 1. 数据同步策略 缓存数据同步的常见方式有三种: 设置有效期:给缓存设置有效期,到期后自动删除,再次查询时更新…

网络系统集成实验(四)| 系统集成路由器基本配置

目录 一、前言 二、实验目的 三、实验需求 四、实验步骤与现象 (一)静态路由 Step1:构建实验拓扑如下 Step2:IP地址配置如下 Step3:配置静态路由 Step4:验证 (二)NAT配置—…

OpenPCDet复现过程记录

0、前言 OpenPCDet项目之前我就复现过,一个很优秀的项目,这几天又需要用到这个项目,再次复现遇到了不少问题,特此记录复现的流程 1、环境准备 1.1、前置条件 以下是我安装的版本 CUDA 11.3CUDNN 8.2.1 CUDA和CUDNN安装可以参考…

Yolo v1 笔记

个人不太懂的点 1.损失函数的4与5项 【论文解读】Yolo三部曲解读——Yolov1 - 知乎 https://www.youtube.com/watch?vNkFENlEb4kM&t672s 训练阶段: C_i 预测值:由网络输出出来7*7*30中第一个bbox和第二个bbox的置信度confidence C_i^hat 标签值…

(六)大数据实战——hadoop集群实现免密登录和文件互传

前言 本节内容我们主要介绍一下hadoop集群服务器之间实现免密登录和文件互传的功能,这样更加方便我们使用hadoop服务器实现服务器之间的相互登录和文件的相互传输。集群之间的访问不在需要授权就可以实现相互访问。 正文 SSH免密登录 ①分别在hadoop101、hadoop1…

后台管理系统之登录方案记录

需求:根据当前环境的不同,请求不同的 BaseUrl 解决:在根目录中新建.env.development与.env.production连个文件,进行配置: # .env.production ENV production# base api VUE_APP_BASE_API /prod-api# .env.develop…

目标检测——YOLOv8(十四)

简介: YOLOv8 是 ultralytics 公司在 2023 年 1月 10 号开源的 YOLOv5 的下一个重大更新版本,目前支持图像分类、物体检测和实例分割任务。不过 ultralytics 并没有直接将开源库命名为 YOLOv8,而是直接使用 ultralytics 这个词,原…

nodejs+vue 学分置换管理系统

在大学四年参加了各类竞赛后,我发现参加各类比赛存在报名过程过于繁琐,评比过程不透明和易出错等问题,所以在定题时与老师商讨后确定设计和实现基于nodejs的高校竞赛信息发布系统,帮助老师发布竞赛内容,便于同学们线上…

24考研数学每日一题(带解析)2023年12月1日-2023年12月31日

title: 24考研数学每日一题Latex版(带解析) date: 2023-01-28 11:49:26 plugins: mathjax tags:学习考研 categories:考研数学 题目来源于武老师的每日一题,答案是自己做的,不太严谨,仅供参考 2022年12月1日 知识点…

区块浏览器Tokenview受邀参加2023香港Web3嘉年华,用科技与善良打造全球区块浏览器Web3生态

区块浏览器Tokenview受邀参加2023香港Web3嘉年华,用科技与善良打造全球区块浏览器Web3生态 4月12-15日,由万向区块链实验室、HashKey Group 联合举办、W3ME 承办的「2023 香港 Web3 嘉年华」在香港会议展览中心举行。该活动被称为香港有史以来规模最大的加密领域活…

无人机飞行控制实验平台

无人机在研制过程中需要不断地进行飞行测试,而测试的过程不是万无一失的,飞行过程中发生任何错误都有可能会导致无人机的损毁或破坏,更严重地甚至会造成外界伤害。 基于此我们推出了无人机的三旋转自由度 (3-DOF) 飞行平台测试系统&#xff…

学成在线笔记+踩坑(4)——【媒资管理模块】上传图片,Nacos+Gateway+MinIO

导航: 【黑马Java笔记踩坑汇总】JavaSEJavaWebSSMSpringBoot瑞吉外卖SpringCloud黑马旅游谷粒商城学成在线牛客面试题 目录 1. 媒资管理模块简介 1.1 模块介绍 1.2 业务流程 1.2.1 上传课程图片 1.2.2 上传视频 1.2.3 处理视频 1.2.4 审核媒资 1.2.5 绑定媒…

龙讯旷腾材料计算大赛启动,打怪升级赢大奖

龙讯旷腾2023计算大赛第一期电催化计算大赛启动 选拔赛截止日期5月21日 决赛截止日期5月28日 大赛亮点 免费培训、灵活安排时间参与 多次机会冲关决赛奖励金 已购/未购用户均可参加 使用Mcloud参赛送500元机时 计算大赛——看视频学习还能赢奖金? 材料计算…

Java学习-MySQL-事务

Java学习-MySQL-事务 ACID原则:原子性、一致性、隔离性、持久性 原子性(Atomicity) 两个步骤要么一起成功,要么一起失败,不可能只成功一个。 举例: A账户400元,B账户600元,A向B转…

Cloudera的新变化:混合数据平台、端到端AI、实时数据处理

作者 | 宋慧 出品 | CSDN云计算 数据的价值和技术应用,获得了全行业的关注、认可和重视。 不过,数据赛道百家争鸣,数据系统的技术与行业方案众多,对于开发团队和用户来说,其实仍然需要耗费大量调研和分析的时间。 近日…

notepad++自动缩进功能

支持java等格式化 代码编辑器Notepad是程序员必备的文本编辑器,该软件软件功能非常强大,界面简洁明晰、操作方便快捷,设计得很人性化。Notepad官方下载支持27种编程语言,通吃C,C ,Java ,C#, XML, HTML, PHP,JS 等。NotePad是一个…

虹科分享 | NetFlow数据能够为网络故障排除提供什么? | 网络流量监控

NetFlow是网络设备中标准化的功能,用于收集流量测量值并将其导出到另一个系统进行分析。对该流数据的分析通知网络管理器网络是如何执行的以及其他使用细节。例如,流量分析可以通过跟踪IP和突出显示异常(如过度使用流量)来帮助解决…

python django4.2版本

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 前言 提示:这里可以添加本文要记录的大概内容: 例如:django4.2版本 提示:以下是本篇文章正文内容,下面案例可供参…

《中学科技》期刊简介及投稿邮箱

《中学科技》期刊简介及投稿邮箱 《中学科技》以传播科技知识、启迪智慧、培养才能为宗旨,提供电子技术、计算机、陆海空模型、数学、物理、化学、生物、天文等方面的科技活动资料,特别注意通过科学观察,实验和制作实践的途径,培…

【中标通知】塔望咨询中标新疆农发集团 品牌规划建设项目

【新疆农发集团供应链有限公司-品牌建设项目】于2022年5月正式启动。 本次项目2022年4月6日招标结果正式公示。【塔望咨询】凭借3W消费战略方法体系和专注食品行业丰富的品牌项目经验,中标新疆农发集团供应链有限公司兵团红品牌规划建设项目。 中标结果公告 新疆农…