系统设计面试完整列表


系统设计面试完整列表:

1.网络通信协议
分布式系统中的机器通过网络彼此通信。
需要了解的内容:

  • - 对低级网络的基本了解
  • - 协议(IP、TCP、UDP、DNS和HTTP)

2.储存
信息存储是每个分布式系统的基本组成部分。
需要了解的内容:

  • - 易失性与非易失性存储器
  • - 数据库概念

3.可用性
大多数分布式系统都需要具有高可用性。
需要了解的内容:

  • - 如何度量系统可用性 
  • - 如何提高系统可用性 
  • - 如何使用冗余

4.缓存
高速缓存存储对网络请求的响应或计算开销大的操作结果。
需要了解的内容:

  • - 高速缓存命中和未命中术语
  • - 高速缓存回收策略
  • - 内容分发网络

5.延迟和吞吐量
这些是评估分布式系统性能的关键参数。
需要了解的内容:

  • - 最常见操作的延迟
  • - 粗略计算

6.代理和负载平衡器
代理是每个系统中使用的中间服务器。
需要了解的内容:

  • - 正向和反向代理
  • - 使用反向代理作为负载平衡器
  • - 负载均衡器的服务器选择策略

7.散列
散列有助于缓存 服务器的弹性伸缩和数据分区。
需要了解的内容:

  • - 一致散列
  • - 会合散列

8.关系型数据库
这些是结构化的数据库,以表格格式存储数据,支持SQL查询。
需要了解的内容。

  • - 索引
  • - ACID事务
  • - 强一致性与最终一致性

9.NoSQL
键值数据库(即RedisZookeeper)经常用于缓存和配置。
需要了解的其他数据库:

  • - blob存储(S3)
  • - 时间序列数据库
  • - 图形数据库(Neo4j)
  • - 空间数据库和四叉树

10.复制和分片
这些都是提高可用性和性能的标准技术。
需要了解的内容:

  • - 如何在多台服务器上复制数据以增加冗余
  • - 如何在多个服务器之间划分数据以提高吞吐量

11.领导者选举
这就是服务器群集选择负责所有主要操作的领导者的方式。
需要了解的内容:

12.轮询和流
这些是从服务器获取数据的最常用技术。
需要了解的内容:

  • - 如何定期提取数据(轮询)
  • - 如何获得连续数据馈送(流)

13.记录和监视
每个系统都需要测量性能并解决问题。
需要了解的内容:

  • - 如何收集和记录事件信息 
  • - 如何了解系统关键指标 

14.发布-订阅 
这是一种广泛使用的消息传递模式。 
需要了解的内容:

  • - pub-sub如何工作
  • - 什么是幂等运算
  • - Apache Kafka等流行框架

15.点对点网络
这些机器将工作负载在它们之间进行分配,以便以最快的方式完成工作。
需要了解的内容:

  • - 什么是Gossip协议
  • - 这种网络的使用情况

16.速率限制
限制发送到或由系统接收的请求的数量是至关重要的。
需要知道的是。

  • - 速率限制如何防止DDoS攻击
  • - 如何实施速率限制策略(如使用Redis)。

17.Mapreduce
这是一种用于以容错方式高效处理大型分布式数据集的流行框架。
需要了解的内容: 

  • - 什么是分布式文件系统
  • - 流行的分布式文件系统实现(即,硬盘驱动器)

18. API设计
需要了解的内容: 

  • - Web API设计基础知识
  • - CRUD操作的概念