Netflix在45分钟内:系统设计访谈的简短故事,期待内容和有用链接的选择





在我们的博客中,我们写了很多关于在不同国家/地区建立IT职业,寻找工作以及在采访大型公司过程中的差异的内容在今天的文章中,我们将进一步讨论所谓的系统设计面试的主题-这是与知名技术公司面试的阶段之一,在这些公司中,许多候选人被淘汰。



那么,什么是系统设计?您如何通过这种面试?



这是什么



在当今世界,IT系统变得极为复杂。产品中的每个新“功能”都必须满足许多要求,工程师之间必须始终保持平衡。对于普通用户来说,看起来超级简单的事情(例如通过Google或Yandex提交搜索查询)实际上具有很高的复杂性。



系统设计面试与常规技术面试之间的区别在于,他们希望候选人回答有关数据结构和算法的模棱两可的问题。通常,在此阶段的任务是,对于他们来说,没有明确的正确或错误的解决方案,它们激发了思考过程-正是在其中揭示了候选人。



粗略地说,系统设计面试就像是集思广益的会议,一个人大声思考,仔细研究可能的解决方案,并实时分析每个方案的缺陷。这是困难,也是主要优点-在这里,思考的过程比结果更重要。通常,此类采访是由开发大型系统的大型公司(FAANG等)进行的。



您如何通过系统设计面试?以下是一些实用技巧。



, , @g-jobbot. , Telegram , – , .






由于在系统设计面试中,最重要的是如何解决问题,因此在第一阶段就必须对自己有个清晰的了解,这一点非常重要。前微软和Facebook工程师在他的文章中通过一个实际的例子表明了这一事实的重要性。



通常,任务类似于“您将如何在45分钟内设计Netflix?” 乍一看,这些问题完全是胡说八道。多年来,成千上万的工程师已经设计并实现了这种大型系统。四十五分钟甚至不足以开始讨论此类产品的至少一个组件!



这是了解任务非常重要的地方。您需要了解面试官的要求。而且他显然希望他:



  1. 以整个系统的“直升机视图”格式给出了答案,
  2. 然后将其分解为组件
  3. 描述了为什么需要它们中的每一个(数据中心,数据存储,前端,后端,缓存,使用队列,联网和负载平衡等)






图片:系统设计引物



可以纠缠于一些更详细地这些组件-他们将指向你,或者是你将要问。通常,您甚至不需要在系统设计的采访中编写代码,如果您不首先讨论整个系统就立即钻研技术领域,那么这将是一个缺点。



提出澄清问题



系统设计面试的主要目的是使应聘者有机会证明自己的知识和经验。如上所述,没有正确或错误的答案。更重要的是不要解决这样的问题-特别是因为在指定的时间内根本不可能解决问题-而是要以所有的荣耀来展示您的思维过程。



因此,即使突然发现您清楚地知道所提出问题的答案,提出问题也非常重要。在这种情况下,您不仅仅需要为问题写解决方案,这与面试的目的背道而驰。您需要忘记已知的解决方案,然后开始寻找新的解决方案,并在此过程中提出问题。



这将使面试官可以一次了解几件事:



  • 候选人如何评估问题?
  • 他是否立即评估系统的可能限制和瓶颈?
  • 它会立即通过优化解决方案和规避限制来进行思考吗?


本文中,一位Twitter工程师分享了他的采访经验。他特别对如何提出问题做了很好的描述。想象一下,在一次采访中,您被分配去设计一个盒子。不会直接给出更多信息。



问题可能是:



  1. 系统到底应该做什么?(盒子里放多少东西,它们的大小是多少?)?
  2. 谁是产品的目标受众?
  3. 产品用户的期望是什么?


回答这些问题将使您理解,您需要创建一个黄色框,上面绘制有一个图释,该图释至少可以容纳一个网球。但是,球不是很普通-半径为半米,重量约为1千克。握住底部即可轻松携带该盒子,因此无需提手。



有更多信息,现在您可以考虑解决这样的问题。







图片:freecodecamp.com



不要试图打动



系统设计面试中的一个常见错误-许多候选人认为,由于在此阶段您需要进行抽象级别的工作,因此在谈话过程中只要输入凉爽的术语和时髦的技术名称就足够了。那样行不通。



首先,有关系统设计的面试可能不仅是招聘人员,而是正在寻找一个人加入其团队的工程师。这样的人仅听No-SQL,Mongo DB和Hadoop之类的单词是不够的。显然,他将开始提出澄清的问题,如果您对所提到的技术真的没有太多的经验,这将很快变得很清楚。



说实话



可以肯定不知道的时候,系统设计面试就是其中之一。因此,诸如“我从未使用过这种特定技术,但我知道它通常用于解决此类问题”之类的答案是一个不错的选择。除了诚实,候选人还展示了一定的知识,并向面试官说明了他将在哪里解决问题(他将尝试一种已知的解决方案,如果无法解决,将进一步“挖掘”)。



此外,您不应将您的解决方案视为理想方案,也不应包含任何缺点。总是有局限性,而且经验丰富的工程师采访者比其他任何人都更了解这一点。因此,在面试中,有必要诚实地说解决方案中存在这样的瓶颈,但是您可以尝试以这种方式解决这些瓶颈,使用其他工具或进行更多研究。



这将清楚地表明,候选人不仅会提出解决方案,然后艰难地尝试解决问题,而且可以灵活地进行调整并总体上是适当的,并且理解总是有可能做得更好。



在系统设计采访中,这是一个可爱的虚构对话,向您展示了如何做:



: Twitter. ?



: NoSQL- MongoDB.



: MySQL?



: . MongoDB BigTable.



: Twitter MySQL, .



: , , , . - Facebook NO-SQL.



: Facebook MySQL.



: , , , . , MySQL , BigTable.



采访者:没关系。我们将把分析数据存储在哪里?



候选人:显然在MySQL中。



采访者:但是对于MySQL来说不是太多吗?现在我们有了HDFS。



候选人:您似乎在MongoDB开发足够之前就开始开发Twitter。MongoDB可以轻松容纳推文和分析数据。



采访者:太好了,谢谢您的宝贵时间。很高兴聊天。


如何准备面试:有用的链接



尽管系统设计是面试中比较模糊的部分之一,但是您可以为此做准备。为了帮助候选人,我们整理了一系列有用的材料:






All Articles