这篇文章将为大家详细讲解有关System设计面试问题都有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
开发人员倾向于解决SDI问题,因为它们是如此开放,并且通常需要一种在其他编码面试挑战中没有实践的批判性思维。
尽管SDI问题随着时间而变化,但其中一些问题在各种顶级公司的访谈中仍然很受欢迎。
今天,我们将探讨最常见的10个系统设计面试问题,每个问题中必须解决的常见问题以及一些可以帮助您完成此任务的工具。

有关任何SDI问题的提示
通过陈述您所知道的问题来开始每个问题:列出系统的所有必需功能,此类系统可能遇到的常见问题以及系统希望处理的流量。列出过程使面试官可以在开始解决方案之前查看您的计划技能并纠正任何可能的误解。
叙述任何权衡:每个系统设计选择都很重要。在每个决策点,至少列出该选择的正面和负面影响。
请您的面试官澄清:大多数系统设计问题是故意含糊的。提出澄清问题,向面试官展示您如何看待问题以及对系统需求的了解。
讨论新兴技术:在每个问题的结尾都概述了系统如何以及在何处可以从机器学习中受益。这将表明您不仅为当前的解决方案做好了准备,而且还为将来的解决方案做好了准备。

1.设计一个全球聊天服务,例如Facebook Messenger或WhatsApp
对于这个问题,您将设计一种服务,允许用户通过Internet彼此聊天。对话可以是一对一的对话,也可以是与许多成员进行的群聊。对话中包含的消息只能访问这些消息。
必备功能:
消息必须通过互联网发送和接收。
服务必须支持一对一和群聊。
消息应存储以供以后查看。
用户应该能够发送图片和视频以及短信。
邮件在传输过程中应被加密。
消息应该以最小的延迟可见。
常见问题:
需要考虑的工具:

2. 设计类似Uber或Lyft的拼车服务
该问题要求您创建一种将用户与附近驾驶员匹配的乘车共享服务。用户可以输入目的地并发送其当前位置,并在几秒钟内通知附近的驾驶员。
然后,该应用程序会跟踪驾驶员和用户当前位置之间的路线,然后再跟踪从用户位置到目的地的路线。
必备功能:
常见问题:
需要考虑的工具:
使用S2Geometry库将位置拆分为单元格。仅使用与用户位于同一单元格中的驾驶员来计算驾驶员距离。
使用分布式存储来存储所有用户的位置,每个用户的位置数据大约只有1Kb。
如果位置数据暂停,则设备在等待重新连接时会继续报告其先前的位置。
提示最近的驾驶员出行后,请留一个缓冲区。如果他们拒绝,请转到下一个驱动程序。

3. 设计URL短服务,例如TinyURL或 bit.ly
这个问题要求您创建一个程序来缩短长网址,例如TinyURL或bit.ly。这些程序采用一个长URL并生成一个新的唯一的短URL。他们还可以输入缩短的URL并返回原始的完整URL。
必备功能:
返回比原始网址短的网址
必须存储原始URL
新生成的URL必须能够链接到存储的原始URL
缩短的网址应允许重定向
必须支持自定义短网址
必须一次支持许多请求
常见问题:
如果两个用户输入相同的自定义URL,该怎么办?
如果用户数量超出预期怎么办?
数据库如何调节存储空间?
需要考虑的工具:

4. 设计一个大众社交媒体服务,例如Facebook,Twitter或Instagram
对于这个问题,您将设计一个供Instagram之类的十万用户使用的社交媒体服务。用户应该能够查看带有跟随者帖子的新闻提要,并建议用户喜欢的新内容。
采访者通常希望听到您深入讨论新闻源。
必备功能:
强大的新闻源和推荐系统
用户可以发表公开帖子
其他用户可以评论或顶帖子
必须一次舒适地容纳许多用户
系统必须高度可用
常见问题:
知名用户将拥有数百万个关注者,与普通用户相比,他们将如何处理?
系统如何按年龄分配体重?与新帖子相比,旧帖子的浏览可能性较小。
节点read与write集中节点的比率是多少?是否可能会有更多的读取请求(用户正在查看帖子)或写入请求(用户正在创建帖子)?
您如何增加可用性?系统如何更新?如果节点发生故障会怎样?
您如何有效地存储帖子和图像?
需要考虑的工具:
使用滚动更新和副本节点来最大化可用性。
使用训练有素的机器学习算法来推荐帖子。
创建一个数据库架构,分别存储名人和用户。
使用社交图谱进一步追踪以下习惯

5. 设计一个社交网络和留言板服务,例如Quora,Reddit或HackerNews
对于这个问题,您将设计一个类似于论坛的系统,用户可以在其中发布问题和链接。
其他用户可以查看和评论问题。问题具有代表其主题的标签,用户可以跟随标签查看有关特定主题的问题。用户有一个新闻源,该新闻源从其关注的标签和相关主题中突出显示了常见问题。
必备功能:
常见问题:
需要考虑的工具:
使用SQL数据库映射关系数据(用户有帖子,帖子有评论/喜欢,类别有相关的帖子,等等)
使用多线程和负载平衡器层可帮助支持更高的流量。
使用分片来破坏系统。考虑按类别分片以将相同标签的帖子存储在一台计算机中。
使用机器学习和自然语言处理来查找标签之间的关系之间的相关性

6. 设计全局文件存储和共享服务,例如Dropbox,Google云端硬盘或Google相册
对于这个问题,您将创建一个同步的跨平台存储系统,例如Dropbox。用户可以存储文件和照片并从其他设备访问它们。
必备功能:
用户应该能够通过网络保存/删除/更新/共享文件
旧版本的文档应保存以进行回滚
文件更新应在多个设备上同步
常见问题:
文件存储在哪里?
您如何处理更新?您是否再次重新上传整个文件?
小更新需要完整的文件更新吗?
系统如何处理两个用户同时更新文档?
需要考虑的工具:

7. 设计全球视频流服务,例如YouTube或Netflix
这个问题要求您创建在线视频流服务,例如YouTube。该服务将存储和传输数百PB的视频数据。它还必须存储统计信息(观看次数,喜欢次数,观看次数等),并允许用户发表评论。
您的解决方案必须具有可扩展性,以支持成千上万的并发用户。
必备功能:
视频应该可以通过网络上传
用户应通过互联网收到不间断的流
视频统计信息应该存储并可以访问每个视频。
评论必须保存并与视频一起显示给其他网友评论
应该支持几千个用户的高流量
常见问题:
需要考虑的工具:

8. 为Firebase或Github等网站设计API速率限制器
对于这个问题,您将创建一个API速率限制器,以限制服务在给定时间段内可以接收的API调用次数,以避免过载。
采访者可以从一台机器到整个分布式网络,以各种规模提出要求。
必备功能:
设备每小时限制为10个请求
如果他们的请求被阻止,则限制器必须通知用户。
必须处理适合其规模的流量。
常见问题:
需要考虑的工具:
使用滑动时间窗口以避免每小时重置一次。
保存一个计数器整数而不是请求本身以节省空间。

9. 设计一个类似Yelp或附近的地方/朋友的接近服务器
对于最后一个问题,您将设计一个邻近服务器,用于存储并报告到餐厅等地方的距离。用户可以按距离或受欢迎程度搜索附近的地点。该数据库必须存储全球5亿个位置的数据,但延迟低。
必备功能:
常见问题:
需要考虑的工具:

10. 设计与搜索引擎相关的服务,例如Type-Ahead
该服务将部分完成搜索查询,并显示5条建议以完成查询。它应该实时适应高度搜索的内容,并向其他用户建议。
例如,将在事件发生后的几分钟内建议“海鹰队赢得超级碗”。
必备功能:
常见问题:
需要考虑的工具:
关于System设计面试问题都有哪些就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。