From e4dbc8db246c72d1414c30fc3cd55c8d85939016 Mon Sep 17 00:00:00 2001
From: guide
Date: Fri, 16 Oct 2020 15:31:57 +0800
Subject: [PATCH 1/5] =?UTF-8?q?[refractor]=E8=AE=A4=E8=AF=81=E6=8E=88?=
=?UTF-8?q?=E6=9D=83=E9=83=A8=E5=88=86=E5=9B=BE=E7=89=87=E5=9C=B0=E5=9D=80?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 9 ++++++---
...43\345\206\263\346\226\271\346\241\210.md" | 0
...07\345\260\261\345\244\237\344\272\206.md" | 0
.../basis-of-authority-certification.md | 18 ++++++++----------
.../Session-Based-Authentication-flow.png | Bin
.../Token-Based-Authentication.png | Bin
.../authentication.png | Bin
.../authorization.png | Bin
.../cookie-sessionId.png | Bin
.../session-cookie-intro.png | Bin
...1\346\224\257\344\273\230-fnglfdlgdfj.png" | Bin
.../\345\210\206\345\270\203\345\274\217.md" | 0
12 files changed, 14 insertions(+), 13 deletions(-)
rename docs/system-design/authority-certification/JWT-advantages-and-disadvantages.md => "docs/system-design/authority-certification/JWT\344\274\230\347\274\272\347\202\271\345\210\206\346\236\220\344\273\245\345\217\212\345\270\270\350\247\201\351\227\256\351\242\230\350\247\243\345\206\263\346\226\271\346\241\210.md" (100%)
rename docs/system-design/authority-certification/sso.md => "docs/system-design/authority-certification/SSO\345\215\225\347\202\271\347\231\273\345\275\225\347\234\213\350\277\231\344\270\200\347\257\207\345\260\261\345\244\237\344\272\206.md" (100%)
rename docs/system-design/{pictures => authority-certification/images/basis-of-authority-certification}/Session-Based-Authentication-flow.png (100%)
rename docs/system-design/{pictures => authority-certification/images/basis-of-authority-certification}/Token-Based-Authentication.png (100%)
rename docs/system-design/{pictures => authority-certification/images/basis-of-authority-certification}/authentication.png (100%)
rename docs/system-design/{pictures => authority-certification/images/basis-of-authority-certification}/authorization.png (100%)
rename docs/system-design/{pictures => authority-certification/images/basis-of-authority-certification}/cookie-sessionId.png (100%)
rename docs/system-design/{pictures => authority-certification/images/basis-of-authority-certification}/session-cookie-intro.png (100%)
rename "docs/system-design/pictures/\345\276\256\344\277\241\346\224\257\344\273\230-fnglfdlgdfj.png" => "docs/system-design/authority-certification/images/basis-of-authority-certification/\345\276\256\344\277\241\346\224\257\344\273\230-fnglfdlgdfj.png" (100%)
rename "docs/system-design/website-architecture/\345\210\206\345\270\203\345\274\217.md" => "docs/system-design/distributed-system/\345\210\206\345\270\203\345\274\217.md" (100%)
diff --git a/README.md b/README.md
index 4543efabb4f..02c2f4dc8a4 100644
--- a/README.md
+++ b/README.md
@@ -194,16 +194,16 @@
#### JWT
-1. [JWT 优缺点分析以及常见问题解决方案](docs/system-design/authority-certification/JWT-advantages-and-disadvantages.md)
+1. [JWT 优缺点分析以及常见问题解决方案](docs/system-design/authority-certification/JWT优缺点分析以及常见问题解决方案.md)
2. [适合初学者入门 Spring Security With JWT 的 Demo](https://github.com/Snailclimb/spring-security-jwt-guide)
#### SSO(单点登录)
-SSO(Single Sign On)即单点登录说的是用户登陆多个子系统的其中一个就有权访问与其相关的其他系统。举个例子我们在登陆了京东金融之后,我们同时也成功登陆京东的京东超市、京东家电等子系统。相关阅读:**[SSO 单点登录看这篇就够了!](docs/system-design/authority-certification/sso.md)**
+**SSO(Single Sign On)** 即单点登录说的是用户登陆多个子系统的其中一个就有权访问与其相关的其他系统。举个例子我们在登陆了京东金融之后,我们同时也成功登陆京东的京东超市、京东家电等子系统。相关阅读:**[SSO 单点登录看这篇就够了!](docs/system-design/authority-certification/SSO单点登录看这一篇就够了.md)**
### 分布式
-[分布式相关概念入门](docs/system-design/website-architecture/分布式.md)
+[分布式相关概念入门](docs/system-design/distributed-system/分布式.md)
#### 搜索引擎
@@ -238,6 +238,7 @@ SSO(Single Sign On)即单点登录说的是用户登陆多个子系统的其中
### 微服务
1. [ 大白话入门 Spring Cloud](docs/system-design/micro-service/spring-cloud.md)
+2. [微服务/分布式大厂真实面试问题解答](https://xiaozhuanlan.com/topic/2895047136)
### 高并发
@@ -271,6 +272,8 @@ SSO(Single Sign On)即单点登录说的是用户登陆多个子系统的其中
CAP 也就是 Consistency(一致性)、Availability(可用性)、Partition Tolerance(分区容错性) 这三个单词首字母组合。
+
+
#### BASE理论
**BASE** 是 **Basically Available(基本可用)** 、**Soft-state(软状态)** 和 **Eventually Consistent(最终一致性)** 三个短语的缩写。BASE理论是对CAP中一致性和可用性权衡的结果,其来源于对大规模互联网系统分布式实践的总结,是基于CAP定理逐步演化而来的,它大大降低了我们对系统的要求。
diff --git a/docs/system-design/authority-certification/JWT-advantages-and-disadvantages.md "b/docs/system-design/authority-certification/JWT\344\274\230\347\274\272\347\202\271\345\210\206\346\236\220\344\273\245\345\217\212\345\270\270\350\247\201\351\227\256\351\242\230\350\247\243\345\206\263\346\226\271\346\241\210.md"
similarity index 100%
rename from docs/system-design/authority-certification/JWT-advantages-and-disadvantages.md
rename to "docs/system-design/authority-certification/JWT\344\274\230\347\274\272\347\202\271\345\210\206\346\236\220\344\273\245\345\217\212\345\270\270\350\247\201\351\227\256\351\242\230\350\247\243\345\206\263\346\226\271\346\241\210.md"
diff --git a/docs/system-design/authority-certification/sso.md "b/docs/system-design/authority-certification/SSO\345\215\225\347\202\271\347\231\273\345\275\225\347\234\213\350\277\231\344\270\200\347\257\207\345\260\261\345\244\237\344\272\206.md"
similarity index 100%
rename from docs/system-design/authority-certification/sso.md
rename to "docs/system-design/authority-certification/SSO\345\215\225\347\202\271\347\231\273\345\275\225\347\234\213\350\277\231\344\270\200\347\257\207\345\260\261\345\244\237\344\272\206.md"
diff --git a/docs/system-design/authority-certification/basis-of-authority-certification.md b/docs/system-design/authority-certification/basis-of-authority-certification.md
index 8e1d9bd7566..86352a50d3f 100644
--- a/docs/system-design/authority-certification/basis-of-authority-certification.md
+++ b/docs/system-design/authority-certification/basis-of-authority-certification.md
@@ -6,11 +6,11 @@
**认证 (Authentication):** 你是谁。
-
+
**授权 (Authorization):** 你有权限干什么。
-
+
稍微正式点(啰嗦点)的说法就是:
@@ -21,7 +21,7 @@
## 2. 什么是Cookie ? Cookie的作用是什么?如何在服务端使用 Cookie ?
-
+
### 2.1 什么是Cookie ? Cookie的作用是什么?
@@ -90,7 +90,7 @@ public String readAllCookies(HttpServletRequest request) {
很多时候我们都是通过 SessionID 来实现特定的用户,SessionID 一般会选择存放在 Redis 中。举个例子:用户成功登陆系统,然后返回给客户端具有 SessionID 的 Cookie,当用户向后端发起请求的时候会把 SessionID 带上,这样后端就知道你的身份状态了。关于这种认证方式更详细的过程如下:
-
+
1. 用户向服务器发送用户名和密码用于登陆系统。
2. 服务器验证通过后,服务器为用户创建一个 Session,并将 Session信息存储 起来。
@@ -105,7 +105,7 @@ public String readAllCookies(HttpServletRequest request) {
花了个图简单总结了一下Session认证涉及的一些东西。
-
+
另外,Spring Session提供了一种跨多个应用程序或实例管理用户会话信息的机制。如果想详细了解可以查看下面几篇很不错的文章:
@@ -143,9 +143,7 @@ public String readAllCookies(HttpServletRequest request) {
XSS中攻击者会用各种方式将恶意代码注入到其他用户的页面中。就可以通过脚本盗用信息比如cookie。
-推荐阅读:
-
-1. [如何防止CSRF攻击?—美团技术团队](https://tech.meituan.com/2018/10/11/fe-security-csrf.html)
+推荐阅读:[如何防止CSRF攻击?—美团技术团队](https://tech.meituan.com/2018/10/11/fe-security-csrf.html)
## 6. 什么是 Token?什么是 JWT?如何基于Token进行身份验证?
@@ -167,7 +165,7 @@ JWT 由 3 部分构成:
在基于 Token 进行身份验证的的应用程序中,服务器通过`Payload`、`Header`和一个密钥(`secret`)创建令牌(`Token`)并将 `Token` 发送给客户端,客户端将 `Token` 保存在 Cookie 或者 localStorage 里面,以后客户端发出的所有请求都会携带这个令牌。你可以把它放在 Cookie 里面自动发送,但是这样不能跨域,所以更好的做法是放在 HTTP Header 的 Authorization字段中:` Authorization: Bearer Token`。
-
+
1. 用户向服务器发送用户名和密码用于登陆系统。
2. 身份验证服务响应并返回了签名的 JWT,上面包含了用户是谁的内容。
@@ -194,7 +192,7 @@ OAuth 2.0 比较常用的场景就是第三方登录,当你的网站接入了
微信支付账户相关参数:
-
+
**推荐阅读:**
diff --git a/docs/system-design/pictures/Session-Based-Authentication-flow.png b/docs/system-design/authority-certification/images/basis-of-authority-certification/Session-Based-Authentication-flow.png
similarity index 100%
rename from docs/system-design/pictures/Session-Based-Authentication-flow.png
rename to docs/system-design/authority-certification/images/basis-of-authority-certification/Session-Based-Authentication-flow.png
diff --git a/docs/system-design/pictures/Token-Based-Authentication.png b/docs/system-design/authority-certification/images/basis-of-authority-certification/Token-Based-Authentication.png
similarity index 100%
rename from docs/system-design/pictures/Token-Based-Authentication.png
rename to docs/system-design/authority-certification/images/basis-of-authority-certification/Token-Based-Authentication.png
diff --git a/docs/system-design/pictures/authentication.png b/docs/system-design/authority-certification/images/basis-of-authority-certification/authentication.png
similarity index 100%
rename from docs/system-design/pictures/authentication.png
rename to docs/system-design/authority-certification/images/basis-of-authority-certification/authentication.png
diff --git a/docs/system-design/pictures/authorization.png b/docs/system-design/authority-certification/images/basis-of-authority-certification/authorization.png
similarity index 100%
rename from docs/system-design/pictures/authorization.png
rename to docs/system-design/authority-certification/images/basis-of-authority-certification/authorization.png
diff --git a/docs/system-design/pictures/cookie-sessionId.png b/docs/system-design/authority-certification/images/basis-of-authority-certification/cookie-sessionId.png
similarity index 100%
rename from docs/system-design/pictures/cookie-sessionId.png
rename to docs/system-design/authority-certification/images/basis-of-authority-certification/cookie-sessionId.png
diff --git a/docs/system-design/pictures/session-cookie-intro.png b/docs/system-design/authority-certification/images/basis-of-authority-certification/session-cookie-intro.png
similarity index 100%
rename from docs/system-design/pictures/session-cookie-intro.png
rename to docs/system-design/authority-certification/images/basis-of-authority-certification/session-cookie-intro.png
diff --git "a/docs/system-design/pictures/\345\276\256\344\277\241\346\224\257\344\273\230-fnglfdlgdfj.png" "b/docs/system-design/authority-certification/images/basis-of-authority-certification/\345\276\256\344\277\241\346\224\257\344\273\230-fnglfdlgdfj.png"
similarity index 100%
rename from "docs/system-design/pictures/\345\276\256\344\277\241\346\224\257\344\273\230-fnglfdlgdfj.png"
rename to "docs/system-design/authority-certification/images/basis-of-authority-certification/\345\276\256\344\277\241\346\224\257\344\273\230-fnglfdlgdfj.png"
diff --git "a/docs/system-design/website-architecture/\345\210\206\345\270\203\345\274\217.md" "b/docs/system-design/distributed-system/\345\210\206\345\270\203\345\274\217.md"
similarity index 100%
rename from "docs/system-design/website-architecture/\345\210\206\345\270\203\345\274\217.md"
rename to "docs/system-design/distributed-system/\345\210\206\345\270\203\345\274\217.md"
From fe6bdb87f354c1dab154e0a19e4f2cac96155a4c Mon Sep 17 00:00:00 2001
From: guide
Date: Fri, 16 Oct 2020 17:17:54 +0800
Subject: [PATCH 2/5] =?UTF-8?q?[refractor]=E6=B6=88=E6=81=AF=E9=98=9F?=
=?UTF-8?q?=E5=88=97=E9=83=A8=E5=88=86=E6=96=87=E7=AB=A0=E7=9B=AE=E5=BD=95?=
=?UTF-8?q?=E7=BB=93=E6=9E=84=E8=B0=83=E6=95=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 12 ++++++------
.../message-queue}/RocketMQ-Questions.md | 0
.../message-queue}/RocketMQ.md | 0
.../message-queue}/kafka-inverview.md | 0
.../message-queue}/message-queue.md | 0
.../message-queue}/rabbitmq.md | 0
...0\246\201\347\237\245\350\257\206\347\202\271.md" | 0
...45\347\224\250HTTP\350\200\214\347\224\250RPC.md" | 2 +-
8 files changed, 7 insertions(+), 7 deletions(-)
rename docs/system-design/{data-communication => distributed-system/message-queue}/RocketMQ-Questions.md (100%)
rename docs/system-design/{data-communication => distributed-system/message-queue}/RocketMQ.md (100%)
rename docs/system-design/{data-communication => distributed-system/message-queue}/kafka-inverview.md (100%)
rename docs/system-design/{data-communication => distributed-system/message-queue}/message-queue.md (100%)
rename docs/system-design/{data-communication => distributed-system/message-queue}/rabbitmq.md (100%)
rename docs/system-design/data-communication/dubbo.md => "docs/system-design/distributed-system/rpc/\345\205\263\344\272\216Dubbo\347\232\204\351\207\215\350\246\201\347\237\245\350\257\206\347\202\271.md" (100%)
rename docs/system-design/data-communication/why-use-rpc.md => "docs/system-design/distributed-system/rpc/\346\234\215\345\212\241\344\271\213\351\227\264\347\232\204\350\260\203\347\224\250\344\270\272\345\225\245\344\270\215\347\233\264\346\216\245\347\224\250HTTP\350\200\214\347\224\250RPC.md" (99%)
diff --git a/README.md b/README.md
index 02c2f4dc8a4..1235dc24d61 100644
--- a/README.md
+++ b/README.md
@@ -211,10 +211,10 @@
#### RPC
-让调用远程服务调用像调用本地方法那样简单。
+RPC 让调用远程服务调用像调用本地方法那样简单。
-1. [Dubbo 总结:关于 Dubbo 的重要知识点](docs/system-design/data-communication/dubbo.md)
-2. [服务之间的调用为啥不直接用 HTTP 而用 RPC?](docs/system-design/data-communication/why-use-rpc.md)
+1. [Dubbo 总结:关于 Dubbo 的重要知识点](docs/system-design/distributed-system/rpc/关于Dubbo的重要知识点.md)
+2. [服务之间的调用为啥不直接用 HTTP 而用 RPC?](docs/system-design/distributed-system/rpc/服务之间的调用为啥不直接用HTTP而用RPC.md)
#### API 网关
@@ -246,9 +246,9 @@
消息队列在分布式系统中主要是为了解耦和削峰。相关阅读: **[消息队列总结](docs/system-design/data-communication/message-queue.md)** 。
-1. **RabbitMQ** : [RabbitMQ 入门](docs/system-design/data-communication/rabbitmq.md)
-2. **RocketMQ** : [RocketMQ 入门](docs/system-design/data-communication/RocketMQ.md)、[RocketMQ 的几个简单问题与答案](docs/system-design/data-communication/RocketMQ-Questions.md)
-3. **Kafka** :**[Kafka 常见面试题总结](docs/system-design/data-communication/kafka-inverview.md)**
+1. **RabbitMQ** : [RabbitMQ 入门](docs/system-design/distributed-system/message-queue/rabbitmq.md)
+2. **RocketMQ** : [RocketMQ 入门](docs/system-design/distributed-system/message-queue/RocketMQ.md)、[RocketMQ 的几个简单问题与答案](docs/system-design/distributed-system/message-queue/RocketMQ-Questions.md)
+3. **Kafka** :**[Kafka 常见面试题总结](docs/system-design/distributed-system/message-queue/kafka-inverview.md)**
#### 读写分离
diff --git a/docs/system-design/data-communication/RocketMQ-Questions.md b/docs/system-design/distributed-system/message-queue/RocketMQ-Questions.md
similarity index 100%
rename from docs/system-design/data-communication/RocketMQ-Questions.md
rename to docs/system-design/distributed-system/message-queue/RocketMQ-Questions.md
diff --git a/docs/system-design/data-communication/RocketMQ.md b/docs/system-design/distributed-system/message-queue/RocketMQ.md
similarity index 100%
rename from docs/system-design/data-communication/RocketMQ.md
rename to docs/system-design/distributed-system/message-queue/RocketMQ.md
diff --git a/docs/system-design/data-communication/kafka-inverview.md b/docs/system-design/distributed-system/message-queue/kafka-inverview.md
similarity index 100%
rename from docs/system-design/data-communication/kafka-inverview.md
rename to docs/system-design/distributed-system/message-queue/kafka-inverview.md
diff --git a/docs/system-design/data-communication/message-queue.md b/docs/system-design/distributed-system/message-queue/message-queue.md
similarity index 100%
rename from docs/system-design/data-communication/message-queue.md
rename to docs/system-design/distributed-system/message-queue/message-queue.md
diff --git a/docs/system-design/data-communication/rabbitmq.md b/docs/system-design/distributed-system/message-queue/rabbitmq.md
similarity index 100%
rename from docs/system-design/data-communication/rabbitmq.md
rename to docs/system-design/distributed-system/message-queue/rabbitmq.md
diff --git a/docs/system-design/data-communication/dubbo.md "b/docs/system-design/distributed-system/rpc/\345\205\263\344\272\216Dubbo\347\232\204\351\207\215\350\246\201\347\237\245\350\257\206\347\202\271.md"
similarity index 100%
rename from docs/system-design/data-communication/dubbo.md
rename to "docs/system-design/distributed-system/rpc/\345\205\263\344\272\216Dubbo\347\232\204\351\207\215\350\246\201\347\237\245\350\257\206\347\202\271.md"
diff --git a/docs/system-design/data-communication/why-use-rpc.md "b/docs/system-design/distributed-system/rpc/\346\234\215\345\212\241\344\271\213\351\227\264\347\232\204\350\260\203\347\224\250\344\270\272\345\225\245\344\270\215\347\233\264\346\216\245\347\224\250HTTP\350\200\214\347\224\250RPC.md"
similarity index 99%
rename from docs/system-design/data-communication/why-use-rpc.md
rename to "docs/system-design/distributed-system/rpc/\346\234\215\345\212\241\344\271\213\351\227\264\347\232\204\350\260\203\347\224\250\344\270\272\345\225\245\344\270\215\347\233\264\346\216\245\347\224\250HTTP\350\200\214\347\224\250RPC.md"
index f295e13beed..4a139911268 100644
--- a/docs/system-design/data-communication/why-use-rpc.md
+++ "b/docs/system-design/distributed-system/rpc/\346\234\215\345\212\241\344\271\213\351\227\264\347\232\204\350\260\203\347\224\250\344\270\272\345\225\245\344\270\215\347\233\264\346\216\245\347\224\250HTTP\350\200\214\347\224\250RPC.md"
@@ -41,7 +41,7 @@ http://www.importnew.com/22003.html
## 既有 HTTP ,为啥用 RPC 进行服务调用?
-###RPC 只是一种设计而已
+### RPC 只是一种设计而已
RPC 只是一种概念、一种设计,就是为了解决 **不同服务之间的调用问题**, 它一般会包含有 **传输协议** 和 **序列化协议** 这两个。
From 7100ddc19a56a5abde14fc9ce41bfc77f91b665d Mon Sep 17 00:00:00 2001
From: guide
Date: Fri, 16 Oct 2020 17:36:54 +0800
Subject: [PATCH 3/5] =?UTF-8?q?[feat]=E5=A2=9E=E5=8A=A0=E5=AF=B9=E8=B4=9F?=
=?UTF-8?q?=E8=BD=BD=E5=9D=87=E8=A1=A1=E7=B3=BB=E7=BB=9F=E7=9A=84=E4=BB=8B?=
=?UTF-8?q?=E7=BB=8D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/README.md b/README.md
index 1235dc24d61..8ee80aeb182 100644
--- a/README.md
+++ b/README.md
@@ -264,6 +264,14 @@ RPC 让调用远程服务调用像调用本地方法那样简单。
#### 负载均衡
+负载均衡系统通常用于将任务比如用户请求处理分配到多个服务器处理以提高网站、应用或者数据库的性能和可靠性。
+
+常见的负载均衡系统包括 3 种:
+
+1. **DNS 负载均衡** :一般用来实现地理级别的均衡。
+2. **硬件负载均衡** : 通过单独的硬件设备比如F5来实现负载均衡功能(硬件的价格一般很贵)。
+3. **软件负载均衡** :通过负载均衡软件比如Nginx来实现负载均衡功能。
+
### 高可用
高可用描述的是一个系统在大部分时间都是可用的,可以为我们提供服务的。高可用代表系统即使在发生硬件故障或者系统升级的时候,服务仍然是可用的 。相关阅读: **《[如何设计一个高可用系统?要考虑哪些地方?](docs/system-design/website-architecture/如何设计一个高可用系统?要考虑哪些地方?.md)》** 。
@@ -272,8 +280,6 @@ RPC 让调用远程服务调用像调用本地方法那样简单。
CAP 也就是 Consistency(一致性)、Availability(可用性)、Partition Tolerance(分区容错性) 这三个单词首字母组合。
-
-
#### BASE理论
**BASE** 是 **Basically Available(基本可用)** 、**Soft-state(软状态)** 和 **Eventually Consistent(最终一致性)** 三个短语的缩写。BASE理论是对CAP中一致性和可用性权衡的结果,其来源于对大规模互联网系统分布式实践的总结,是基于CAP定理逐步演化而来的,它大大降低了我们对系统的要求。
From 30730403746d194c2a32bc32c4957d058b1b0fde Mon Sep 17 00:00:00 2001
From: guide
Date: Fri, 16 Oct 2020 17:43:15 +0800
Subject: [PATCH 4/5] =?UTF-8?q?[feat]readme=E6=A0=BC=E5=BC=8F=E5=AE=8C?=
=?UTF-8?q?=E5=96=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 18 +++++++++---------
...225\351\242\230\346\200\273\347\273\223.md" | 0
...207\345\260\261\345\244\237\344\272\206.md" | 0
3 files changed, 9 insertions(+), 9 deletions(-)
rename docs/system-design/distributed-system/message-queue/kafka-inverview.md => "docs/system-design/distributed-system/message-queue/Kafka\345\270\270\350\247\201\351\235\242\350\257\225\351\242\230\346\200\273\347\273\223.md" (100%)
rename docs/system-design/distributed-system/message-queue/rabbitmq.md => "docs/system-design/distributed-system/message-queue/RabbitMQ\345\205\245\351\227\250\347\234\213\350\277\231\344\270\200\347\257\207\345\260\261\345\244\237\344\272\206.md" (100%)
diff --git a/README.md b/README.md
index 8ee80aeb182..b34b4b7825a 100644
--- a/README.md
+++ b/README.md
@@ -45,11 +45,11 @@
-## Java(必看:+1: )
+## Java
### 基础
-**知识点/面试题:**
+**知识点/面试题:**(必看:+1: )
1. **[Java 基础知识](docs/java/basis/Java基础知识.md)**
2. **[Java 基础知识疑难点/易错点](docs/java/basis/Java基础知识疑难点.md)**
@@ -64,14 +64,14 @@
### 容器
-1. **[Java 容器常见面试题/知识点总结](docs/java/collection/Java集合框架常见面试题.md)(推荐!)**
+1. **[Java 容器常见面试题/知识点总结](docs/java/collection/Java集合框架常见面试题.md)** (必看 :+1:)
2. **源码分析** :[ArrayList源码+扩容机制分析](docs/java/collection/ArrayList源码+扩容机制分析.md) 、[LinkedList 源码](docs/java/collection/LinkedList源码分析.md) 、[HashMap(JDK1.8)源码+底层数据结构分析](docs/java/collection/HashMap(JDK1.8)源码+底层数据结构分析.md) 、[ConcurrentHashMap 源码+底层数据结构分析](docs/java/collection/ConcurrentHashMap源码+底层数据结构分析.md)
### 并发
并发这部分内容非常重要,还是面试中的重点中的重点!但是,学习起来难度较大,因此我写了:**[多线程学习指南](./docs/java/multi-thread/多线程学习指南.md)** 帮助你学习。
-**知识点/面试题:**
+**知识点/面试题:** (必看 :+1:)
1. **[Java 并发基础常见面试题总结](docs/java/multi-thread/2020最新Java并发基础常见面试题总结.md)**
2. **[Java 并发进阶常见面试题总结](docs/java/multi-thread/2020最新Java并发进阶常见面试题总结.md)**
@@ -85,7 +85,7 @@
5. [JUC 中的 Atomic 原子类总结](docs/java/multi-thread/Atomic原子类总结.md)
6. [AQS 原理以及 AQS 同步组件总结](docs/java/multi-thread/AQS原理以及AQS同步组件总结.md)
-### JVM
+### JVM (必看 :+1:)
1. **[Java 内存区域](docs/java/jvm/Java内存区域.md)**
2. **[JVM 垃圾回收](docs/java/jvm/JVM垃圾回收.md)**
@@ -168,7 +168,7 @@
#### Spring/SpringBoot
-**知识点/面试题:**
+**知识点/面试题:** (必看 :+1:)
1. **[Spring 常见问题总结](docs/system-design/framework/spring/SpringInterviewQuestions.md)**
2. **[SpringBoot 指南/常见面试题总结](https://github.com/Snailclimb/springboot-guide)**
@@ -183,7 +183,7 @@
- [MyBatis 常见面试题总结](docs/system-design/framework/mybatis/mybatis-interview.md)
-#### Netty
+#### Netty (必看 :+1:)
1. [剖析面试最常见问题之 Netty(上)](https://xiaozhuanlan.com/topic/4028536971)
2. [剖析面试最常见问题之 Netty(下)](https://xiaozhuanlan.com/topic/3985146207)
@@ -246,9 +246,9 @@ RPC 让调用远程服务调用像调用本地方法那样简单。
消息队列在分布式系统中主要是为了解耦和削峰。相关阅读: **[消息队列总结](docs/system-design/data-communication/message-queue.md)** 。
-1. **RabbitMQ** : [RabbitMQ 入门](docs/system-design/distributed-system/message-queue/rabbitmq.md)
+1. **RabbitMQ** : [RabbitMQ 入门](docs/system-design/distributed-system/message-queue/RabbitMQ入门看这一篇就够了.md)
2. **RocketMQ** : [RocketMQ 入门](docs/system-design/distributed-system/message-queue/RocketMQ.md)、[RocketMQ 的几个简单问题与答案](docs/system-design/distributed-system/message-queue/RocketMQ-Questions.md)
-3. **Kafka** :**[Kafka 常见面试题总结](docs/system-design/distributed-system/message-queue/kafka-inverview.md)**
+3. **Kafka** :**[Kafka 常见面试题总结](docs/system-design/distributed-system/message-queue/Kafka常见面试题总结.md)**
#### 读写分离
diff --git a/docs/system-design/distributed-system/message-queue/kafka-inverview.md "b/docs/system-design/distributed-system/message-queue/Kafka\345\270\270\350\247\201\351\235\242\350\257\225\351\242\230\346\200\273\347\273\223.md"
similarity index 100%
rename from docs/system-design/distributed-system/message-queue/kafka-inverview.md
rename to "docs/system-design/distributed-system/message-queue/Kafka\345\270\270\350\247\201\351\235\242\350\257\225\351\242\230\346\200\273\347\273\223.md"
diff --git a/docs/system-design/distributed-system/message-queue/rabbitmq.md "b/docs/system-design/distributed-system/message-queue/RabbitMQ\345\205\245\351\227\250\347\234\213\350\277\231\344\270\200\347\257\207\345\260\261\345\244\237\344\272\206.md"
similarity index 100%
rename from docs/system-design/distributed-system/message-queue/rabbitmq.md
rename to "docs/system-design/distributed-system/message-queue/RabbitMQ\345\205\245\351\227\250\347\234\213\350\277\231\344\270\200\347\257\207\345\260\261\345\244\237\344\272\206.md"
From e71b0e4038cf77128d46b3be5ceccc64a6dc8451 Mon Sep 17 00:00:00 2001
From: guide
Date: Fri, 16 Oct 2020 18:01:22 +0800
Subject: [PATCH 5/5] Update README.md
---
README.md | 59 ++++++++++++++++++++++++++-----------------------------
1 file changed, 28 insertions(+), 31 deletions(-)
diff --git a/README.md b/README.md
index b34b4b7825a..276360e234c 100644
--- a/README.md
+++ b/README.md
@@ -1,17 +1,14 @@
-> 关于 JavaGuide 的相关介绍请看:[关于 JavaGuide 的一些说明](https://www.yuque.com/snailclimb/dr6cvl/mr44yt#vu3ok) 。
->
-> 准备面试的小伙伴可以考虑面试专版:[《Java 面试进阶指南》](https://xiaozhuanlan.com/javainterview?rel=javaguide) ,欢迎加入[我的星球](https://wx.zsxq.com/dweb2/index/group/48418884588288)获取更多实用干货。
->
-> 阿里云最近在做活动,服务器不到 10 元/月,小伙伴们搭建一个网站提高简历质量。支持国内开源做的比较好的公司
->
-
-《JavaGuide 面试突击版》PDF 版本+3 本 PDF Java 学习手册,在公众号 **[JavaGuide](#公众号)** 后台回复“**面试突击**”即可获取。
+👍《JavaGuide 面试突击版》PDF 版本+3 本 PDF Java 学习手册,在公众号 **[JavaGuide](#公众号)** 后台回复“**面试突击**”即可获取。
-如果 Github 访问速度比较慢或者图片无法刷新出来的话,可以转移到[码云](https://gitee.com/SnailClimb/JavaGuide)查看,或者[在线阅读](https://snailclimb.gitee.io/javaguide)。**如果你要提交 issue 或者 pr 的话请到 [Github](https://github.com/Snailclimb/JavaGuide) 提交。**
+👍 图解操作系统+HTTP+计算机网络的 PDF 资料下载地址,[点此链接即可下载](https://cowtransfer.com/s/fbed14f0c22a4d):
-如要进群或者请教问题,请[联系我](#联系我) (备注来自 Github。请直入问题,工作时间不回复)。
-
-**开始阅读之前必看** :[完结撒花!JavaGuide 面试突击版来啦!](./docs/javaguide面试突击版.md) 。
+> 一些闲话:
+>
+> 1. **JavaGuide 介绍**:关于 JavaGuide 的相关介绍请看:[关于 JavaGuide 的一些说明](https://www.yuque.com/snailclimb/dr6cvl/mr44yt#vu3ok) 。PDF 版本请看:[完结撒花!JavaGuide 面试突击版来啦!](./docs/javaguide面试突击版.md) 。
+> 2. **在线阅读** :如果 Github 访问速度比较慢或者图片无法刷新出来的话,可以转移到[码云](https://gitee.com/SnailClimb/JavaGuide)查看或者[在线阅读](https://snailclimb.gitee.io/javaguide)。如果你要提交 issue 或者 pr 的话建议到 [Github](https://github.com/Snailclimb/JavaGuide) 提交。
+> 3. **面试专版** :准备面试的小伙伴可以考虑面试专版:[《Java 面试进阶指南》](https://xiaozhuanlan.com/javainterview?rel=javaguide) ,欢迎加入[我的星球](https://wx.zsxq.com/dweb2/index/group/48418884588288)获取更多实用干货。
+> 4. **阿里云活动** :阿里云最近在做活动,服务器不到 10 元/月,小伙伴们搭建一个网站提高简历质量。支持国内开源做的比较好的公司
+> 5. **联系我** :如要进群或者请教问题,请[联系我](#联系我) (备注来自 Github。请直入问题,工作时间不回复)。
@@ -44,7 +41,6 @@
-
## Java
### 基础
@@ -65,7 +61,7 @@
### 容器
1. **[Java 容器常见面试题/知识点总结](docs/java/collection/Java集合框架常见面试题.md)** (必看 :+1:)
-2. **源码分析** :[ArrayList源码+扩容机制分析](docs/java/collection/ArrayList源码+扩容机制分析.md) 、[LinkedList 源码](docs/java/collection/LinkedList源码分析.md) 、[HashMap(JDK1.8)源码+底层数据结构分析](docs/java/collection/HashMap(JDK1.8)源码+底层数据结构分析.md) 、[ConcurrentHashMap 源码+底层数据结构分析](docs/java/collection/ConcurrentHashMap源码+底层数据结构分析.md)
+2. **源码分析** :[ArrayList 源码+扩容机制分析](docs/java/collection/ArrayList源码+扩容机制分析.md) 、[LinkedList 源码](docs/java/collection/LinkedList源码分析.md) 、[HashMap(JDK1.8)源码+底层数据结构分析]() 、[ConcurrentHashMap 源码+底层数据结构分析](docs/java/collection/ConcurrentHashMap源码+底层数据结构分析.md)
### 并发
@@ -81,9 +77,9 @@
2. **线程池**:[Java 线程池学习总结](./docs/java/multi-thread/java线程池学习总结.md)、[拿来即用的线程池最佳实践](./docs/java/multi-thread/拿来即用的线程池最佳实践.md)
3. [乐观锁与悲观锁](docs/essential-content-for-interview/面试必备之乐观锁与悲观锁.md)
4. [ ThreadLocal 关键字解析](docs/java/multi-thread/万字详解ThreadLocal关键字.md)
-4. [并发容器总结](docs/java/multi-thread/并发容器总结.md)
-5. [JUC 中的 Atomic 原子类总结](docs/java/multi-thread/Atomic原子类总结.md)
-6. [AQS 原理以及 AQS 同步组件总结](docs/java/multi-thread/AQS原理以及AQS同步组件总结.md)
+5. [并发容器总结](docs/java/multi-thread/并发容器总结.md)
+6. [JUC 中的 Atomic 原子类总结](docs/java/multi-thread/Atomic原子类总结.md)
+7. [AQS 原理以及 AQS 同步组件总结](docs/java/multi-thread/AQS原理以及AQS同步组件总结.md)
### JVM (必看 :+1:)
@@ -111,7 +107,7 @@
1. [操作系统常见问题总结!](docs/operating-system/basis.md)
2. [后端程序员必备的 Linux 基础知识](docs/operating-system/linux.md)
-3. [Shell 编程入门](docs/operating-system/Shell.md)
+3. [Shell 编程入门](docs/operating-system/Shell.md)
4. [Linux 性能分析工具合集](docs/operating-system/Linux性能分析工具合集.md)
## 数据结构与算法
@@ -164,11 +160,11 @@
### 常用框架
-如果你没有接触过 Java Web 开发的话,可以先看一下我总结的 [《J2EE 基础知识》](docs/java/J2EE基础知识.md) 。虽然,这篇文章中的很多内容已经淘汰,但是可以让你对Java 后台技术发展有更深的认识。
+如果你没有接触过 Java Web 开发的话,可以先看一下我总结的 [《J2EE 基础知识》](docs/java/J2EE基础知识.md) 。虽然,这篇文章中的很多内容已经淘汰,但是可以让你对 Java 后台技术发展有更深的认识。
#### Spring/SpringBoot
-**知识点/面试题:** (必看 :+1:)
+**知识点/面试题:** (必看 :+1:)
1. **[Spring 常见问题总结](docs/system-design/framework/spring/SpringInterviewQuestions.md)**
2. **[SpringBoot 指南/常见面试题总结](https://github.com/Snailclimb/springboot-guide)**
@@ -225,7 +221,7 @@ RPC 让调用远程服务调用像调用本地方法那样简单。
#### 分布式 id
-在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识。比如数据量太大之后,往往需要对进行对数据进行分库分表,分库分表后需要有一个唯一ID来标识一条数据或消息,数据库的自增ID显然不能满足需求。相关阅读:[为什么要分布式 id ?分布式 id 生成方案有哪些?](docs/system-design/micro-service/分布式id生成方案总结.md)
+在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识。比如数据量太大之后,往往需要对进行对数据进行分库分表,分库分表后需要有一个唯一 ID 来标识一条数据或消息,数据库的自增 ID 显然不能满足需求。相关阅读:[为什么要分布式 id ?分布式 id 生成方案有哪些?](docs/system-design/micro-service/分布式id生成方案总结.md)
#### ZooKeeper
@@ -248,7 +244,7 @@ RPC 让调用远程服务调用像调用本地方法那样简单。
1. **RabbitMQ** : [RabbitMQ 入门](docs/system-design/distributed-system/message-queue/RabbitMQ入门看这一篇就够了.md)
2. **RocketMQ** : [RocketMQ 入门](docs/system-design/distributed-system/message-queue/RocketMQ.md)、[RocketMQ 的几个简单问题与答案](docs/system-design/distributed-system/message-queue/RocketMQ-Questions.md)
-3. **Kafka** :**[Kafka 常见面试题总结](docs/system-design/distributed-system/message-queue/Kafka常见面试题总结.md)**
+3. **Kafka** :**[Kafka 常见面试题总结](docs/system-design/distributed-system/message-queue/Kafka常见面试题总结.md)**
#### 读写分离
@@ -258,7 +254,7 @@ RPC 让调用远程服务调用像调用本地方法那样简单。
#### 分库分表
-**分库分表是为了解决由于库、表数据量过大,而导致数据库性能持续下降的问题。** 常见的分库分表工具有:`sharding-jdbc`(当当)、`TSharding`(蘑菇街)、`MyCAT`(基于Cobar)、`Cobar`(阿里巴巴)...。
+**分库分表是为了解决由于库、表数据量过大,而导致数据库性能持续下降的问题。** 常见的分库分表工具有:`sharding-jdbc`(当当)、`TSharding`(蘑菇街)、`MyCAT`(基于 Cobar)、`Cobar`(阿里巴巴)...。
**推荐使用 `sharding-jdbc`** 。 因为,`sharding-jdbc` 是一款轻量级 `Java` 框架,以 `jar` 包形式提供服务,不要我们做额外的运维工作,并且兼容性也很好。
@@ -269,22 +265,22 @@ RPC 让调用远程服务调用像调用本地方法那样简单。
常见的负载均衡系统包括 3 种:
1. **DNS 负载均衡** :一般用来实现地理级别的均衡。
-2. **硬件负载均衡** : 通过单独的硬件设备比如F5来实现负载均衡功能(硬件的价格一般很贵)。
-3. **软件负载均衡** :通过负载均衡软件比如Nginx来实现负载均衡功能。
+2. **硬件负载均衡** : 通过单独的硬件设备比如 F5 来实现负载均衡功能(硬件的价格一般很贵)。
+3. **软件负载均衡** :通过负载均衡软件比如 Nginx 来实现负载均衡功能。
### 高可用
高可用描述的是一个系统在大部分时间都是可用的,可以为我们提供服务的。高可用代表系统即使在发生硬件故障或者系统升级的时候,服务仍然是可用的 。相关阅读: **《[如何设计一个高可用系统?要考虑哪些地方?](docs/system-design/website-architecture/如何设计一个高可用系统?要考虑哪些地方?.md)》** 。
-#### CAP理论
+#### CAP 理论
CAP 也就是 Consistency(一致性)、Availability(可用性)、Partition Tolerance(分区容错性) 这三个单词首字母组合。
-#### BASE理论
+#### BASE 理论
-**BASE** 是 **Basically Available(基本可用)** 、**Soft-state(软状态)** 和 **Eventually Consistent(最终一致性)** 三个短语的缩写。BASE理论是对CAP中一致性和可用性权衡的结果,其来源于对大规模互联网系统分布式实践的总结,是基于CAP定理逐步演化而来的,它大大降低了我们对系统的要求。
+**BASE** 是 **Basically Available(基本可用)** 、**Soft-state(软状态)** 和 **Eventually Consistent(最终一致性)** 三个短语的缩写。BASE 理论是对 CAP 中一致性和可用性权衡的结果,其来源于对大规模互联网系统分布式实践的总结,是基于 CAP 定理逐步演化而来的,它大大降低了我们对系统的要求。
-#### 限流
+#### 限流
限流为了对服务端的接口接受请求的频率进行限制,防止服务挂掉。比如某一接口的请求限制为 100 个每秒, 对超过限制的请求放弃处理或者放到队列中等待处理。限流可以有效应对突发请求过多。相关阅读:[限流算法有哪些?](docs/system-design/high-availability/limit-request.md)
@@ -334,7 +330,7 @@ CAP 也就是 Consistency(一致性)、Availability(可用性)、Partiti
## 书单
-1. [「基础篇」Java书单](./docs/books/java基础篇.md)
+1. [「基础篇」Java 书单](./docs/books/java基础篇.md)
---
@@ -343,7 +339,8 @@ CAP 也就是 Consistency(一致性)、Availability(可用性)、Partiti
### 待办
- [x] Netty 总结
-- [ ] 数据结构总结重构(---正在进行中---)
+- [ ] 数据结构总结重构
+- [ ] 将 JavaGuide 的基础知识部分抽出来单独弄一个 CS-Guide
### 联系我