系统设计面试

  在Tech Company进行系统设计面试的技巧。

  

系统设计面试_第1张图片

  What whiteboard interviews look like?

  大多数科技公司在其面试过程中都会进行系统设计。 通常要求候选人设计一个可扩展的系统,例如Facebook NewsFeed,Instagram故事,WhatsApp聊天,CI / CD系统等。

  Internet上有很多资源可供系统设计采访准备。 任何开发人员都无法消化过多的资源。 但是,在技术公司提出的问题中观察到了常见的模式。 对系统设计概念和基本原理具有清晰的想法,可以帮助任何候选人创造出鲜艳的色彩。

  在本文中,我将详细阐述一种系统和有组织的策略,以帮助任何人清除采访。 在此过程中,我还将说明所提出的各种问题以及解决这些问题的方法。

  为什么进行系统设计面试?

  如今,大多数科技公司都投资建设可扩展的高性能系统。 因此,工程师必须具备出色的设计技能。

  系统设计面试刻意是开放性的并且模棱两可。 它使面试官有机会评估不同维度的候选人。 除了设计技巧,它还有助于面试官判断候选人的整体思维过程,思维,算法知识和沟通技巧。

  高层次策略

  我在系统设计面试中遵循以下五步方法:-

  · 要求和澄清问题

  · 容量估算

  · 设计目标

  · API设计与算法

  · 数据库,缓存设计和分片

  我们将详细介绍上述每个步骤。

  要求和澄清问题

  当出现诸如为Uber设计后端系统之类的问题时,我们想到了成千上万的功能。 实际上,诸如Uber,Facebook等系统是经过多年的工程努力和严格发展而成的。 在45至60分钟内设计大型系统并不是一件容易的事。

  由于时间有限,我们无法设计大型系统的所有功能,因此缩小问题范围至关重要。 需求可以分为功能需求和非功能需求。 您可以想到在采访期间可以在白板或一张纸上设计的所有简单功能。

  

系统设计面试_第2张图片

  Uber

  例如:对于Uber的设计后端,您可以在范围内列出以下要求:

  · 车手必须能够预订和取消乘车

  · 系统必须将Rider与驾驶员匹配

  · 驾驶员可以取消指定的乘车

  · 乘车后驾驶员和乘员都可以互相评价

  · 车手可以使用多种付款方式向驾驶员付款

  此外,必须提出明确的问题。 您需要了解谁是系统的用户,他们将如何与系统交互,使用模式将是什么样。 这些问题将帮助您确定瓶颈,消除冗余并扩展整个系统。

  容量估算

  在阐明系统要求时,必须问的下一个问题是多少用户将使用我们的系统? 这是一个重要的问题,因为它将在以后帮助解决许多设计瓶颈。

  活跃用户的粗略想法可以帮助您估计系统将收到多少个请求,还可以计算所需的数据存储量。 此外,您可以了解系统是重读系统还是写重系统。 这将影响您对数据存储的选择(SQL Vs NoSQL)以及应用程序中对缓存层的需求。

  

系统设计面试_第3张图片

  Twitter

  假设您正在设计类似Twitter的系统。 在这种情况下,您可以进行以下估算:

  · 2亿活跃用户每天600百万条推文

  · 每个用户平均拥有100位关注者

  · 一条推文平均转发了至少10次

  · 每10条推文分享1个媒体文件的人

  在计算估算值时,您将清楚了解水平扩展的程度或系统所需的服务器数量。 此外,对需要存储的数据量进行粗略估计将有助于您相应地计划数据库服务器。

  设计目标

  任何系统的主要要求之一是延迟和吞吐量。 延迟是处理客户端给定请求所花费的时间。 吞吐量是指在给定时间间隔内可以处理的请求数。

  对于高性能系统,至关重要的是最小延迟和最大吞吐量。 如果您要设计一个教育网站,而该网站的加载时间很长,则会导致糟糕的用户体验。 此外,在黑色星期五的销售日,系统性能不会因负载增加而降低。

  第二个设计目标是在可用性和一致性之间进行选择。 根据CAP定理,您可以使用CP或AP系统来容忍网络故障。 可用性和一致性之间的选择受设计的系统类型影响。

  

系统设计面试_第4张图片

  CAP theorem

  如果您拥有直接处理用户资金的银行系统,则一致性至关重要。 而如果您正在设计Facebook Feed,则可以错过页面或朋友的状态更新。

  API设计与算法

  对于问题范围内的每一项要求,有必要草拟后端系统将要公开的基本API。 候选人可以提及请求,响应,状态代码,要使用的HTTP方法等。根据问题,可以讨论是否使用REST,GraphQL或GRPC进行API设计。

你可能感兴趣的:(面试,职场和发展,程序人生)