README.md 25.4 KB
Newer Older
G
guide 已提交
1
👍推荐 [在线阅读](https://snailclimb.gitee.io/javaguide)  (Github 访问速度比较慢可能会导致部分图片无法刷新出来) 
G
guide 已提交
2

G
guide 已提交
3
👍推荐 [图解Java+操作系统+HTTP+计算机网络的 PDF 资料](#优质原创PDF资源)
G
guide 已提交
4

G
guide 已提交
5 6
## 一些闲话:

G
guide 已提交
7
> 1. **介绍**:关于 JavaGuide 的相关介绍请看:[关于 JavaGuide 的一些说明](https://www.yuque.com/snailclimb/dr6cvl/mr44yt) 。PDF 版本请看:[完结撒花!JavaGuide 面试突击版来啦!](./docs/javaguide面试突击版.md) 。
G
guide 已提交
8 9
> 2. **PDF版本** : [《JavaGuide 面试突击版》PDF 版本](#公众号) 。
> 3. **面试专版** :准备面试的小伙伴可以考虑面试专版:[《Java 面试进阶指南》](https://xiaozhuanlan.com/javainterview?rel=javaguide) ,
G
guide 已提交
10
> 4. **知识星球** : 简历指导/Java学习/面试指导/offer选择。欢迎加入[我的知识星球](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247497451&idx=1&sn=ea566dd64662ff8d5260f079c11c2268&chksm=cea1b920f9d630367eb80666da7b599bb610b9d61c6f956add1ee0a607ddcd61372931808877&token=804689790&lang=zh_CN#rd) 。
G
guide 已提交
11
> 5. **联系我** :如要进群或者请教问题,请[联系我](#联系我) (备注来自 Github。请直入问题,工作时间不回复)。
G
guide 已提交
12
> 6. **转载须知** :以下所有文章如非文首说明皆为我(Guide哥)的原创,转载在文首注明出处,如发现恶意抄袭/搬运,会动用法律武器维护自己的权益。让我们一起维护一个良好的技术创作环境!⛽️
S
shuang.kou 已提交
13

S
SnailClimb 已提交
14
<p align="center">
S
SnailClimb 已提交
15 16 17
<a href="https://github.com/Snailclimb/JavaGuide" target="_blank">
	<img src="https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-3/logo - 副本.png" width=""/>
</a>
S
SnailClimb 已提交
18 19
</p>
<p align="center">
S
SnailClimb 已提交
20
  <a href="https://snailclimb.gitee.io/javaguide"><img src="https://img.shields.io/badge/阅读-read-brightgreen.svg" alt="阅读"></a>
S
SnailClimb 已提交
21
  <a href="#公众号"><img src="https://img.shields.io/badge/%E5%85%AC%E4%BC%97%E5%8F%B7-JavaGuide-lightgrey.svg" alt="公众号"></a>
S
SnailClimb 已提交
22
  <a href="#公众号"><img src="https://img.shields.io/badge/PDF-Java面试突击-important.svg" alt="公众号"></a>
S
SnailClimb 已提交
23
  <a href="#投稿"><img src="https://img.shields.io/badge/support-投稿-critical.svg" alt="投稿"></a>
G
guide 已提交
24
  <img src="https://img.shields.io/github/stars/Snailclimb/JavaGuide" alt="投稿">
K
Kou Shuang 已提交
25
  <a href="https://xiaozhuanlan.com/javainterview?rel=javaguide"><img src="https://img.shields.io/badge/Java-面试指南-important" alt="投稿"></a>
S
SnailClimb 已提交
26
</p>
S
SnailClimb 已提交
27

G
guide 已提交
28

S
shuang.kou 已提交
29 30
<h3 align="center">Sponsor</h3>

S
shuang.kou 已提交
31 32 33
<table>
  <tbody>
    <tr>
G
guide 已提交
34
       <td align="center" valign="middle">
G
guide 已提交
35
        <a href="https://sourl.cn/U7rukQ">
G
guide 已提交
36
         <img src="./media/sponsor/知识星球.png" style="margin: 0 auto;width:850px" /></a>
G
guide 已提交
37
      </td>       
G
guide 已提交
38
    </tr>
S
shuang.kou 已提交
39 40 41
  </tbody>
</table>

G
guide 已提交
42

G
guide 已提交
43

G
guide 已提交
44

G
guide 已提交
45

G
guide 已提交
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
<!-- @import "[TOC]" {cmd="toc" depthFrom=1 depthTo=6 orderedList=false} -->

<!-- code_chunk_output -->

- [Java](#java)
  - [基础](#基础)
  - [容器](#容器)
  - [并发](#并发)
  - [JVM (必看 :+1:)](#jvm-必看-1)
  - [新特性](#新特性)
- [网络](#网络)
- [操作系统](#操作系统)
- [数据结构与算法](#数据结构与算法)
  - [数据结构](#数据结构)
  - [算法](#算法)
- [数据库](#数据库)
  - [MySQL](#mysql)
  - [Redis](#redis)
- [系统设计](#系统设计)
  - [编码之道(必看 :+1:)](#编码之道必看-1)
  - [常用框架](#常用框架)
    - [Spring/SpringBoot](#springspringboot)
    - [MyBatis](#mybatis)
    - [Netty (必看 :+1:)](#netty-必看-1)
G
guide 已提交
70
    - [ZooKeeper](#zookeeper)
G
guide 已提交
71 72 73 74
  - [认证授权](#认证授权)
    - [JWT](#jwt)
    - [SSO(单点登录)](#sso单点登录)
  - [分布式](#分布式)
G
guide 已提交
75 76 77
    - [CAP 理论](#cap-理论)
    - [BASE 理论](#base-理论)
    - [Paxos 算法和 Raft 算法](#paxos-算法和-raft-算法)
G
guide 已提交
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
    - [搜索引擎](#搜索引擎)
    - [RPC](#rpc)
    - [API 网关](#api-网关)
    - [分布式 id](#分布式-id)
  - [微服务](#微服务)
  - [高并发](#高并发)
    - [消息队列](#消息队列)
    - [读写分离](#读写分离)
    - [分库分表](#分库分表)
    - [负载均衡](#负载均衡)
  - [高可用](#高可用)
    - [限流](#限流)
    - [降级](#降级)
    - [熔断](#熔断)
    - [排队](#排队)
  - [大型网站架构](#大型网站架构)
- [工具](#工具)
- [面试指南](#面试指南)
- [Java 学习常见问题汇总](#java-学习常见问题汇总)
- [书单](#书单)
- [其他](#其他)
  - [待办](#待办)
  - [联系我](#联系我)
  - [捐赠支持](#捐赠支持)
L
LIU 已提交
102
  - [Contributor](#贡献者)
G
guide 已提交
103 104 105 106 107
  - [公众号](#公众号)

<!-- /code_chunk_output -->


G
guide 已提交
108
## Java
S
SnailClimb 已提交
109

S
SnailClimb 已提交
110
### 基础
S
SnailClimb 已提交
111

G
guide 已提交
112
**知识点/面试题:**(必看:+1: )
113

G
guide 已提交
114 115
1. **[Java 基础知识](docs/java/basis/Java基础知识.md)**
2. **[Java 基础知识疑难点/易错点](docs/java/basis/Java基础知识疑难点.md)**
S
SnailClimb 已提交
116

117 118
**重要知识点详解:**

G
guide 已提交
119
1. [枚举](docs/java/basis/用好Java中的枚举真的没有那么简单.md) (很重要的一个数据结构,用好枚举真的没有那么简单!)
G
guide 已提交
120
2. [Java 常见关键字总结:final、static、this、super!](docs/java/basis/Java常见关键字总结.md)
G
guide 已提交
121 122
3. [什么是反射机制?反射机制的应用场景有哪些?](docs/java/basis/反射机制.md)
4. [代理模式详解:静态代理+JDK/CGLIB 动态代理实战](docs/java/basis/代理模式详解.md)
G
guide 已提交
123
5. [BIO,NIO,AIO 总结 ](docs/java/basis/BIO,NIO,AIO总结.md)
S
shuang.kou 已提交
124

S
SnailClimb 已提交
125
### 容器
S
SnailClimb 已提交
126

G
guide 已提交
127
1. **[Java 容器常见面试题/知识点总结](docs/java/collection/Java集合框架常见面试题.md)** (必看 :+1:)
G
guide 已提交
128
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)
S
SnailClimb 已提交
129

S
SnailClimb 已提交
130
### 并发
S
SnailClimb 已提交
131

G
guide 已提交
132
并发这部分内容非常重要,还是面试中的重点中的重点!但是,学习起来难度较大,因此我写了:**[多线程学习指南](./docs/java/multi-thread/多线程学习指南.md)** 帮助你学习。
S
shuang.kou 已提交
133

G
guide 已提交
134
**知识点/面试题:** (必看 :+1:)
S
shuang.kou 已提交
135

G
guide 已提交
136 137
1. **[Java 并发基础常见面试题总结](docs/java/multi-thread/2020最新Java并发基础常见面试题总结.md)**
2. **[Java 并发进阶常见面试题总结](docs/java/multi-thread/2020最新Java并发进阶常见面试题总结.md)**
S
shuang.kou 已提交
138

G
guide 已提交
139
**重要知识点详解:**
S
shuang.kou 已提交
140

G
guide 已提交
141
2. **线程池**[Java 线程池学习总结](./docs/java/multi-thread/java线程池学习总结.md)[拿来即用的线程池最佳实践](./docs/java/multi-thread/拿来即用的线程池最佳实践.md)
S
shuang.kou 已提交
142
3. [乐观锁与悲观锁](docs/essential-content-for-interview/面试必备之乐观锁与悲观锁.md)
G
guide 已提交
143
4. [ ThreadLocal 关键字解析](docs/java/multi-thread/万字详解ThreadLocal关键字.md)
G
guide 已提交
144 145 146
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)
S
SnailClimb 已提交
147

G
guide 已提交
148
### JVM (必看 :+1:)
S
SnailClimb 已提交
149

G
guide 已提交
150 151
1. **[Java 内存区域](docs/java/jvm/Java内存区域.md)**
2. **[JVM 垃圾回收](docs/java/jvm/JVM垃圾回收.md)**
S
shuang.kou 已提交
152 153 154 155 156 157
3. [JDK 监控和故障处理工具](docs/java/jvm/JDK监控和故障处理工具总结.md)
4. [类文件结构](docs/java/jvm/类文件结构.md)
5. **[类加载过程](docs/java/jvm/类加载过程.md)**
6. [类加载器](docs/java/jvm/类加载器.md)
7. **[【待完成】最重要的 JVM 参数指南(翻译完善了一半)](docs/java/jvm/最重要的JVM参数指南.md)**
8. [JVM 配置常用参数和常用 GC 调优策略](docs/java/jvm/GC调优参数.md)
G
guide 已提交
158
9. **[【加餐】大白话带你认识 JVM](docs/java/jvm/[加餐]大白话带你认识JVM.md)**
S
SnailClimb 已提交
159

G
guide 已提交
160
### 新特性
S
SnailClimb 已提交
161

G
guide 已提交
162
1.  **Java 8**[Java 8 新特性总结](docs/java/new-features/Java8新特性总结.md)[Java 8 学习资源推荐](docs/java/new-features/Java8教程推荐.md)[Java8 forEach 指南](docs/java/new-features/Java8foreach指南.md)[Java8常用新特性总结](docs/java/new-features/java8-common-new-features.md)
G
guide 已提交
163
2.  **Java9~Java14** : [一文带你看遍 JDK9~14 的重要新特性!](./docs/java/new-features/一文带你看遍JDK9到14的重要新特性.md)
S
SnailClimb 已提交
164

S
SnailClimb 已提交
165
## 网络
S
SnailClimb 已提交
166

167
1. [计算机网络常见面试题](docs/network/计算机网络.md)
G
guide 已提交
168
2. [计算机网络基础知识总结](docs/network/计算机网络知识总结.md)
S
SnailClimb 已提交
169

S
SnailClimb 已提交
170
## 操作系统
S
Snailclimb 已提交
171

G
guide 已提交
172 173
1. [操作系统常见问题总结!](docs/operating-system/basis.md)
2. [后端程序员必备的 Linux 基础知识](docs/operating-system/linux.md)
G
guide 已提交
174
3. [Shell 编程入门](docs/operating-system/Shell.md)
175

S
SnailClimb 已提交
176
## 数据结构与算法
S
Snailclimb 已提交
177

S
SnailClimb 已提交
178
### 数据结构
S
SnailClimb 已提交
179

G
guide 已提交
180 181 182 183
- **图解数据结构:**
  1. [线性数据结构 :数组、链表、栈、队列](docs/dataStructures-algorithms/data-structure/线性数据结构.md)
  2. [](docs/dataStructures-algorithms/data-structure/图.md)
- [不了解布隆过滤器?一文给你整的明明白白!](docs/dataStructures-algorithms/data-structure/bloom-filter.md)
S
SnailClimb 已提交
184

S
SnailClimb 已提交
185 186
### 算法

G
guide 已提交
187 188
算法这部分内容非常重要,如果你不知道如何学习算法的话,可以看下我写的:

G
guide 已提交
189 190
- [算法学习书籍+资源推荐](https://www.zhihu.com/question/323359308/answer/1545320858)
- [如何刷Leetcode?](https://www.zhihu.com/question/31092580/answer/1534887374) 
G
guide 已提交
191

192 193 194 195 196
**常见算法问题总结:**

- [几道常见的字符串算法题总结 ](docs/dataStructures-algorithms/几道常见的子符串算法题.md)
- [几道常见的链表算法题总结 ](docs/dataStructures-algorithms/几道常见的链表算法题.md)
- [剑指 offer 部分编程题](docs/dataStructures-algorithms/剑指offer部分编程题.md)
S
SnailClimb 已提交
197

S
SnailClimb 已提交
198
## 数据库
S
SnailClimb 已提交
199

S
SnailClimb 已提交
200
### MySQL
S
SnailClimb 已提交
201

202 203
**总结:**

S
shuang.kou 已提交
204 205
1. **[【推荐】MySQL/数据库 知识点总结](docs/database/MySQL.md)**
2. **[阿里巴巴开发手册数据库部分的一些最佳实践](docs/database/阿里巴巴开发手册数据库部分的一些最佳实践.md)**
G
guide 已提交
206 207
3. **[一千行 MySQL 学习笔记](docs/database/一千行MySQL命令.md)**
4. [MySQL 高性能优化规范建议](docs/database/MySQL高性能优化规范建议.md)
208 209 210

**重要知识点:**

G
guide 已提交
211 212 213
1. [数据库索引总结 1](docs/database/MySQL%20Index.md)[数据库索引总结 2](docs/database/数据库索引.md)
2. [事务隔离级别(图文详解)](<docs/database/事务隔离级别(图文详解).md>)
3. [一条 SQL 语句在 MySQL 中如何执行的](docs/database/一条sql语句在mysql中如何执行的.md)
214
4. **[关于数据库中如何存储时间的一点思考](docs/database/关于数据库存储时间的一点思考.md)**
S
SnailClimb 已提交
215

S
SnailClimb 已提交
216
### Redis
S
SnailClimb 已提交
217

218
2. [Redis 常见问题总结](docs/database/Redis/redis-all.md)
G
guide 已提交
219
3. [面试/工作必备!3种常用的缓存读写策略!](docs/database/Redis/3种常用的缓存读写策略.md)
S
SnailClimb 已提交
220

S
SnailClimb 已提交
221
## 系统设计
S
SnailClimb 已提交
222

G
guide 已提交
223
### 编码之道(必看 :+1:)
S
shuang.kou 已提交
224

G
guide 已提交
225
1. [RestFul API 简明教程](docs/system-design/coding-way/RESTfulAPI简明教程.md)
G
guide 已提交
226 227
2. [Java 编程规范以及优雅 Java 代码实践总结](docs/java/Java编程规范.md)
3. [Java 命名之道](docs/system-design/naming.md)
S
shuang.kou 已提交
228

S
SnailClimb 已提交
229 230
### 常用框架

G
guide 已提交
231
如果你没有接触过 Java Web 开发的话,可以先看一下我总结的 [《J2EE 基础知识》](docs/java/J2EE基础知识.md) 。虽然,这篇文章中的很多内容已经淘汰,但是可以让你对 Java 后台技术发展有更深的认识。
G
guide 已提交
232

G
guide 已提交
233
#### Spring/SpringBoot (必看 :+1:)
S
SnailClimb 已提交
234

G
guide 已提交
235
**知识点/面试题:** 
G
guide 已提交
236

G
guide 已提交
237
1. **[Spring 常见问题总结](docs/system-design/framework/spring/Spring常见问题总结.md)**
G
guide 已提交
238
2. **[SpringBoot 指南/常见面试题总结](https://github.com/Snailclimb/springboot-guide)**
G
guide 已提交
239 240 241

**重要知识点详解:**

G
guide 已提交
242
1. **[Spring/Spring Boot 常用注解总结!安排!](./docs/system-design/framework/spring/SpringBoot+Spring常用注解总结.md)** 
G
guide 已提交
243
2. **[Spring 事务总结](docs/system-design/framework/spring/Spring事务总结.md)** 
G
guide 已提交
244
3. [Spring 中都用到了那些设计模式?](docs/system-design/framework/spring/Spring-Design-Patterns.md)
245
4. [面试常问:“讲述一下 SpringBoot 自动装配原理?”](https://www.cnblogs.com/javaguide/p/springboot-auto-config.html)
S
SnailClimb 已提交
246

S
shuang.kou 已提交
247 248
#### MyBatis

G
guide 已提交
249
- [MyBatis 常见面试题总结](docs/system-design/framework/mybatis/mybatis-interview.md)
S
shuang.kou 已提交
250

G
guide 已提交
251
#### Netty (必看 :+1:)
G
guide 已提交
252 253 254 255

1. [剖析面试最常见问题之 Netty(上)](https://xiaozhuanlan.com/topic/4028536971)
2. [剖析面试最常见问题之 Netty(下)](https://xiaozhuanlan.com/topic/3985146207)

G
guide 已提交
256 257 258 259 260 261 262 263
#### ZooKeeper

> 前两篇文章可能有内容重合部分,推荐都看一遍。

1. [【入门】ZooKeeper 相关概念总结](docs/system-design/distributed-system/zookeeper/zookeeper-intro.md)
2. [【进阶】ZooKeeper 相关概念总结](docs/system-design/distributed-system/zookeeper/zookeeper-plus.md)
3. [【实战】ZooKeeper 实战](docs/system-design/distributed-system/zookeeper/zookeeper-in-action.md)

264 265
### 认证授权

G
guide 已提交
266
**[《认证授权基础》](docs/system-design/authority-certification/basis-of-authority-certification.md)** 这篇文章中我会介绍认证授权常见概念: **Authentication**,**Authorization** 以及 **Cookie****Session**、Token、**OAuth 2****SSO** 。如果你不清楚这些概念的话,建议好好阅读一下这篇文章。
267 268 269

#### JWT

G
guide 已提交
270
1. [JWT 优缺点分析以及常见问题解决方案](docs/system-design/authority-certification/JWT优缺点分析以及常见问题解决方案.md)
271
2. [适合初学者入门 Spring Security With JWT 的 Demo](https://github.com/Snailclimb/spring-security-jwt-guide)
272 273 274

#### SSO(单点登录)

G
guide 已提交
275
**SSO(Single Sign On)** 即单点登录说的是用户登陆多个子系统的其中一个就有权访问与其相关的其他系统。举个例子我们在登陆了京东金融之后,我们同时也成功登陆京东的京东超市、京东家电等子系统。相关阅读:**[SSO 单点登录看这篇就够了!](docs/system-design/authority-certification/SSO单点登录看这一篇就够了.md)**
276 277

### 分布式
K
Kou Shuang 已提交
278

G
guide 已提交
279 280 281 282 283 284 285 286 287 288 289 290 291 292
#### CAP 理论

CAP 也就是 Consistency(一致性)、Availability(可用性)、Partition Tolerance(分区容错性) 这三个单词首字母组合。

关于 CAP 的详细解读请看:[《CAP理论解读》](docs/system-design/distributed-system/CAP理论.md)

#### BASE 理论

**BASE****Basically Available(基本可用)****Soft-state(软状态)****Eventually Consistent(最终一致性)** 三个短语的缩写。BASE 理论是对 CAP 中一致性和可用性权衡的结果,其来源于对大规模互联网系统分布式实践的总结,是基于 CAP 定理逐步演化而来的,它大大降低了我们对系统的要求。

关于 CAP 的详细解读请看:[《BASE理论解读》](docs/system-design/distributed-system/BASE理论.md)

#### Paxos 算法和 Raft 算法

G
guide 已提交
293
**Paxos 算法**诞生于 1900 年,这是一种解决分布式系统一致性的经典算法 。但是,由于 Paxos 算法非常难以理解和实现,不断有人尝试简化这一算法。到了2013 年才诞生了一个比 Paxos 算法更易理解和实现的分布式一致性算法—**Raft 算法**
294

G
guide 已提交
295
#### 搜索引擎
296

G
guide 已提交
297
用于提高搜索效率,功能和浏览器搜索引擎类似。比较常见的搜索引擎是 Elasticsearch(推荐) 和 Solr。
K
Kou Shuang 已提交
298

K
Kou Shuang 已提交
299
#### RPC
K
Kou Shuang 已提交
300

301
RPC 让调用远程服务调用像调用本地方法那样简单。
302

303 304
1. [Dubbo 总结:关于 Dubbo 的重要知识点](docs/system-design/distributed-system/rpc/关于Dubbo的重要知识点.md)
2. [服务之间的调用为啥不直接用 HTTP 而用 RPC?](docs/system-design/distributed-system/rpc/服务之间的调用为啥不直接用HTTP而用RPC.md)
G
guide 已提交
305
3. [一款基于 Netty+Kyro+Zookeeper 实现的自定义 RPC 框架](https://github.com/Snailclimb/guide-rpc-framework)
S
SnailClimb 已提交
306

K
Kou Shuang 已提交
307
#### API 网关
K
Kou Shuang 已提交
308

K
Kou Shuang 已提交
309
网关主要用于请求转发、安全认证、协议转换、容灾。
K
Kou Shuang 已提交
310

G
guide 已提交
311 312
1. [为什么要网关?你知道有哪些常见的网关系统?](docs/system-design/distributed-system/api-gateway/为什么要网站有哪些常见的网站系统.md)
2. [如何设计一个亿级网关(API Gateway)?](docs/system-design/distributed-system/api-gateway/如何设计一个亿级网关.md)
S
shuang.kou 已提交
313

G
guide 已提交
314
#### 分布式 id
S
shuang.kou 已提交
315

G
guide 已提交
316
在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识。比如数据量太大之后,往往需要对进行对数据进行分库分表,分库分表后需要有一个唯一 ID 来标识一条数据或消息,数据库的自增 ID 显然不能满足需求。相关阅读:[为什么要分布式 id ?分布式 id 生成方案有哪些?](docs/system-design/micro-service/分布式id生成方案总结.md)
K
Kou Shuang 已提交
317

G
guide 已提交
318 319
#### 分布式事务

G
guide 已提交
320 321 322
**分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。**

简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证不同数据库的数据一致性。
G
guide 已提交
323

G
guide 已提交
324
### 微服务
S
shuang.kou 已提交
325

G
guide 已提交
326
1. [ 大白话入门 Spring Cloud](docs/system-design/micro-service/spring-cloud.md)
G
guide 已提交
327
2. [微服务/分布式大厂真实面试问题解答](https://xiaozhuanlan.com/topic/2895047136)
S
shuang.kou 已提交
328

G
guide 已提交
329
### 高并发
330

G
guide 已提交
331
#### 消息队列
332

G
guide 已提交
333
消息队列在分布式系统中主要是为了解耦和削峰。相关阅读: **[消息队列总结](docs/system-design/distributed-system/message-queue/message-queue.md)**
334

G
guide 已提交
335
1. **RabbitMQ** : [RabbitMQ 入门](docs/system-design/distributed-system/message-queue/RabbitMQ入门看这一篇就够了.md)
336
2. **RocketMQ** : [RocketMQ 入门](docs/system-design/distributed-system/message-queue/RocketMQ.md)[RocketMQ 的几个简单问题与答案](docs/system-design/distributed-system/message-queue/RocketMQ-Questions.md)
G
guide 已提交
337
3. **Kafka**[Kafka 常见面试题总结](docs/system-design/distributed-system/message-queue/Kafka常见面试题总结.md)
S
SnailClimb 已提交
338

G
guide 已提交
339
#### 读写分离
S
SnailClimb 已提交
340

G
guide 已提交
341
读写分离主要是为了将数据库的读和写操作分不到不同的数据库节点上。主服务器负责写,从服务器负责读。另外,一主一从或者一主多从都可以。
342

G
guide 已提交
343
**读写分离可以大幅提高读性能,小幅提高写的性能。因此,读写分离更适合单机并发读请求比较多的场景。**
344

G
guide 已提交
345
#### 分库分表
346

G
guide 已提交
347
**分库分表是为了解决由于库、表数据量过大,而导致数据库性能持续下降的问题。** 常见的分库分表工具有:`sharding-jdbc`(当当)、`TSharding`(蘑菇街)、`MyCAT`(基于 Cobar)、`Cobar`(阿里巴巴)...。
348

G
guide 已提交
349 350 351 352
**推荐使用 `sharding-jdbc`** 。 因为,`sharding-jdbc` 是一款轻量级 `Java` 框架,以 `jar` 包形式提供服务,不要我们做额外的运维工作,并且兼容性也很好。

#### 负载均衡

G
guide 已提交
353 354 355 356 357
负载均衡系统通常用于将任务比如用户请求处理分配到多个服务器处理以提高网站、应用或者数据库的性能和可靠性。

常见的负载均衡系统包括 3 种:

1. **DNS 负载均衡** :一般用来实现地理级别的均衡。
G
guide 已提交
358 359
2. **硬件负载均衡** : 通过单独的硬件设备比如 F5 来实现负载均衡功能(硬件的价格一般很贵)。
3. **软件负载均衡** :通过负载均衡软件比如 Nginx 来实现负载均衡功能。
G
guide 已提交
360

G
guide 已提交
361
### 高可用
362

G
guide 已提交
363 364
高可用描述的是一个系统在大部分时间都是可用的,可以为我们提供服务的。高可用代表系统即使在发生硬件故障或者系统升级的时候,服务仍然是可用的 。

G
guide 已提交
365
相关阅读: **《[如何设计一个高可用系统?要考虑哪些地方?](docs/system-design/high-availability/如何设计一个高可用系统要考虑哪些地方.md)》**
366

G
guide 已提交
367
#### 限流
368

G
guide 已提交
369 370
限流是从用户访问压力的角度来考虑如何应对系统故障。

G
guide 已提交
371
限流为了对服务端的接口接受请求的频率进行限制,防止服务挂掉。比如某一接口的请求限制为 100 个每秒, 对超过限制的请求放弃处理或者放到队列中等待处理。限流可以有效应对突发请求过多。相关阅读:[限流算法有哪些?](docs/system-design/high-availability/limit-request.md)
372

G
guide 已提交
373
#### 降级
S
shuang.kou 已提交
374

G
guide 已提交
375
降级是从系统功能优先级的角度考虑如何应对系统故障。
S
shuang.kou 已提交
376

G
guide 已提交
377
服务降级指的是当服务器压力剧增的情况下,根据当前业务情况及流量对一些服务和页面有策略的降级,以此释放服务器资源以保证核心任务的正常运行。
S
shuang.kou 已提交
378

G
guide 已提交
379
#### 熔断
S
shuang.kou 已提交
380

G
guide 已提交
381 382 383
熔断和降级是两个比较容易混淆的概念,两者的含义并不相同。

降级的目的在于应对系统自身的故障,而熔断的目的在于应对当前系统依赖的外部系统或者第三方系统的故障。
S
shuang.kou 已提交
384

G
guide 已提交
385
#### 排队
S
shuang.kou 已提交
386

G
guide 已提交
387 388
另类的一种限流,类比于现实世界的排队。玩过英雄联盟的小伙伴应该有体会,每次一有活动,就要经历一波排队才能进入游戏。

G
guide 已提交
389 390 391 392 393 394 395 396 397 398
#### 集群

相同的服务部署多份,避免单点故障。

#### 超时和重试机制

**一旦用户的请求超过某个时间得不到响应就结束此次请求并抛出异常。** 如果不进行超时设置可能会导致请求响应速度慢,甚至导致请求堆积进而让系统无法在处理请求。

另外,重试的次数一般设为 3 次,再多次的重试没有好处,反而会加重服务器压力(部分场景使用失败重试机制会不太适合)。

G
guide 已提交
399 400 401 402 403 404 405 406 407
### 大型网站架构

- [8 张图读懂大型网站技术架构](docs/system-design/website-architecture/8%20张图读懂大型网站技术架构.md)
- [关于大型网站系统架构你不得不懂的 10 个问题](docs/system-design/website-architecture/关于大型网站系统架构你不得不懂的10个问题.md)

## 工具

1. **Java**[JAD 反编译](docs/java/JAD反编译tricks.md)[手把手教你定位常见 Java 性能问题](./docs/java/手把手教你定位常见Java性能问题.md)
2. **Git**[Git 入门](docs/tools/Git.md)
G
guide 已提交
408 409
3. **Github**[我使用Github 5 年总结了这些骚操作](docs/tools/Github技巧.md)
4. **Docker** : [Docker 基本概念解读](docs/tools/Docker.md)[一文搞懂 Docker 镜像的常用操作!](docs/tools/Docker-Image.md)
S
shuang.kou 已提交
410

S
SnailClimb 已提交
411 412
## 面试指南

G
guide 已提交
413
> 这部分很多内容比如大厂面经、真实面经分析被移除,详见[完结撒花!JavaGuide 面试突击版来啦!](./docs/javaguide面试突击版.md)。
414

G
guide 已提交
415 416 417 418 419 420 421
1. **[【备战面试 1】程序员的简历就该这样写](docs/essential-content-for-interview/PreparingForInterview/程序员的简历之道.md)**
2. **[【备战面试 2】初出茅庐的程序员该如何准备面试?](docs/essential-content-for-interview/PreparingForInterview/interviewPrepare.md)**
3. **[【备战面试 3】7 个大部分程序员在面试前很关心的问题](docs/essential-content-for-interview/PreparingForInterview/JavaProgrammerNeedKnow.md)**
4. **[【备战面试 4】Github 上开源的 Java 面试/学习相关的仓库推荐](docs/essential-content-for-interview/PreparingForInterview/JavaInterviewLibrary.md)**
5. **[【备战面试 5】如果面试官问你“你有什么问题问我吗?”时,你该如何回答](docs/essential-content-for-interview/PreparingForInterview/面试官-你有什么问题要问我.md)**
6. [【备战面试 6】应届生面试最爱问的几道 Java 基础问题](docs/essential-content-for-interview/PreparingForInterview/应届生面试最爱问的几道Java基础问题.md)
7. **[【备战面试 6】美团面试常见问题总结(附详解答案)](docs/essential-content-for-interview/PreparingForInterview/美团面试常见问题总结.md)**
S
SnailClimb 已提交
422

G
guide 已提交
423
## Java 学习常见问题汇总
K
Kou Shuang 已提交
424

G
guide 已提交
425 426 427
1. [Java 学习路线和方法推荐](docs/questions/java-learning-path-and-methods.md)
2. [Java 培训四个月能学会吗?](docs/questions/java-training-4-month.md)
3. [新手学习 Java,有哪些 Java 相关的博客,专栏,和技术学习网站推荐?](docs/questions/java-learning-website-blog.md)
G
guide 已提交
428
4. [Java 还是大数据,你需要了解这些东西!](docs/questions/java-big-data.md)
K
Kou Shuang 已提交
429

G
guide 已提交
430
## 书单
S
SnailClimb 已提交
431

G
guide 已提交
432
1. [「基础篇」Java 书单](./docs/books/java基础篇.md)
S
SnailClimb 已提交
433

G
guide 已提交
434
---
S
SnailClimb 已提交
435

436 437
## 其他

G
guide 已提交
438 439 440 441 442 443
### 贡献者

[你可以点此链接查看JavaGuide的所有贡献者。](https://github.com/Snailclimb/JavaGuide/graphs/contributors) 感谢你们让 JavaGuide 变得更好!如果你们来到武汉一定要找我,我请你们吃饭玩耍。

*悄悄话:JavaGuide 会不定时为贡献者们送福利。*

444
### 待办
S
SnailClimb 已提交
445

G
guide 已提交
446
- [x] Netty 总结
G
guide 已提交
447
- [ ] 数据结构总结重构
S
SnailClimb 已提交
448

G
guide 已提交
449 450 451 452
### 优质原创PDF资源

![](https://cdn.jsdelivr.net/gh/javaguide-tech/blog-images-2@main/%E8%AE%A1%E7%AE%97%E6%9C%BA%E4%B8%93%E4%B8%9A/image-20201027160348395.png)

G
guide 已提交
453
为了避免恶意传播,微信搜“**Github掘金计划**”后台回复 **“006”** 即可获取。
S
SnailClimb 已提交
454

G
guide 已提交
455
<img src="https://cdn.jsdelivr.net/gh/javaguide-tech/blog-images-2@main/%E7%B3%BB%E7%BB%9F%E8%AE%BE%E8%AE%A1/qrcode_for_gh_8b9b6034ac19_258.jpg" style="text-align:right"/>
S
SnailClimb 已提交
456

457
### 捐赠支持
G
guide 已提交
458

G
guide 已提交
459
项目的发展离不开你的支持,如果 JavaGuide 帮助到了你找到自己满意的 offer,请作者喝杯咖啡吧 ☕ 后续会继续完善更新!加油!
S
SnailClimb 已提交
460

G
guide 已提交
461
[点击捐赠支持作者](https://www.yuque.com/snailclimb/dr6cvl/mr44yt#vu3ok)
S
SnailClimb 已提交
462

G
guide 已提交
463 464 465 466
### 联系我

<img src="https://cdn.jsdelivr.net/gh/javaguide-tech/blog-images-3@main/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/31603935587_.pic_hd.jpg" style="zoom:67%;" />

467
### 公众号
S
SnailClimb 已提交
468

G
guide 已提交
469
如果大家想要实时关注我更新的文章以及分享的干货的话,可以关注我的公众号“**JavaGuide**”。
S
SnailClimb 已提交
470

G
guide 已提交
471
**《Java 面试突击》:** 由本文档衍生的专为面试而生的《Java 面试突击》V3.0 PDF 版本[公众号](#公众号)后台回复 **"面试突击"** 即可免费领取!
S
SnailClimb 已提交
472

G
guide 已提交
473 474
![我的公众号](https://cdn.jsdelivr.net/gh/javaguide-tech/blog-images/2020-08/167598cd2e17b8ec.png)