# CS-Wiki
**Repository Path**: zhaoji_zj_admin/CS-Wiki
## Basic Information
- **Project Name**: CS-Wiki
- **Description**: 🎉 致力打造完善的 Java 后端知识体系,不仅仅帮助各位小伙伴快速且系统的准备面试,更指引学习的方向
- **Primary Language**: Java
- **License**: GPL-3.0
- **Default Branch**: master
- **Homepage**: https://veal98.gitee.io/cs-wiki
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 553
- **Created**: 2021-07-12
- **Last Updated**: 2021-07-12
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
[](https://gitee.com/veal98/CS-Wiki/stargazers)
[](https://gitee.com/veal98/CS-Wiki/members)
[](https://github.com/Veal98/CS-Wiki/stargazers)
[](https://github.com/Veal98/CS-Wiki/network)
💡 **「关于」**
- 🎓 博主东南大学研一在读,携程 Java 后台开发暑期实习生,热爱健身与篮球。本仓库于我考研时建立并维护至今两年有已,旨在用于记录学习过程中的所思所想,并力图构建一个完善的知识体系
- 🙏 由于本人水平有限,仓库中的知识点来自本人原创、视频、书籍、博客等,非原创均已标明出处(或在参考资料中列出),如有遗漏或发现文章错误及排版问题,请提 issue 或 PR
- ⚡ **[Gitee 在线阅读(国内访问速度较快)](https://veal98.gitee.io/cs-wiki)** | [Gitee 仓库地址(推荐)](https://gitee.com/veal98/CS-Wiki)
- 🔮 [Github 在线阅读](https://veal98.github.io/CS-Wiki/) | [Github 仓库地址](https://github.com/Veal98/CS-Wiki)
- 💬 我的公众号:**飞天小牛肉**,2020/12/29 日开通,专注于分享计算机基础(数据结构 + 算法 + 计算机网络 + 数据库 + 操作系统 + Linux)和 Java 相关技术栈的原创技术好文,**让大家可以快速掌握重点知识,有的放矢**。下方扫码关注第一时间获取干货更新:
- 🦄 另外,如果各位小伙伴春招秋招没有拿得出手的项目的话,可以参考这个 [「开源社区系统 Echo」Gitee 官方推荐项目,目前已累计 900+ star](https://gitee.com/veal98/Echo),基于 SpringBoot + MyBatis + MySQL + Redis + Kafka + Elasticsearch + Spring Security + ... 并提供详细的开发文档和配套教程。公众号后台回复 `Echo` 可以获取配套手把手教程,目前尚在更新中
## 📑 计算机基础
---
### 数据结构与算法
> [!TIP]
> 汇总分类左神的《程序员代码面试指南 — 第二版》、《LeetCode》、《剑指 Offer》中的题目,保持每天 1 ~ 3 题的频率,冲冲冲!
- [Code Interview Guide · 第 1 篇「栈和队列」](计算机基础/算法/程序员代码面试指南/1-栈和队列.md)
- [Code Interview Guide · 第 2 篇「链表问题」](计算机基础/算法/程序员代码面试指南/2-链表问题.md)
- [Code Interview Guide · 第 3 篇「二叉树问题」](计算机基础/算法/程序员代码面试指南/3-二叉树问题.md)
- [Code Interview Guide · 第 4 篇「递归和动态规划」](计算机基础/算法/程序员代码面试指南/4-递归和动态规划.md)
- [Code Interview Guide · 第 5 篇「字符串问题」](计算机基础/算法/程序员代码面试指南/5-字符串问题.md)
### 计算机网络
- [计算机网络那些事儿 · 第 1 篇「一文读懂两台计算机之间是如何通信的」](计算机基础/计算机网络/1-一文读懂两台计算机之间是如何通信的.md)
- [计算机网络那些事儿 · 第 2 篇「网络基础扫盲 | 数据传输方式和交换方式」](计算机基础/计算机网络/5-数据传输方式和交换方式.md)
- [计算机网络那些事儿 · 第 3 篇「别再恐惧 IP 协议,万字长文 | 多图预警」](计算机基础/计算机网络/10-别再恐惧IP协议.md)
- [计算机网络那些事儿 · 第 4 篇「5 幅图拿下 ARP 协议」](计算机基础/计算机网络/12-几幅图拿下ARP协议.md)
- [计算机网络那些事儿 · 第 5 篇「所谓 ICMP,不过将军与士卒而已」](计算机基础/计算机网络/15-所谓ICMP-不过将军与士卒而已.md)
- [计算机网络那些事儿 · 第 6 篇「关于 TCP 三次握手和四次挥手,满分回答在此」](计算机基础/计算机网络/20-TCP三次握手四次挥手.md)
- [计算机网络那些事儿 · 第 7 篇「原来 TCP 为了保证可靠传输做了这么多」](计算机基础/计算机网络/30-原来TCP为了保证可靠传输做了这么多.md)
- [计算机网络那些事儿 · 第 8 篇「超详细 DNS 协议解析」](计算机基础/计算机网络/40-超详细DNS协议解析.md)
- [计算机网络那些事儿 · 第 9 篇「为什么 DNS 协议使用 UDP?只使用了 UDP 吗?」](计算机基础/计算机网络/42-为什么DNS协议使用UDP-真的只使用了UDP吗.md)
- [计算机网络那些事儿 · 第 10 篇「HTTP 协议的前世今生」](计算机基础/计算机网络/50-HTTP协议的前世今生.md)
- [计算机网络那些事儿 · 第 11 篇「从崩溃的选课系统,论为什么更安全的 HTTPS 协议没有被全面采用」](计算机基础/计算机网络/60-从崩溃的选课系统-论为什么更安全的HTTPS协议没有被全面采用.md)
- [计算机网络那些事儿 · 第 12 篇「经典面试题:在浏览器地址栏输入一个 URL 后回车,背后发生了什么」](计算机基础/计算机网络/70-经典面试题-在地址栏输入一个URL后回车-背后发生了什么.md)
- [计算机网络那些事儿 · 第 13 篇「DHCP:IP 并非与生俱来」](计算机基础/计算机网络/80-DHCP-IP并非与生俱来.md)
### 操作系统
- [操作系统那些事儿 · 第 1 篇「了解操作系统的那些事儿,从这篇文章开始」](计算机基础/操作系统/1-了解操作系统的那些事儿-从这篇文章开始.md)
- [操作系统那些事儿 · 第 2 篇「五分钟扫盲:进程与线程基础必知」](计算机基础/操作系统/2-五分钟扫盲-进程与线程基础必知.md)
- [操作系统那些事儿 · 第 3 篇「图解经典的进程调度算法」](计算机基础/操作系统/3-图解经典的进程调度算法.md)
- [操作系统那些事儿 · 第 4 篇「看完了进程同步与互斥机制,我终于彻底理解了 PV 操作」](计算机基础/操作系统/4-看完了进程同步与互斥机制-我终于彻底理解了PV操作.md)
- [操作系统那些事儿 · 第 5 篇「高频考点,六大进程通信机制总结」](计算机基础/操作系统/5-高频考点-六大进程通信机制总结.md)
- [操作系统那些事儿 · 第 6 篇「五分钟扫盲:程序在计算机中是如何运行起来的」](计算机基础/操作系统/6-五分钟扫盲-程序在计算机中是如何运行起来的.md)
- [操作系统那些事儿 · 第 7 篇「你看到的所有地址都不是真的 | 虚拟地址与物理地址」](计算机基础/操作系统/7-地址空间-虚拟地址与物理地址.md)
- [操作系统那些事儿 · 第 8 篇「内存管理两部曲之物理内存管理」](计算机基础/操作系统/8-内存管理两部曲之物理内存管理.md)
- [操作系统那些事儿 · 第 9 篇「内存管理两部曲之虚拟内存管理」](计算机基础/操作系统/9-内存管理两部曲之虚拟内存管理.md)
### 数据库 MySQL
- [MySQL 必知必会 · 第 1 篇「一文读懂一条 SQL 查询语句是如何执行的」](计算机基础/数据库MySQL/1-一条SQL查询语句是如何执行的.md)
- [MySQL 必知必会 · 第 2 篇「携程二面:讲讲 MySQL 中的 WAL 策略和 CheckPoint 技术」](计算机基础/数据库MySQL/2-携程二面-讲讲MySQL中的WAL策略和CheckPoint技术.md)
## 🍵 Java
---
### 基础
- [Java 小白成长记 · 基础 · 第 1 篇「万物皆对象」](Java/基础/1-万物皆对象.md)
- [Java 小白成长记 · 基础 · 第 2 篇「Hello World」](Java/基础/2-HelloWorld.md)
- [Java 小白成长记 · 基础 · 第 3 篇「运算符与控制流」](Java/基础/3-运算符与控制流.md)
- [Java 小白成长记 · 基础 · 第 4 篇「对象的初始化和清理」](Java/基础/4-对象的初始化和清理.md)
- [Java 小白成长记 · 基础 · 第 5 篇「Java 是如何实现封装的 — 图解访问修饰符」](Java/基础/5-Java是如何实现封装的-图解访问修饰符.md)
- [Java 小白成长记 · 基础 · 第 6 篇「为什么说要慎用继承,优先使用组合」](Java/基础/6-为什么说要慎用继承-优先使用组合.md)
- [Java 小白成长记 · 基础 · 第 7 篇「区分重载和重写,轻松掌握 Java 多态」](Java/基础/7-区分重载和重写-轻松掌握Java多态.md)
- [Java 小白成长记 · 基础 · 第 8 篇「如何理解 Java 中接口存在的意义」](Java/基础/8-如何理解Java中接口存在的意义.md)
- [Java 小白成长记 · 基础 · 第 9 篇「面试常备,字符串三剑客 String、StringBuffer、StringBuilder」](Java/基础/9-面试常备-字符串三剑客String-StringBuffer-StringBuilder.md)
- [Java 小白成长记 · 基础 · 第 10 篇「String 的不可变真的是因为 final 吗?」](Java/基础/10-String的不可变真的是因为final吗.md)
- [Java 小白成长记 · 基础 · 第 11 篇「读懂框架设计的灵魂 — Java 反射机制」](Java/基础/11-读懂框架设计的灵魂-Java反射机制.md)
- [Java 小白成长记 · 基础 · 第 12 篇「从头捋了一遍 Java 代理机制,收获颇丰」](Java/基础/12-从头捋了一遍Java代理机制-收获颇丰.md)
- [Java 小白成长记 · 基础 · 第 13 篇「深入理解 Java 数组」](Java/基础/13-深入理解Java数组.md)
- [Java 小白成长记 · 基础 · 第 14 篇「Java 中为什么设计了包装类」](Java/基础/14-Java中为什么设计了包装类.md)
### 集合
- [Java 小白成长记 · 集合 · 第 1 篇「Java 集合框架体系总览」](Java/集合/1-Java集合框架体系总览.md)
- [Java 小白成长记 · 集合 · 第 2 篇「送分题,ArrayList 的扩容机制了解吗?」](Java/集合/2-ArrayList的扩容机制了解吗.md)
- [Java 小白成长记 · 集合 · 第 3 篇「HashMap 这套八股,不得背个十来遍?」](Java/集合/3-HashMap这套八股-不得背个十来遍.md)
- [Java 小白成长记 · 集合 · 第 4 篇「Hashtable 渐渐被人们遗忘了,只有面试官还记得,感动」](Java/集合/4-Hashtable渐渐被人们遗忘了-只有面试官还记得-感动.md)
### 并发
- [Java 小白成长记 · 并发 · 第 1 篇「【重磅开篇】形成完善的多线程世界观」](Java/并发/10-重磅开篇-形成完善的多线程世界观.md)
- [Java 小白成长记 · 并发 · 第 2 篇「Java 线程和操作系统的线程有啥区别?」](Java/并发/20-Java线程和操作系统的线程有啥区别.md)
- [Java 小白成长记 · 并发 · 第 3 篇「30 张图,以 DEBUG 方式深入理解线程的底层运行原理」](Java/并发/30-以DEBUG方式深入理解线程的底层运行原理.md)
- [Java 小白成长记 · 并发 · 第 4 篇「【跬步千里】详解 Java 内存模型与原子性、可见性、有序性」](Java/并发/40-跬步千里-详解Java内存模型与原子性-可见性-有序性.md)
- [Java 小白成长记 · 并发 · 第 5 篇「JMM 最最最核心的概念:Happens-before 原则](Java/并发/50-JMM最最最核心的概念-Happens-before原则.md)
- [Java 小白成长记 · 并发 · 第 6 篇「【有点收获】三种基本方法创建线程」](Java/并发/60-有点收获-三种基本方法创建线程.md)
### Java 虚拟机
- [1 - Java 内存区域与内存溢出异常](Java/JVM/1-Java内存区域与内存溢出异常.md)
- [2 - 垃圾收集器与内存分配策略](Java/JVM/2-垃圾收集器与内存分配策略.md)
- [3 - 类文件结构](Java/JVM/3-类文件结构.md)
- [4 - 类加载机制](Java/JVM/4-类加载机制.md)
## 🛴 设计模式
---
> [!NOTE]
> 设计模式是**解决问题的方案**,学习现有的设计模式可以做到经验复用。拥有设计模式词汇,在沟通时就能用更少的词汇来讨论,并且不需要了解底层细节。
- [设计模式七大原则](设计模式/七大原则.md)
- [二十三种设计模式](设计模式/二十三种设计模式/guide.md)
## 🔥 必备框架
---
### SSM
- 1 - **Spring (Framework)**
- [1.1 - Spring 简介 + Spring IoC 详解](必备框架/SSM/Spring/1-Spring简介+IoC详解.md)
- [1.2 - Spring IoC 容器源码分析](必备框架/SSM/Spring/2-SpringIoC容器源码分析.md)
- [1.3 - Spring AOP 详解](必备框架/SSM/Spring/3-AOP详解.md)
- 1.4 - Spring AOP 源码分析
- 1.4 - Spring 事务控制
- 🎯 Spring 面试指南
- 2 - **SpringMVC**
- [Spring MVC 知识点全解](必备框架/SSM/SpringMVC/SpringMVC知识点全解.md)
- 🎯 SpringMVC 面试指南
- 3 - **MyBatis**
- [MyBatis 知识点全解](必备框架/SSM/Mybatis/Mybatis知识点全解.md)
- 🎯 MyBatis 面试指南
- [4 - SSM 框架整合实例](必备框架/SSM/SSM框架整合.md)
### Spring Boot 2.x
墙烈推荐一个项目:[「开源社区系统 Echo」Gitee 官方推荐项目,目前已累计 700+ star](https://gitee.com/veal98/Echo):基于 SpringBoot + MyBatis + MySQL + Redis + Kafka + Elasticsearch + Spring Security + ... 并提供详细的开发文档和配套教程 项目经验首选
- [1 - Spring Boot 入门](必备框架/SpringBoot/1-SpringBoot入门.md)
- [2 - 配置文件](必备框架/SpringBoot/2-配置文件.md)
- [3 - 自定义 starter](必备框架/SpringBoot/3-自定义starter.md)
- [4 - 日志](必备框架/SpringBoot/4-日志.md)
- [5 - Web 开发](必备框架/SpringBoot/5-Web开发.md)
- [6 - SpringBoot 前后端数据交互的几种常用方式 ](必备框架/SpringBoot/6-SpringBoot前后端数据交互.md)
- [7 - Web 开发 - 实战案例](必备框架/SpringBoot/7-Web开发-实战案例.md)
- [8 - SpringBoot 与数据访问](必备框架/SpringBoot/8-SpringBoot与数据访问.md)
- 9 - **Spring Data JPA**
- [Spring Boot + Spring Data JPA 一篇文章快速入门](必备框架/SpringBoot/SpringDataJPA/SpringBoot+SpringDataJPA快速入门.md)
- [9.1 - 实体类映射到数据库表的基本注解](必备框架/SpringBoot/SpringDataJPA/1-实体类映射到数据库表的基本注解.md)
- [9.2 - 表之间的映射关系](必备框架/SpringBoot/SpringDataJPA/2-表之间的映射关系.md)
- [9.3 - Spring Data JPA 的四种查询方式](必备框架/SpringBoot/SpringDataJPA/3-SpringDataJPA的四种查询方式.md)
- [9.4 - Spring Data JPA 的更新方式详解](必备框架/SpringBoot/SpringDataJPA/4-SpringDataJPA的更新方式详解.md)
- [10 - 异步、定时、邮件任务](必备框架/SpringBoot/10-异步定时邮件任务.md)
- [11 - 集成 Redis(Lettuce)](必备框架/SpringBoot/11-集成Redis.md)
- 🎯 SpringBoot 面试指南
### Netty 4.x
> [!Note]
> Netty 是目前 **Java 网络编程**最热门的框架,很多开源项目涉及到**网络通信**的部分都是基于 Netty 来做的,比如 Dubbo、RocketMQ、ElasticSearch 等。**学习 Netty 前请务必掌握 Java I/O 的相关知识**。并请注意 **Netty 5 已被官方废弃**,本笔记基于 Netty 4.x
- [1 - 从 BIO、NIO 到 Netty](必备框架/Netty/1-从BIONIO到Netty.md)
- [2 - 第一个 Netty 应用:HelloWorld](必备框架/Netty/2-第一个Netty应用.md)
- [3 - Netty 架构设计与特性](必备框架/Netty/3-Netty架构设计与特性.md)
- [4 - Netty 核心组件总览](必备框架/Netty/4-Netty核心组件总览.md)
- [5 - Transport(传输)详解](必备框架/Netty/5-Transport详解.md)
- [6 - Buffer(缓冲/字节容器)详解](必备框架/Netty/6-Buffer详解.md)
- [7 - ChannelHandler(消息处理器)与 ChannelPipeline 详解](必备框架/Netty/7-ChannelHandler与ChannelPipeline详解.md)
- [8 - Netty Reactor 线程模型与 EventLoop(事件循环)详解](必备框架/Netty/8-EventLoop与线程模型详解.md)
- [9 - Bootstrap(引导)详解](必备框架/Netty/9-Bootstrap详解.md)
- [10 - Codec(编码与解码)详解](必备框架/Netty/10-Codec详解.md)
- [11 - 实例及分析:Netty 实现聊天功能](必备框架/Netty/11-实例-Netty实现聊天功能.md)
- [12 - Netty 是如何解决 TCP 粘包/拆包问题的](必备框架/Netty/12-Netty解决TCP粘包拆包问题.md)
- [13 - Netty 是如何实现 TCP 心跳机制与断线重连的](必备框架/Netty/13-Netty实现心跳机制.md)
- [14 - 实例及分析:Netty + Kryo 序列化传输对象](必备框架/Netty/14-实例-Netty+Kryo序列化传输对象.md)
- [🎯 Netty 面试指南](必备框架/Netty/Netty面试指南.md)
## 👷 系统设计
---
### 系统设计基础
- [1 - 大型网站核心架构要素](系统设计/系统设计基础/1-大型网站核心架构要素.md)
- 2 - Web 前端性能优化
- 3 - 应用服务器性能优化
### 编码之道
- 1 - RestFul API 详解
- 2 - Java 命名之道
- 3 - Java 编程规范
### 认证授权
#### ① 认证授权基础
- 1 - 认证授权之理论基础
- 2 - JWT
- 3 - SSO 单点登录
#### ② Apache Shiro
- [🛫 SpringBoot + Shiro 一篇文章快速入门](系统设计/认证授权/Shiro/Shiro快速入门.md)
- [Shiro 登录认证过程源码详解](系统设计/认证授权/Shiro/Shiro登录认证过程源码详解.md)
#### ③ Spring Security 5.x
- [🛫 SpringBoot + SpringSecurity 一篇文章快速入门](系统设计/认证授权/SpringSecurity/SpringSecurity快速入门.md)
- [1 - Spring Security 概述](系统设计/认证授权/SpringSecurity/1-概述.md)
- [2 - Spring Boot + Spring Security 初体验](系统设计/认证授权/SpringSecurity/2-初体验.md)
- [3 - 基于内存的认证和授权](系统设计/认证授权/SpringSecurity/3-基于内存的认证和授权.md)
- [4 - 基于内存数据库的认证和授权](系统设计/认证授权/SpringSecurity/4-基于内存数据库的认证和授权.md)
- [5 - 基于 Mysql 数据库的认证和授权](系统设计/认证授权/SpringSecurity/5-基于Mysql数据库的认证和授权.md)
- [6 - 自定义登录页面和构建主页](系统设计/认证授权/SpringSecurity/6-自定义登录页面和构建主页.md)
- [7 - 登出处理和自定义 403 界面](系统设计/认证授权/SpringSecurity/7-登出处理和自定义403界面.md)
- [8 - 从数据库中动态加载角色](系统设计/认证授权/SpringSecurity/8-从数据库中动态加载角色.md)
- [9 - 原理分析](系统设计/认证授权/SpringSecurity/9-原理分析.md)
- [10 - 记住我](系统设计/认证授权/SpringSecurity/10-记住我.md)
### 高并发
👉 如何设计一个高并发系统
#### ① 缓存
> [!WARNING|label:Important]
> 网站性能优化第一定律:优先考虑使用缓存
- 1 - 缓存的相关概念
- 2 - 内存数据库:**Redis** Vital
- [2.1 - NoSQL 概述](系统设计/高并发/缓存/Redis/1-NoSQL概述.md)
- [2.2 - Redis 入门](系统设计/高并发/缓存/Redis/2-Redis入门.md)
- [2.3 - Redis 五大数据类型](系统设计/高并发/缓存/Redis/3-五大数据类型.md)
- [2.4 - 三种特殊数据类型](系统设计/高并发/缓存/Redis/4-三种特殊数据类型.md)
- [2.5 - 事务](系统设计/高并发/缓存/Redis/5-事务.md)
- [2.6 - Java 使用 Redis — Jedis](系统设计/高并发/缓存/Redis/6-Java使用Redis.md)
- [2.7 - Redis 配置文件详解](系统设计/高并发/缓存/Redis/7-Redis配置文件详解.md)
- [2.8 - Redis 持久化](系统设计/高并发/缓存/Redis/8-Redis持久化.md)
- [2.9 - Redis 发布订阅](系统设计/高并发/缓存/Redis/9-Redis发布订阅.md)
- [2.10 - Redis 主从复制](系统设计/高并发/缓存/Redis/10-Redis主从复制.md)
- [2.11 - Redis 缓存穿透和雪崩](系统设计/高并发/缓存/Redis/11-Redis缓存穿透和雪崩.md)
- 🎯 缓存面试指南
#### ② 消息队列 MQ
> [!NOTE]
> 消息队列在分布式系统中主要是为了解耦和削峰
- [1 - 消息队列相关概念](系统设计/高并发/消息队列/1-消息队列相关概念.md)
- 2 - 消息队列中间件:**RabbitMQ**
- [2.1 - RabbitMQ 入门](系统设计/高并发/消息队列/2-RabbitMQ入门.md)
- [2.2 - SpringBoot + RabbitMQ 简单实例](系统设计/高并发/消息队列/3-SpringBoot+RabbitMQ简单实例.md)
- 3 - 消息队列中间件:**Kafka**
- 4 - 消息队列的缺点以及解决方案
- 5 - 如何设计一个消息队列
#### ③ 读写分离
> [!NOTE]
> 读写分离主要是为了将数据库的读和写操作分布到不同的数据库节点上。**主服务器负责写,从服务器负责读**。一主一从或者一主多从都可以。
>
> 读写分离可以大幅提高读性能,小幅提高写的性能。因此,**读写分离更适合单机并发读请求比较多的场景**。
- [如何实现 MySQL 的读写分离(主从复制)](系统设计/高并发/读写分离/如何实现MySQL的读写分离.md)
#### ④ 分库分表
> [!NOTE]
> **分库分表是为了解决由于库、表数据量过大,而导致数据库性能持续下降的问题。**
>
> 常见的分库分表工具/中间件有:`sharding-jdbc`(当当)、`TSharding`(蘑菇街)、`MyCAT`(基于 Cobar)、`Cobar`(阿里巴巴)......
>
> **推荐使用 `sharding-jdbc`** 。 因为 `sharding-jdbc` 是一款轻量级 `Java` 框架,以 `jar` 包形式提供服务,不要我们做额外的运维工作,并且兼容性也很好。
- [1 - 分库分表相关概念](系统设计/高并发/分库分表/1-分库分表相关概念.md)
- 2 - 分库分表中间件
- [3 - 如何将单库单表系统迁移到分库分表](系统设计/高并发/分库分表/3-如何将单库单表系统迁移到分库分表.md)
#### ⑤ 负载均衡
> [!NOTE]
> 所谓负载均衡即将任务比如用户请求处理分配到多个服务器进行处理,以提高网站、应用或者数据库的性能和可靠性。
- [1 - 负载均衡算法与实现负载均衡的技术](系统设计/高并发/负载均衡/1-负载均衡算法与实现负载均衡的技术.md)
- [2 - 集群、分布式、负载均衡的区别](系统设计/高并发/负载均衡/2-集群+分布式+负载均衡的区别.md)
- 3 - **Nginx**
### 高可用
👉 如何设计一个高可用系统
#### ① 降级
> [!NOTE]
> 降级是从系统功能优先级的角度考虑如何应对系统故障。
>
> 服务降级是指系统为了应对大量的请求,**主动关闭部分功能,以此释放服务器资源从而保证核心功能可用**。
- 如何实现降级
#### ② 限流
> [!NOTE]
> 限流可以认为是服务降级的一种,限流就是**限制系统的输入和输出流量**以达到保护系统的目的。一般来说系统的吞吐量是可以被测算的,为了保证系统的稳定运行,一旦达到需要限制的阈值,就采取一些措施以完成限制流量的目的。比如:延迟处理/排队,拒绝处理,或者部分拒绝处理等等。
- [如何实现限流(常见限流算法)](系统设计/高可用/限流/常见限流算法.md)
#### ③ 熔断
> [!NOTE]
> 熔断和降级是两个比较容易混淆的概念,两者的含义并不相同。
>
> 降级的目的在于应对系统自身的故障,而**熔断的目的在于应对当前系统依赖的外部系统或者第三方系统的故障**。
- 1 - 如何实现熔断
- 2 - 熔断中间件 **Hystrix**(已停更)
- 3 - 熔断中间件 **Sentienl**(推荐使用)
- 4 - 如何设计一个消息队列
### 分布式
#### ① 分布式理论基础
- [1 - 分布式相关概念](系统设计/分布式/分布式理论基础/1-分布式相关概念.md)
- [2 - 分布式事务](系统设计/分布式/分布式理论基础/2-分布式事务.md)
- [3 - 分布式 Session](系统设计/分布式/分布式理论基础/3-分布式Session.md)
- [4 - 分布式锁](系统设计/分布式/分布式理论基础/4-分布式锁.md)
- [5 - 分布式 ID](系统设计/分布式/分布式理论基础/5-分布式ID.md)
#### ② RPC 框架 — Dubbo
- [1 - 什么是 RPC 及其原理](系统设计/分布式/RPC/1-什么是RPC及其原理.md)
> [!Danger]
> **Dubbo 与 Spring Cloud 并不是竞争关系**,**Dubbo** 作为成熟的 RPC 框架(分布式服务框架),其易用性、扩展性和健壮性已得到业界的认可。而 **Spring Cloud** 是一整个微服务生态,目前 **Dubbo** 已经成为 **Spring Cloud Alibaba** 的 RPC 组件,与 **Spring Cloud** 原生的 **Feign** 以及 **RestTemplate** 进行无缝整合,实现“零”成本迁移。
>
> 💌 [阿里巴巴中间件 独家解读:Dubbo Ecosystem - 从微服务框架到微服务生态](https://mp.weixin.qq.com/s/iNVctXw7tUGHhnF0hV84ww)
- 2 - RPC 框架:**Apache Dubbo**
- [2.1 - Dubbo 架构及工作原理](系统设计/分布式/RPC/2-Dubbo架构及工作原理.md)
- [2.2 - SpringBoot 2 + Dubbo + Zookeeper 搭建一个简单的分布式服务](系统设计/分布式/RPC/3-SpringBoot+Dubbo+Zookeeper搭建一个简单的分布式服务.md)
- [2.3 - Dubbo 三种连接方式](系统设计/分布式/RPC/4-Dubbo三种连接方式.md)
- [2.4 - Dubbo 通信协议与序列化](系统设计/分布式/RPC/5-Dubbo通信协议与序列化.md)
- [序列化协议 Protostuff 基本使用](系统设计/分布式/RPC/5.1-序列化协议Protostuff基本使用.md)
- [序列化协议 Kryo 基本使用](系统设计/分布式/RPC/5.2-序列化协议Kryo基本使用.md)
- [2.5 - Dubbo 负载均衡策略 + 集群容错策略](系统设计/分布式/RPC/6-Dubbo负载均衡策略+集群容错策略.md)
- [2.6 - Dubbo 动态代理 + SPI 机制](系统设计/分布式/RPC/7-Dubbo动态代理+SPI机制.md)
- 2.7 - 深入 Dubbo 源码
- Dubbo 的服务暴露过程
- Dubbo 的服务引用过程
- Dubbo 的服务调用过程
- 🎯 Dubbo 面试指南
- [🏆 从零开始设计一个轻量级分布式 RPC 框架](https://github.com/Veal98/RPC-FromScratch)
#### ③ API 网关
- 1 - API 网关相关概念
- 2 - 网关中间件:**Netflix Zuul**(已停更)
- 3 - 网关中间件:**Gateway**(推荐使用)
- 4 - 如何设计一个网关
#### ④ 分布式搜索引擎 — Elasticsearch
#### ⑤ 分布式协调服务 — Zookeeper
> [!NOTE]
> 所谓**分布式协调服务**就是**将各个分布式组件协调起来**,减少各个系统之间的耦合度、处理分布式事务、配置整个分布式系统等等
- [1 - Zookeeper 重要概念详解](系统设计/分布式/Zookeeper/1-Zookeeper重要概念详解.md)
- [2 - Zookeeper 安装与基本使用](系统设计/分布式/Zookeeper/2-Zookeeper安装与基本使用.md)
### 微服务架构 — Spring Cloud
#### ① 微服务相关概念
- [1 - 什么是微服务与 Spring Cloud](系统设计/微服务/微服务相关概念/1-什么是微服务与SpringCloud.md)
- 2 - 微服务之间是如何进行独立通讯的
#### ② Spring Cloud Netflix
> [!Warning]
> **Spring Cloud Netflix** 2018 年12 月 12 日进入维护模式(Maintenance Mode),且其内置组件/中间件大部分都已停更或出现更好的替代组件,所以不太适合再长期使用
- [1 - Spring Cloud Netflix 技术栈及组件停更说明](系统设计/微服务/Spring-Cloud-Netflix/1-技术栈及组件停更说明.md)
#### ③ Spring Cloud Alibaba
## 🔨 工具
---
### Git
### Docker
## 🎨 前端
---
### 必备基础知识
- 1 - HTML / CSS / JS 速览
- [2 - JSON 详解](前端/必备基础/JSON详解.md)
- [3 - AJAX 详解](前端/必备基础/AJAX详解.md)
## 🎉 其他
---
### 读书笔记
- [万历十五年,到底意难平](读书笔记/1-万历十五年,到底意难平.md)
- [世上的人遍地都是,说的着的人千里难寻](读书笔记/2-世上的人遍地都是-说的着的人千里难寻.md)
### 写作相关
- [Snipaste + PicGo+ Gitee 图床一键上传](其他/图床一键上传.md)
- [LaTeX 常用语法](其他/LaTeX常用语法.md)
- 作图软件推荐(draw.io / ProcessOn)
### 公众号
我的公众号:**飞天小牛肉**,2020/12/29 开通,专注于分享计算机基础(数据结构 + 算法 + 计算机网络 + 数据库 + 操作系统 + Linux)、Java 基础和面试指南的相关原创技术好文。本公众号的目的就是**让大家可以快速掌握重点知识,有的放矢**。希望大家多多支持哦,和小牛肉一起成长
### 联系我
有什么问题也可以添加我的微信,记得备注来意:格式 (学校或公司 - 姓名或昵称 - 来意)
