包含已实现案例研究和代码的完整系统设计
本仓库包含了所有你需要的内容,以帮助你精通系统设计。
所有项目和技术面试资源的YouTube频道 - Ignito YouTube频道
关于数据结构和算法,从这里开始:30天数据结构、算法和系统设计简化系列的第1天:DSA和系统设计变得简单
系统设计中你应该了解的主题 ---
系统设计案例研究
案例研究名称 | 案例研究链接 |
---|---|
设计 Instagram | 链接 |
设计即时通讯应用 | 链接 |
设计 Twitter | 链接 |
设计短网址服务 | 链接 |
设计 Dropbox | 链接 |
设计 YouTube | 链接 |
设计 Tinder | 链接 |
设计 Google Drive | 链接 |
设计即时通讯应用 | 链接 |
设计 Instagram | 链接 |
设计 Twitter | 链接 |
设计 Ticketmaster | 链接 |
设计 Quora | 链接 |
设计 Flipkart | 链接 |
设计 Flickr | 链接 |
设计 TikTok | 链接 |
设计 Netflix | 链接 |
设计 Foursquare | 链接 |
设计 Uber | 链接 |
设计 YouTube | 链接 |
设计 Reddit | 链接 |
设计 Facebook 的新闻源 | 链接 |
设计 Amazon Prime Video | 链接 |
设计网络爬虫 | 链接 |
设计网络爬虫 | 链接 |
设计 API 限流器 | 链接 |
设计 Dropbox | 链接 |
设计 Yelp | 链接 |
设计 WhatsApp | 链接 |
设计短网址服务 | 链接 |
设计 BookMyShow | 链接 |
设计 LinkedIn | 链接 |
设计 Telegram | 链接 |
设计 Snapchat | 链接 |
设计 OneDrive | 链接 |
设计 BookMyShow | 链接 |
设计 Google 地图 | 链接 |
设计 Quora | 链接 |
设计 Foursquare | 链接 |
设计短网址服务 | 链接 |
设计 Flipkart | 链接 |
系统设计轻松系列第1部分
在第1部分中,我们介绍了系统设计的内容和原因,以及你应该了解的重要主题。系统设计大多是一个开放性的概念,大多数问题都可以用不同的程度和方法来回答。用通俗的话说,系统设计就是关于:
架构 + 数据 + 应用
在第1部分中了解什么是系统设计及其重要性、它们如何工作以及如何在系统设计面试中使用它们
系统设计轻松系列第2部分
在第2部分中,我们介绍了:
-
系统设计基础
-
水平扩展和垂直扩展及其示例
从技术角度来说,可扩展性是一种技术/过程,通过添加/删除应用程序所需的基础设施/资源,以更好地服务/适应增加/减少的需求/增长。我们还介绍了水平扩展和垂直扩展的权衡。
在第2部分中了解为什么良好理解系统设计基础以及水平和垂直扩展很重要,它们如何工作以及如何在系统设计面试中使用它们
系统设计轻松系列第3部分
在第3部分中,我们介绍了系统设计最重要的概念:
-
负载均衡
-
消息队列
负载均衡是一种将任务分配到一组服务器/机器上的技术,以提高系统的性能、吞吐量、高可用性、冗余和可靠性。它不仅实现了水平扩展,还可以动态调整/扩展。
消息队列是在用户/应用程序和服务器之间放置的临时缓冲区,用于存储消息请求并以先进先出的顺序异步处理,直到请求/消息被传递到所需的服务器。
我们还介绍了不同技术的权衡。
在第3部分中了解为什么负载均衡和消息队列很重要,它们如何工作以及如何在系统设计面试中使用它们
系统设计轻松系列第4部分
在第4部分中,我们介绍了:
-
高层设计和低层设计
-
单体架构和微服务架构,以及何时选择哪一个?
-
一致性哈希
高层设计(HLD)描述了应用程序的整体架构,并非常简要地涵盖了系统每个模块的功能。低层设计详细说明了系统中每个模块的功能逻辑。
单体架构 — 由单一代码库组成,包含多个模块,更容易和更快地部署。微服务架构 — 由独立的服务单元组成,每个服务负责一个确切的功能。相对复杂,部署时间较长。
一致性哈希是一种使用哈希函数(键-值)在多个服务器/机器之间划分键/数据的技术。
在第4部分中了解为什么高层设计和低层设计、单体和微服务架构以及一致性哈希很重要,它们如何工作以及如何在系统设计面试中使用它们
系统设计轻松系列第5部分
在第5部分中,我们介绍了:
-
缓存
-
索引
-
代理
缓存是一种基于局部性原理的技术 — 将最常用/访问的数据的副本存储在小型和更快的内存中,以改善数据检索时间、计算成本、用户体验和吞吐量。
索引有助于提高数据访问/检索速度,减少昂贵的I/O操作数量,为多层数据记录提供更好的组织和管理。
代理在协调用户请求、处理并发请求、过滤用户请求、通过添加额外的加密层或头信息或压缩信息来转换用户请求,然后将用户请求转发到服务器方面发挥重要作用。
在第5部分中了解为什么缓存、索引和代理很重要,它们如何工作以及如何在系统设计面试中使用它们
系统设计轻松系列第6部分
在第6部分中,我们介绍了:
-
网络
-
浏览器如何工作
-
内容分发网络(CDN)
网络就是互连的设备,它们可以根据系统协议/规则、技术和算法交换数据消息并在它们之间/与外部世界共享资源。
浏览器用于呈现你想访问的网站/资源,例如google.com,通过向服务器发送请求并在浏览器窗口中显示它。
内容分发网络通过快速来回传输数据来满足用户的需求。
在第6部分中了解为什么网络、浏览器工作原理和CDN很重要,它们如何工作以及如何在系统设计面试中使用它们
系统设计轻松系列第7部分
在第7部分中,我们介绍了:
-
数据库分片
-
CAP定理
-
数据库模式设计
分片是一种数据库分区技术,它将大型复杂的数据库分成更小、更快和分布式的数据库,以实现更高的吞吐量操作。
CAP定理让你决定在出现不一致、不可用和连接错误/故障/中断的可能性时,如何处理你的分布式数据库。 数据库架构设计让你可以将数据组织成独立的实体,并建立和组织不同实体之间的关系。
在第7部分中了解数据库分片、CAP定理和数据库架构设计为什么重要,它们是如何工作的,以及如何在系统设计面试中使用它们
系统设计简单系列第8部分
在第8部分中,我们涵盖了以下内容:
-
并发
-
API
-
组件 + 面向对象编程 + 抽象
并发是多个计算/操作/进程并行/同时执行的过程。
API是应用程序编程接口的缩写,它为两个或多个程序提供了一种通信、协同工作的方式,尽管它们可能有不同的配置、架构、资源等。
系统设计中的组件是设计用来与同一系统/不同系统的其他组件协调、合作、重用和良好配合的构建块。它们可以简单到视觉组件,也可以是内部组件/后端组件。
在第8部分中了解并发、API和组件 + 面向对象编程 + 抽象为什么重要,它们是如何工作的,以及如何在系统设计面试中使用它们
系统设计简单系列第9部分
在第9部分中,我们涵盖了以下内容:
-
规划和估算
-
性能
规划和估算(数字)以及性能是非常重要的概念(你应该能够在被问到时很好地展示这些概念)。
在第9部分中了解规划、估算(数字)和性能为什么重要,它们是如何工作的,以及如何在系统设计面试中使用它们
系统设计简单系列第10部分
在第10部分中,我们涵盖了以下内容:
-
MapReduce
-
模式和微服务
在系统设计中,MapReduce(Hadoop系统)是一种批处理技术,其中引擎接收大量数据,处理(映射和归约)并给出输出。
在系统设计中,微服务架构用于构建企业级应用程序,它有助于将整个应用程序构建为一系列微小的自主、自包含的服务,每个服务用于你想要/被允许执行的每项任务(服务)。
在第10部分中了解MapReduce、模式和微服务为什么重要,它们是如何工作的,以及如何在系统设计面试中使用它们
最受欢迎的系统设计问题 - 大汇编
在这篇文章中,我们涵盖了你应该练习的最受欢迎/重要的系统设计问题,以全面了解大型系统是如何设计的。
热门问题:链接
其他一些最佳系列 -
6门强烈推荐的数据科学和机器学习课程(附证书) -
- 完整的数据科学家:https://bit.ly/3wiIo8u
学习运行数据管道、设计实验、构建推荐系统,并将解决方案部署到云端。
- 完整的数据工程:https://bit.ly/3A9oVs5
学习设计数据模型、构建数据仓库和数据湖、自动化数据管道,以及处理海量数据集
- 完整的机器学习工程师:https://bit.ly/3Tir8ub
学习高级机器学习技术和算法 - 包括如何打包和部署你的模型到生产环境。
- 完整数据产品经理课程:https://bit.ly/3QGUtwi
利用数据构建产品,在正确的时间为正确的用户提供恰当的体验。领导开发数据驱动的产品,使企业在市场中占据优势地位。
- 完整自然语言处理课程:https://bit.ly/3T7J8qY
基于真实数据构建模型,获得情感分析、机器翻译等方面的实践经验。
- 完整深度学习课程:https://bit.ly/3T5ppIo
学习使用深度学习框架PyTorch实现神经网络。