From a1a79a39fd32f407b7d1b2cb37c7c5f027573163 Mon Sep 17 00:00:00 2001
From: Guide
Date: Sat, 22 Apr 2023 10:34:42 +0800
Subject: [PATCH] =?UTF-8?q?[docs=20fix]Heap=20=E5=88=9D=E5=A7=8B=E5=8C=96?=
=?UTF-8?q?=E7=9A=84=E6=97=B6=E9=97=B4=E5=A4=8D=E6=9D=82=E5=BA=A6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 1 +
docs/.vuepress/sidebar.ts | 1 +
docs/cs-basics/data-structure/heap.md | 4 +-
docs/database/redis/redis-cluster.md | 2 +-
.../redis-common-blocking-problems-summary.md | 2 +-
.../redis/redis-memory-fragmentation.md | 2 +-
docs/distributed-system/api-gateway.md | 2 +-
docs/distributed-system/distributed-id.md | 2 +-
docs/high-performance/load-balancing.md | 242 +++++++++++++++---
docs/home.md | 3 +-
.../key-points-of-interview.md | 37 +++
.../project-experience-guide.md | 4 +
.../why-there-only-value-passing-in-java.md | 2 +-
docs/java/collection/arraylist-source-code.md | 2 +-
.../concurrent-hash-map-source-code.md | 2 +-
docs/java/collection/hashmap-source-code.md | 2 +-
.../java-collection-precautions-for-use.md | 2 +-
docs/java/concurrent/aqs.md | 2 +-
docs/java/concurrent/atomic-classes.md | 2 +-
.../concurrent/completablefuture-intro.md | 2 +-
.../java-concurrent-questions-01.md | 2 +-
.../java-concurrent-questions-02.md | 2 +-
.../java-concurrent-questions-03.md | 2 +-
.../concurrent/java-thread-pool-summary.md | 2 +-
docs/java/io/io-basis.md | 2 +-
docs/java/io/io-design-patterns.md | 2 +-
docs/java/io/io-model.md | 2 +-
docs/java/jvm/classloader.md | 2 +-
docs/java/jvm/jvm-intro.md | 2 +-
docs/java/jvm/jvm-parameters-intro.md | 2 +-
docs/java/jvm/memory-area.md | 2 +-
.../spring-knowledge-and-questions-summary.md | 2 +-
.../framework/spring/spring-transaction.md | 2 +-
...ingboot-knowledge-and-questions-summary.md | 2 +-
.../jwt-authentication process.drawio | 1 -
...ssion-cookie-authentication-process.drawio | 1 -
.../sso.drawio | 1 -
...ity-system-design-access-flow-chart.drawio | 1 -
.../design-of-authority-system/rbac.drawio | 1 -
.../sentive-words-filter/brower-trie.png | Bin 10501 -> 0 bytes
.../common-collections-trie.png | Bin 11741 -> 0 bytes
.../sentive-words-filter/hutool-dfa.png | Bin 7471 -> 0 bytes
.../images/sentive-words-filter/trie.drawio | 1 -
.../images/sentive-words-filter/trie.png | Bin 50950 -> 0 bytes
.../security/sentive-words-filter.md | 6 +-
docs/tools/docker/docker-in-action.md | 2 +-
docs/tools/docker/docker-intro.md | 2 +-
docs/tools/git/git-intro.md | 2 +-
docs/tools/git/github-tips.md | 2 +-
docs/tools/gradle/gradle-core-concepts.md | 2 +-
docs/tools/maven/maven-core-concepts.md | 2 +-
51 files changed, 293 insertions(+), 77 deletions(-)
create mode 100644 docs/interview-preparation/key-points-of-interview.md
delete mode 100644 docs/system-design/security/images/basis-of-authority-certification/jwt-authentication process.drawio
delete mode 100644 docs/system-design/security/images/basis-of-authority-certification/session-cookie-authentication-process.drawio
delete mode 100644 docs/system-design/security/images/basis-of-authority-certification/sso.drawio
delete mode 100644 docs/system-design/security/images/design-of-authority-system/new-authority-system-design-access-flow-chart.drawio
delete mode 100644 docs/system-design/security/images/design-of-authority-system/rbac.drawio
delete mode 100644 docs/system-design/security/images/sentive-words-filter/brower-trie.png
delete mode 100644 docs/system-design/security/images/sentive-words-filter/common-collections-trie.png
delete mode 100644 docs/system-design/security/images/sentive-words-filter/hutool-dfa.png
delete mode 100644 docs/system-design/security/images/sentive-words-filter/trie.drawio
delete mode 100644 docs/system-design/security/images/sentive-words-filter/trie.png
diff --git a/README.md b/README.md
index 2df66d2e..a8c86512 100755
--- a/README.md
+++ b/README.md
@@ -34,6 +34,7 @@
+
## 项目相关
* [项目介绍](./docs/javaguide/intro.md)
diff --git a/docs/.vuepress/sidebar.ts b/docs/.vuepress/sidebar.ts
index 872610db..8dfc946b 100644
--- a/docs/.vuepress/sidebar.ts
+++ b/docs/.vuepress/sidebar.ts
@@ -25,6 +25,7 @@ export const sidebarConfig = sidebar({
prefix: "interview-preparation/",
children: [
"teach-you-how-to-prepare-for-the-interview-hand-in-hand",
+ "key-points-of-interview",
"project-experience-guide",
"interview-experience",
"self-test-of-common-interview-questions",
diff --git a/docs/cs-basics/data-structure/heap.md b/docs/cs-basics/data-structure/heap.md
index 8ce67e60..1a70629e 100644
--- a/docs/cs-basics/data-structure/heap.md
+++ b/docs/cs-basics/data-structure/heap.md
@@ -32,7 +32,9 @@ tag:
有小伙伴可能会想到用有序数组,初始化一个有序数组时间复杂度是 `O(nlog(n))`,查找最大值或者最小值时间复杂度都是 `O(1)`,但是,涉及到更新(插入或删除)数据时,时间复杂度为 `O(n)`,即使是使用复杂度为 `O(log(n))` 的二分法找到要插入或者删除的数据,在移动数据时也需要 `O(n)` 的时间复杂度。
-**相对于有序数组而言,堆的主要优势在于更新数据效率较高。** 堆的初始化时间复杂度为 `O(nlog(n))`,堆可以做到`O(1)`时间复杂度取出最大值或者最小值,`O(log(n))`时间复杂度插入或者删除数据,具体操作在后续章节详细介绍。
+**相对于有序数组而言,堆的主要优势在于插入和删除数据效率较高。** 因为堆是基于完全二叉树实现的,所以在插入和删除数据时,只需要在二叉树中上下移动节点,时间复杂度为 `O(log(n))`,相比有序数组的 `O(n)`,效率更高。而最大值或最小值的获取,则是堆的另一个优势,时间复杂度为 `O(1)`,相比有序数组的 `O(log(n))`,更快速。
+
+不过,需要注意的是:Heap 初始化的时间复杂度为 `O(n)`,而非`O(nlogn)`。
## 堆的分类
diff --git a/docs/database/redis/redis-cluster.md b/docs/database/redis/redis-cluster.md
index 3b140eb4..73224676 100644
--- a/docs/database/redis/redis-cluster.md
+++ b/docs/database/redis/redis-cluster.md
@@ -1,5 +1,5 @@
---
-title: Redis 集群详解(付费)
+title: Redis集群详解(付费)
category: 数据库
tag:
- Redis
diff --git a/docs/database/redis/redis-common-blocking-problems-summary.md b/docs/database/redis/redis-common-blocking-problems-summary.md
index 646c4ed4..a601bdf7 100644
--- a/docs/database/redis/redis-common-blocking-problems-summary.md
+++ b/docs/database/redis/redis-common-blocking-problems-summary.md
@@ -1,5 +1,5 @@
---
-title: Redis 常见阻塞原因总结
+title: Redis常见阻塞原因总结
category: 数据库
tag:
- Redis
diff --git a/docs/database/redis/redis-memory-fragmentation.md b/docs/database/redis/redis-memory-fragmentation.md
index b6e755a6..7de708a7 100644
--- a/docs/database/redis/redis-memory-fragmentation.md
+++ b/docs/database/redis/redis-memory-fragmentation.md
@@ -1,5 +1,5 @@
---
-title: Redis 内存碎片详解
+title: Redis内存碎片详解
category: 数据库
tag:
- Redis
diff --git a/docs/distributed-system/api-gateway.md b/docs/distributed-system/api-gateway.md
index 5daa6d47..29a3546d 100644
--- a/docs/distributed-system/api-gateway.md
+++ b/docs/distributed-system/api-gateway.md
@@ -1,5 +1,5 @@
---
-title: API 网关详解
+title: API网关详解
category: 分布式
icon: "gateway"
---
diff --git a/docs/distributed-system/distributed-id.md b/docs/distributed-system/distributed-id.md
index f9387a7f..17ff01b8 100644
--- a/docs/distributed-system/distributed-id.md
+++ b/docs/distributed-system/distributed-id.md
@@ -1,5 +1,5 @@
---
-title: 分布式 ID 详解
+title: 分布式ID详解
category: 分布式
icon: "id"
---
diff --git a/docs/high-performance/load-balancing.md b/docs/high-performance/load-balancing.md
index eee37922..7f3017d3 100644
--- a/docs/high-performance/load-balancing.md
+++ b/docs/high-performance/load-balancing.md
@@ -1,5 +1,5 @@
---
-title: 负载均衡详解(付费)
+title: 负载均衡详解
category: 高性能
icon: "fuzaijunheng"
head:
@@ -11,48 +11,226 @@ head:
content: 负载均衡指的是将用户请求分摊到不同的服务器上处理,以提高系统整体的并发处理能力。负载均衡可以简单分为服务端负载均衡和客户端负载均衡 这两种。服务端负载均衡涉及到的知识点更多,工作中遇到的也比较多,因为,我会花更多时间来介绍。
---
-**负载均衡** 相关的面试题为我的[知识星球](https://javaguide.cn/about-the-author/zhishixingqiu-two-years.html)(点击链接即可查看详细介绍以及加入方法)专属内容,已经整理到了[《Java 面试指北》](https://javaguide.cn/zhuanlan/java-mian-shi-zhi-bei.html)中。
+## 什么是负载均衡?
-[《Java 面试指北》](https://javaguide.cn/zhuanlan/java-mian-shi-zhi-bei.html)(点击链接即可查看详细介绍)的部分内容展示如下,你可以将其看作是 [JavaGuide](https://javaguide.cn) 的补充完善,两者可以配合使用。
+**负载均衡** 指的是将用户请求分摊到不同的服务器上处理,以提高系统整体的并发处理能力以及可靠性。负载均衡服务可以有由专门的软件或者硬件来完成,一般情况下,硬件的性能更好,软件的价格更便宜(后文会详细介绍到)。
-
+下图是[《Java 面试指北》](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247519384&idx=1&sn=bc7e71af75350b755f04ca4178395b1a&chksm=cea1c353f9d64a458f797696d4144b4d6e58639371a4612b8e4d106d83a66d2289e7b2cd7431&token=660789642&lang=zh_CN&scene=21#wechat_redirect) 「高并发篇」中的一篇文章的配图,从图中可以看出,系统的商品服务部署了多份在不同的服务器上,为了实现访问商品服务请求的分流,我们用到了负载均衡。
-最近几年,市面上有越来越多的“技术大佬”开始办培训班/训练营,动辄成千上万的学费,却并没有什么干货,单纯的就是割韭菜。
+
-为了帮助更多同学准备 Java 面试以及学习 Java ,我创建了一个纯粹的知识星球。虽然收费只有培训班/训练营的百分之一,但是知识星球里的内容质量更高,提供的服务也更全面。
+负载均衡是一种比较常用且实施起来较为简单的提高系统并发能力和可靠性的手段,不论是单体架构的系统还是微服务架构的系统几乎都会用到。
-欢迎准备 Java 面试以及学习 Java 的同学加入我的[知识星球](https://javaguide.cn/about-the-author/zhishixingqiu-two-years.html),干货非常多,学习氛围也很不错!收费虽然是白菜价,但星球里的内容或许比你参加上万的培训班质量还要高。
+## 负载均衡分为哪几种?
-
+负载均衡可以简单分为 **服务端负载均衡** 和 **客户端负载均衡** 这两种。
-下面是星球提供的部分服务(点击下方图片即可获取知识星球的详细介绍):
+服务端负载均衡涉及到的知识点更多,工作中遇到的也比较多,因为,我会花更多时间来介绍。
-
+### 服务端负载均衡
-**我有自己的原则,不割韭菜,用心做内容,真心希望帮助到你!**
+**服务端负载均衡** 主要应用在 **系统外部请求** 和 **网关层** 之间,可以使用 **软件** 或者 **硬件** 实现。
-如果你感兴趣的话,不妨花 3 分钟左右看看星球的详细介绍: [JavaGuide 知识星球详细介绍](https://javaguide.cn/about-the-author/zhishixingqiu-two-years.html)。
+下图是我画的一个简单的基于 Nginx 的服务端负载均衡示意图:
-这里再送一个 30 元的新人优惠券(续费半价)。
+
-
+**硬件负载均衡** 通过专门的硬件设备(比如 **F5、A10、Array** )实现负载均衡功能。
-进入星球之后,记得添加微信,我会发你详细的星球使用指南。
+硬件负载均衡的优势是性能很强且稳定,缺点就是实在是太贵了。像基础款的 F5 最低也要 20 多万,绝大部分公司是根本负担不起的,业务量不大的话,真没必要非要去弄个硬件来做负载均衡,用软件负载均衡就足够了!
-
\ No newline at end of file
+在我们日常开发中,一般很难接触到硬件负载均衡,接触的比较多的还是 **软件负载均衡** 。软件负载均衡通过软件(比如 **LVS、Nginx、HAproxy** )实现负载均衡功能,性能虽然差一些,但价格便宜啊!像基础款的 Linux 服务器也就几千,性能好一点的 2~3 万的就很不错了。
+
+根据 OSI 模型,服务端负载均衡还可以分为:
+
+- 二层负载均衡
+- 三层负载均衡
+- 四层负载均衡
+- 七层负载均衡
+
+最常见的是四层和七层负载均衡,因此,本文也是重点介绍这两种负载均衡。
+
+> Nginx 官网对四层负载和七层负载均衡均衡做了详细介绍,感兴趣的可以看看。
+>
+> - [What Is Layer 4 Load Balancing?](https://www.nginx.com/resources/glossary/layer-4-load-balancing/)
+> - [What Is Layer 7 Load Balancing?](https://www.nginx.com/resources/glossary/layer-7-load-balancing/)
+
+
+
+- **四层负载均衡** 工作在 OSI 模型第四层,也就是传输层,这一层的主要协议是 TCP/UDP,负载均衡器在这一层能够看到数据包里的源端口地址以及目的端口地址,会基于这些信息通过一定的负载均衡算法将数据包转发到后端真实服务器。也就是说,四层负载均衡的核心就是 IP+端口层面的负载均衡,不涉及具体的报文内容。
+- **七层负载均衡** 工作在 OSI 模型第七层,也就是应用层,这一层的主要协议是 HTTP 。这一层的负载均衡比四层负载均衡路由网络请求的方式更加复杂,它会读取报文的数据部分(比如说我们的 HTTP 部分的报文),然后根据读取到的数据内容(如 URL、Cookie)做出负载均衡决策。也就是说,七层负载均衡器的核心是报文内容(如 URL、Cookie)层面的负载均衡,执行第七层负载均衡的设备通常被称为 **反向代理服务器** 。
+
+七层负载均衡比四层负载均衡会消耗更多的性能,不过,也相对更加灵活,能够更加智能地路由网络请求,比如说你可以根据请求的内容进行优化如缓存、压缩、加密。
+
+简单来说,**四层负载均衡性能更强,七层负载均衡功能更强!** 不过,对于绝大部分业务场景来说,四层负载均衡和七层负载均衡的性能差异基本可以忽略不计的。
+
+下面这段话摘自 Nginx 官网的 [What Is Layer 4 Load Balancing?](https://www.nginx.com/resources/glossary/layer-4-load-balancing/) 这篇文章。
+
+> Layer 4 load balancing was a popular architectural approach to traffic handling when commodity hardware was not as powerful as it is now, and the interaction between clients and application servers was much less complex. It requires less computation than more sophisticated load balancing methods (such as Layer 7), but CPU and memory are now sufficiently fast and cheap that the performance advantage for Layer 4 load balancing has become negligible or irrelevant in most situations.
+>
+> 第 4 层负载平衡是一种流行的流量处理体系结构方法,当时商用硬件没有现在这么强大,客户端和应用程序服务器之间的交互也不那么复杂。它比更复杂的负载平衡方法(如第 7 层)需要更少的计算量,但是 CPU 和内存现在足够快和便宜,在大多数情况下,第 4 层负载平衡的性能优势已经变得微不足道或无关紧要。
+
+在工作中,我们通常会使用 **Nginx** 来做七层负载均衡,LVS(Linux Virtual Server 虚拟服务器, Linux 内核的 4 层负载均衡)来做四层负载均衡。
+
+关于 Nginx 的常见知识点总结,[《Java 面试指北》](https://javaguide.cn/zhuanlan/java-mian-shi-zhi-bei.html) 中「技术面试题篇」中已经有对应的内容了,感兴趣的小伙伴可以去看看。
+
+
+
+不过,LVS 这个绝大部分公司真用不上,像阿里、百度、腾讯、eBay 等大厂才会使用到,用的最多的还是 Nginx。
+
+### 客户端负载均衡
+
+**客户端负载均衡** 主要应用于系统内部的不同的服务之间,可以使用现成的负载均衡组件来实现。
+
+在客户端负载均衡中,客户端会自己维护一份服务器的地址列表,发送请求之前,客户端会根据对应的负载均衡算法来选择具体某一台服务器处理请求。
+
+客户端负载均衡器和服务运行在同一个进程或者说 Java 程序里,不存在额外的网络开销。不过,客户端负载均衡的实现会受到编程语言的限制,比如说 Spring Cloud Load Balancer 就只能用于 Java 语言。
+
+Java 领域主流的微服务框架 Dubbo、Spring Cloud 等都内置了开箱即用的客户端负载均衡实现。Dubbo 属于是默认自带了负载均衡功能,Spring Cloud 是通过组件的形式实现的负载均衡,属于可选项,比较常用的是 Spring Cloud Load Balancer(官方,推荐) 和 Ribbon(Netflix,已被启用)。
+
+下图是我画的一个简单的基于 Spring Cloud Load Balancer(Ribbon 也类似) 的客户端负载均衡示意图:
+
+
+
+## 负载均衡常见的算法有哪些?
+
+### 随机法
+
+**随机法** 是最简单粗暴的负载均衡算法。
+
+如果没有配置权重的话,所有的服务器被访问到的概率都是相同的。如果配置权重的话,权重越高的服务器被访问的概率就越大。
+
+未加权重的随机算法适合于服务器性能相近的集群,其中每个服务器承载相同的负载。加权随机算法适合于服务器性能不等的集群,权重的存在可以使请求分配更加合理化。
+
+不过,随机算法有一个比较明显的缺陷:部分机器在一段时间之内无法被随机到,毕竟是概率算法,就算是大家权重一样, 也可能会出现这种情况。
+
+于是,**轮询法** 来了!
+
+### 轮询法
+
+轮询法是挨个轮询服务器处理,也可以设置权重。
+
+如果没有配置权重的话,每个请求按时间顺序逐一分配到不同的服务器处理。如果配置权重的话,权重越高的服务器被访问的次数就越多。
+
+未加权重的轮询算法适合于服务器性能相近的集群,其中每个服务器承载相同的负载。加权轮询算法适合于服务器性能不等的集群,权重的存在可以使请求分配更加合理化。
+
+### 一致性 Hash 法
+
+相同参数的请求总是发到同一台服务器处理,比如同个 IP 的请求。
+
+### 最小连接法
+
+当有新的请求出现时,遍历服务器节点列表并选取其中活动连接数最小的一台服务器来响应当前请求。活动连接数可以理解为当前正在处理的请求数。
+
+最小连接法可以尽可能最大地使请求分配更加合理化,提高服务器的利用率。不过,这种方法实现起来也最复杂,需要监控每一台服务器处理的请求连接数。
+
+## 七层负载均衡可以怎么做?
+
+简单介绍两种项目中常用的七层负载均衡解决方案:DNS 解析和反向代理。
+
+除了我介绍的这两种解决方案之外,HTTP 重定向等手段也可以用来实现负载均衡,不过,相对来说,还是 DNS 解析和反向代理用的更多一些,也更推荐一些。
+
+### DNS 解析
+
+DNS 解析是比较早期的七层负载均衡实现方式,非常简单。
+
+DNS 解析实现负载均衡的原理是这样的:在 DNS 服务器中为同一个主机记录配置多个 IP 地址,这些 IP 地址对应不同的服务器。当用户请求域名的时候,DNS 服务器采用轮询算法返回 IP 地址,这样就实现了轮询版负载均衡。
+
+
+
+现在的 DNS 解析几乎都支持 IP 地址的权重配置,这样的话,在服务器性能不等的集群中请求分配会更加合理化。像我自己目前正在用的阿里云 DNS 就支持权重配置。
+
+
+
+### 反向代理
+
+客户端将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器,获取数据后再返回给客户端。对外暴露的是反向代理服务器地址,隐藏了真实服务器 IP 地址。反向代理“代理”的是目标服务器,这一个过程对于客户端而言是透明的。
+
+Nginx 就是最常用的反向代理服务器,它可以将接收到的客户端请求以一定的规则(负载均衡策略)均匀地分配到这个服务器集群中所有的服务器上。
+
+反向代理负载均衡同样属于七层负载均衡。
+
+
+
+## 客户端负载均衡通常是怎么做的?
+
+我们上面也说了,客户端负载均衡可以使用现成的负载均衡组件来实现。
+
+**Netflix Ribbon** 和 **Spring Cloud Load Balancer** 就是目前 Java 生态最流行的两个负载均衡组件。
+
+Ribbon 是老牌负载均衡组件,由 Netflix 开发,功能比较全面,支持的负载均衡策略也比较多。 Spring Cloud Load Balancer 是 Spring 官方为了取代 Ribbon 而推出的,功能相对更简单一些,支持的负载均衡也少一些。
+
+Ribbon 支持的 7 种负载均衡策略:
+
+- `RandomRule` :随机策略。
+- `RoundRobinRule`(默认) :轮询策略
+- `WeightedResponseTimeRule` :权重(根据响应时间决定权重)策略
+- `BestAvailableRule` :最小连接数策略
+- `RetryRule`:重试策略(按照轮询策略来获取服务,如果获取的服务实例为 null 或已经失效,则在指定的时间之内不断地进行重试来获取服务,如果超过指定时间依然没获取到服务实例则返回 null)
+- `AvailabilityFilteringRule` :可用敏感性策略(先过滤掉非健康的服务实例,然后再选择连接数较小的服务实例)
+- `ZoneAvoidanceRule` :区域敏感性策略(根据服务所在区域的性能和服务的可用性来选择服务实例)
+
+Spring Cloud Load Balancer 支持的 2 种负载均衡策略:
+
+- `RandomLoadBalancer` :随机策略
+- `RoundRobinLoadBalancer`(默认) :轮询策略
+
+```java
+public class CustomLoadBalancerConfiguration {
+
+ @Bean
+ ReactorLoadBalancer randomLoadBalancer(Environment environment,
+ LoadBalancerClientFactory loadBalancerClientFactory) {
+ String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);
+ return new RandomLoadBalancer(loadBalancerClientFactory
+ .getLazyProvider(name, ServiceInstanceListSupplier.class),
+ name);
+ }
+}
+```
+
+不过,Spring Cloud Load Balancer 支持的负载均衡策略其实不止这两种,`ServiceInstanceListSupplier` 的实现类同样可以让其支持类似于 Ribbon 的负载均衡策略。这个应该是后续慢慢完善引入的,不看官方文档还真发现不了,所以说阅读官方文档真的很重要!
+
+这里举两个官方的例子:
+
+- `ZonePreferenceServiceInstanceListSupplier` :实现基于区域的负载平衡
+- `HintBasedServiceInstanceListSupplier` :实现基于 hint 提示的负载均衡
+
+```java
+public class CustomLoadBalancerConfiguration {
+ // 使用基于区域的负载平衡方法
+ @Bean
+ public ServiceInstanceListSupplier discoveryClientServiceInstanceListSupplier(
+ ConfigurableApplicationContext context) {
+ return ServiceInstanceListSupplier.builder()
+ .withDiscoveryClient()
+ .withZonePreference()
+ .withCaching()
+ .build(context);
+ }
+}
+```
+
+关于Spring Cloud Load Balancer更详细更新的介绍,推荐大家看看官方文档:https://docs.spring.io/spring-cloud-commons/docs/current/reference/html/#spring-cloud-loadbalancer ,一切以官方文档为主。
+
+轮询策略基本可以满足绝大部分项目的需求,我们的实际项目中如果没有特殊需求的话,通常使用的就是默认的轮询策略。并且,Ribbon 和 Spring Cloud Load Balancer 都支持自定义负载均衡策略。
+
+个人建议如非必需 Ribbon 某个特有的功能或者负载均衡策略的话,就优先选择 Spring 官方提供的 Spring Cloud Load Balancer。
+
+最后再说说为什么我不太推荐使用 Ribbon 。
+
+Spring Cloud 2020.0.0 版本移除了 Netflix 除 Eureka 外的所有组件。Spring Cloud Hoxton.M2 是第一个支持 Spring Cloud Load Balancer 来替代 Netfix Ribbon 的版本。
+
+我们早期学习微服务,肯定接触过 Netflix 公司开源的 Feign、Ribbon、Zuul、Hystrix、Eureka 等知名的微服务系统构建所必须的组件,直到现在依然有非常非常多的公司在使用这些组件。不夸张地说,Netflix 公司引领了 Java 技术栈下的微服务发展。
+
+
+
+**那为什么 Spring Cloud 这么急着移除 Netflix 的组件呢?** 主要是因为在 2018 年的时候,Netflix 宣布其开源的核心组件 Hystrix、Ribbon、Zuul、Eureka 等进入维护状态,不再进行新特性开发,只修 BUG。于是,Spring 官方不得不考虑移除 Netflix 的组件。
+
+**Spring Cloud Alibaba** 是一个不错的选择,尤其是对于国内的公司和个人开发者来说。
+
+## 参考
+
+- 干货 | eBay 的 4 层软件负载均衡实现:https://mp.weixin.qq.com/s/bZMxLTECOK3mjdgiLbHj-g
+- HTTP Load Balancing(Nginx 官方文档):https://docs.nginx.com/nginx/admin-guide/load-balancer/http-load-balancer/
+- 深入浅出负载均衡 - vivo 互联网技术:https://www.cnblogs.com/vivotech/p/14859041.html
\ No newline at end of file
diff --git a/docs/home.md b/docs/home.md
index fbae8ef2..f1deff3d 100644
--- a/docs/home.md
+++ b/docs/home.md
@@ -26,8 +26,6 @@ title: JavaGuide(Java学习&&面试指南)
Gitee
-
-
+
## 项目相关
* [项目介绍](./javaguide/intro.md)
diff --git a/docs/interview-preparation/key-points-of-interview.md b/docs/interview-preparation/key-points-of-interview.md
new file mode 100644
index 00000000..bfe6eab4
--- /dev/null
+++ b/docs/interview-preparation/key-points-of-interview.md
@@ -0,0 +1,37 @@
+---
+title: Java面试重点总结
+category: 面试准备
+---
+
+::: tip 友情提示
+本文节选自 **[《Java 面试指北》](../zhuanlan/java-mian-shi-zhi-bei.md)**。这是一份教你如何更高效地准备面试的小册,涵盖常见八股文(系统设计、常见框架、分布式、高并发 ......)、优质面经等内容。
+:::
+
+## Java 后端面试哪些知识点是重点?
+
+**准备面试的时候,具体哪些知识点是重点呢?**
+
+给你几点靠谱的建议:
+
+1. Java 基础、集合、并发、MySQL、Redis 、Spring、Spring Boot 这些 Java 后端开发必备的知识点。大厂以及中小厂的面试问的比较多的就是这些知识点(不信的话,你可以去多找一些面经看看)。我这里没有提到计算机基础相关的内容,这个会在下面提到。
+2. 你的项目经历涉及到的知识点,有水平的面试官都是会根据你的项目经历来问的。举个例子,你的项目经历使用了 Redis 来做限流,那 Redis 相关的八股文(比如 Redis 常见数据结构)以及限流相关的八股文(比如常见的限流算法)你就应该多花更多心思来搞懂!吃透!你把项目经历上的知识点吃透之后,再把你简历上哪些写熟练掌握的技术给吃透。最后,再去花时间准备其他知识点。
+3. 针对自身找工作的需求,你又可以适当地调整复习的重点。像中小厂一般问计算机基础比较少一些,有些大厂比如字节比较重视计算机基础尤其是算法。这样的话,如果你的目标是中小厂的话,计算机基础就准备面试来说不是那么重要了。如果复习时间不够的话,可以暂时先放放。
+4. 一般校招的面试不会强制要求你会分布式/微服务、高并发的知识(不排除个别岗位有这方面的硬性要求),所以到底要不要掌握还是要看你个人当前的实际情况。如果你会这方面的知识的话,对面试相对来说还是会更有利一些(想要让项目经历有亮点,还是得会一些性能优化的知识。性能优化的知识这也算是高并发知识的一个小分支了)。如果你的技能介绍或者项目经历涉及到分布式/微服务、高并发的知识,那建议你尽量也要抽时间去认真准备一下,面试中很可能会被问到,尤其是项目经历用到的时候。不过,也还是主要准备写在简历上的那些知识点就好。
+5. JVM 相关的知识点,一般是大厂才会问到,面试中小厂就没必要准备了。JVM 面试中比较常问的是 [Java 内存区域](https://javaguide.cn/java/jvm/memory-area.html)、[JVM 垃圾回收](https://javaguide.cn/java/jvm/jvm-garbage-collection.html)、[类加载器和双亲委派模型](https://javaguide.cn/java/jvm/classloader.html) 以及 JVM 调优和问题排查(我之前分享过一些[常见的线上问题案例](https://t.zsxq.com/0bsAac47U),里面就有 JVM 相关的)。
+6. 不同的大厂面试侧重点也会不同。比如说你要去阿里这种公司的话,项目和八股文就是重点,阿里笔试一般会有代码题,进入面试后就很少问代码题了,但是对原理性的问题问的比较深,经常会问一些你对技术的思考。再比如说你要面试字节这种公司,那计算机基础,尤其是算法是重点,字节的面试十分注重代码功底,有时候开始面试就会直接甩给你一道代码题,写出来再谈别的。也会问面试八股文,以及项目,不过,相对来说要少很多。建议你看一下这篇文章 [为了解开互联网大厂秋招内幕,我把他们全面了一遍](https://mp.weixin.qq.com/s/pBsGQNxvRupZeWt4qZReIA),了解一下常见大厂的面试题侧重点。
+
+看似 Java 后端八股文很多,实际把复习范围一缩小,重要的东西就是那些。考虑到时间问题,你不可能连一些比较冷门的知识点也给准备了。这没必要,主要精力先放在那些重要的知识点即可。
+
+## 如何更高效地准备八股文?
+
+对于技术八股文来说,尽量不要死记硬背,这种方式非常枯燥且对自身能力提升有限!但是!想要一点不背是不太现实的,只是说要结合实际应用场景和实战来理解记忆。
+
+我一直觉得面试八股文最好是和实际应用场景和实战相结合。很多同学现在的方向都错了,上来就是直接背八股文,硬生生学成了文科,那当然无趣了。
+
+举个例子:你的项目中需要用到 Redis 来做缓存,你对照着官网简单了解并实践了简单使用 Redis 之后,你去看了 Redis 对应的八股文。你发现 Redis 可以用来做限流、分布式锁,于是你去在项目中实践了一下并掌握了对应的八股文。紧接着,你又发现 Redis 内存不够用的情况下,还能使用 Redis Cluster 来解决,于是你就又去实践了一下并掌握了对应的八股文。
+
+**一定要记住你的主要目标是理解和记关键词,而不是像背课文一样一字一句地记下来!**
+
+另外,记录博客或者用自己的理解把对应的知识点讲给别人听也是一个不错的选择。
+
+最后,准备技术面试的同学一定要定期复习(自测的方式非常好),不然确实会遗忘的。
\ No newline at end of file
diff --git a/docs/interview-preparation/project-experience-guide.md b/docs/interview-preparation/project-experience-guide.md
index 4439fc2f..b0aa15a4 100644
--- a/docs/interview-preparation/project-experience-guide.md
+++ b/docs/interview-preparation/project-experience-guide.md
@@ -3,6 +3,10 @@ title: 项目经验指南
category: 面试准备
---
+::: tip 友情提示
+本文节选自 **[《Java 面试指北》](../zhuanlan/java-mian-shi-zhi-bei.md)**。这是一份教你如何更高效地准备面试的小册,涵盖常见八股文(系统设计、常见框架、分布式、高并发 ......)、优质面经等内容。
+:::
+
## 没有项目经验怎么办?
没有项目经验是大部分应届生会碰到的一个问题。甚至说,有很多有工作经验的程序员,对自己在公司做的项目不满意,也想找一个比较有技术含量的项目来做。
diff --git a/docs/java/basis/why-there-only-value-passing-in-java.md b/docs/java/basis/why-there-only-value-passing-in-java.md
index 56083354..ca6880cf 100644
--- a/docs/java/basis/why-there-only-value-passing-in-java.md
+++ b/docs/java/basis/why-there-only-value-passing-in-java.md
@@ -1,5 +1,5 @@
---
-title: 为什么 Java 中只有值传递?
+title: Java 值传递详解
category: Java
tag:
- Java基础
diff --git a/docs/java/collection/arraylist-source-code.md b/docs/java/collection/arraylist-source-code.md
index 5d20436e..02ce2390 100644
--- a/docs/java/collection/arraylist-source-code.md
+++ b/docs/java/collection/arraylist-source-code.md
@@ -1,5 +1,5 @@
---
-title: ArrayList源码&扩容机制分析
+title: ArrayList 源码分析
category: Java
tag:
- Java集合
diff --git a/docs/java/collection/concurrent-hash-map-source-code.md b/docs/java/collection/concurrent-hash-map-source-code.md
index 6a3bc057..34eecb44 100644
--- a/docs/java/collection/concurrent-hash-map-source-code.md
+++ b/docs/java/collection/concurrent-hash-map-source-code.md
@@ -1,5 +1,5 @@
---
-title: ConcurrentHashMap源码&底层数据结构分析
+title: ConcurrentHashMap 源码分析
category: Java
tag:
- Java集合
diff --git a/docs/java/collection/hashmap-source-code.md b/docs/java/collection/hashmap-source-code.md
index c3af8193..07f7ee16 100644
--- a/docs/java/collection/hashmap-source-code.md
+++ b/docs/java/collection/hashmap-source-code.md
@@ -1,5 +1,5 @@
---
-title: HashMap源码&底层数据结构分析
+title: HashMap 源码分析
category: Java
tag:
- Java集合
diff --git a/docs/java/collection/java-collection-precautions-for-use.md b/docs/java/collection/java-collection-precautions-for-use.md
index d2ea2eef..2c4c6937 100644
--- a/docs/java/collection/java-collection-precautions-for-use.md
+++ b/docs/java/collection/java-collection-precautions-for-use.md
@@ -1,5 +1,5 @@
---
-title: Java集合使用注意事项总结
+title: Java集合使用注意事项总结
category: Java
tag:
- Java集合
diff --git a/docs/java/concurrent/aqs.md b/docs/java/concurrent/aqs.md
index 8181239b..84b044cc 100644
--- a/docs/java/concurrent/aqs.md
+++ b/docs/java/concurrent/aqs.md
@@ -1,5 +1,5 @@
---
-title: AQS 详解
+title: AQS 详解
category: Java
tag:
- Java并发
diff --git a/docs/java/concurrent/atomic-classes.md b/docs/java/concurrent/atomic-classes.md
index 16510073..f95831ad 100644
--- a/docs/java/concurrent/atomic-classes.md
+++ b/docs/java/concurrent/atomic-classes.md
@@ -1,5 +1,5 @@
---
-title: Atomic 原子类总结
+title: Atomic 原子类总结
category: Java
tag:
- Java并发
diff --git a/docs/java/concurrent/completablefuture-intro.md b/docs/java/concurrent/completablefuture-intro.md
index fefbf8ca..1137058a 100644
--- a/docs/java/concurrent/completablefuture-intro.md
+++ b/docs/java/concurrent/completablefuture-intro.md
@@ -1,5 +1,5 @@
---
-title: CompletableFuture详解
+title: CompletableFuture 详解
category: Java
tag:
- Java并发
diff --git a/docs/java/concurrent/java-concurrent-questions-01.md b/docs/java/concurrent/java-concurrent-questions-01.md
index 4285ad41..747d311b 100644
--- a/docs/java/concurrent/java-concurrent-questions-01.md
+++ b/docs/java/concurrent/java-concurrent-questions-01.md
@@ -1,5 +1,5 @@
---
-title: Java 并发常见面试题总结(上)
+title: Java并发常见面试题总结(上)
category: Java
tag:
- Java并发
diff --git a/docs/java/concurrent/java-concurrent-questions-02.md b/docs/java/concurrent/java-concurrent-questions-02.md
index 88d14ef6..23a25112 100644
--- a/docs/java/concurrent/java-concurrent-questions-02.md
+++ b/docs/java/concurrent/java-concurrent-questions-02.md
@@ -1,5 +1,5 @@
---
-title: Java 并发常见面试题总结(中)
+title: Java并发常见面试题总结(中)
category: Java
tag:
- Java并发
diff --git a/docs/java/concurrent/java-concurrent-questions-03.md b/docs/java/concurrent/java-concurrent-questions-03.md
index 3af67dd1..69089eb6 100644
--- a/docs/java/concurrent/java-concurrent-questions-03.md
+++ b/docs/java/concurrent/java-concurrent-questions-03.md
@@ -1,5 +1,5 @@
---
-title: Java 并发常见面试题总结(下)
+title: Java并发常见面试题总结(下)
category: Java
tag:
- Java并发
diff --git a/docs/java/concurrent/java-thread-pool-summary.md b/docs/java/concurrent/java-thread-pool-summary.md
index d7c08333..a544d83c 100644
--- a/docs/java/concurrent/java-thread-pool-summary.md
+++ b/docs/java/concurrent/java-thread-pool-summary.md
@@ -1,5 +1,5 @@
---
-title: Java 线程池详解
+title: Java 线程池详解
category: Java
tag:
- Java并发
diff --git a/docs/java/io/io-basis.md b/docs/java/io/io-basis.md
index 9101ea15..566dd1f4 100755
--- a/docs/java/io/io-basis.md
+++ b/docs/java/io/io-basis.md
@@ -1,5 +1,5 @@
---
-title: Java IO基础知识总结
+title: Java IO 基础知识总结
category: Java
tag:
- Java IO
diff --git a/docs/java/io/io-design-patterns.md b/docs/java/io/io-design-patterns.md
index be662302..df1ee8f0 100644
--- a/docs/java/io/io-design-patterns.md
+++ b/docs/java/io/io-design-patterns.md
@@ -1,5 +1,5 @@
---
-title: Java IO设计模式总结
+title: Java IO 设计模式总结
category: Java
tag:
- Java IO
diff --git a/docs/java/io/io-model.md b/docs/java/io/io-model.md
index 3741c415..8c443f3c 100644
--- a/docs/java/io/io-model.md
+++ b/docs/java/io/io-model.md
@@ -1,5 +1,5 @@
---
-title: Java IO模型详解
+title: Java IO 模型详解
category: Java
tag:
- Java IO
diff --git a/docs/java/jvm/classloader.md b/docs/java/jvm/classloader.md
index bbb91e02..51431bf0 100644
--- a/docs/java/jvm/classloader.md
+++ b/docs/java/jvm/classloader.md
@@ -1,5 +1,5 @@
---
-title: 类加载器详解(重点)
+title: 类加载器详解(重点)
category: Java
tag:
- JVM
diff --git a/docs/java/jvm/jvm-intro.md b/docs/java/jvm/jvm-intro.md
index 8bb0fb51..3d949bb3 100644
--- a/docs/java/jvm/jvm-intro.md
+++ b/docs/java/jvm/jvm-intro.md
@@ -1,5 +1,5 @@
---
-title: 大白话带你认识 JVM
+title: 大白话带你认识 JVM
category: Java
tag:
- JVM
diff --git a/docs/java/jvm/jvm-parameters-intro.md b/docs/java/jvm/jvm-parameters-intro.md
index 6af3a1c2..07e254d1 100644
--- a/docs/java/jvm/jvm-parameters-intro.md
+++ b/docs/java/jvm/jvm-parameters-intro.md
@@ -1,5 +1,5 @@
---
-title: 最重要的 JVM 参数总结
+title: 最重要的 JVM 参数总结
category: Java
tag:
- JVM
diff --git a/docs/java/jvm/memory-area.md b/docs/java/jvm/memory-area.md
index 9c3d130f..858e45af 100644
--- a/docs/java/jvm/memory-area.md
+++ b/docs/java/jvm/memory-area.md
@@ -1,5 +1,5 @@
---
-title: Java 内存区域详解(重点)
+title: Java 内存区域详解(重点)
category: Java
tag:
- JVM
diff --git a/docs/system-design/framework/spring/spring-knowledge-and-questions-summary.md b/docs/system-design/framework/spring/spring-knowledge-and-questions-summary.md
index c95f83ba..eb7387ec 100644
--- a/docs/system-design/framework/spring/spring-knowledge-and-questions-summary.md
+++ b/docs/system-design/framework/spring/spring-knowledge-and-questions-summary.md
@@ -1,5 +1,5 @@
---
-title: Spring 常见面试题总结
+title: Spring常见面试题总结
category: 框架
tag:
- Spring
diff --git a/docs/system-design/framework/spring/spring-transaction.md b/docs/system-design/framework/spring/spring-transaction.md
index 6f0f98e7..52ad30c4 100644
--- a/docs/system-design/framework/spring/spring-transaction.md
+++ b/docs/system-design/framework/spring/spring-transaction.md
@@ -1,5 +1,5 @@
---
-title: Spring 事务详解
+title: Spring 事务详解
category: 框架
tag:
- Spring
diff --git a/docs/system-design/framework/spring/springboot-knowledge-and-questions-summary.md b/docs/system-design/framework/spring/springboot-knowledge-and-questions-summary.md
index 1c773424..75f7dbf0 100644
--- a/docs/system-design/framework/spring/springboot-knowledge-and-questions-summary.md
+++ b/docs/system-design/framework/spring/springboot-knowledge-and-questions-summary.md
@@ -1,5 +1,5 @@
---
-title: SpringBoot常见面试题总结(付费)
+title: SpringBoot常见面试题总结(付费)
category: 框架
tag:
- Spring
diff --git a/docs/system-design/security/images/basis-of-authority-certification/jwt-authentication process.drawio b/docs/system-design/security/images/basis-of-authority-certification/jwt-authentication process.drawio
deleted file mode 100644
index 1e9934e4..00000000
--- a/docs/system-design/security/images/basis-of-authority-certification/jwt-authentication process.drawio
+++ /dev/null
@@ -1 +0,0 @@
-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
\ No newline at end of file
diff --git a/docs/system-design/security/images/basis-of-authority-certification/session-cookie-authentication-process.drawio b/docs/system-design/security/images/basis-of-authority-certification/session-cookie-authentication-process.drawio
deleted file mode 100644
index ed5b965b..00000000
--- a/docs/system-design/security/images/basis-of-authority-certification/session-cookie-authentication-process.drawio
+++ /dev/null
@@ -1 +0,0 @@
-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
\ No newline at end of file
diff --git a/docs/system-design/security/images/basis-of-authority-certification/sso.drawio b/docs/system-design/security/images/basis-of-authority-certification/sso.drawio
deleted file mode 100644
index ad8f211d..00000000
--- a/docs/system-design/security/images/basis-of-authority-certification/sso.drawio
+++ /dev/null
@@ -1 +0,0 @@
-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
\ No newline at end of file
diff --git a/docs/system-design/security/images/design-of-authority-system/new-authority-system-design-access-flow-chart.drawio b/docs/system-design/security/images/design-of-authority-system/new-authority-system-design-access-flow-chart.drawio
deleted file mode 100644
index 7c5e23fd..00000000
--- a/docs/system-design/security/images/design-of-authority-system/new-authority-system-design-access-flow-chart.drawio
+++ /dev/null
@@ -1 +0,0 @@
-7Ztbb6M4FIB/jR9nFHPnERLS1V6kWXWl2d03F5yEKcFZ4jTp/Pr1MYYE7HYzm1slolaqfWxj8HduNhTZ4+XuoSKrxW8sowWyRtkO2RNkWXjkBeIPSF5rSeDZtWBe5ZnqtBc85t9pM1JJN3lG152OnLGC56uuMGVlSVPekZGqYttutxkrurOuyJxqgseUFLr0a57xhZJiL9w3/ETz+aKZ2nOdumVJmt7qUdYLkrHtgchOkD2uGON1abkb0wJWr1mYetz0jdb2zipa8mMG0HwafNkt6Pevv2x/9wK6+Pvh8RNWz7Hmr80j00ysgKqyii/YnJWkSPbSuGKbMqNwWSxq+z6/MrZSwm+U81eFk2w4E6IFXxaqVdxx9fqnqIyayl9Q+ew21cnusHHyqmozVnJ1UQvqa16x5xYMXFks8gqaZwXdRcBfXqNRLBt6PFOeNt3rh4cnfnNRlWjNNlVK31lJpdecVHPK31tx3LIXVkPZkoonFAMrWhCev3RvhCj1nbf99oBFQTH+Ad7qLl9IsVEzafy7dLeLnNPHFZHPvhVG3iU5y4tizApWybF2RmgwS1syBy1eGtCnmWhJ2TJP97RqkzDD1HDr6F5oxenufXj6WqsBjrJM5ZvsxlK3e0u3PCVbHBp5OLoQnsbtHfJJXBQEKIyhEMcojlDio9iGMhRiFE41hmJNeBdUF0jJStqjp0SkyOelqKZiDamQx7DCuXCIkWpY5lkmvYBJM7q6c2l+2OoBdHSAeGQAaF2KX+vrr+pOP7JbPNndqaFfWC6mbtEHPfQOdruXqP2wGtWj2t7GCYaK7470wJHaPUMcucd50stZIrY0QH+AU/yYnvLcQMIeEHeke0bnmo4RGxIPQ2ALUDBF4Vg2TVDoykIEEQ6aRMyboMRD4QTKSYhC8at73I+B9OI257tdm7MNwc+/avDDGor7XuL/BU2F9r83E/6J0fU0o3bvQfAgJekHwQ+wnfCO8roeeNp4BAXhdaPE4GOTKYrHMBCGT1E0haZghIKwadIPEobhhwPX+tzzxIZtiNXYynWirX83zMNtIu5ZJj7SMtuB5ycUHJkPRT4KLZn9hCjWKQ7DxrAV9giakp3r7vT1/QWyvIKr1ehQ8v7ZsKbh01quUyQ6YG+12zeK0lz+BefrSXf8znlPPZO483oyNfQ0G+9B7Nk8xZlLfZPNh55vE+8Su5ge9MAA3WS29sWgm45PzwNdQ5w4KBaBFsuojJuIK/dF0EfG6UGqgePeXA2cq9q+iAiQk7kAXSRq1tSwTwahGGtL9XBkz/FA1EPbCPs31w/Tvug8+qG5APAOiUwRXFAXoRagCi4oTSxbI5Gk+wNVBceQ6F1ZFQw7MMVivSLlKaogeGMUWFIVIsgTwQGMpc+QiWTsHVCvJxsI9dsHCNP+6zzUfTgPFWjB7keQGLyXFQyKenhz6oY93Zmo62nBEWc2w9CDwP9ou4Tmwneffz3qt/f5tumN8KWsXz8XGgR13J7SNcbu3Rz72+dAZ8DeO4T3wfbjcLAxX+PvGN5rX5n/20dCp/IP5UlQIK09QZFzN/sWu+lDr+tif/sI6PQYL2w7tiVkjEJHHgE5KApkridivD9Y7LdP7QwnOzWwaCzP3cYo9NU7UsGpfjUaRj+TF/IAX7I35J6q0/aAcL6HoRDFEBuaeb6JeeQX85/TUtOG278qArUqyBMtYpI+z6W8P/leCbGn6geqFssfeU1OeM5KddGO5nXeNp5BDb2gq4WWSQtNH9p4P66Forr/h4D6W8X9/1XYyb8=
\ No newline at end of file
diff --git a/docs/system-design/security/images/design-of-authority-system/rbac.drawio b/docs/system-design/security/images/design-of-authority-system/rbac.drawio
deleted file mode 100644
index 63d1e1ae..00000000
--- a/docs/system-design/security/images/design-of-authority-system/rbac.drawio
+++ /dev/null
@@ -1 +0,0 @@
-3VjbcpswEP0aPSaDuPMImLTT+0ym7bMMAtNg5Ar5kn59V0IyYOw07SRtpmOPLc6uVpc9eyQbOen68IqTzeo9K2iDbKs4IGeBbBtjy4cvidz3SBQFPVDxutBOA3Bb/6AatDS6rQvaTRwFY42oN1MwZ21LczHBCOdsP3UrWTMddUMqOgNuc9LM0a91IVZmXX40GF7TulqZoX3P7S1rYrz1UroVKdh+BDkZclLOmOhb60NKG7l7ZmP6fjcXrMeZcdqKx3RYlMHb3ffPXz7WH96nn9K3a//15kqnpxP3ZsW0gA3Qj4yLFatYS5psQBPOtm1BZVQLngafd4xtAMQAfqNC3Otskq1gAK3EutHWThAuYpkdAPKGdF2dG/imboxbPzU5n4sr1lDHtjynDyzTUIfwiooH/OxjXoDRlK2p4PfQj9OGiHo3nQfR1KqOfsPmQ0Pv/2/kIuzj7kiz1SMh229guknJYMHjLPnft8wYrjq1zzE4YG9zGIzQqtR3FqDIRXGIMh+FIUoClHkowSjKUOaiJEZh3whRaOlGHGvnyJfOsYuieGSCT4hpy0YYoeQ4UVh3P1c98jlyvSNLEIkJIUhTV63kAiSWcgB2lIsaqjDWhnVdFD33KKyWLFU8yb4Nq1uhEuElyFscx5QB6AGdkQjdeajLMZ8u18icFDr6lXVtO7auI61yPY9+gzc6+ie5miG0A6HPBzYxWFl2QOhT5h1n+edkxHMyzml0mt5BGWRW96ta0NsNUZW5h/NhmvQSKj1lDeOqr1MQGpa9DHB2R0cWPw/psgRLztZSKHoNMWpqHbsYgca6MLT+2MrjjorcGC9SZCYtF7PuWpO8OIZM++GQiILrQJ8Fq9EJ4VnPJB/zdPyXUm4/Usrdfynl0bNJ+Ux5ZTEmKPZkI0olKBFoKJWPMyXcgfwMXeWzQKGDsghF8Lb+a+EOfiXc2IKtmOgrfhLhxv5MuE9iPJ9w22eEe35cP6Fwl2Vp52eFu/CXvue/MOGG3OBp0l+CeDtnsuahEAo4VdeuFEWqnsMbdX27UUj8huzIK/kLyZTxkj9KW/xL18RkgSIsG3Ei9cGM8w3GUb/ErvN2xh3IhTg9FMZEaFlLT1ijocerxzlGTs+uRopTQvK7SuGngw+swr5+HhE1US8VU0Dds9bQc0y+CXGfgIlOOL1DuHhOQxxYcxLi5yKhe4aE8wPjSaWD+hekI4iWlvWypCPEf/PSB4/DfwP94TD8xeJkPwE=
\ No newline at end of file
diff --git a/docs/system-design/security/images/sentive-words-filter/brower-trie.png b/docs/system-design/security/images/sentive-words-filter/brower-trie.png
deleted file mode 100644
index df981ed47fcf996d93678ce0842ceab33fe10205..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 10501
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
m&i;Y@swx&ukpBZqZdp43
diff --git a/docs/system-design/security/images/sentive-words-filter/common-collections-trie.png b/docs/system-design/security/images/sentive-words-filter/common-collections-trie.png
deleted file mode 100644
index a6455205d9abcfe68954cce5953d6dc91db814f4..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 11741
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
E53;EwhyVZp
diff --git a/docs/system-design/security/images/sentive-words-filter/hutool-dfa.png b/docs/system-design/security/images/sentive-words-filter/hutool-dfa.png
deleted file mode 100644
index 18356ced3bc06dcc1b96d98f2053ee31b0a37463..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 7471
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
diff --git a/docs/system-design/security/images/sentive-words-filter/trie.drawio b/docs/system-design/security/images/sentive-words-filter/trie.drawio
deleted file mode 100644
index 6bb1a6e4..00000000
--- a/docs/system-design/security/images/sentive-words-filter/trie.drawio
+++ /dev/null
@@ -1 +0,0 @@
-3Vpdk5s2FP01erQHISGJR/zZyUzStNtNu08dFrQ2WWw5GK/t/voKEDYI1nVJMMSzD8u9Eldw7tHRFRZA49VhHrmb5Ufh8xCYhn8AaAJME1LI5L/Ec8w8FsKZYxEFvup0djwE/3DlNJR3F/h8W+oYCxHGwabs9MR6zb245HOjSOzL3V5EWB514y54xfHguWHV+2fgx8vMy0x69v/Cg8UyHxkSO2t5dr3XRSR2azUeMNGMzGYzhcfKzWOpF90uXV/sCy40BWgcCRFnV6vDmIcJtjls2X2zd1pPzx3xdXzNDd4fPnuai6+/Op/8T3/vB/P943qgory54U7h8XvyQNkDx8ccJBlJ5kMao/0yiPnDxvWSlr2khPQt41UoLSgvX8Q6VjmGJLGDMByLUERpHPTCPO550r+NI/HK85a1WCexTwgZifHKY2+pjOq75g/Oo5gfCi717nMuVjyOjrKLajVtxUvF0xMB9+eswzxXy0LGmfK5imiLU+gz2PJC4f0/sDcr2IOpDZwRsFlrCfBdzl66SQAkRikBiHSdAFSTAAxGDNjje0wANvqWAFyTAJIkgFn3mABWxh/bXeNv1eDPgEMBI/eI/8AsJ4DgrhNAKgm4S+XRpZ+groG3K8B/aQ14Dn2L026KHlQGntKugc+rLr3qMYEN7zEDA6iJDmWdp6Ba9Kd1jwOcu1QfjMsZsIzOM1BTeVaAX/tOsr09g3QBbAlOdPxLQZYaT6pnakwOxabJMbcOQZzeNLSU9VRoOd+UGPk9DTK1FbvI4xfgUC8fu9GCx5dgy/pxv7Sjr+a9kFerJq25L+KhGwdv5e8AdblWI3wWgXyzE63Qe+V0HiJ7b3VXcWOuB7K0QFALlAFTCZRS7/Ta38HGmjK8UzYSAxf4ODCGhkUukjIxPvMokEjwqEWi4iuJavaKqFrxhZvyFEIt0K15WrNd+T6e9kT/rCtphXtFK30zpbPhWlpRbXXW6dk2q6p7sC7UrwGv/pMvVq/4MtB0iFLWkDBD02KQGZDJpRNixMphDXto2wTaNkNY0vK2ZKJtkQk2W0oxQkVpGxoQ9WIlJT+n5GmVGjGblnxa7WjRG4se+8E8bYMj9pUcIb3iiF7N06bllv65nt663Kp+I+tWy7ot0tCVbOzXJtXSqiukC821bCRauYd06WuZjflwHbOxDWbBnlEGoaFFy8uTCYfUbChjJK3HsEEYhdA2KSqFxlgWJQaW6mZiimXZhm5Lq7pvoRQwBJxJlV8//+doq3c/geXzuIX915Bhszi5jaEtNwtNJ3jaT6+Nm8/6q3dxfZMHWpEHQprLg2WU5cEuCw/T1OG24lB3QMRKDic44/QXkzGwaeqZgZG8mKUe54P75s6TU23AJKEEf/QclehMvu2SM18pcQfblLmO7ADJ5pAyKm+XV4v0fzLUJDmUMmVAzkM5fj5UNox8AimbTvXMhBSFuDxZahWnKE/K5YbBYi1NT/I6IfsokZjAc0NHNawC3w/fk8L0VBz31RwJ3Wcejk6n5fTBda2UdkErR+lfGjOWtBXJ2APUzm+l5QNiVt0BMVYzsfS6vIk08m9fl7Pw8ePj9LdwwFcfBD74NYfzUrKRhGx3uDbpO6ebrk21CfjRS9OFxaXBLueqtecSsXqyomC9JkGNS822vqpI83xQN+t+Pg2Npv8C
\ No newline at end of file
diff --git a/docs/system-design/security/images/sentive-words-filter/trie.png b/docs/system-design/security/images/sentive-words-filter/trie.png
deleted file mode 100644
index 8d8117b4765764ec10dca0441af72bd64d7effdf..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 50950
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 )K-!{$7
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%0A)Xz?XW?d#G?-2}Lu<@zdlF6(YZE
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 |