关于后端:系统设计面试的框架

46次阅读

共计 4051 个字符,预计需要花费 11 分钟才能阅读完成。

面试

你刚刚失去了梦寐以求的公司现场面试机会。招聘协调员给你发送了当天的日程安排。扫视这个列表,你对此感到十分称心,直到你的眼光落在这个面试环节上——零碎设计面试。

零碎设计面试常常让人感到缓和。问题可能含混如“设计一个出名的产品 X?”。问题含糊不清,仿佛过于宽泛。你的困倦能够了解。毕竟,谁能在一个小时内设计出一个须要数百甚至数千名工程师来构建的热门产品呢?

好消息是没有人冀望你能做到。真实世界的零碎设计极其简单。例如,Google 搜寻看似简略,但撑持这种简略性的技术数量真的令人震惊。如果没有人冀望你在一个小时内设计一个真实世界的零碎,那么零碎设计面试有什么益处呢?

零碎设计面试模仿了现实生活中的问题解决,其中两位共事在一个含糊的问题上进行单干,并找出一个满足他们指标的解决方案。问题是开放式的,没有完满的答案。与你投入设计过程的工作相比,最初的设计不那么重要。这使你可能展现你的设计技巧,保卫你的设计抉择,并以建设性的形式回应反馈。

欢送关注我的公众号:更 AI。第一工夫理解前沿行业音讯、分享深度技术干货、获取优质学习资源

让咱们换个角度,思考面试官走进会议室见到你时的想法。面试官的次要指标是精确地评估你的能力。她最不心愿的是因为面试停顿不顺,没有足够的信号,而给出无定论的评估。面试官在零碎设计面试中在寻找什么?

许多人认为零碎设计面试齐全关注一个人的技术设计能力。但它的意义远超过这一点。一场无效的零碎设计面试可能明确反映出一个人的单干能力、在压力下工作的能力,以及以建设性形式解决模糊性的能力。提出好问题的能力也是一项必要的技能,许多面试官特地关注这一技能。

一个好的面试官也会寻找警示信号。适度工程化是许多工程师的一个真正问题,因为他们喜爱设计的纯正性,疏忽了衡量。他们通常没有意识到适度工程化零碎的复合老本,许多公司为这种无知付出了昂扬的代价。在零碎设计面试中,你当然不想展现出这种偏向。其余警示信号包含思维狭窄、执著等。

在本章中,咱们将介绍一些有用的提醒,并引入一个简略而无效的框架来解决零碎设计面试问题。

无效的零碎设计面试的四步过程

每场零碎设计面试都是不同的。一场优良的零碎设计面试是开放式的,没有一种解决方案能实用于所有状况。然而,每场零碎设计面试都有一些步骤和常见畛域须要涵盖。

步骤 1 – 了解问题并确定设计范畴

“ 为什么老虎会呼啸?”

班级前面有只手疾速地举了起来。

“ 是的,吉米?”,老师答复道。

“ 因为他饿了。”

“ 很好,吉米。”

在他的童年里,吉米总是第一个答复课堂问题的孩子。无论他是否晓得答案,每当老师提出问题时,教室里总有一个孩子喜爱试图答复问题。那个孩子就是吉米。

吉米是个优良的学生。他以疾速晓得所有答案为荣。在考试中,他通常是第一个实现问题的人。他是老师在任何学术较量中的首选。

然而,别像吉米一样。

在零碎设计面试中,未经思考就迅速给出答案并无加分。未全面了解需要就答复,这是一个微小的警示标记,因为面试并不是一个常识问答较量,没有正确答案。

所以,不要立即跳进去给出一个解决方案。加快速度。深刻思考,询问问题以廓清需要和假如。这是极其重要的。

作为工程师,咱们喜爱解决困难的问题并立刻进入最终设计阶段;然而,这种办法可能会导致你设计谬误的零碎。作为一名工程师最重要的技能之一就是能提出正确的问题,做出适合的假如,并收集构建零碎所需的所有信息。所以,不要胆怯发问。

当你提出一个问题时,面试官要么间接答复你的问题,要么让你做出本人的假如。如果后者产生,就把你的假如写在白板或纸上。你可能稍后须要它们。

须要问哪些问题呢?发问以了解确切的需要。以下是一些帮忙你开始的问题:

  • 咱们打算构建哪些具体性能?
  • 产品有多少用户?
  • 公司预计的扩张速度有多快?预计在 3 个月、6 个月和一年内的规模是多少?
  • 公司的技术栈是什么?有哪些现有的服务可能帮忙你简化设计?

例子

如果你被要求设计一个新闻订阅零碎,你须要问一些能帮忙你廓清需要的问题。你和面试官之间的对话可能如下所示:

候选人:这是一个挪动利用还是一个网页利用?或者两者都有?

面试官:两者都有。

候选人 :产品最重要的性能是什么?
面试官:公布帖子并查看敌人的新闻订阅。

候选人 :新闻订阅是依照逆工夫顺序排列,还是依照特定顺序排列?特定程序意味着每篇帖子都有不同的权重。例如,来自你密切敌人的帖子比来自群组的帖子更重要。
面试官:为了简化问题,咱们假如订阅是依照逆工夫程序排序的。

候选人 :一个用户能够领有多少个敌人?
面试官:5000 个。

候选人 :流量量是多少?
面试官:每日沉闷用户(DAU)1000 万。

候选人 :订阅内容能够蕴含图片、视频,还是只蕴含文本?
面试官:它能够蕴含媒体文件,包含图片和视频。

以上是一些你能够向面试官发问的示例问题。了解需要并廓清模糊性十分重要。

步骤 2 – 提出高级设计并取得认可

在这一步,咱们的指标是制订一个高级设计,并与面试官就设计达成统一。在这个过程中与面试官单干是个好主见。

  • 提出设计的初始蓝图。征求反馈。把你的面试官当作队友,一起工作。许多好的面试官喜爱探讨并参加其中。
  • 在白板或纸上画出蕴含要害组件的盒图。这可能包含客户端(挪动 / 网页)、API、网络服务器、数据存储、缓存、CDN、音讯队列等。
  • 进行粗略计算,评估你的蓝图是否合乎规模限度。大声思考。在深刻前,如果须要做粗略计算,先与面试官沟通。

如果可能,通过一些具体的用例。这将帮忙你框架出高级设计。这也可能帮忙你发现你尚未思考到的边缘状况。

咱们是否应该在这里蕴含 API 端点和数据库模式?这取决于问题。对于像“设计 Google 搜索引擎”这样的大型设计问题,这有点太低级了。对于像设计多人扑克游戏后端这样的问题,这是偏心的。与面试官沟通。

示例

让咱们用“设计一个新闻推送零碎”来演示如何解决高级设计。这里你不须要了解零碎理论如何工作。所有的细节将在第 11 章中解释。

在高级别上,设计分为两个流程:信息公布和新闻推送的构建。

  • 信息公布:当用户公布一条信息时,相应的数据会被写入缓存 / 数据库,并且这条信息会被推送到敌人的新闻推送中。
  • 新闻推送构建:新闻推送是通过依照工夫倒序排列敌人们的帖子来构建的。

图 3 - 1 和图 3 - 2 别离展现了信息公布和新闻推送构建流程的高级设计。

第 3 步 – 深刻设计

在这一步,你和面试官应该曾经达成了以下指标:

  • 对总体目标和性能范畴达成统一
  • 勾画出整体设计的高级蓝图
  • 从面试官那里取得了对高级设计的反馈
  • 依据她的反馈,对深入研究的畛域有了一些初步的想法

你应该和面试官一起确定并优先思考架构中的组件。值得强调的是,每次面试都是不同的。有时,面试官可能会暗示她喜爱关注高级设计。有时,对于一个高级候选人面试,探讨可能会集中在零碎性能个性上,很可能会关注瓶颈和资源预计。在大多数状况下,面试官可能心愿你深入探讨一些零碎组件的细节。对于 URL 短链接,深入研究将长 URL 转换为短 URL 的哈希函数设计是乏味的。对于聊天零碎,如何升高提早和如何反对在线 / 离线状态是两个乏味的话题。

工夫治理十分重要,因为很容易被那些无奈展现你能力的细节所牵引。你必须拿出一些证据来展现给你的面试官。尽量不要陷入不必要的细节。例如,在零碎设计面试中具体探讨 Facebook 信息流排名的 EdgeRank 算法并不现实,因为这会破费大量贵重的工夫,而且不能证实你设计可扩大零碎的能力。

示例

此时,咱们曾经探讨了新闻推送零碎的高级设计,面试官对你的提议表示满意。接下来,咱们将钻研两个最重要的用例:

  1. 动静公布
  2. 新闻推送获取

图 3 - 3 和图 3 - 4 展现了这两个用例的具体设计,这将在第 11 章中具体解释。

第四步 – 总结

在最初这个步骤,面试官可能会问你一些后续问题,或者给你自在探讨其余额定的点。以下是一些可能的方向:

  • 面试官可能心愿你找出零碎的瓶颈,并探讨可能的改良。永远不要说你的设计是完满的,没有什么能够改良的。总有一些中央能够改良。这是展现你的批判性思维并留下好的最初印象的大好机会。
  • 对面试官回顾一下你的设计可能会很有用。如果你提出了一些解决方案,这一点特地重要。在一次长时间的探讨后,刷新面试官的记忆可能会有所帮忙。
  • 谬误状况(服务器故障、网络中断等)都值得议论。
  • 运维问题也值得一提。你如何监控指标和谬误日志?如何推出零碎?
  • 如何应答下一次规模曲线也是一个乏味的话题。例如,如果你以后的设计反对 100 万用户,你须要做什么扭转来反对 1000 万用户?
  • 如果你有更多的工夫,提出你须要的其余改良。

总的来说,咱们总结了一份应该做和不应该做的清单。

应该做的

  • 总是要求廓清。不要假如你的假如是正确的。
  • 了解问题的需要。
  • 没有正确答案也没有最好的答案。为初创公司设计的解决方案与为领有百万用户的成熟公司设计的解决方案是不同的。确保你了解需要。
  • 让面试官晓得你在想什么。与你的面试官沟通。
  • 如果可能,提出多种办法。
  • 一旦你和面试官就设计蓝图达成统一,就具体解说每个组成部分。先设计最要害的局部。
  • 向面试官提出想法。一个好的面试官会作为队友与你一起工作。
  • 永不放弃。

不应该做的

  • 不要对典型的面试问题毫无准备。
  • 不要在没有廓清需要和假如的状况下跳入解决方案。
  • 刚开始不要对单个组件具体解说太多。首先给出高层设计,而后再深入研究。
  • 如果你遇到困难,不要犹豫要求提醒。
  • 再次强调,进行沟通。不要静默思考。
  • 不要认为一旦你给出设计,你的面试就完结了。除非面试官说你完结了,否则你并没有完结。尽早并常常询问反馈。

每个步骤的工夫调配

零碎设计面试问题通常十分宽泛,而 45 分钟或一个小时的工夫不足以笼罩整个设计。工夫治理至关重要。你应该在每个步骤上破费多少工夫呢?以下是一个十分粗略的指南,它通知你如何在 45 分钟的面试环节中调配工夫。请记住,这只是一个大抵的预计,理论的工夫调配取决于问题的范畴和面试官的需要。

步骤 1 了解问题并确定设计范畴:3 – 10 分钟

步骤 2 提出高层设计并取得认可:10 – 15 分钟

步骤 3 深刻设计:10 – 25 分钟

步骤 4 完结:3 – 5 分钟

欢送关注我的公众号:更 AI。第一工夫理解前沿行业音讯、分享深度技术干货、获取优质学习资源

正文完
 0