目录[隐藏][展示]
- 1. 系统设计是什么意思?
- 2. 系统设计师最重要的特征是什么?
- 3. CAP 定理到底是什么?
- 4、你对负载均衡的理解是什么?
- 5. 异步编程和并行编程有什么区别?
- 6. 水平缩放和垂直缩放有什么区别?
- 7. 延迟、吞吐量和系统可用性到底是什么意思?
- 8. 什么是酸性物质?
- 9. 什么是分片?
- 10.什么是CDN?
- 11、为什么要使用CDN?
- 12、分片和分区有什么区别?
- 13. 缓存到底是什么?
- 14.什么是CDN边缘服务器?
- 15. 系统设计有哪些不同的一致性模式?
- 16. 乐观锁是什么意思?
- 17. 你所说的“领导人选举”到底是什么意思?
- 18. 您设计类似 TinyURL 的 URL 缩短服务的方法是什么?
- 19. 你设计推特的方法是什么?
- 20. 为 Facebook 创建新闻源系统
- 21. 什么是系统的 BASE 属性?
- 22. 什么是 IP 地址关联技术的负载平衡?
- 23. 缓存替换(或驱逐策略)算法到底是什么?
- 24.分布式事务到底是什么意思?
- 25. 饥饿究竟是什么?
- 结论
在开始之前,我们建议您阅读我们的 系统设计入门指南 刷新你的基础知识。
在面试需要系统设计知识的职位时,您有机会谈论您的背景并展示您开发复杂系统的能力。
在与潜在雇主交谈时,您表达专业知识的方式可能会帮助您证明您是该职位的胜任候选人。
您可以通过学习基本的设计概念并思考您将如何回应有关它们的询问来准备您的工作面试。 我们将在这篇文章中介绍一些典型的系统设计面试问题和答案,以帮助您为下一次面试做准备。
1. 系统设计是什么意思?
基于预定标准建立包括模块、体系结构、组件及其接口和数据在内的系统特征的过程称为系统设计。
它是定义、创建和设计系统以满足公司或组织的特定目标和目的的过程。 系统设计更多的是关于系统分析、架构模式、API、设计模式以及将它们粘合在一起,而不是关于编码。
2. 系统设计师最重要的特征是什么?
- 用户互动
- 外部 API 调用
- 离线流程
3. CAP 定理到底是什么?
根据 CAP(Consistency-Availability-Partition Tolerance)定理,分布式系统不能同时保证 C、A 和 P。 它最多只能提供三个保证中的两个。 让我们使用分布式数据库系统来帮助我们理解这一点。
- 一致性:这指定一旦数据库事务完成,数据必须保持一致。 例如,所有查询都应在数据库更新后返回相同的响应。
- 可用性:数据库必须始终可用且响应迅速。
- 分区容限:即使通信出现问题,数据库系统也应该继续工作。
4、你对负载均衡的理解是什么?
负载均衡 是在一组后端服务器之间有效分散传入流量的过程。 这些被称为服务器池。 现代网站旨在处理来自客户的数百万个查询并快速可靠地响应它们。 将需要更多的服务器来处理这些需求。
在这种情况下,在每个服务器之间有效分配请求流量以避免使它们负担过重至关重要。 负载均衡器充当交通警察,拦截请求并在可用服务器之间路由它们,这样就不会有任何服务器负担过重,从而可能降低应用程序性能。
5. 异步编程和并行编程有什么区别?
当您异步运行任何内容时,这意味着您不必等待它完成即可继续执行其他操作。 并行性是指同时执行许多任务。
当您可以将工作分解为不同的工作块时,并行性就可以有效地发挥作用。 异步和回调是表示并发的一种手段(工具或机制),即可以通信和共享资源的一组实体。
6. 水平缩放和垂直缩放有什么区别?
将新的计算设备添加到将处理和内存需求分散到分散的设备网络中的网络称为水平扩展。 简单地说,新的服务器实例被添加到当前池中,流量负载在这些设备之间有效地分散。
垂直扩展是指通过添加 RAM、高效 CPU 或迁移到具有更高容量的新机器来扩展单个计算机的资源容量的概念。 无需任何编程更改即可增加服务器的功能。
7. 延迟、吞吐量和系统可用性到底是什么意思?
性能是系统设计的一个重要方面,因为它有助于我们服务的速度和可靠性。 三个最重要的绩效指标如下:
- 以毫秒为单位传递单个消息所需的时间称为延迟。
- 在特定时间段内成功通过系统传输的数据量称为吞吐量。 每秒位数用于测量它。
- 系统可用于响应查询的时间量由其可用性定义。 System Uptime / (System Uptime+Downtime) 是计算它的公式。
8. 什么是酸性物质?
- 原子性:它确保数据库更改要么全部更改,要么全部更改。
- 一致性:数据库中的数据值是一致的。
- 隔离:是指两个事务的分离。
- 持久性:即使服务器出现故障,数据也会保留。
9. 什么是分片?
分片是将庞大的逻辑数据集划分为多个数据库的技术。 它也指水平数据拆分,因为数据将存储在多台计算机上。 因此,共享数据库可以处理比单个大型计算机更多的查询。
10.什么是CDN?
内容交付网络是一个全球性的计算机网络,它们协作以快速提供 Internet 信息。 它可以快速交付加载 Internet 内容所需的元素,例如 HTML 页面、JavaScript 文件、样式表、图片和视频。
11、为什么要使用CDN?
- 考虑到静态资源约占网站的 80%,采用 CDN 可以显着减少源站服务器的压力。
- 由于旅行距离更短,信息将更快地提供给拥有来自许多地理区域的访问者的网站所有者。
- CDN 的用户还受益于响应流量激增而快速扩展和缩减的能力。
12、分片和分区有什么区别?
数据库分片 - 数据库分片是将单个数据集划分为多个数据库的方法,以便可以将其存储在不同的工作站上。 较大的数据集可以分成较小的块并存储在多个数据节点中,从而增加系统的总存储容量。
通过将数据分布在多台机器上,共享数据库可以处理比单个系统更多的查询。
数据库分区是将存储的数据库对象(表、索引和视图)划分为单独部分的过程。 为了提高可控性、性能和可用性,对大型数据库对象进行分区。
在某些情况下,分区可以提高访问分区数据时的速度。 分区可以通过充当索引中的前导列来减小索引大小并增加在内存中定位最需要的索引的机会。
13. 缓存到底是什么?
缓存是一种将文件副本保存在称为缓存的临时存储区域中的技术,它可以加快数据访问速度并减少站点延迟。 缓存中只能存储一定数量的数据。
因此,确定最适合业务目标的缓存更新技术至关重要。
14. 什么是 CDN 边缘服务器?
缓存从源服务器或存储集群获取的资料的 CDN 服务器称为边缘服务器。 存在点是一个经常用于描述边缘服务器 (POP) 的术语。
边缘服务器物理上位于 POP。 在那个 POP 上,信息可能被许多边缘服务器缓存。
从多个位置提供网站部分的能力缩短了访问者与 Web 服务器之间的距离,从而降低了延迟。 CDN 边缘服务器实现了这一精确目标。
15. 系统设计有哪些不同的一致性模式?
根据 CAP 定理,每个读取请求都应该检索最近写入的数据。 当可以访问许多数据副本时,同步它们以使客户连续接收新数据变得困难。 以下是可能的一致性模式:
- 弱一致性:在数据写入之后,读取请求可能会也可能无法获得更新的数据。 这种稳定性水平非常适合实时应用程序,例如 VoIP、视频聊天和多人游戏。
- 最终一致性:读取最终会在数据写入后的几毫秒内查看最新数据。 在这种情况下,数据是异步复制的。 DNS 和电子邮件系统就是这样的例子。 这在具有高可用性的系统中有效。
- 强一致性:数据写入后,未来的读者将查看最新的数据。 在这种情况下,数据是同步复制的。 这可以在适合数据传输的 RDBMS 和文件系统中观察到。
16. 乐观锁是什么意思?
乐观锁定是一种机制,您可以在其中读取记录,记下版本号(替代方法包括日期、时间戳或校验和/哈希),然后在将其写回之前仔细检查版本是否没有更改。
当您写回记录时,您使用版本来过滤更新以确保它是原子的。 (即,在您检查版本和将记录写入磁盘之间没有更改)并一次更新它。
17. 你所说的“领导人选举”到底是什么意思?
在具有大量服务器以提高应用程序可用性的分布式系统中,有时只有一台服务器负责更新第三方 API,因为多台服务器在使用 API 时可能会导致问题。
该服务器称为主服务器,选择它的过程称为领导者选举。 当分布式系统中的领导者服务器发生故障时,服务器必须注意到故障并选择新的领导者。 使用共识技术,这种方法最适合高可用性和强一致性应用程序。
18. 您设计类似 TinyURL 的 URL 缩短服务的方法是什么?
TinyURL 将一个长 URL 转换为一个唯一的、唯一的短 URL。 这些技术还可以接受短 URL 并返回完整的 URL。
有哪些关键品质?
- 制作一个比原始网址短的网址。
- 保留较长的 URL 并将其替换为较短的 URL。
- 允许在短 URL 中进行重定向。
- 支持具有自定义名称的短 URL。
- 一次处理多个查询。
最普遍的问题是什么?
- 您如何跟踪数据库存储?
- 如果用户负载超出预期会怎样?
- 如果两个人使用相同的自定义 URL 怎么办?
考虑以下建议:
- 散列是一个可用于连接新旧 URL 的概念。
- REST API 可用于处理前端通信和平衡重负载。
- 多线程是一个允许您一次处理多个请求的概念。
- 原始 URL 存储在 NoSQL 数据库中。
19. 你设计推特的方法是什么?
给出的要求:
- 发送推文
- 关注其他用户
- 推文提要/新闻提要
- 系统可扩展
- 快速加载
- 系统可靠
建立标准后,您就可以开始考虑您的 Twitter API 设计。 这就是它的外观:
首先,我们将勾勒出 API 的关键端点。 这里有一些例子:
- 发送推文(消息)
- 关注用户(用户 ID)
- 取消关注用户(用户 ID)
- 获取Feed(页面)
然后可以勾勒出能够实现这些特性的架构。 我们可以从提交服务器请求的用户开始。 我们可以在负载均衡器后面安装额外的 API 服务器,以协助路由更大的流量级别以满足可扩展性需求。 我们现在需要添加一个数据库来存储我们的推文。
重要的是要记住我们提供的 API 应该是可扩展的。 为了使这项服务具有可扩展性,我们可以让我们的一个 API 服务器从单独的缓存中读取我们的新闻源。 在这样做的同时,我们还应该使用一个提要提供者来保持我们的提要缓存是最新的。
20. 为 Facebook 创建新闻源系统
Facebook 上的新闻源允许用户查看他们朋友的圈子、最喜欢的页面和他们关注的组织中发生的事情。
有哪些基本特征?
- 根据用户关注的其他系统实体的帖子创建新闻源。
- 文本、图片、音频和视频都可以在新闻源发布中使用。
- 实时向用户的新闻源添加新鲜内容。
一些最常见的问题是什么?
- 如果新帖子需要很长时间才能出现在新闻提要中怎么办?
- 该算法能否管理用户活动的激增?
- 哪些帖子应该首先显示在新闻提要中?
考虑以下建议:
- 检查将帖子分发给关注者的扇出机制。
- 检查如何使用分片来有效地处理高用户负载。
- 用户的提要数据不应跨多个服务器复制。 可以根据用户 ID 进行分片。
21. 什么是系统的 BASE 属性?
BASE 特性在最近出现的 NoSQL 数据库中无处不在。 根据 CAP 定理,BASE 系统不提供一致性。 这是一个虚构的首字母缩写词,对应于 CAP 定理的以下系统属性:
- 术语“基本可用”是指系统将始终可用。
- 软状态意味着系统的状态可以随时间变化,即使没有提供输入。 这主要是由于模型的最终一致性。
- 鉴于系统在此期间不接收输入,最终一致性意味着系统将随着时间的推移变得一致。
22. 什么是 IP 地址关联技术的负载平衡?
负载平衡的另一个突出方法是 IP 地址关联。 在此方法中,客户端 IP 地址与服务器节点连接。 一个服务器节点处理来自客户端 IP 地址的所有请求。
此方法易于实现,因为 IP 地址始终可在 HTTP 请求标头中访问,无需进一步设置。 如果您的客户端可能会停用 cookie,那么这种形式的负载平衡可能是有利的。
23. 缓存替换(或驱逐策略)算法到底是什么?
高速缓存算法(也称为高速缓存替换算法、高速缓存替换策略或高速缓存逐出策略)是优化指令或算法,计算机程序或硬件维护结构可以使用它来管理存储在计算机上的数据的高速缓存。
缓存通过将最近使用或经常访问的数据存储在比传统内存存储访问更快或更便宜的内存区域中来提高速度。 当缓存已满时,算法必须决定删除哪些项目以便为新项目腾出位置。
24.分布式事务到底是什么意思?
分布式事务是指单个事件导致无法以原子方式提交的两个或多个不同数据源的更改的任何情况。
在微服务的世界中,它变得更加复杂,因为每个服务都是一个工作单元,并且大多数情况下,许多服务必须协作才能使业务成功。
25. 饥饿究竟是什么?
当一个线程无法定期获得对共享资源的访问时,就说它处于饥饿状态。 当“贪婪”线程或具有更高“优先级”的线程使共享资源在很长一段时间内无法访问时,就会发生这种情况。
考虑一个对象,它提供了一个经常延迟返回的同步方法。 如果一个线程重复调用该方法,其他需要频繁同步访问同一对象的线程往往会被阻塞。
结论
头脑风暴会议是系统设计面试的全部内容。 我们在这篇文章中解决了最常见的系统设计面试问题。
全面掌握创建特定系统时所采用的方法对于通过系统设计面试至关重要.
发表评论