1
0
mirror of https://github.com/Snailclimb/JavaGuide synced 2025-08-14 05:21:42 +08:00

Compare commits

...

7 Commits

Author SHA1 Message Date
guide
af1f2298ff [docs fix]图片居中 2022-08-15 22:46:18 +08:00
guide
ab3bfae659 Update README.md 2022-08-15 22:42:13 +08:00
guide
3c9d813a17 [docs update]并发部分不太清晰的图片重新上传 2022-08-15 22:31:03 +08:00
guide
802ae0de95 [docs fix]图片链接错误 2022-08-15 16:33:29 +08:00
guide
c17e97d3e7 [docs update]OSI 和 TCP/IP 网络分层模型详解(基础)内容完善 2022-08-15 16:29:52 +08:00
guide
8d797894c6 [docs add]权限系统设计详解 2022-08-15 15:12:39 +08:00
guide
cb5ad6953b [docs update]在线阅读网站首页&项目主页完善 2022-08-15 12:31:05 +08:00
36 changed files with 821 additions and 252 deletions

321
README.md
View File

@ -1,4 +1,7 @@
> [JavaGuide 官方知识星球](https://www.yuque.com/docs/share/8a30ffb5-83f3-40f9-baf9-38de68b906dc)来啦!!!如果你需要专属面试小册/一对一交流/简历修改/专属求职指南/学习打卡,不妨花 3 分钟左右看看星球的详细介绍: [JavaGuide 知识星球详细介绍](https://www.yuque.com/docs/share/8a30ffb5-83f3-40f9-baf9-38de68b906dc) (一定要确定自己真的需要再加入,一定要看完详细介绍之后再加我)。
推荐你通过在线阅读网站进行阅读,体验更好,速度更快!
* **[JavaGuide 在线阅读网站(新版,推荐👍)](https://javaguide.cn/)**
* [JavaGuide 在线阅读版(老版)](https://snailclimb.gitee.io/javaguide/#/)
<div align="center">
<p>
@ -27,17 +30,17 @@
> 1. **知识星球** :专属面试小册/一对一交流/简历修改/专属求职指南,欢迎加入 [JavaGuide 知识星球](https://www.yuque.com/docs/share/8a30ffb5-83f3-40f9-baf9-38de68b906dc)(点击链接即可查看星球的详细介绍,一定一定一定确定自己真的需要再加入,一定一定要看完详细介绍之后再加我)。
> 2. **转载须知** 以下所有文章如非文首说明为转载皆为我Guide 哥)的原创,转载在文首注明出处,如发现恶意抄袭/搬运,会动用法律武器维护自己的权益。让我们一起维护一个良好的技术创作环境!
推荐你通过在线阅读网站进行阅读,体验更好,速度更快!
<div align="center">
<img src="https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/gongzhonghaoxuanchuan.png" style="margin: 0 auto;" />
</p>
</div>
* [JavaGuide 在线阅读网站(新版,推荐👍)](https://javaguide.cn/)
* [JavaGuide 在线阅读版(老版)](https://snailclimb.gitee.io/javaguide/#/)
你可能需要:
## 项目相关
* [项目介绍](./docs/javaguide/intro.md)
* [贡献指南](./docs/javaguide/contribution-guideline.md)
* [常见问题](./docs/javaguide/faq.md)
* [项目代办.md](./docs/javaguide/todo)
* [项目代办](./docs/javaguide/todo.md)
## Java
@ -45,96 +48,98 @@
**知识点/面试题总结** : (必看:+1: )
1. [Java 基础常见知识点&面试题总结(上)](docs/java/basis/java-basic-questions-01.md)
2. [Java 基础常见知识点&面试题总结(中)](docs/java/basis/java-basic-questions-02.md)
3. [Java 基础常见知识点&面试题总结(下)](docs/java/basis/java-basic-questions-03.md)
- [Java 基础常见知识点&面试题总结(上)](./docs/java/basis/java-basic-questions-01.md)
- [Java 基础常见知识点&面试题总结(中)](./docs/java/basis/java-basic-questions-02.md)
- [Java 基础常见知识点&面试题总结(下)](./docs/java/basis/java-basic-questions-03.md)
**重要知识点详解**
* [为什么 Java 中只有值传递?](docs/java/basis/why-there-only-value-passing-in-java.md)
* [Java 序列化详解](docs/java/basis/serialization.md)
* [泛型&序列化详解](docs/java/basis/generics-and-wildcards.md)
* [Java 反射机制详解](docs/java/basis/reflection.md)
* [Java 代理模式详解](docs/java/basis/proxy.md)
* [BigDecimal 详解](docs/java/basis/bigdecimal.md)
* [Java 魔法类 Unsafe 详解](docs/java/basis/unsafe.md)
* [Java SPI 机制详解](docs/java/basis/spi.md)
- [为什么 Java 中只有值传递?](./docs/java/basis/why-there-only-value-passing-in-java.md)
- [Java 序列化详解](./docs/java/basis/serialization.md)
- [泛型&序列化详解](./docs/java/basis/generics-and-wildcards.md)
- [Java 反射机制详解](./docs/java/basis/reflection.md)
- [Java 代理模式详解](./docs/java/basis/proxy.md)
- [BigDecimal 详解](./docs/java/basis/bigdecimal.md)
- [Java 魔法类 Unsafe 详解](./docs/java/basis/unsafe.md)
- [Java SPI 机制详解](./docs/java/basis/spi.md)
### 集合
**知识点/面试题总结**
1. [Java 集合常见知识点&面试题总结(上)](docs/java/collection/java-collection-questions-01.md) (必看 :+1:)
2. [Java 集合常见知识点&面试题总结(下)](docs/java/collection/java-collection-questions-02.md) (必看 :+1:)
3. [Java 容器使用注意事项总结](docs/java/collection/java-collection-precautions-for-use.md)
- [Java 集合常见知识点&面试题总结(上)](./docs/java/collection/java-collection-questions-01.md) (必看 :+1:)
- [Java 集合常见知识点&面试题总结(下)](./docs/java/collection/java-collection-questions-02.md) (必看 :+1:)
- [Java 容器使用注意事项总结](./docs/java/collection/java-collection-precautions-for-use.md)
**源码分析**
* [ArrayList 源码+扩容机制分析](docs/java/collection/arraylist-source-code.md)
* [HashMap(JDK1.8)源码+底层数据结构分析](docs/java/collection/hashmap-source-code.md)
* [ConcurrentHashMap 源码+底层数据结构分析](docs/java/collection/concurrent-hash-map-source-code.md)
* [ArrayList 源码+扩容机制分析](./docs/java/collection/arraylist-source-code.md)
* [HashMap(JDK1.8)源码+底层数据结构分析](./docs/java/collection/hashmap-source-code.md)
* [ConcurrentHashMap 源码+底层数据结构分析](./docs/java/collection/concurrent-hash-map-source-code.md)
### IO
* [IO 基础知识总结](docs/java/io/io-basis.md)
* [IO 设计模式总结](docs/java/io/io-design-patterns.md)
* [IO 模型详解](docs/java/io/io-model.md)
* [IO 基础知识总结](./docs/java/io/io-basis.md)
* [IO 设计模式总结](./docs/java/io/io-design-patterns.md)
* [IO 模型详解](./docs/java/io/io-model.md)
### 并发
**知识点/面试题总结** : (必看 :+1:)
1. [Java 并发常见知识点&面试题总结(上)](docs/java/concurrent/java-concurrent-questions-01.md)
2. [Java 并发常见知识点&面试题总结(中)](docs/java/concurrent/java-concurrent-questions-02.md)
3. [Java 并发常见知识点&面试题总结(下)](docs/java/concurrent/java-concurrent-questions-03.md)
- [Java 并发常见知识点&面试题总结(上)](./docs/java/concurrent/java-concurrent-questions-01.md)
- [Java 并发常见知识点&面试题总结(中)](./docs/java/concurrent/java-concurrent-questions-02.md)
- [Java 并发常见知识点&面试题总结(下)](./docs/java/concurrent/java-concurrent-questions-03.md)
**重要知识点详解**
- [JMMJava 内存模型)详解](./docs/java/concurrent/jmm.md)
- **线程池** [Java 线程池详解](./docs/java/concurrent/java-thread-pool-summary.md)、[Java 线程池最佳实践](./docs/java/concurrent/java-thread-pool-best-practices.md)
- [ThreadLocal 详解](docs/java/concurrent/threadlocal.md)
- [Java 并发容器总结](docs/java/concurrent/java-concurrent-collections.md)
- [Atomic 原子类总结](docs/java/concurrent/atomic-classes.md)
- [AQS 详解](docs/java/concurrent/aqs.md)
- [CompletableFuture入门](docs/java/concurrent/completablefuture-intro.md)
- [ThreadLocal 详解](./docs/java/concurrent/threadlocal.md)
- [Java 并发容器总结](./docs/java/concurrent/java-concurrent-collections.md)
- [Atomic 原子类总结](./docs/java/concurrent/atomic-classes.md)
- [AQS 详解](./docs/java/concurrent/aqs.md)
- [CompletableFuture入门](./docs/java/concurrent/completablefuture-intro.md)
### JVM (必看 :+1:)
JVM 这部分内容主要参考 [JVM 虚拟机规范-Java8 ](https://docs.oracle.com/javase/specs/jvms/se8/html/index.html) 和周志明老师的[《深入理解Java虚拟机第3版](https://book.douban.com/subject/34907497/) (强烈建议阅读多遍!)。
1. **[Java 内存区域](./docs/java/jvm/memory-area.md)**
2. **[JVM 垃圾回收](./docs/java/jvm/jvm-garbage-collection.md)**
3. [JDK 监控和故障处理工具](./docs/java/jvm/jdk-monitoring-and-troubleshooting-tools.md)
4. [类文件结构](./docs/java/jvm/class-file-structure.md)
5. **[类加载过程](./docs/java/jvm/class-loading-process.md)**
6. [类加载器](./docs/java/jvm/classloader.md)
7. **[【待完成】最重要的 JVM 参数总结(翻译完善了一半)](./docs/java/jvm/jvm-parameters-intro.md)**
8. **[【加餐】大白话带你认识 JVM](./docs/java/jvm/jvm-intro.md)**
- **[Java 内存区域](./docs/java/jvm/memory-area.md)**
- **[JVM 垃圾回收](./docs/java/jvm/jvm-garbage-collection.md)**
- [类文件结构](./docs/java/jvm/class-file-structure.md)
- **[类加载过程](./docs/java/jvm/class-loading-process.md)**
- [类加载器](./docs/java/jvm/classloader.md)
- [【待完成】最重要的 JVM 参数总结(翻译完善了一半)](./docs/java/jvm/jvm-parameters-intro.md)
- [【加餐】大白话带你认识 JVM](./docs/java/jvm/jvm-intro.md)**
- [JDK 监控和故障处理工具](./docs/java/jvm/jdk-monitoring-and-troubleshooting-tools.md)
### 新特性
1. **Java 8** [Java 8 新特性总结(翻译)](docs/java/new-features/java8-tutorial-translate.md)、[Java8常用新特性总结](./docs/java/new-features/java8-common-new-features.md)
2. [Java 9 新特性概览](./docs/java/new-features/java9.md)
3. [Java 10 新特性概览](./docs/java/new-features/java10.md)
4. [Java 11 新特性概览](./docs/java/new-features/java11.md)
5. [Java 12~13 新特性概览](./docs/java/new-features/java12-13.md)
6. [Java 14~15 新特性概览](./docs/java/new-features/java14-15.md)
7. [Java 16 新特性概览](./docs/java/new-features/java16.md)
- **Java 8** [Java 8 新特性总结(翻译)](./docs/java/new-features/java8-tutorial-translate.md)、[Java8常用新特性总结](./docs/java/new-features/java8-common-new-features.md)
- [Java 9 新特性概览](./docs/java/new-features/java9.md)
- [Java 10 新特性概览](./docs/java/new-features/java10.md)
- [Java 11 新特性概览](./docs/java/new-features/java11.md)
- [Java 12~13 新特性概览](./docs/java/new-features/java12-13.md)
- [Java 14~15 新特性概览](./docs/java/new-features/java14-15.md)
- [Java 16 新特性概览](./docs/java/new-features/java16.md)
![JavaGuide 官方公众号](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/gongzhonghaoxuanchuan.png)
## 计算机基础
### 操作系统
1. [操作系统常见问题总结!](docs/cs-basics/operating-system/operating-system-basic-questions-01.md)
2. [后端程序员必备的 Linux 基础知识总结](docs/cs-basics/operating-system/linux-intro.md)
3. [Shell 编程入门](docs/cs-basics/operating-system/shell-intro.md)
- [操作系统常见问题总结!](./docs/cs-basics/operating-system/operating-system-basic-questions-01.md)
- [后端程序员必备的 Linux 基础知识总结](./docs/cs-basics/operating-system/linux-intro.md)
- [Shell 编程基础知识总结](./docs/cs-basics/operating-system/shell-intro.md)
### 网络
**知识点/面试题总结**
- [计算机网络常见知识点&面试题总结](./docs/cs-basics/network/other-network-questions.md)
- [谢希仁老师的《计算机网络》内容总结(补充)](docs/cs-basics/network/谢希仁老师的《计算机网络》内容总结.md)
- [谢希仁老师的《计算机网络》内容总结(补充)](./docs/cs-basics/network/computer-network-xiexiren-summary.md)
**重要知识点详解**
@ -150,14 +155,14 @@ JVM 这部分内容主要参考 [JVM 虚拟机规范-Java8 ](https://docs.oracle
**图解数据结构:**
1. [线性数据结构 :数组、链表、栈、队列](docs/cs-basics/data-structure/linear-data-structure.md)
2. [](docs/cs-basics/data-structure/graph.md)
3. [](docs/cs-basics/data-structure/heap.md)
4. [](docs/cs-basics/data-structure/tree.md) :重点关注[红黑树](docs/cs-basics/data-structure/red-black-tree.md)、B-B+B*树、LSM树
- [线性数据结构 :数组、链表、栈、队列](./docs/cs-basics/data-structure/linear-data-structure.md)
- [](./docs/cs-basics/data-structure/graph.md)
- [](./docs/cs-basics/data-structure/heap.md)
- [](./docs/cs-basics/data-structure/tree.md) :重点关注[红黑树](./docs/cs-basics/data-structure/red-black-tree.md)、B-B+B*树、LSM树
其他常用数据结构
1. [布隆过滤器](docs/cs-basics/data-structure/bloom-filter.md)
- [布隆过滤器](./docs/cs-basics/data-structure/bloom-filter.md)
### 算法
@ -168,10 +173,10 @@ JVM 这部分内容主要参考 [JVM 虚拟机规范-Java8 ](https://docs.oracle
**常见算法问题总结**
* [几道常见的字符串算法题总结 ](docs/cs-basics/algorithms/string-algorithm-problems.md)
* [几道常见的链表算法题总结 ](docs/cs-basics/algorithms/linkedlist-algorithm-problems.md)
* [剑指 offer 部分编程题](docs/cs-basics/algorithms/the-sword-refers-to-offer.md)
* [十大经典排序算法](docs/cs-basics/algorithms/10-classical-sorting-algorithms.md)
* [几道常见的字符串算法题总结 ](./docs/cs-basics/algorithms/string-algorithm-problems.md)
* [几道常见的链表算法题总结 ](./docs/cs-basics/algorithms/linkedlist-algorithm-problems.md)
* [剑指 offer 部分编程题](./docs/cs-basics/algorithms/the-sword-refers-to-offer.md)
* [十大经典排序算法](./docs/cs-basics/algorithms/10-classical-sorting-algorithms.md)
另外,[GeeksforGeeks]( https://www.geeksforgeeks.org/fundamentals-of-algorithms/) 这个网站总结了常见的算法 ,比较全面系统。
@ -179,37 +184,37 @@ JVM 这部分内容主要参考 [JVM 虚拟机规范-Java8 ](https://docs.oracle
### 基础
- [数据库基础知识总结](docs/database/basis.md)
- [字符集详解](docs/database/character-set.md)
- [数据库基础知识总结](./docs/database/basis.md)
- [字符集详解](./docs/database/character-set.md)
### MySQL
**知识点/面试题总结:**
- **[MySQL知识点总结](docs/database/mysql/mysql-questions-01.md)** (必看 :+1:)
- [一千行 MySQL 学习笔记](docs/database/mysql/a-thousand-lines-of-mysql-study-notes.md)
- [MySQL 高性能优化规范建议](docs/database/mysql/mysql-high-performance-optimization-specification-recommendations.md)
- **[MySQL知识点总结](./docs/database/mysql/mysql-questions-01.md)** (必看 :+1:)
- [一千行 MySQL 学习笔记](./docs/database/mysql/a-thousand-lines-of-mysql-study-notes.md)
- [MySQL 高性能优化规范建议](./docs/database/mysql/mysql-high-performance-optimization-specification-recommendations.md)
**重要知识点:**
- [MySQL数据库索引总结](docs/database/mysql/mysql-index.md)
- [事务隔离级别(图文详解)](docs/database/mysql/transaction-isolation-level.md)
- [MySQL三大日志(binlog、redo log和undo log)详解](docs/database/mysql/mysql-logs.md)
- [InnoDB存储引擎对MVCC的实现](docs/database/mysql/innodb-implementation-of-mvcc.md)
- [SQL语句在MySQL中的执行过程](docs/database/mysql/how-sql-executed-in-mysql.md)
- [关于数据库中如何存储时间的一点思考](docs/database/mysql/some-thoughts-on-database-storage-time.md)
- [MySQL中的隐式转换造成的索引失效](docs/database/mysql/index-invalidation-caused-by-implicit-conversion.md)
- [MySQL数据库索引总结](./docs/database/mysql/mysql-index.md)
- [事务隔离级别(图文详解)](./docs/database/mysql/transaction-isolation-level.md)
- [MySQL三大日志(binlog、redo log和undo log)详解](./docs/database/mysql/mysql-logs.md)
- [InnoDB存储引擎对MVCC的实现](./docs/database/mysql/innodb-implementation-of-mvcc.md)
- [SQL语句在MySQL中的执行过程](./docs/database/mysql/how-sql-executed-in-mysql.md)
- [关于数据库中如何存储时间的一点思考](./docs/database/mysql/some-thoughts-on-database-storage-time.md)
- [MySQL中的隐式转换造成的索引失效](./docs/database/mysql/index-invalidation-caused-by-implicit-conversion.md)
### Redis
**知识点/面试题总结** : (必看:+1: )
- [Redis 常见问题总结(上)](docs/database/redis/redis-questions-01.md)
- [Redis 常见问题总结(下)](docs/database/redis/redis-questions-02.md)
- [Redis 常见问题总结(上)](./docs/database/redis/redis-questions-01.md)
- [Redis 常见问题总结(下)](./docs/database/redis/redis-questions-02.md)
**重要知识点:**
- [3种常用的缓存读写策略详解](docs/database/redis/3-commonly-used-cache-read-and-write-strategies.md)
- [3种常用的缓存读写策略详解](./docs/database/redis/3-commonly-used-cache-read-and-write-strategies.md)
- [Redis 5 种基本数据结构详解](./docs/database/redis/redis-data-structures-01.md)
- [Redis 3 种特殊数据结构详解](./docs/database/redis/redis-data-structures-02.md)
- [Redis 内存碎片详解](./docs/database/redis/redis-memory-fragmentation.md)
@ -219,6 +224,8 @@ JVM 这部分内容主要参考 [JVM 虚拟机规范-Java8 ](https://docs.oracle
用于提高搜索效率,功能和浏览器搜索引擎类似。比较常见的搜索引擎是 Elasticsearch推荐 和 Solr。
![JavaGuide 官方公众号](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/gongzhonghaoxuanchuan.png)
## 开发工具
### Docker
@ -235,42 +242,43 @@ JVM 这部分内容主要参考 [JVM 虚拟机规范-Java8 ](https://docs.oracle
### 基础
- [RestFul API 简明教程](docs/system-design/basis/RESTfulAPI.md)
- [Java 编码命名之道](docs/system-design/basis/naming.md)
- [RestFul API 简明教程](./docs/system-design/basis/RESTfulAPI.md)
- [Java 编码命名之道](./docs/system-design/basis/naming.md)
- [代码重构指南](./docs/system-design/basis/refactoring.md)
- [单元测试指南](./docs/system-design/basis/unit-test.md)
### 常用框架
如果你没有接触过 Java Web 开发的话,可以先看一下我总结的 [《J2EE 基础知识》](docs/system-design/J2EE基础知识.md) 。虽然,这篇文章中的很多内容已经淘汰,但是可以让你对 Java 后台技术发展有更深的认识。
#### Spring/SpringBoot (必看 :+1:)
**知识点/面试题总结** :
- [Spring 常见知识点&面试题总结](docs/system-design/framework/spring/spring-knowledge-and-questions-summary.md)
- [SpringBoot 常见知识点&面试题总结](docs/system-design/framework/spring/springboot-knowledge-and-questions-summary.md)
- [Spring 常见知识点&面试题总结](./docs/system-design/framework/spring/spring-knowledge-and-questions-summary.md)
- [SpringBoot 常见知识点&面试题总结](./docs/system-design/framework/spring/springboot-knowledge-and-questions-summary.md)
- [Spring/Spring Boot 常用注解总结](./docs/system-design/framework/spring/spring-common-annotations.md)
- [SpringBoot 入门指南](https://github.com/Snailclimb/springboot-guide)
**重要知识点详解**
- [Spring 事务详解](docs/system-design/framework/spring/spring-transaction.md)
- [Spring 中的设计模式详解](docs/system-design/framework/spring/spring-design-patterns-summary.md)
- [SpringBoot 自动装配原理详解](docs/system-design/framework/spring/spring-boot-auto-assembly-principles.md)
- [Spring 事务详解](./docs/system-design/framework/spring/spring-transaction.md)
- [Spring 中的设计模式详解](./docs/system-design/framework/spring/spring-design-patterns-summary.md)
- [SpringBoot 自动装配原理详解](./docs/system-design/framework/spring/spring-boot-auto-assembly-principles.md)
#### MyBatis
[MyBatis 常见面试题总结](docs/system-design/framework/mybatis/mybatis-interview.md)
[MyBatis 常见面试题总结](./docs/system-design/framework/mybatis/mybatis-interview.md)
### 安全
#### 认证授权
- [认证授权基础](docs/system-design/security/basis-of-authority-certification.md)
- [JWT 基本概念详解](docs/system-design/security/jwt-intro.md)
- [JWT 优缺点分析以及常见问题解决方案](docs/system-design/security/advantages&disadvantages-of-jwt.md)
- [SSO 单点登录详解](docs/system-design/security/sso-intro.md)
- [认证授权基础概念详解](./docs/system-design/security/basis-of-authority-certification.md)
- [JWT 基础概念详解](./docs/system-design/security/jwt-intro.md)
- [JWT 优缺点分析以及常见问题解决方案](./docs/system-design/security/advantages&disadvantages-of-jwt.md)
- [SSO 单点登录详解](./docs/system-design/security/sso-intro.md)
- [权限系统设计详解](./docs/system-design/security/design-of-authority-system.md)
- [敏感词过滤方案总结](./docs/system-design/security/sentive-words-filter.md)
#### 数据脱敏
@ -278,143 +286,89 @@ JVM 这部分内容主要参考 [JVM 虚拟机规范-Java8 ](https://docs.oracle
#### 敏感词过滤
系统需要对用户输入的文本进行敏感词过滤如色情、政治、暴力相关的词汇。
相关阅读:[《敏感词过滤》](./docs/system-design/security/sentive-words-filter.md)
[《敏感词过滤》](./docs/system-design/security/sentive-words-filter.md)
### 定时任务
最近有朋友问到定时任务相关的问题。于是,我简单写了一篇文章总结一下定时任务的一些概念以及一些常见的定时任务技术选型:[《Java定时任务大揭秘》](./docs/system-design/schedule-task.md)
[《Java定时任务大揭秘》](./docs/system-design/schedule-task.md)
## 分布式
### CAP 理论和 BASE 理论
CAP 也就是 Consistency一致性、Availability可用性、Partition Tolerance分区容错性 这三个单词首字母组合。
**BASE** 是 **Basically Available基本可用** 、**Soft-state软状态** 和 **Eventually Consistent最终一致性** 三个短语的缩写。BASE 理论是对 CAP 中一致性和可用性权衡的结果,其来源于对大规模互联网系统分布式实践的总结,是基于 CAP 定理逐步演化而来的,它大大降低了我们对系统的要求。
相关阅读:[CAP 理论和 BASE 理论解读](docs/distributed-system/theorem&algorithm&protocol/cap&base-theorem.md)
[CAP 理论和 BASE 理论解读](./docs/distributed-system/theorem&algorithm&protocol/cap&base-theorem.md)
### Paxos 算法和 Raft 算法
**Paxos 算法** 诞生于 1990 年,这是一种解决分布式系统一致性的经典算法 。但是,由于 Paxos 算法非常难以理解和实现不断有人尝试简化这一算法。到了2013 年才诞生了一个比 Paxos 算法更易理解和实现的分布式一致性算法—**Raft 算法**。
相关阅读:
* [Paxos 算法解读](docs/distributed-system/theorem&algorithm&protocol/paxos-algorithm.md)
* [Raft 算法解读](docs/distributed-system/theorem&algorithm&protocol/raft-algorithm.md)
- [Paxos 算法解读](./docs/distributed-system/theorem&algorithm&protocol/paxos-algorithm.md)
- [Raft 算法解读](./docs/distributed-system/theorem&algorithm&protocol/raft-algorithm.md)
### RPC
RPC 让调用远程服务调用像调用本地方法那样简单。
Dubbo 是一款国产的 RPC 框架,由阿里开源。相关阅读:
* [RPC 基础常见知识点&面试题总结](docs/distributed-system/rpc/rpc-intro.md)
* [Dubbo 常见知识点&面试题总结](docs/distributed-system/rpc/dubbo.md)
* [RPC 基础常见知识点&面试题总结](./docs/distributed-system/rpc/rpc-intro.md)
* [Dubbo 常见知识点&面试题总结](./docs/distributed-system/rpc/dubbo.md)
### API 网关
网关主要用于请求转发、安全认证、协议转换、容灾。
相关阅读:
* [为什么要网关?你知道有哪些常见的网关系统?](docs/distributed-system/api-gateway.md)
* [为什么要网关?你知道有哪些常见的网关系统?](./docs/distributed-system/api-gateway.md)
* [百亿规模API网关服务Shepherd的设计与实现](https://tech.meituan.com/2021/05/20/shepherd-api-gateway.html)
### 分布式 id
在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识。比如数据量太大之后,往往需要对数据进行分库分表,分库分表后需要有一个唯一 ID 来标识一条数据或消息,数据库的自增 ID 显然不能满足需求。相关阅读:[为什么要分布式 id ?分布式 id 生成方案有哪些?](docs/distributed-system/distributed-id.md)
[为什么要分布式 id ?分布式 id 生成方案有哪些?](./docs/distributed-system/distributed-id.md)
### 分布式事务
**分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。**
简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证不同数据库的数据一致性。
[分布式事务](./docs/distributed-system/distributed-transaction.md)
### 分布式协调
**ZooKeeper**
> 前两篇文章可能有内容重合部分,推荐都看一遍。
1. [【入门】ZooKeeper 相关概念总结](docs/distributed-system/distributed-process-coordination/zookeeper/zookeeper-intro.md)
2. [【进阶】ZooKeeper 相关概念总结](docs/distributed-system/distributed-process-coordination/zookeeper/zookeeper-plus.md)
3. [【实战】ZooKeeper 实战](docs/distributed-system/distributed-process-coordination/zookeeper/zookeeper-in-action.md)
- [ZooKeeper 相关概念总结(入门)](./docs/distributed-system/distributed-process-coordination/zookeeper/zookeeper-intro.md)
- [ZooKeeper 相关概念总结(进阶)](./docs/distributed-system/distributed-process-coordination/zookeeper/zookeeper-plus.md)
- [ZooKeeper 实战](./docs/distributed-system/distributed-process-coordination/zookeeper/zookeeper-in-action.md)
![JavaGuide 官方公众号](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/gongzhonghaoxuanchuan.png)
## 高性能
### 消息队列
消息队列在分布式系统中主要是为了解耦和削峰。相关阅读: [消息队列常见问题总结](docs/high-performance/message-queue/message-queue.md)。
消息队列在分布式系统中主要是为了解耦和削峰。相关阅读: [消息队列常见问题总结](./docs/high-performance/message-queue/message-queue.md)。
1. **RabbitMQ** : [RabbitMQ 基础知识总结](docs/high-performance/message-queue/rabbitmq-intro.md)、[RabbitMQ 常见面试题](docs/high-performance/message-queue/rabbitmq-questions.md)
2. **RocketMQ** : [RocketMQ 基础知识总结](docs/high-performance/message-queue/rocketmq-intro.md)、[RocketMQ 常见面试题总结](docs/high-performance/message-queue/rocketmq-questions.md)
3. **Kafka** [Kafka 常见问题总结](docs/high-performance/message-queue/kafka-questions-01.md)
- **RabbitMQ** : [RabbitMQ 基础知识总结](./docs/high-performance/message-queue/rabbitmq-intro.md)、[RabbitMQ 常见面试题](./docs/high-performance/message-queue/rabbitmq-questions.md)
- **RocketMQ** : [RocketMQ 基础知识总结](./docs/high-performance/message-queue/rocketmq-intro.md)、[RocketMQ 常见面试题总结](./docs/high-performance/message-queue/rocketmq-questions.md)
- **Kafka** [Kafka 常见问题总结](./docs/high-performance/message-queue/kafka-questions-01.md)
### 读写分离&分库分表
读写分离主要是为了将数据库的读和写操作分不到不同的数据库节点上。主服务器负责写,从服务器负责读。另外,一主一从或者一主多从都可以。
读写分离可以大幅提高读性能,小幅提高写的性能。因此,读写分离更适合单机并发读请求比较多的场景。
分库分表是为了解决由于库、表数据量过大,而导致数据库性能持续下降的问题。
常见的分库分表工具有: `sharding-jdbc` (当当)、 `TSharding` (蘑菇街)、 `MyCAT` (基于 Cobar`Cobar` (阿里巴巴)...。 推荐使用 `sharding-jdbc` 。 因为, `sharding-jdbc` 是一款轻量级 `Java` 框架,以 `jar` 包形式提供服务,不要我们做额外的运维工作,并且兼容性也很好。
相关阅读: [读写分离&分库分表常见问题总结](docs/high-performance/read-and-write-separation-and-library-subtable.md)
[读写分离&分库分表](./docs/high-performance/read-and-write-separation-and-library-subtable.md)
### 负载均衡
负载均衡系统通常用于将任务比如用户请求处理分配到多个服务器处理以提高网站、应用或者数据库的性能和可靠性。
常见的负载均衡系统包括 3 种:
1. **DNS 负载均衡** :一般用来实现地理级别的均衡。
2. **硬件负载均衡** 通过单独的硬件设备比如 F5 来实现负载均衡功能(硬件的价格一般很贵)。
3. **软件负载均衡** :通过负载均衡软件比如 Nginx 来实现负载均衡功能。
[负载均衡](./docs/high-performance/load-balancing.md)
## 高可用
高可用描述的是一个系统在大部分时间都是可用的,可以为我们提供服务的。高可用代表系统即使在发生硬件故障或者系统升级的时候,服务仍然是可用的 。
相关阅读: **《[如何设计一个高可用系统?要考虑哪些地方?](docs/high-availability/high-availability-system-design.md)》** 。
[高可用系统设计指南](./docs/high-availability/high-availability-system-design.md) 。
### 限流
限流是从用户访问压力的角度来考虑如何应对系统故障。
[何为限流?限流算法有哪些?](./docs/high-availability/limit-request.md)
限流为了对服务端的接口接受请求的频率进行限制,防止服务挂掉。比如某一接口的请求限制为 100 个每秒, 对超过限制的请求放弃处理或者放到队列中等待处理。限流可以有效应对突发请求过多。相关阅读:[何为限流?限流算法有哪些?](docs/high-availability/limit-request.md)
### 降级&熔断
### 降级
[降级&熔断](./docs/high-availability/fallback&circuit-breaker.md)
降级是从系统功能优先级的角度考虑如何应对系统故障。
### 超时&重试
服务降级指的是当服务器压力剧增的情况下,根据当前业务情况及流量对一些服务和页面有策略的降级,以此释放服务器资源以保证核心任务的正常运行。
### 熔断
熔断和降级是两个比较容易混淆的概念,两者的含义并不相同。
降级的目的在于应对系统自身的故障,而熔断的目的在于应对当前系统依赖的外部系统或者第三方系统的故障。
### 排队
另类的一种限流,类比于现实世界的排队。玩过英雄联盟的小伙伴应该有体会,每次一有活动,就要经历一波排队才能进入游戏。
[超时&重试](./docs/high-availability/timeout-and-retry.md)
### 集群
相同的服务部署多份,避免单点故障。
### 超时和重试机制
**一旦用户的请求超过某个时间得不到响应就结束此次请求并抛出异常。** 如果不进行超时设置可能会导致请求响应速度慢,甚至导致请求堆积进而让系统无法再处理请求。
重试的次数一般设为 3 次,再多的重试次数没有好处,反而会加重服务器压力(部分场景使用失败重试机制会不太适合)。在一次重试失败之后通常会加上一个时间间隔 delay 再进行下一次重试,时间间隔 delay 通常建议是随机的。
并且,为了更好地保护下游,我们还可以结合断路器。
### 灾备设计和异地多活
**灾备** = 容灾+备份。
@ -424,20 +378,6 @@ Dubbo 是一款国产的 RPC 框架,由阿里开源。相关阅读:
**异地多活** 描述的是将服务部署在异地并且服务同时对外提供服务。和传统的灾备设计的最主要区别在于“多活”,即所有站点都是同时在对外提供服务的。异地多活是为了应对突发状况比如火灾、地震等自然或者人为灾害。
相关阅读:
* [搞懂异地多活,看这篇就够了](https://mp.weixin.qq.com/s/T6mMDdtTfBuIiEowCpqu6Q)
* [四步构建异地多活](https://mp.weixin.qq.com/s/hMD-IS__4JE5_nQhYPYSTg)
* [《从零开始学架构》— 28 | 业务高可用的保障:异地多活架构](http://gk.link/a/10pKZ)
## 关于作者
* [个人介绍 Q&A](https://javaguide.cn/about-the-author/)
* [我曾经也是网瘾少年](https://javaguide.cn/about-the-author/internet-addiction-teenager/)
* [入职培训一个月后的感受](https://javaguide.cn/about-the-author/feelings-after-one-month-of-induction-training/)
* [从毕业到入职半年的感受](https://javaguide.cn/about-the-author/feelings-of-half-a-year-from-graduation-to-entry/)
* [某培训机构盗我文章做成视频还上了B站热门](https://javaguide.cn/about-the-author/my-article-was-stolen-and-made-into-video-and-it-became-popular/)
## Star 趋势
![](https://api.star-history.com/svg?repos=Snailclimb/JavaGuide&type=Date)
@ -446,10 +386,5 @@ Dubbo 是一款国产的 RPC 框架,由阿里开源。相关阅读:
如果大家想要实时关注我更新的文章以及分享的干货的话,可以关注我的公众号。
**《Java面试突击》:** 由本文档衍生的专为面试而生的《Java面试突击》PDF 版本[公众号](#公众号)后台回复 **"面试突击"** 即可免费领取!
![JavaGuide 官方公众号](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/gongzhonghaoxuanchuan.png)
![我的公众号](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-6/167598cd2e17b8ec.png)
![](https://img-blog.csdnimg.cn/7af97d4dccdb4123a541f336a107ca86.png)
![](https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/3a2d826918a44bcbaa8d9272db3ad7d2~tplv-k3u1fbpfcp-watermark.image)

View File

@ -10,11 +10,11 @@ export const navbarConfig = defineNavbarConfig([
text: "网站相关",
icon: "about",
children: [
{ text: "走近作者", icon: "zuozhe", link: "/about-the-author/" },
{ text: "关于作者", icon: "zuozhe", link: "/about-the-author/" },
{
text: "网站历史",
icon: "java",
link: "/javaguide/history.md",
text: "更新历史",
icon: "history",
link: "/timeline/",
},
{
text: "旧版入口",

View File

@ -1,8 +1,8 @@
@font-face {
font-family: "iconfont"; /* Project id 2922463 */
src: url('iconfont.woff2?t=1655098798936') format('woff2'),
url('iconfont.woff?t=1655098798936') format('woff'),
url('iconfont.ttf?t=1655098798936') format('truetype');
src: url('iconfont.woff2?t=1660530571134') format('woff2'),
url('iconfont.woff?t=1660530571134') format('woff'),
url('iconfont.ttf?t=1660530571134') format('truetype');
}
.iconfont {
@ -13,6 +13,10 @@
-moz-osx-font-smoothing: grayscale;
}
.icon-history:before {
content: "\e752";
}
.icon-experience:before {
content: "\e72b";
}

View File

@ -370,6 +370,7 @@ export const sidebarConfig = defineSidebarConfig({
"jwt-intro",
"advantages&disadvantages-of-jwt",
"sso-intro",
"design-of-authority-system",
"sentive-words-filter",
"data-desensitization",
],

View File

@ -61,3 +61,4 @@ category: 走近作者
生活本就是有苦有甜。共勉!
![JavaGuide 官方公众号](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/gongzhonghaoxuanchuan.png)

View File

@ -3,7 +3,7 @@ title: 技术书籍精选
category: 计算机书籍
---
精选优质计算机书籍,希望能够帮助到你
精选优质计算机书籍。
开源的目的是为了大家能一起完善,如果你觉得内容有任何需要完善/补充的地方,欢迎大家在项目 [issues 区](https://github.com/CodingDocs/awesome-cs/issues) 推荐自己认可的技术书籍,让我们共同维护一个优质的技术书籍精选集!
@ -12,7 +12,7 @@ category: 计算机书籍
如果内容对你有帮助的话,欢迎给本项目点个 Star。我会用我的业余时间持续完善这份书单感谢
另外,本项目推荐的大部分书籍的 PDF 版本我已经整理到了云盘里,你可以在公众号“**Github掘金计划**” 后台回复“**书籍**”获取到。
本项目推荐的大部分书籍的 PDF 版本我已经整理到了云盘里,你可以在公众号“**Github掘金计划**” 后台回复“**书籍**”获取到。
![](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/booksimage-20220409153638398.png)

View File

@ -5,8 +5,6 @@ tag:
- 计算机网络
---
> 本文由 [SnailClimb](https://github.com/Snailclimb) 和 [csguide-dabai](https://github.com/csguide-dabai) 公众号“CS指南”作者共同完成。
## HTTP 协议
### HTTP 协议介绍

View File

@ -5,8 +5,6 @@ tag:
- 计算机网络
---
> 本文由 [SnailClimb](https://github.com/Snailclimb) 和 [csguide-dabai](https://github.com/csguide-dabai) 公众号“CS指南”作者共同完成。
这篇文章会从下面几个维度来对比 HTTP 1.0 和 HTTP 1.1
- 响应状态码

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 158 KiB

After

Width:  |  Height:  |  Size: 154 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

View File

@ -5,8 +5,6 @@ tag:
- 计算机网络
---
> 本文由 [SnailClimb](https://github.com/Snailclimb) 和 [csguide-dabai](https://github.com/csguide-dabai) 公众号“CS指南”作者共同完成。
## OSI 七层模型
**OSI 七层模型** 是国际标准化组织提出一个网络分层模型,其大体结构以及每一层提供的功能如下图所示:
@ -59,6 +57,8 @@ OSI 七层模型虽然失败了,但是却提供了很多不错的理论基础
![application-layer](./images/osi&tcp-ip-model/application-layer.png)
应用层常见协议总结,请看这篇文章:[应用层常见协议总结(应用层)](./application-layer-protocol.md)。
### 传输层Transport layer
**传输层的主要任务就是负责向两台终端设备进程之间的通信提供通用的数据传输服务。** 应用进程利用该服务传送应用层报文。“通用的”是指并不针对某一个特定的网络应用,而是多种应用可以使用同一个运输层服务。
@ -66,7 +66,7 @@ OSI 七层模型虽然失败了,但是却提供了很多不错的理论基础
**运输层主要使用以下两种协议:**
1. **传输控制协议 TCP**Transmisson Control Protocol--提供 **面向连接** 的,**可靠的** 数据传输服务。
2. **用户数据协议 UDP**User Datagram Protocol--提供**无连接**的,尽最大努力的数据传输服务(**不保证数据传输的可靠性**)。
2. **用户数据协议 UDP**User Datagram Protocol--提供 **无连接** 的,尽最大努力的数据传输服务(不保证数据传输的可靠性)。
![transport-layer](./images/osi&tcp-ip-model/transport-layer.png)
@ -84,6 +84,13 @@ OSI 七层模型虽然失败了,但是却提供了很多不错的理论基础
![](./images/osi&tcp-ip-model/nerwork-layer.png)
**网络层常见协议**
- **IP:网际协议** :网际协议 IP 是TCP/IP协议中最重要的协议之一也是网络层最重要的协议之一IP协议的作用包括寻址规约、定义数据包的格式等等是网络层信息传输的主力协议。目前IP协议主要分为两种一种是过去的IPv4另一种是较新的IPv6目前这两种协议都在使用但后者已经被提议来取代前者。
- **ARP 协议** ARP协议全称地址解析协议Address Resolution Protocol它解决的是网络层地址和链路层地址之间的转换问题。因为一个IP数据报在物理上传输的过程中总是需要知道下一跳物理上的下一个目的地该去往何处但IP地址属于逻辑地址而MAC地址才是物理地址ARP协议解决了IP地址转MAC地址的一些问题。
- **NAT:网络地址转换协议** NAT协议Network Address Translation的应用场景如同它的名称——网络地址转换应用于内部网到外部网的地址转换过程中。具体地说在一个小的子网局域网LAN各主机使用的是同一个LAN下的IP地址但在该LAN以外在广域网WAN需要一个统一的IP地址来标识该LAN在整个Internet上的位置。
- ......
### 网络接口层Network interface layer
我们可以把网络接口层看作是数据链路层和物理层的合体。
@ -93,7 +100,54 @@ OSI 七层模型虽然失败了,但是却提供了很多不错的理论基础
![network-interface-layer](./images/osi&tcp-ip-model/network-interface-layer.png)
## 为什么网络要分层?
### 总结
简单总结一下每一层包含的协议和核心技术:
![network-protocol-overview](./images/osi&tcp-ip-model/network-protocol-overview.png)
**应用层协议** :
- HTTP 协议(超文本传输协议,网页浏览常用的协议)
- DHCP 协议(动态主机配置)
- DNS 系统原理(域名系统)
- FTP 协议(文件传输协议)
- Telnet协议远程登陆协议
- 电子邮件协议等SMTP、POP3、IMAP
- ......
**传输层协议** :
- TCP 协议
- 报文段结构
- 可靠数据传输
- 流量控制
- 拥塞控制
- UDP 协议
- 报文段结构
- RDT可靠数据传输协议
**网络层协议** :
- IP 协议TCP/IP 协议的基础,分为 IPv4 和 IPv6
- ARP 协议(地址解析协议,用于解析 IP 地址和 MAC 地址之间的映射)
- ICMP 协议(控制报文协议,用于发送控制消息)
- NAT 协议(网络地址转换协议)
- RIP 协议、OSPF 协议、BGP 协议(路由选择协议)
- ......
**网络接口层** :
- 差错检测技术
- 多路访问协议(信道复用技术)
- CSMA/CD 协议
- MAC 协议
- 以太网技术
- ......
## 网络分层的原因
在这篇文章的最后,我想聊聊:“为什么网络要分层?”。
@ -114,3 +168,8 @@ OSI 七层模型虽然失败了,但是却提供了很多不错的理论基础
我想到了计算机世界非常非常有名的一句话,这里分享一下:
> 计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决,计算机整个体系从上到下都是按照严格的层次结构设计的。
## 参考
- TCP/IP model vs OSI modelhttps://fiberbit.com.tw/tcpip-model-vs-osi-model/
- Data Encapsulation and the TCP/IP Protocol Stackhttps://docs.oracle.com/cd/E19683-01/806-4075/ipov-32/index.html

View File

@ -3,7 +3,22 @@ icon: creative
title: JavaGuideJava学习&&面试指南)
---
<div style="text-align:center">
<div align="center">
<p>
<a href="https://github.com/Snailclimb/JavaGuide" target="_blank">
<img src="https://img-blog.csdnimg.cn/img_convert/1c00413c65d1995993bf2b0daf7b4f03.png#pic_center" width="" />
</a>
</p>
<p>
<a href="https://javaguide.cn/"><img src="https://img.shields.io/badge/阅读-read-brightgreen.svg" alt="阅读" /></a>
<img src="https://img.shields.io/github/stars/Snailclimb/JavaGuide" alt="stars" />
<img src="https://img.shields.io/github/forks/Snailclimb/JavaGuide" alt="forks" />
<img src="https://img.shields.io/github/issues/Snailclimb/JavaGuide" alt="issues" />
</p>
<p>
<a href="https://github.com/Snailclimb/JavaGuide">Github</a> |
<a href="https://gitee.com/SnailClimb/JavaGuide">Gitee</a>
</p>
<p>
<a href="https://www.yuque.com/docs/share/8a30ffb5-83f3-40f9-baf9-38de68b906dc">
<img src="https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/xingqiu/xingqiu.png" style="margin: 0 auto; width: 850px;" />
@ -11,41 +26,370 @@ title: JavaGuideJava学习&&面试指南)
</p>
</div>
> 1. **面试专版** :准备面试的小伙伴可以考虑面试专版:[《Java 面试指北 》](./zhuanlan/java-mian-shi-zhi-bei.md) (质量很高,专为面试打造,配合 JavaGuide 食用)
> 1. **面试专版** :准备面试的小伙伴可以考虑面试专版:[《Java 面试进阶指北 》](https://www.yuque.com/docs/share/f37fc804-bfe6-4b0d-b373-9c462188fec7) (质量很高,专为面试打造,配合 JavaGuide 食用)。
> 1. **知识星球** :专属面试小册/一对一交流/简历修改/专属求职指南,欢迎加入 [JavaGuide 知识星球](https://www.yuque.com/docs/share/8a30ffb5-83f3-40f9-baf9-38de68b906dc)(点击链接即可查看星球的详细介绍,一定一定一定确定自己真的需要再加入,一定一定要看完详细介绍之后再加我)。
> 2. **转载须知** 以下所有文章如非文首说明为转载皆为我Guide 哥)的原创,转载在文首注明出处,如发现恶意抄袭/搬运,会动用法律武器维护自己的权益。让我们一起维护一个良好的技术创作环境!
## 必看专栏
<div style="text-align:center">
<p>
<a href="https://www.yuque.com/docs/share/8a30ffb5-83f3-40f9-baf9-38de68b906dc">
<img src="https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/gongzhonghaoxuanchuan.png" style="margin: 0 auto;" />
</a>
</p>
</div>
- **[《Java 面试指北》](./zhuanlan/java-mian-shi-zhi-bei.md)** : 与 JavaGuide 开源版的内容互补!
- **[《手写 RPC 框架》](./zhuanlan/handwritten-rpc-framework.md)** : 从零开始基于 Netty+Kyro+Zookeeper 实现一个简易的 RPC 框架。
- **[《Java 必读源码系列》](./zhuanlan/source-code-reading.md)** :目前已经整理了 Dubbo 2.6.x 、Netty 4.x、SpringBoot 2.1 等框架/中间件的源码
## 项目相关
- [项目介绍](./javaguide/intro.md)
- [贡献指南](./javaguide/contribution-guideline.md)
- [常见问题](./javaguide/faq.md)
- [项目代办](./javaguide/todo.md)
* [项目介绍](./javaguide/intro.md)
* [贡献指南](./javaguide/contribution-guideline.md)
* [常见问题](./javaguide/faq.md)
* [项目代办](./javaguide/todo.md)
## 面试资源
## Java
<a href="https://t.1yb.co/GXLF"><img src="https://img-blog.csdnimg.cn/2f61f3e2d1f2427da977340919e41616.png" style="margin: 0 auto;width:850px" /></a>
### 基础
**知识点/面试题总结** : (必看:+1: )
- [Java 基础常见知识点&面试题总结(上)](./java/basis/java-basic-questions-01.md)
- [Java 基础常见知识点&面试题总结(中)](./java/basis/java-basic-questions-02.md)
- [Java 基础常见知识点&面试题总结(下)](./java/basis/java-basic-questions-03.md)
**重要知识点详解**
- [为什么 Java 中只有值传递?](./java/basis/why-there-only-value-passing-in-java.md)
- [Java 序列化详解](./java/basis/serialization.md)
- [泛型&序列化详解](./java/basis/generics-and-wildcards.md)
- [Java 反射机制详解](./java/basis/reflection.md)
- [Java 代理模式详解](./java/basis/proxy.md)
- [BigDecimal 详解](./java/basis/bigdecimal.md)
- [Java 魔法类 Unsafe 详解](./java/basis/unsafe.md)
- [Java SPI 机制详解](./java/basis/spi.md)
### 集合
**知识点/面试题总结**
- [Java 集合常见知识点&面试题总结(上)](./java/collection/java-collection-questions-01.md) (必看 :+1:)
- [Java 集合常见知识点&面试题总结(下)](./java/collection/java-collection-questions-02.md) (必看 :+1:)
- [Java 容器使用注意事项总结](./java/collection/java-collection-precautions-for-use.md)
**源码分析**
* [ArrayList 源码+扩容机制分析](./java/collection/arraylist-source-code.md)
* [HashMap(JDK1.8)源码+底层数据结构分析](./java/collection/hashmap-source-code.md)
* [ConcurrentHashMap 源码+底层数据结构分析](./java/collection/concurrent-hash-map-source-code.md)
### IO
* [IO 基础知识总结](./java/io/io-basis.md)
* [IO 设计模式总结](./java/io/io-design-patterns.md)
* [IO 模型详解](./java/io/io-model.md)
### 并发
**知识点/面试题总结** : (必看 :+1:)
- [Java 并发常见知识点&面试题总结(上)](./java/concurrent/java-concurrent-questions-01.md)
- [Java 并发常见知识点&面试题总结(中)](./java/concurrent/java-concurrent-questions-02.md)
- [Java 并发常见知识点&面试题总结(下)](./java/concurrent/java-concurrent-questions-03.md)
**重要知识点详解**
- [JMMJava 内存模型)详解](./java/concurrent/jmm.md)
- **线程池** [Java 线程池详解](./java/concurrent/java-thread-pool-summary.md)、[Java 线程池最佳实践](./java/concurrent/java-thread-pool-best-practices.md)
- [ThreadLocal 详解](./java/concurrent/threadlocal.md)
- [Java 并发容器总结](./java/concurrent/java-concurrent-collections.md)
- [Atomic 原子类总结](./java/concurrent/atomic-classes.md)
- [AQS 详解](./java/concurrent/aqs.md)
- [CompletableFuture入门](./java/concurrent/completablefuture-intro.md)
### JVM (必看 :+1:)
JVM 这部分内容主要参考 [JVM 虚拟机规范-Java8 ](https://docs.oracle.com/javase/specs/jvms/se8/html/index.html) 和周志明老师的[《深入理解Java虚拟机第3版](https://book.douban.com/subject/34907497/) (强烈建议阅读多遍!)。
- **[Java 内存区域](./java/jvm/memory-area.md)**
- **[JVM 垃圾回收](./java/jvm/jvm-garbage-collection.md)**
- [类文件结构](./java/jvm/class-file-structure.md)
- **[类加载过程](./java/jvm/class-loading-process.md)**
- [类加载器](./java/jvm/classloader.md)
- [【待完成】最重要的 JVM 参数总结(翻译完善了一半)](./java/jvm/jvm-parameters-intro.md)
- [【加餐】大白话带你认识 JVM](./java/jvm/jvm-intro.md)**
- [JDK 监控和故障处理工具](./java/jvm/jdk-monitoring-and-troubleshooting-tools.md)
### 新特性
- **Java 8** [Java 8 新特性总结(翻译)](./java/new-features/java8-tutorial-translate.md)、[Java8常用新特性总结](./java/new-features/java8-common-new-features.md)
- [Java 9 新特性概览](./java/new-features/java9.md)
- [Java 10 新特性概览](./java/new-features/java10.md)
- [Java 11 新特性概览](./java/new-features/java11.md)
- [Java 12~13 新特性概览](./java/new-features/java12-13.md)
- [Java 14~15 新特性概览](./java/new-features/java14-15.md)
- [Java 16 新特性概览](./java/new-features/java16.md)
![JavaGuide 官方公众号](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/gongzhonghaoxuanchuan.png)
## 计算机基础
### 操作系统
- [操作系统常见问题总结!](./cs-basics/operating-system/operating-system-basic-questions-01.md)
- [后端程序员必备的 Linux 基础知识总结](./cs-basics/operating-system/linux-intro.md)
- [Shell 编程基础知识总结](./cs-basics/operating-system/shell-intro.md)
### 网络
**知识点/面试题总结**
- [计算机网络常见知识点&面试题总结](./cs-basics/network/other-network-questions.md)
- [谢希仁老师的《计算机网络》内容总结(补充)](./cs-basics/network/computer-network-xiexiren-summary.md)
**重要知识点详解**
- [OSI 和 TCP/IP 网络分层模型详解(基础)](./cs-basics/network/osi&tcp-ip-model.md)
- [应用层常见协议总结(应用层)](./cs-basics/network/application-layer-protocol.md)
- [HTTP vs HTTPS应用层](./cs-basics/network/http&https.md)
- [HTTP 1.0 vs HTTP 1.1(应用层)](./cs-basics/network/http1.0&http1.1.md)
- [HTTP 常见状态码(应用层)](./cs-basics/network/http-status-codes.md)
- [TCP 三次握手和四次挥手(传输层)](./cs-basics/network/tcp-connection-and-disconnection.md)
- [TCP 传输可靠性保障(传输层)](./cs-basics/network/tcp-reliability-guarantee.md)
### 数据结构
**图解数据结构:**
- [线性数据结构 :数组、链表、栈、队列](./cs-basics/data-structure/linear-data-structure.md)
- [](./cs-basics/data-structure/graph.md)
- [](./cs-basics/data-structure/heap.md)
- [](./cs-basics/data-structure/tree.md) :重点关注[红黑树](./cs-basics/data-structure/red-black-tree.md)、B-B+B*树、LSM树
其他常用数据结构
- [布隆过滤器](./cs-basics/data-structure/bloom-filter.md)
### 算法
算法这部分内容非常重要,如果你不知道如何学习算法的话,可以看下我写的:
* [算法学习书籍+资源推荐](https://www.zhihu.com/question/323359308/answer/1545320858) 。
* [如何刷Leetcode?](https://www.zhihu.com/question/31092580/answer/1534887374)
**常见算法问题总结**
* [几道常见的字符串算法题总结 ](./cs-basics/algorithms/string-algorithm-problems.md)
* [几道常见的链表算法题总结 ](./cs-basics/algorithms/linkedlist-algorithm-problems.md)
* [剑指 offer 部分编程题](./cs-basics/algorithms/the-sword-refers-to-offer.md)
* [十大经典排序算法](./cs-basics/algorithms/10-classical-sorting-algorithms.md)
另外,[GeeksforGeeks]( https://www.geeksforgeeks.org/fundamentals-of-algorithms/) 这个网站总结了常见的算法 ,比较全面系统。
## 数据库
### 基础
- [数据库基础知识总结](./database/basis.md)
- [字符集详解](./database/character-set.md)
### MySQL
**知识点/面试题总结:**
- **[MySQL知识点总结](./database/mysql/mysql-questions-01.md)** (必看 :+1:)
- [一千行 MySQL 学习笔记](./database/mysql/a-thousand-lines-of-mysql-study-notes.md)
- [MySQL 高性能优化规范建议](./database/mysql/mysql-high-performance-optimization-specification-recommendations.md)
**重要知识点:**
- [MySQL数据库索引总结](./database/mysql/mysql-index.md)
- [事务隔离级别(图文详解)](./database/mysql/transaction-isolation-level.md)
- [MySQL三大日志(binlog、redo log和undo log)详解](./database/mysql/mysql-logs.md)
- [InnoDB存储引擎对MVCC的实现](./database/mysql/innodb-implementation-of-mvcc.md)
- [SQL语句在MySQL中的执行过程](./database/mysql/how-sql-executed-in-mysql.md)
- [关于数据库中如何存储时间的一点思考](./database/mysql/some-thoughts-on-database-storage-time.md)
- [MySQL中的隐式转换造成的索引失效](./database/mysql/index-invalidation-caused-by-implicit-conversion.md)
### Redis
**知识点/面试题总结** : (必看:+1: )
- [Redis 常见问题总结(上)](./database/redis/redis-questions-01.md)
- [Redis 常见问题总结(下)](./database/redis/redis-questions-02.md)
**重要知识点:**
- [3种常用的缓存读写策略详解](./database/redis/3-commonly-used-cache-read-and-write-strategies.md)
- [Redis 5 种基本数据结构详解](./database/redis/redis-data-structures-01.md)
- [Redis 3 种特殊数据结构详解](./database/redis/redis-data-structures-02.md)
- [Redis 内存碎片详解](./database/redis/redis-memory-fragmentation.md)
- [Redis 集群详解](./database/redis/redis-cluster.md)
## 搜索引擎
用于提高搜索效率,功能和浏览器搜索引擎类似。比较常见的搜索引擎是 Elasticsearch推荐 和 Solr。
![JavaGuide 官方公众号](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/gongzhonghaoxuanchuan.png)
## 开发工具
### Docker
* [Docker 基本概念解读](./tools/docker/docker-intro.md)
* [Docker从入门到上手干事](./tools/docker/docker-in-action.md)
### Git
* [Git 入门](./tools/git/git-intro.md)
* [Github 小技巧](./tools/git/github-tips.md)
## 系统设计
### 基础
- [RestFul API 简明教程](./system-design/basis/RESTfulAPI.md)
- [Java 编码命名之道](./system-design/basis/naming.md)
- [代码重构指南](./system-design/basis/refactoring.md)
- [单元测试指南](./system-design/basis/unit-test.md)
### 常用框架
#### Spring/SpringBoot (必看 :+1:)
**知识点/面试题总结** :
- [Spring 常见知识点&面试题总结](./system-design/framework/spring/spring-knowledge-and-questions-summary.md)
- [SpringBoot 常见知识点&面试题总结](./system-design/framework/spring/springboot-knowledge-and-questions-summary.md)
- [Spring/Spring Boot 常用注解总结](./system-design/framework/spring/spring-common-annotations.md)
- [SpringBoot 入门指南](https://github.com/Snailclimb/springboot-guide)
**重要知识点详解**
- [Spring 事务详解](./system-design/framework/spring/spring-transaction.md)
- [Spring 中的设计模式详解](./system-design/framework/spring/spring-design-patterns-summary.md)
- [SpringBoot 自动装配原理详解](./system-design/framework/spring/spring-boot-auto-assembly-principles.md)
#### MyBatis
[MyBatis 常见面试题总结](./system-design/framework/mybatis/mybatis-interview.md)
### 安全
#### 认证授权
- [认证授权基础概念详解](./system-design/security/basis-of-authority-certification.md)
- [JWT 基础概念详解](./system-design/security/jwt-intro.md)
- [JWT 优缺点分析以及常见问题解决方案](./system-design/security/advantages&disadvantages-of-jwt.md)
- [SSO 单点登录详解](./system-design/security/sso-intro.md)
- [权限系统设计详解](./system-design/security/design-of-authority-system.md)
- [敏感词过滤方案总结](./system-design/security/sentive-words-filter.md)
#### 数据脱敏
数据脱敏说的就是我们根据特定的规则对敏感信息数据进行变形,比如我们把手机号、身份证号某些位数使用 * 来代替。
#### 敏感词过滤
[《敏感词过滤》](./system-design/security/sentive-words-filter.md)
### 定时任务
[《Java定时任务大揭秘》](./system-design/schedule-task.md)
## 分布式
### CAP 理论和 BASE 理论
[CAP 理论和 BASE 理论解读](./distributed-system/theorem&algorithm&protocol/cap&base-theorem.md)
### Paxos 算法和 Raft 算法
- [Paxos 算法解读](./distributed-system/theorem&algorithm&protocol/paxos-algorithm.md)
- [Raft 算法解读](./distributed-system/theorem&algorithm&protocol/raft-algorithm.md)
### RPC
* [RPC 基础常见知识点&面试题总结](./distributed-system/rpc/rpc-intro.md)
* [Dubbo 常见知识点&面试题总结](./distributed-system/rpc/dubbo.md)
### API 网关
* [为什么要网关?你知道有哪些常见的网关系统?](./distributed-system/api-gateway.md)
* [百亿规模API网关服务Shepherd的设计与实现](https://tech.meituan.com/2021/05/20/shepherd-api-gateway.html)
### 分布式 id
[为什么要分布式 id ?分布式 id 生成方案有哪些?](./distributed-system/distributed-id.md)
### 分布式事务
[分布式事务](./distributed-system/distributed-transaction.md)
### 分布式协调
> 前两篇文章可能有内容重合部分,推荐都看一遍。
- [ZooKeeper 相关概念总结(入门)](./distributed-system/distributed-process-coordination/zookeeper/zookeeper-intro.md)
- [ZooKeeper 相关概念总结(进阶)](./distributed-system/distributed-process-coordination/zookeeper/zookeeper-plus.md)
- [ZooKeeper 实战](./distributed-system/distributed-process-coordination/zookeeper/zookeeper-in-action.md)
![JavaGuide 官方公众号](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/gongzhonghaoxuanchuan.png)
## 高性能
### 消息队列
消息队列在分布式系统中主要是为了解耦和削峰。相关阅读: [消息队列常见问题总结](./high-performance/message-queue/message-queue.md)。
- **RabbitMQ** : [RabbitMQ 基础知识总结](./high-performance/message-queue/rabbitmq-intro.md)、[RabbitMQ 常见面试题](./high-performance/message-queue/rabbitmq-questions.md)
- **RocketMQ** : [RocketMQ 基础知识总结](./high-performance/message-queue/rocketmq-intro.md)、[RocketMQ 常见面试题总结](./high-performance/message-queue/rocketmq-questions.md)
- **Kafka** [Kafka 常见问题总结](./high-performance/message-queue/kafka-questions-01.md)
### 读写分离&分库分表
[读写分离&分库分表](./high-performance/read-and-write-separation-and-library-subtable.md)
### 负载均衡
[负载均衡](./high-performance/load-balancing.md)
## 高可用
[高可用系统设计指南](./high-availability/high-availability-system-design.md) 。
### 限流
[何为限流?限流算法有哪些?](./high-availability/limit-request.md)
### 降级&熔断
[降级&熔断](./high-availability/fallback&circuit-breaker.md)
### 超时&重试
[超时&重试](./high-availability/timeout-and-retry.md)
### 集群
相同的服务部署多份,避免单点故障。
### 灾备设计和异地多活
**灾备** = 容灾+备份。
* **备份** 将系统所产生的的所有重要数据多备份几份。
* **容灾** 在异地建立两个完全相同的系统。当某个地方的系统突然挂掉,整个应用系统可以切换到另一个,这样系统就可以正常提供服务了。
**异地多活** 描述的是将服务部署在异地并且服务同时对外提供服务。和传统的灾备设计的最主要区别在于“多活”,即所有站点都是同时在对外提供服务的。异地多活是为了应对突发状况比如火灾、地震等自然或者人为灾害。
## Star 趋势
![](https://api.star-history.com/svg?repos=Snailclimb/JavaGuide&type=Date)
## 联系我
想要参与项目维护或者学习交流的话,欢迎添加我的微信:“**JavaGuide1996**” 备注“**Github**”即可!
![](../media/pictures/weixin.jpeg)
## 公众号
如果大家想要实时关注我更新的文章以及分享的干货的话,可以关注我的公众号“**JavaGuide**”。
**《Java 面试突击》:** 由本文档衍生的专为面试而生的《Java 面试突击》V4.0 PDF 版本[公众号](#公众号)后台回复 **"面试突击"** 即可领取!
![我的公众号](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/books167598cd2e17b8ec-20220409194658233.png)
![JavaGuide 官方公众号](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/gongzhonghaoxuanchuan.png)

View File

@ -1 +1 @@
<mxfile host="Electron" modified="2022-08-04T12:45:10.835Z" agent="5.0 (Macintosh; Intel Mac OS X 10_16_0) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/13.4.5 Chrome/83.0.4103.122 Electron/9.1.0 Safari/537.36" etag="WotcJiYPt2iKRm6Hc-5O" version="13.4.5" type="device"><diagram id="f1uOqe90rjhexKzs8PuL" name="Page-1">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</diagram></mxfile>
<mxfile host="Electron" modified="2022-08-15T11:59:41.869Z" agent="5.0 (Macintosh; Intel Mac OS X 10_16_0) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/13.4.5 Chrome/83.0.4103.122 Electron/9.1.0 Safari/537.36" etag="NlpRLCxCyId_of0qb71_" version="13.4.5" type="device"><diagram id="f1uOqe90rjhexKzs8PuL" name="Page-1">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</diagram></mxfile>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

View File

@ -1 +1 @@
<mxfile host="Electron" modified="2022-08-04T12:45:04.137Z" agent="5.0 (Macintosh; Intel Mac OS X 10_16_0) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/13.4.5 Chrome/83.0.4103.122 Electron/9.1.0 Safari/537.36" etag="bDDGEj_wTsAIpHJuuoFW" version="13.4.5" type="device"><diagram id="l-JW3fph1e97gRfsgveQ" name="Page-1">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</diagram></mxfile>
<mxfile host="Electron" modified="2022-08-15T12:00:02.066Z" agent="5.0 (Macintosh; Intel Mac OS X 10_16_0) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/13.4.5 Chrome/83.0.4103.122 Electron/9.1.0 Safari/537.36" etag="PouwFgeD38YEPBovzuWU" version="13.4.5" type="device"><diagram id="l-JW3fph1e97gRfsgveQ" name="Page-1">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</diagram></mxfile>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.9 KiB

After

Width:  |  Height:  |  Size: 9.6 KiB

View File

@ -1 +1 @@
<mxfile host="Electron" modified="2022-08-04T12:39:26.711Z" agent="5.0 (Macintosh; Intel Mac OS X 10_16_0) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/13.4.5 Chrome/83.0.4103.122 Electron/9.1.0 Safari/537.36" etag="owfxTT7KcwZ98QLN75Wc" version="13.4.5" type="device"><diagram id="XZHCjfYPnYWvLepVL7Sq" name="Page-1">7Vtdc6M2FP01PCbDhxH40XacdNpsZ9vstJu+ySAb1jJiQY7t/vpKQhjzZeME7DRhkhmjKyHQPedcXYRQjMlq+xDB0PtCXIQVXXW3inGn6LqmqYD9cMsusQyHVmJYRL4rG2WGJ/9fJI2qtK59F8W5hpQQTP0wb3RIECCH5mwwisgm32xOcP6qIVygkuHJgbhs/dt3qZeOCwyzil+Qv/DSSwNzkNSsYNpaDiX2oEs2ByZjqhiTiBCaHK22E4S591LHJOfd19Tu7yxCAW1ygr755+fz79HXUbzGy/lv85vJ+o8bO+nlBeK1HLG8WbpLXRCRdeAi3ommGOON51P0FEKH124Y6Mzm0RWW1fESUceThTkJqISU3RurTD3AC+XblyN6QRFF2wOTHM4DIitEox1rImuNgXStJJeumUl5k0Glp228A5QGtjRCSY/Fvu/MgexA+vAMfxplf05NxTaV0USZDpTxRGEC4JZ7ZcwO7oVl9Ct8gQ+c6YoOMLvH8SzKYQB+rjlLhENvYuHREWuggXCbVbKjhfidWsr4Thlq/GA0VobD/XV+sOsIRd06QQln5nRaAJNGZIkmBJOIWQISIH4PPsYFE8T+ImBFh0GJmH3MIfSZiEayYuW7Lr9MJXsyfnFaYDhDeAyd5ULYixfPGKUBWU6bKLoxFn+iTwqpT/i1bwy1yMu2eWjaeR4OVLXEQ82u4KHWFQ21Kl0n1OIua0Quu4pc37wIQTfti91b0p1k3vukVAsID4w8wns0DxAGFQDrXQEMwIUCt5BZCY1DxJjuXIjsuVOCl9UAx0azeTsgWGoh3KdT7alwb4OOULDUktORy/IHWSQR9ciCBBBPM2uBnFmbR0JC6f8fiNKdBACuKclDVUQnB12tn/mNHfVyhDCLmS/5xKfKZfLUr8QXkaQGHWAWuE9htEBUnnWYpxQ6MvUTHcVkHTmo1JFAcD+e14M6GJ6WFptBQn5I4UxgeoBOlc5iNvYUMg46y1Yp9AMuJXGOQzCGYeyLzpIWno/dR7gja5peJi2N87o+X4qv488ZwbKoU6tiOtSr0rLO5sOUQk0wZWOnPsR/sscJGCyawFuGz41I+E3wXRpCzlYUTV+YW2Npq5j2qAgBIg9C8/TcGaGUrGQhku7adypcZY7ZPxvjRL01FZONZsLKWlZm/7x5xJKlgBED+gJcBGO6QTGthP24Nk6T4RTYpt0V1loF1mfmPmZV7jMNxO01S33ewibxKAszNhHm7jkWGavH0h4UtEGehojvlfOeEdd7dV9Y3bs8pKegB50F9ooHbqnQOIRBe2JPevvoYtcbE+B6iA96sV9H7JrWUO3dBXqzV3uLah80ZsD1EG+wzvGp1V67LlZas+kuLljg2nHBKrHk9vb24woXNIboepA0eLP0qYXbmRx1o7wsemHsq1bQ+mn6tWq3GzPgaoiDfn3tWmof6s3U3tkDGahfb+vVfrbaQXvrbd0h3q+3XUnthtlQ7d1F+n7BrU21t7fg1hnillZy/7kvuXNvGF/xxhtxbnyXnYnCMy8wNcri3faw8m6XxoTCm84yKunYxCvlY0mY9DhNw1AtovLZrL3X7W8Dr0Go/uj7RIDacFvgsKsJ06oPmm1sx3okDsRfGFKffVvWHtVrbcuyWligPgU0b9N0nnwfSB+NGR0IXretcpZkXpQHVcvWrfMAwBV3djCLxU9PihwptMIsUBEbNOOipCivUpczq8Ad8c8WMp833fiHtj79nmVFrPR8UJMlSLyQ5ke1bj6ZvRw4sUpYqe2NewrtwgZ/MDTzXdRsBTzdkTrMd1SzObGtPYVW/X7st8WDv3iH/XSQU75tnZ4OqtK/7oTfwnp4Pfqstg/9eQKk+wSOhH7rkgSwq5ZI+8h/NPLnIdx/6nV+5M93tP9o4EKR3656AG/j0W+JGu9FfR+qbyOnKz7vGVd+3rNbWA2tRDfp8H8V1dsI3OBi+LJi9ultIvbsC2Zj+h8=</diagram></mxfile>
<mxfile host="Electron" modified="2022-08-15T12:06:49.862Z" agent="5.0 (Macintosh; Intel Mac OS X 10_16_0) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/13.4.5 Chrome/83.0.4103.122 Electron/9.1.0 Safari/537.36" etag="pdB2jmz768lZZbvyAUVU" version="13.4.5" type="device"><diagram id="XZHCjfYPnYWvLepVL7Sq" name="Page-1">7Vtbc6M2FP41PCZjwGD86FvS2c2222an3fSlI4Ns2MgSK+Rbf30lIcxNjkmM7XTXY88YHQkB5/u+c3TBhj1abO4piMNPJIDIsDrBxrDHhmWZZsflP8KyTS39fi81zGkUqEa54TH6FypjR1mXUQCTUkNGCGJRXDb6BGPos5INUErW5WYzgspXjcEc1gyPPkB1619RwMLsudx+XvELjOZhdmnX6aY1C5C1Vo+ShCAg64LJnhj2iBLC0qPFZgSR8F7mmPS8uz21uzujELMmJ1jrv78//Uo/D5Ilep59nN2Mlr/feGkvK4CW6onVzbJt5gJKljiAohPTsIfrMGLwMQa+qF1z0LktZAukqpNnyPxQFWYEMwUpvzdemXlAFGYRQiOCCJVXsWcz6Pq+aMQoeYaFmqDXn3bEGfUHVj5YQcrgpmBSDriHZAEZ3fImqtbuKjAUHS3TScvrHFwraxMWcLV7qiFQhJrv+s5dzg+U11+BgF1HYOIYnmMMRsakawxHBpeMsNwZQ35wJy2DD2AF7oU2DMtF/B6HU1pCzf2+FLySENwkEoMBb2C68Sav5Edz+TvpGcOx0TfFwWBo9Pu763zj15EavPVxjRnc6awCfwk8TDCsIK1MAEVzzIs+hxJy+1BAGHHZDVTFIgoCcRkt33JGClogMIVoCPznubRXL55z0HRVuUCuofzIPhlgEcGq0xKPS7xtgYVOv8zCbsa4AgtNT8PCLCq2TkJTFwdSYgmHNaKWp6PWl5BCEGR98XtLu1O8e5+EagHhrl1GeIdmAWFXA7B1KoB7nZqzYcAznSoSykIyJxigSW6tuCVv80BIrPD5BhnbKn2BJSNl9KriK6lqr5vFjb3oZAoR1+qqnKJ1LlOnfiaR5LACp9cpg+PYldjOAJ1Dps4qZtRKR451oKOELKkPax1JBHfPcwSo5tGglhB5A8IcO7r9qjqThSdRuHWy4nhTrBxvs+xfYcZeMqQufMEJTucyrLGykewB1rQGtnWmoZrEoxZPK8O1AEBvph2uub4Hp7N2wmhNqZ2GibJ3sjiqGa61mCgfCE9ZnzhSP3vCtDRDovMmTPd4oLWD7QLQ3AQWwp14msif/xfsLwaQFjjhVobJjlWfrJn2WUnROxyDIQ4GYuEh93nTARHcROxrnj156alQkydSUcjy6NsHUQUnOhofZrYjs6ZnVjCsRuY9Q6TDHXUqHZ06/fZPFA/+lB1anav4S+Kv4a0Rf++c2u/qCFCBJglBLA4ZmKKK8nUeTThnM78Jn/rcjSDCAhp5jk8QAnESyc7SFmGEggewJUuWXSYrDcuDv9eP1942WXtFiq8OoHuawZylg7RvnQjTLMg1wZQ/O4sA+gP6DOB5E3jr8AWUxF9knFKGWIQrSCcr7tbEqC+MKuEyORuTi11wlp07JYyRhSpQ5a5dp9JVzpB/+TOOREpx+NOMeNnMy/wrmlM2IpgTA0QSXAgStoYJ08L+sjYOk+EQ2I53KqxNDdavDOCOLoBPsLy9ZsH7GDbJHQ6Qs4lwd8+QHGmEPHBD3AZ5GiK+U857RrzBjPmq7lbVvS1Degh691TJ2tk/TU9igNsTe9rbjy52qzEBLod49yr2y4jdNBuq/XSB3rmqvUW1dxsz4HKI61bnrmrP1b53Zl9bAzhdXMiWUC/Hkvpy3e3t7Y8rXLcxRJeDpMELRz+1cE8mR8vuXlqO+5dQr2n69Wr3GjPgHIjjfx63+Lf5BzxaTZzV2AMfF0+6d9uqcLzDLeuaRzULn423rHcznnNsWWtBaDAxusSeVWWDqpGPL7NnZdsVaN66Z1Wb/ba3Z6VFfv+06Lplpd+yOkr6Nbi9821ZafHX7Va3/gpDx7yy4KW3FnQsaOutBV7M/z+QRo38bxj25D8=</diagram></mxfile>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

View File

@ -270,11 +270,11 @@ public class SynchronizedDemo {
在执行`monitorenter`时,会尝试获取对象的锁,如果锁的计数器为 0 则表示锁可以被获取,获取后将锁计数器设为 1 也就是加 1。
![执行 monitorenter 获取锁](./images/interview-questions/synchronized-get-lock-code-block.jpg)
![执行 monitorenter 获取锁](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/java/concurrent/synchronized-get-lock-code-block.png)
对象锁的的拥有者线程才可以执行 `monitorexit` 指令来释放锁。在执行 `monitorexit` 指令后,将锁计数器设为 0表明锁被释放其他线程可以尝试获取锁。
![执行 monitorexit 释放锁](./images/interview-questions/synchronized-release-lock-block.jpg)
![执行 monitorexit 释放锁](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/java/concurrent/synchronized-release-lock-block.png)
如果获取对象锁失败,那当前线程就要阻塞等待,直到锁被另外一个线程释放为止。
@ -483,11 +483,11 @@ ThreadLocalMap(ThreadLocal<?> firstKey, Object firstValue) {
`ThreadLocal` 数据结构如下图所示:
![threadlocal-data-structure](./images/interview-questions/threadlocal-data-structure.jpg)
![ThreadLocal 数据结构](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/java/concurrent/threadlocal-data-structure.png)
`ThreadLocalMap``ThreadLocal`的静态内部类。
![ThreadLocal内部类](./images/interview-questions/thread-local-inner-class.png)
![ThreadLocal内部类](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/java/concurrent/thread-local-inner-class.png)
### ThreadLocal 内存泄露问题是怎么导致的?

View File

@ -16,19 +16,31 @@ footer: |-
<a href="https://beian.miit.gov.cn/" target="_blank">鄂ICP备2020015769号-1</a> | 主题: <a href="https://vuepress-theme-hope.github.io/v2/" target="_blank">VuePress Theme Hope</a>
---
## 网站概览
<div align="center">
<p>
<a href="https://javaguide.cn/"><img src="https://img.shields.io/badge/阅读-read-brightgreen.svg" alt="阅读" /></a>
<img src="https://img.shields.io/github/stars/Snailclimb/JavaGuide" alt="stars" />
<img src="https://img.shields.io/github/forks/Snailclimb/JavaGuide" alt="forks" />
<img src="https://img.shields.io/github/issues/Snailclimb/JavaGuide" alt="issues" />
</p>
<p>
<a href="https://github.com/Snailclimb/JavaGuide">Github</a> |
<a href="https://gitee.com/SnailClimb/JavaGuide">Gitee</a>
</p>
</div>
- [Java 面试指南](./home.md) :一份涵盖大部分 Java 程序员所需要掌握的核心知识。准备 Java 面试,首选 JavaGuide
- [Java开源项目精选](./open-source-project/readme.md) :收集整理了 Gitee/Github 上非常棒的 Java 开源项目集合。Java 开发必备!
- [Java技术文章精选](/high-quality-technical-articles/) : 精选一些和 Java 相关的优质技术文章,每一篇都值得你阅读 3 遍以上!
- [Java书单精选](/books/) : Java 后端开发值得一读的一些书籍。
- [走进作者](/about-the-author/) : 个人经历、闲聊杂谈。
## 关于网站
## 必看专栏
- [项目介绍](./javaguide/intro.md)
- [网站历史](./javaguide/history.md)
- [贡献指南](./javaguide/contribution-guideline.md)
- [常见问题](./javaguide/faq.md)
- **[《Java 面试指北》](./zhuanlan/java-mian-shi-zhi-bei.md)** : 与 JavaGuide 开源版的内容互补!
- **[《手写 RPC 框架》](./zhuanlan/handwritten-rpc-framework.md)** : 从零开始基于 Netty+Kyro+Zookeeper 实现一个简易的 RPC 框架。
- **[《Java 必读源码系列》](./zhuanlan/source-code-reading.md)** :目前已经整理了 Dubbo 2.6.x 、Netty 4.x、SpringBoot 2.1 等框架/中间件的源码
## 关于作者
- [我曾经也是网瘾少年](./about-the-author/internet-addiction-teenager.md)
- [害,毕业三年了!](./about-the-author/my-college-life.md)
- [我的知识星球快 3 岁了!](./about-the-author/zhishixingqiu-two-years.md)
## PDF
@ -40,6 +52,12 @@ footer: |-
## 公众号
最新更新会第一时间同步在公众号,强烈推荐大家关注一波!另外,公众号上有很多干货不会同步在线阅读网站。
最新更新会第一时间同步在公众号,推荐关注!另外,公众号上有很多干货不会同步在线阅读网站。
![我的公众号](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/books167598cd2e17b8ec.png)
<div style="text-align:center">
<p>
<a href="https://www.yuque.com/./share/8a30ffb5-83f3-40f9-baf9-38de68b906dc">
<img src="https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/gongzhonghaoxuanchuan.png" style="margin: 0 auto;" />
</a>
</p>
</div>

View File

@ -0,0 +1,209 @@
---
title: 权限系统设计详解
category: 系统设计
tag:
- 安全
head:
- - meta
- name: keywords
content: 权限系统设计,RBAC,ABAC
- - meta
- name: description
content: 基于角色的访问控制Role-Based Access Control简称 RBAC指的是通过用户的角色Role授权其相关权限实现了灵活的访问控制相比直接授予用户权限要更加简单、高效、可扩展。
---
> 作者:转转技术团队
>
> 原文https://mp.weixin.qq.com/s/ONMuELjdHYa0yQceTj01Iw
## 老权限系统的问题与现状
转转公司在过去并没有一个统一的权限管理系统,权限管理由各业务自行研发或是使用其他业务的权限系统,权限管理的不统一带来了不少问题:
1. 各业务重复造轮子,维护成本高
2. 各系统只解决部分场景问题,方案不够通用,新项目选型时没有可靠的权限管理方案
3. 缺乏统一的日志管理与审批流程,在授权信息追溯上十分困难
基于上述问题,去年底公司启动建设转转统一权限系统,目标是开发一套灵活、易用、安全的权限管理系统,供各业务使用。
## 业界权限系统的设计方式
目前业界主流的权限模型有两种,下面分别介绍下:
- **基于角色的访问控制RBAC**
- **基于属性的访问控制ABAC**
### RBAC 模型
**基于角色的访问控制Role-Based Access Control简称 RBAC** 指的是通过用户的角色Role授权其相关权限实现了灵活的访问控制相比直接授予用户权限要更加简单、高效、可扩展。
一个用户可以拥有若干角色,每一个角色有可以被分配若干权限这样,就构造成“用户-角色-权限” 的授权模型。在这种模型中,用户与角色、角色与权限之间构成了多对多的关系。
用一个图来描述如下:
![RBAC 权限模型示意图](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/system-design/security/design-of-authority-system/rbac.png)
当使用 `RBAC模型` 时,通过分析用户的实际情况,基于共同的职责和需求,授予他们不同角色。这种 `用户 -> 角色 -> 权限` 间的关系,让我们可以不用再单独管理单个用户权限,用户从授予的角色里面获取所需的权限。
以一个简单的场景Gitlab 的权限系统)为例,用户系统中有 `Admin``Maintainer``Operator` 三种角色,这三种角色分别具备不同的权限,比如只有 `Admin` 具备创建代码仓库、删除代码仓库的权限,其他的角色都不具备。我们授予某个用户 `Admin` 这个角色,他就具备了 **创建代码仓库****删除代码仓库** 这两个权限。
通过 `RBAC模型` ,当存在多个用户拥有相同权限时,我们只需要创建好拥有该权限的角色,然后给不同的用户分配不同的角色,后续只需要修改角色的权限,就能自动修改角色内所有用户的权限。
### ABAC 模型
**基于属性的访问控制Attribute-Based Access Control简称 ABAC** 是一种比 `RBAC模型` 更加灵活的授权模型,它的原理是通过各种属性来动态判断一个操作是否可以被允许。这个模型在云系统中使用的比较多,比如 AWS阿里云等。
考虑下面这些场景的权限控制:
1. 授权某个人具体某本书的编辑权限
2. 当一个文档的所属部门跟用户的部门相同时,用户可以访问这个文档
3. 当用户是一个文档的拥有者并且文档的状态是草稿,用户可以编辑这个文档
4. 早上九点前禁止 A 部门的人访问 B 系统
5. 在除了上海以外的地方禁止以管理员身份访问 A 系统
6. 用户对 2022-06-07 之前创建的订单有操作权限
可以发现上述的场景通过 `RBAC模型` 很难去实现,因为 `RBAC模型` 仅仅描述了用户可以做什么操作,但是操作的条件,以及操作的数据,`RBAC模型` 本身是没有这些限制的。但这恰恰是 `ABAC模型` 的长处,`ABAC模型` 的思想是基于用户、访问的数据的属性、以及各种环境因素去动态计算用户是否有权限进行操作。
#### ABAC 模型的原理
`ABAC模型` 中,一个操作是否被允许是基于对象、资源、操作和环境信息共同动态计算决定的。
- **对象**:对象是当前请求访问资源的用户。用户的属性包括 ID个人资源角色部门和组织成员身份等
- **资源**:资源是当前用户要访问的资产或对象,例如文件,数据,服务器,甚至 API
- **操作**:操作是用户试图对资源进行的操作。常见的操作包括“读取”,“写入”,“编辑”,“复制”和“删除”
- **环境**:环境是每个访问请求的上下文。环境属性包含访问的时间和位置,对象的设备,通信协议和加密强度等
`ABAC模型` 的决策语句的执行过程中,决策引擎会根据定义好的决策语句,结合对象、资源、操作、环境等因素动态计算出决策结果。每当发生访问请求时,`ABAC模型` 决策系统都会分析属性值是否与已建立的策略匹配。如果有匹配的策略,访问请求就会被通过。
## 新权限系统的设计思想
结合转转的业务现状,`RBAC模型` 满足了转转绝大部分业务场景,并且开发成本远低于 `ABAC模型` 的权限系统,所以新权限系统选择了基于 `RBAC模型` 来实现。对于实在无法满足的业务系统,我们选择了暂时性不支持,这样可以保障新权限系统的快速落地,更快的让业务使用起来。
标准的 `RBAC模型` 是完全遵守 `用户 -> 角色 -> 权限` 这个链路的,也就是用户的权限完全由他所拥有的角色来控制,但是这样会有一个缺点,就是给用户加权限必须新增一个角色,导致实际操作起来效率比较低。所以我们在 `RBAC模型` 的基础上,新增了给用户直接增加权限的能力,也就是说既可以给用户添加角色,也可以给用户直接添加权限。最终用户的权限是由拥有的角色和权限点组合而成。
**新权限系统的权限模型**:用户最终权限 = 用户拥有的角色带来的权限 + 用户独立配置的权限,两者取并集。
新权限系统方案如下图
![新权限系统方案](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/system-design/security/design-of-authority-system/new-authority-system-design.png)
- 首先,将集团所有的用户(包括外部用户),通过 **统一登录与注册** 功能实现了统一管理,同时与公司的组织架构信息模块打通,实现了同一个人员在所有系统中信息的一致,这也为后续基于组织架构进行权限管理提供了可行性。
- 其次,因为新权限系统需要服务集团所有业务,所以需要支持多系统权限管理。用户进行权限管理前,需要先选择相应的系统,然后配置该系统的 **菜单权限****数据权限** 信息建立好系统的各个权限点。_PS菜单权限和数据权限的具体说明下文会详细介绍。_
- 最后,创建该系统下的不同角色,给不同角色配置好权限点。比如店长角色,拥有店员操作权限、本店数据查看权限等,配置好这个角色后,后续只需要给店长增加这个角色,就可以让他拥有对应的权限。
完成上述配置后,就可以进行用户的权限管理了。有两种方式可以给用户加权限:
1. 先选用户,然后添加权限。该方式可以给用户添加任意角色或是菜单/数据权限点。
2. 先选择角色,然后关联用户。该方式只可给用户添加角色,不能单独添加菜单/数据权限点。
这两种方式的具体设计方案,后文会详细说明。
### 权限系统自身的权限管理
对于权限系统来说,首先需要设计好系统自身的权限管理,也就是需要管理好 ”谁可以进入权限系统,谁可以管理其他系统的权限“,对于权限系统自身的用户,会分为三类:
1. **超级管理员**:拥有权限系统的全部操作权限,可以进行系统自身的任何操作,也可以管理接入权限的应用系统的管理操作。
2. **权限操作用户**:拥有至少一个已接入的应用系统的超级管理员角色的用户。该用户能进行的操作限定在所拥有的应用系统权限范围内。权限操作用户是一种身份,无需分配,而是根据规则自动获得的。
3. **普通用户**:普通用户也可以认为是一种身份,除去上述 2 类人,其余的都为普通用户。他们只能申请接入系统以及访问权限申请页面。
### 权限类型的定义
新权限系统中,我们把权限分为两大类,分别是
- **菜单功能权限**:包括系统的目录导航、菜单的访问权限,以及按钮和 API 操作的权限
- **数据权限**:包括定义数据的查询范围权限,在不同系统中,通常叫做 “组织”、”站点“等,在新权限系统中,统一称作 ”组织“ 来管理数据权限
### 默认角色的分类
每个系统中设计了三个默认角色,用来满足基本的权限管理需求,分别如下:
- **超级管理员**:该角色拥有该系统的全部权限,可以修改系统的角色权限等配置,可以给其他用户授权。
- **系统管理员**:该角色拥有给其他用户授权以及修改系统的角色权限等配置能力,但角色本身不具有任何权限。
- **授权管理员**:该角色拥有给其他用户授权的能力。但是授权的范围不超出自己所拥有的权限。
> 举个栗子:授权管理员 A 可以给 B 用户添加权限,但添加的范围 小于等于 A 用户已拥有的权限。
经过这么区分,把 **拥有权限****拥有授权能力** ,这两部分给分隔开来,可以满足所有的权限控制的场景。
## 新权限系统的核心模块设计
上面介绍了新权限系统的整体设计思想,接下来分别介绍下核心模块的设计
### 系统/菜单/数据权限管理
把一个新系统接入权限系统有下列步骤:
1. 创建系统
2. 配置菜单功能权限
3. 配置数据权限(可选)
4. 创建系统的角色
其中1、2、3 的步骤,都是在系统管理模块完成,具体流程如下图:
![系统接入流程图](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/system-design/security/design-of-authority-system/new-authority-system-design-access-flow-chart.png)
用户可以对系统的基本信息进行增删改查的操作,不同系统之间通过 `系统编码` 作为唯一区分。同时 `系统编码` 也会用作于菜单和数据权限编码的前缀,通过这样的设计保证权限编码全局唯一性。
例如系统的编码为 `test_online`,那么该系统的菜单编码格式便为 `test_online:m_xxx`
系统管理界面设计如下:
![系统管理界面设计](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/system-design/security/design-of-authority-system/new-authority-system-management-interface.png)
#### 菜单管理
新权限系统首先对菜单进行了分类,分别是 `目录``菜单``操作`,示意如下图
![菜单管理界面](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/system-design/security/design-of-authority-system/new-authority-system-menu.png)
它们分别代表的含义是:
- **目录** :指的是应用系统中最顶部的一级目录,通常在系统 Logo 的右边
- **菜单** :指的是应用系统左侧的多层级菜单,通常在系统 Logo 的下面,也是最常用的菜单结构
- **操作** :指页面中的按钮、接口等一系列可以定义为操作或页面元素的部分。
菜单管理界面设计如下:
![菜单管理界面设计](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/system-design/security/design-of-authority-system/new-authority-system-menu-management-interface.png)
菜单权限数据的使用,也提供两种方式:
- **动态菜单模式** :这种模式下,菜单的增删完全由权限系统接管。也就是说在权限系统增加菜单,应用系统会同步增加。这种模式好处是修改菜单无需项目上线。
- **静态菜单模式** :菜单的增删由应用系统的前端控制,权限系统只控制访问权限。这种模式下,权限系统只能标识出用户是否拥有当前菜单的权限,而具体的显示控制是由前端根据权限数据来决定。
### 角色与用户管理
角色与用户管理都是可以直接改变用户权限的核心模块,整个设计思路如下图:
![角色与用户管理模块设计](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/system-design/security/design-of-authority-system/role-and-user-management.png)
这个模块设计重点是需要考虑到批量操作。无论是通过角色关联用户,还是给用户批量增加/删除/重置权限,批量操作的场景都是系统需要设计好的。
### 权限申请
除了给其他用户添加权限外,新权限系统同时支持了用户自主申请权限。这个模块除了常规的审批流(申请、审批、查看)等,有一个比较特别的功能,就是如何让用户能选对自己要的权限。所以在该模块的设计上,除了直接选择角色外,还支持通过菜单/数据权限点,反向选择角色,如下图:
![权限申请界面](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/system-design/security/design-of-authority-system/permission-application.png)
### 操作日志
系统操作日志会分为两大类:
1. **操作流水日志** :用户可看、可查的关键操作日志
2. **服务 Log 日志** :系统服务运行过程中产生的 Log 日志 其中,服务 Log 日志信息量大于操作流水日志,但是不方便搜索查看。所以权限系统需要提供操作流水日志功能。
在新权限系统中,用户所有的操作可以分为三类,分别为新增、更新、删除。所有的模块也可枚举,例如用户管理、角色管理、菜单管理等。明确这些信息后,那么一条日志就可以抽象为:什么人(Who)在什么时间(When)对哪些人(Target)的那些模块做了哪些操作。
这样把所有的记录都入库,就可以方便的进行日志的查看和筛选了。
## 总结与展望
至此,新权限系统的核心设计思路与模块都已介绍完成,新系统在转转内部有大量的业务接入使用,权限管理相比以前方便了许多。权限系统作为每家公司的一个基础系统,灵活且完备的设计可以助力日后业务的发展更加高效。
后续两篇:
- [转转统一权限系统的设计与实现(后端实现篇)](https://mp.weixin.qq.com/s/hFTDckfxhSnoM_McP18Vkg)
- [转转统一权限系统的设计与实现(前端实现篇)](https://mp.weixin.qq.com/s/a_P4JAwxgunhfmJvpBnWYA)
## 参考
- 选择合适的权限模型https://docs.authing.cn/v2/guides/access-control/choose-the-right-access-control-model.html

View File

@ -0,0 +1 @@
<mxfile host="Electron" modified="2022-08-15T07:03:43.068Z" agent="5.0 (Macintosh; Intel Mac OS X 10_16_0) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/13.4.5 Chrome/83.0.4103.122 Electron/9.1.0 Safari/537.36" etag="KLkHKTVkmBkVq4XAEGTN" version="13.4.5" type="device"><diagram id="shtR_Ouq12X2zmqGwhcZ" name="Page-1">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=</diagram></mxfile>

View File

@ -0,0 +1 @@
<mxfile host="Electron" modified="2022-08-15T06:08:02.303Z" agent="5.0 (Macintosh; Intel Mac OS X 10_16_0) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/13.4.5 Chrome/83.0.4103.122 Electron/9.1.0 Safari/537.36" etag="fv_Bcj_1kT-zkIlay6BX" version="13.4.5" type="device"><diagram id="j5vJatVTeJ-kLMOkHExX" name="Page-1">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=</diagram></mxfile>

View File

@ -1,5 +1,5 @@
---
title: 敏感词过滤
title: 敏感词过滤方案总结
category: 系统设计
tag:
- 安全

View File

@ -1,5 +1,5 @@
---
title: SSO 单点登录
title: SSO 单点登录详解
category: 系统设计
tag:
- 安全

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB