十大系统设计面试问题和答案
添加时间:2022-02-27 22:04:36
来源:
添加时间:2022-02-27 22:04:36
防伪码:CMSEASYAtlnrbv43rVS1Fp251
在软件工程面试过程中,系统设计轮已经成为面试的标准部分。如果您想在一些大型科技巨头公司(尤其是作为高级工程师)获得梦想的工作,那么您需要告诉您构建复杂的大型可扩展系统的方法。设计面试问题没有标准或准确的答案。
前 10 名系统设计面试问题和答案
你可能会与不同的面试官进行不同的对话。由于缺乏构建大规模系统的经验和系统设计的开放性,很多候选人都在这一轮中挣扎。不仅初级和中级开发人员,而且有经验的开发人员在系统设计回合中都感到不舒服。如果您正在为这一轮做准备,那么我们建议您阅读博客如何在面试中破解系统设计轮?.
我们将讨论一些大型科技公司面试官经常问到的常见设计面试问题。我们还将讨论您在设计系统并向面试官解释答案时应考虑的一些关键点。
1. 设计一个 URL 缩短服务 (TinyURL)
URL 缩短服务允许用户输入一个较长的 URL,然后返回一个较短的、唯一的 URL。例如bit.ly和TinyURL。如果用户给出一个长 URL,这些服务会生成一个短 URL,如果用户给出一个短 URL,那么它会返回原始的长 URL。
讨论和分析的事情:
给定一个长 URL,服务应该生成一个更短且唯一的别名。
当用户点击一个短链接时,服务应该重定向到原始链接。
如果每秒发送 1000 个 URL 缩短请求,请考虑可伸缩性。
服务句柄重定向。
支持自定义短 URL。
跟踪点击统计。
删除过期的 URL。
系统应该是高度可用的。
在设计此服务时,您需要考虑三件事。
API(REST API)-讨论客户端将如何遵循一种方法与服务以及作为服务前端的负载均衡器进行通信。
应用层——讨论工作线程或主机将如何获取长 URL、生成小 URL 以及如何将这两个 URL 存储在数据库中。
持久层——数据库
2. 设计 YouTube/Netflix(全球视频流媒体服务)
设计一个像 Youtube/Netflix 这样的视频流服务,用户可以在其中上传/查看/搜索视频。该服务应该是可扩展的,大量用户可以同时观看和分享视频。它将存储和传输 PB 和 PB 的数据。
讨论和分析的事情:
记录有关视频的统计信息的方法,例如观看总数、赞成票/反对票等。
实时添加对视频的评论。
成分:
OC –像 AWS、OpenConnect 这样的云,充当内容交付网络。
后端 -数据库
客户端- 任何使用 Youtube/Netflix 的设备
3. 设计 Facebook Messenger 或 WhatsApp(全球聊天服务)
讨论和分析的事情:
用户之间进行一对一短信的方法。
扩展设计以支持群聊的方法。
交付和读取状态
如果用户未连接到互联网,需要采取什么措施。
推送通知
发送图像或其他文档等媒体
提供端到端消息加密的方法。
4. Design Quora/Reddit/HackerNews(社交网络+留言板服务)
这些服务允许用户发布问题、共享链接并回答其他用户的问题。用户还可以评论问题或共享链接。
讨论和分析的事情:
记录每个答案的统计信息的方法,例如查看次数、赞成票/反对票等。
应该有关注选项供用户关注其他用户或主题。
新闻源生成,这意味着用户可以查看所有用户的热门问题列表以及他们在时间轴上关注的主题。
5. 提前设计搜索
Typeahead 服务允许用户输入一些查询,并基于此建议以用户输入的任何内容开头的热门搜索项目。
讨论和分析的事情:
存储先前搜索查询的方法
系统实时性要求
保持数据新鲜的方法。
找到与已键入字符串的最佳匹配的方法
每秒要由系统处理的查询数。
选择建议的标准。
要存储的数据总数。
找到与已键入字符串的最佳匹配的方法
6.设计Dropbox/Google Drive/Google Photos(全球文件存储和共享服务)
设计一个文件或图像托管服务,允许用户在其服务器上上传、存储、共享、删除和下载文件或图像,并提供跨各种设备的同步。
讨论和分析的事情:
从任何设备上传/查看/搜索/共享/下载文件或照片的方法。
服务应该支持设备之间的自动同步,即在一个设备上更新文件后,它应该在所有设备上同步。
系统中应存在 ACID(原子性、一致性、隔离性和持久性)属性。
跟踪文件共享权限的方法。
允许多个用户编辑同一个文档。
系统应支持存储高达 GB 的大文件。
7.设计一个网络爬虫
设计一个 Web Crawler 可扩展服务,从整个 Web 收集信息(爬网)并获取数亿个 Web 文档。
讨论和分析的事情:
寻找新网页的方法。
对动态变化的网页进行优先级排序的方法。
确保爬虫在同一个域上不是无界的。
8. 设计 Facebook、Twitter 或 Instagram
您需要为数十亿用户设计社交媒体服务。大多数采访者花时间讨论这些应用程序中的新闻源生成服务。
需要考虑的特点:
要支持的某些特定 Twitter/Facebook/Instagram 功能。
围绕每条推文或帖子的隐私控制。
用户应该能够发布推文,系统还应该支持对推文的回复/通过对话对推文进行分组。
用户应该能够看到趋势推文/帖子。
直接消息传递
提及/标记。
用户应该能够关注另一个用户。
要分析的事情:
系统应该能够处理数十亿用户的巨大流量。
关注者数量
推文被收藏的次数。
成分:
新闻提要生成。
社交图(用户之间的朋友连接网络或谁关注谁?-?特别是当数百万用户关注名人时
高效存储和搜索帖子或推文。
9. 设计 Uber 或 lyft(拼车服务)
设计一种服务,用户从应用程序请求乘车,然后司机到达目的地将他们带到目的地。系统设计面试中的一个常见面试问题。
架构:单体/微服务(实时服务、前端(应用程序)和数据库)
要分析和讨论的事情:
后端主要服务于手机流量。uber 应用程序通过移动数据与后端对话。
调度系统如何工作(GPS/位置数据是什么驱动调度系统)?如何有效地将用户请求与附近的司机匹配?
地图和路线在 Uber 中如何运作?ETA是如何计算的?
一种为始终在移动中的驾驶员/骑手存储数百万个地理位置的有效方法。
处理数百万驱动程序位置更新的方法。
Dispatch 主要使用Node.js构建
服务:主要用python编写的业务逻辑服务。
数据库:Postgres、Redis、MySQL。
10. 设计一个 API 速率限制器(Github)
设计一个服务或工具来监控服务同意允许的每个窗口时间的请求数。如果请求数量超过速率限制器,则会阻止所有多余的调用。
要分析和讨论的事情:
限制一个实体在一个时间窗口内可以向 API 发送的请求数量,例如每秒 20 个请求。
速率限制应该适用于分布式设置,因为 API 可通过一组服务器获得。
如何处理节流(软和硬节流等)。
/ CONTACT US
地 址:成都市人民南路四段成科西路三号
邮政编码:610000
电 话:18215660330
传 真:18215660330
手机:18215660330
邮 箱:179001057@qq.com
投诉邮 箱:18215660330