<p style="text-align:center">
<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 style="text-align:center">
  <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>
<h3 style="text-align:center">Recommended</h3>
<table>
  <tbody>
    <tr>
       <td style="text-align:center" valign="middle">
        <a href="https://sourl.cn/e7ee87">
         <img src="https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/xingqiu/xingqiu.png" style="margin: 0 auto;width:850px" /></a>
      </td>       
    </tr>
  </tbody>
</table>

## Java

### Basis

**Knowledge points/interview questions**: (Must see:+1: ): 

- [Java Basics Knowledge Points/Interview Questions Summary(1)](docs/java/basis/java-basic-questions-01.md)
- [Java Basics Knowledge Points/Interview Questions Summary(2)](docs/java/basis/java-basic-questions-01.md)
- [Java Basics Knowledge Points/Interview Questions Summary(3)](docs/java/basis/java-basic-questions-01.md)

**Important Knowledge Points Explained:**

- [Why only value passing in Java?](docs/java/basis/why-thereis-only-value-passing-in-java.md)
- [What is the reflection mechanism? What are the application scenarios of reflection mechanism?](docs/java/basis/反射机制详解.md)
- (docs/java/basis/proxy-model-detail.md) [proxy-model-detail: static proxy + JDK/CGLIB dynamic proxy practice](docs/java/basis/代理模式详解.md)
- [What are the common IO models and what is the difference between BIO, NIO, AIO in Java?](docs/java/basis/io模型详解.md)
- [BigDecimal solve floating point problem](docs/java/basis/bigdecimal.md)

### Collection

1. **[Java collection FAQ summary](docs/java/collection/java集合框架基础知识&面试题总结.md)** (must see :+1:)
2. [Summary of considerations for using Java containers](docs/java/collection/java集合使用注意事项.md)
3. **source code analysis** : [ArrayList source code + expansion mechanism analysis](docs/java/collection/arraylist-source-code.md),
[HashMap(JDK1.8) source code + underlying data structure analysis](docs/java/collection/ hashmap-source-code.md), 
[ConcurrentHashMap source code + underlying data structure analysis](docs/java/collection/concurrent-hash-map-source-code.md)

### Concurrency

**Knowledge/Interview Questions:** (Must see :+1:)

1. **[Java concurrency basic common interview questions summary](docs/java/concurrent/java并发基础常见面试题总结.md)**
2. **[Java concurrency advanced common interview questions summary](docs/java/concurrent/java并发进阶常见面试题总结.md)**

**Important Knowledge Points Explained:**

1. **Thread pool**: [Java thread pool learning summary](./docs/java/concurrent/java-thread-pool-summary.md), [Java thread pooling best practices](./docs/java/concurrent/java-thread-pool-best-practices.md)
2. [ThreadLocal keyword resolution](docs/java/concurrent/threadlocal.md)
3. [Java concurrency container summary](docs/java/concurrent/java-concurrent-collections.md)
4. [Atomic atomic class summary](docs/java/concurrent/atomic-classes.md)
5. [AQS principle and AQS synchronization component summary](docs/java/concurrent/aqs.md)
6. [Getting Started with CompletableFuture](docs/java/concurrent/completablefuture-intro.md)

### JVM (must see :+1:)

This part of JVM mainly refers to [JVM Virtual Machine Specification-Java8 ](https://docs.oracle.com/javase/specs/jvms/se8/html/index.html) and Mr. Zhou's [In-depth Understanding of Java Virtual Machine (3rd Edition)](https://book.douban.com/subject/34907497/) (Highly recommended to read more than once!) .

1. **[Java Memory Regions](https://javaguide.cn/java/jvm/jvm-garbage-collection/)**
2. **[JVM Garbage Collection](https://javaguide.cn/java/jvm/jvm-garbage-collection/)**
3. [JDK monitoring and troubleshooting tools](https://javaguide.cn/java/jvm/jdk-monitoring-and-troubleshooting-tools/)
4. [Class file structure](https://javaguide.cn/java/jvm/class-file-structure/)
5. **[Class loading process](https://javaguide.cn/java/jvm/class-loading-process/)**
6. [Class loader](https://javaguide.cn/java/jvm/classloader/)
7. **[[To be completed] Summary of the most important JVM parameters (half of the translation is perfected)](https://javaguide.cn/java/jvm/jvm-parameters-intro/)**
8. **[[Extra Meal] The Big White Word takes you through the JVM](https://javaguide.cn/java/jvm/jvm-intro/)**

### New features

1. **Java 8**: [Java 8 new features summary](docs/java/new-features/Java8新特性总结.md), [Java8 common new features summary](docs/java/new-features/java8-common-new-features.md)
2. **Java9~Java15** : [An article to take you through the important new features of JDK9~15!](./docs/java/new-features/java新特性总结.md)

### Tips

1. [JAD decompile](docs/java/tips/JAD反编译tricks.md)
2. [Handy for locating common Java performance problems](./docs/java/tips/locate-performance-problems/手把手教你定位常见Java性能问题.md)


## Computer Basics

👉 **[Illustrated Computer Fundamentals PDF Download](https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=100021725&idx=1&sn=2db9664ca25363139a81691043e9fd8f&chksm=4ea19a1679d61300d8990f7e43bfc7f476577a81b712cf0f9c6f6552a8b219bc081efddb5c54#rd)** .

### Operating system

1. [OS FAQ summary!](docs/cs-basics/operating-system/操作系统常见面试题&知识点总结.md)
2. [Backend programmer essential Linux basics summary](docs/cs-basics/operating-system/linux-intro.md)
3. [Introduction to Shell Programming](docs/cs-basics/operating-system/shell-intro.md)

### Networking

1. [Computer Network Common Interview Questions](docs/cs-basics/network/计算机网络常见面试题.md)
2. [Xie Xiren teacher's "computer network" content summary](docs/cs-basics/network/谢希仁老师的《计算机网络》内容总结.md)

### Data Structures

**Diagrammatic Data Structures :**

1. [Linear data structure :array, chain table, stack, queue](docs/cs-basics/data-structure/线性数据结构.md)
2. [diagram](docs/cs-basics/data-structure/图.md)
3. [heap](docs/cs-basics/data-structure/堆.md)
4. [tree](docs/cs-basics/data-structure/树.md) : focus on [red-black-tree](docs/cs-basics/data-structure/红黑树.md), B-, B+, B* tree, LSM tree

Other common data structures : 1.

1. [Bloom filter](docs/cs-basics/data-structure/bloom-filter.md)


### Algorithm

This part of the algorithm is very important, if you do not know how to learn the algorithm, you can look at what I wrote.

- [Recommended Algorithm Learning Books + Resources](https://www.zhihu.com/question/323359308/answer/1545320858) 。
- [如何刷Leetcode?](https://www.zhihu.com/question/31092580/answer/1534887374) 

**Summary of common algorithm problems** :

- [Several Common String Algorithm Questions Summarized ](docs/cs-basics/algorithms/几道常见的字符串算法题.md)
- [Summary of several common algorithm problems of the chain table ](docs/cs-basics/algorithms/几道常见的链表算法题.md)
- [Link offer some programming questions](docs/cs-basics/algorithms/剑指offer部分编程题.md)

In addition，[GeeksforGeeks]( https://www.geeksforgeeks.org/fundamentals-of-algorithms/) This site summarizes the common algorithms, which are more comprehensive and systematic.

## Database

### MySQL

**Summary:**

1. [Database Basics Summary](docs/database/数据库基础知识.md)
2. **[MySQL Knowledge Summary](docs/database/mysql/mysql知识点&面试题总结.md)** (Must see:+1:)
4. [One Thousand Lines MySQL Study Notes](docs/database/mysql/a-thousand-lines-of-mysql-study-notes.md)
5. [MySQL High Performance Optimization Specification Recommendations](docs/database/mysql/mysql-high-performance-optimization-specification-recommendations.md)

**Important knowledge points:**

1. [Transaction isolation level (graphic detail)](docs/database/mysql/transaction-isolation-level.md)
2. [MySQL's Three Major Logs (binlog, redo log and undo log) Explained](docs/database/mysql/mysql-logs.md)
3. [InnoDB storage engine implementation of MVCC](docs/database/mysql/innodb-implementation-of-mvcc.md)
4. [How does a SQL statement get executed in MySQL?](docs/database/mysql/how-sql-executed-in-mysql.md)
5. [Character set details: Why is it not recommended to use utf8 in MySQL?](docs/database/字符集.md)
6. [A little thought on how to store time in the database](docs/database/mysql/some-thoughts-on-database-storage-time.md)

### Redis

1. [Redis FAQ Summary](docs/database/redis/redis-questions-01.md)
2. [3 common cache read and write strategies](docs/database/redis/3-commonly-used-cache-read-and-write-strategies.md)

## Search Engine

It is used to improve search efficiency and functions similarly to browser search engines. The more common search engines are Elasticsearch (recommended) and Solr.

## System design

### System design essential foundation

#### RESTful API

When we do back-end development, our main job is to provide APIs for front-end or other back-end services such as APIs for querying user data. a RESTful API is an API built on REST, and it is an API designed to be better used.

Related reading: [RestFul API Brief Tutorial](docs/system-design/basis/RESTfulAPI.md)

#### Name

During programming, you must pay attention to naming. Because a good naming is a comment, others will know what your variable, method or class does as soon as they see your naming!

Read more about: [Java Naming](docs/system-design/naming.md) 。

### Common frameworks

If you have not touched Java Web development, you can first look at my summary of [J2EE Basics](docs/system-design/J2EE基础知识.md). Although much of the content in this article is now obsolete, it will give you a deeper understanding of Java backend technology development.

#### Spring/SpringBoot (must see :+1:)

**Knowledge/Interview Questions:** 

1. **[Spring FAQ Summary](docs/system-design/framework/spring/Spring常见问题总结.md)**
2. **[SpringBoot Getting Started Guide](https://github.com/Snailclimb/springboot-guide)**

**Important Knowledge Points Explained:** 1.

1. **[Spring/Spring Boot common annotations summary! Arrangement!](./docs/system-design/framework/spring/Spring&SpringBoot常用注解总结.md)** 
2. **[Spring Transaction Summary](docs/system-design/framework/spring/Spring事务总结.md)** 
3. [What design patterns are used in Spring?](docs/system-design/framework/spring/Spring设计模式总结.md)
4. **[SpringBoot auto-assembly principle?"](docs/system-design/framework/spring/SpringBoot自动装配原理.md)**

#### MyBatis

[MyBatis Common Interview Questions Summary](docs/system-design/framework/mybatis/mybatis-interview.md)

#### Spring Cloud

[Getting Started with Spring Cloud in Plain English](docs/system-design/framework/springcloud/springcloud-intro.md)

### Security

#### Certification Authorization

**[Fundamentals of Certification Authorization](docs/system-design/security/basis-of-authority-certification.md)** In this article I will introduce the common concepts of authentication and authorization: **Authentication**, **Authorization** and **Cookie**, **Session**, Token, **OAuth 2**, **SSO**. If you are not clear about these concepts, we suggest you read this article properly.

- **JWT** : JWT (JSON Web Token) is a form of authentication, where a JWT is essentially a signed piece of data in JSON format. Since it is signed, the recipient can verify its authenticity. Related reading.
  - [JWT Pros and Cons Analysis and Solutions to Common Problems](docs/system-design/security/jwt优缺点分析以及常见问题解决方案.md)
  - [Demo for beginners to get started with Spring Security With JWT](https://github.com/Snailclimb/spring-security-jwt-guide)

- **SSO(Single Sign On)**: **SSO(Single Sign On)** that is, single sign on means that a user has the right to access other systems related to him/her by logging into one of the multiple subsystems. For example, after we logged into Jingdong Finance, we also successfully logged into Jingdong Supermarket, Jingdong Home Appliances and other subsystems of Jingdong. Related reading: [**SSO Single Sign-On is enough to read this article! **](docs/system-design/security/sso-intro.md)

#### Data Desensitization

Data desensitization means that we deform sensitive information data according to specific rules, for example, we replace certain digits of cell phone numbers and ID numbers with *.

### Timed tasks

Recently, some friends asked about timing task related issues. So, I simply wrote an article to summarize some concepts of timed tasks and some common timed task technology options: ["Java Timed Tasks Revealed"].(./docs/system-design/定时任务.md)

## Distributed

### CAP theory and BASE theory

CAP is also the combination of the initials Consistency, Availability, and Partition Tolerance.

**BASE** is an acronym for **Basically Available**, **Soft-state**, and **Eventually Consistent**. The BASE theory is the result of a trade-off between consistency and availability in the CAP, and is derived from a summary of distributed practices for large-scale Internet systems, evolving from the CAP theorem, which significantly reduces our system requirements.

Related reading: [CAP Theory and BASE Theory Explained](docs/distributed-system/theorem&algorithm&protocol/cap&base-theorem.md)

### Paxos algorithm and Raft algorithm

The **Paxos algorithm** was born in 1990 as a classical algorithm for solving the consistency of distributed systems. However, since the Paxos algorithm was very difficult to understand and implement, there were continuous attempts to simplify it. Only in 2013 was a distributed consistency algorithm born that is easier to understand and implement than the Paxos algorithm - the **Raft algorithm**.

### RPC

RPC makes calling remote service calls as easy as calling local methods.

Dubbo is a home-grown RPC framework , open source by Ali . Related reading.

- [Dubbo FAQ Summary](docs/distributed-system/rpc/dubbo.md)
- [Why don't we use RPC instead of HTTP directly for calls between services?](docs/distributed-system/rpc/why-use-rpc.md)

### API gateway

Gateways are mainly used for request forwarding, security authentication, protocol conversion, and disaster recovery.

Related reading.

- [Why gateways? What common gateway systems do you know of?](docs/distributed-system/api-gateway.md)
- [Design and Implementation of Shepherd, a 10 Billion Dollar API Gateway Service](https://tech.meituan.com/2021/05/20/shepherd-api-gateway.html)

### Distributed IDs

In complex distributed systems, a large amount of data and messages often need to be uniquely identified. For example, after the data volume is too large, it is often necessary to split the data into libraries and tables, and after the splitting of the libraries and tables, a unique ID is needed to identify a piece of data or a message, and the self-incrementing ID of the database obviously cannot meet the demand. Related reading: [Why distributed id? What are the distributed id generation solutions?](docs/distributed-system/distributed-id.md)

### Distributed transactions

** A distributed transaction is one in which the participants of the transaction, the server supporting the transaction, the resource server, and the transaction manager are located on different nodes of different distributed systems. **

Simply put, a large operation consists of different small operations that are distributed across different servers and belong to different applications, and the distributed transaction needs to guarantee that all of these small operations either succeed or fail. Essentially, distributed transactions are about ensuring data consistency across different databases.

### Distributed Orchestration

**ZooKeeper**.

> The first two articles may have content overlapping parts, we recommend reading them both.

1. [[Getting Started] Summary of ZooKeeper-related concepts](docs/distributed-system/分布式协调/zookeeper/zookeeper-intro.md)
2. [[Advanced] Summary of ZooKeeper Related Concepts](docs/distributed-system/分布式协调/zookeeper/zookeeper-plus.md)
3. [[Hands-on] ZooKeeper hands-on](docs/distributed-system/分布式协调/zookeeper/zookeeper-in-action.md)

## High performance

### Message Queues

Message queues are used in distributed systems primarily for decoupling and peak shaving. Related reading: [Message Queues FAQ Summary](docs/high-performance/message-queue/message-queue.md)。

1. **RabbitMQ** : [Getting Started with RabbitMQ](docs/high-performance/message-queue/rabbitmq-intro.md)
2. **RocketMQ** : [Getting Started with RocketMQ](docs/high-performance/message-queue/rocketmq-intro)、[A few simple questions and answers for RocketMQ](docs/high-performance/message-queue/rocketmq-questions.md)
3. **Kafka** : [Kafka FAQ Summary](docs/high-performance/message-queue/kafka知识点&面试题总结.md)

### Read-write separation & split database and split table

Read-write separation is mainly to separate the database read and write operations on different database nodes. The master server is responsible for writes and the slave server is responsible for reads. Alternatively, one master and one slave or one master and multiple slaves can be used.

Read-write separation can substantially improve read performance and marginally improve write performance. Therefore, read-write separation is more suitable for scenarios where there are more concurrent read requests from a single machine.

Library and table separation is to solve the problem of continuous database performance degradation due to the excessive amount of library and table data.

Common library and table splitting tools are: `sharding-jdbc` (Dangdang), `TSharding` (Mushroom Street), `MyCAT` (based on Cobar), `Cobar` (Alibaba).... We recommend using `sharding-jdbc`. Because, `sharding-jdbc` is a lightweight `Java` framework, served as a `jar` package, no extra O&M work for us, and good compatibility.

Related reading: [read-write separation & sharding summary of common problems](docs/high-performance/读写分离&分库分表.md)

### Load Balancing

Load balancing systems are often used to distribute tasks such as user request processing to multiple servers to improve the performance and reliability of a website, application or database.

Common load balancing systems include 3 types.

1. **DNS load balancing**: generally used to achieve geographic level balancing.
2. **Hardware Load Balancing**: Load balancing is achieved through a separate hardware device such as F5 (hardware is usually expensive).
3. **Software load balancing**: Load balancing is achieved by load balancing software such as Nginx.

## High Availability

Highly available describes a system that is available most of the time and can provide services to us. High availability means that the system is available even in the event of a hardware failure or system upgrade.

Related reading: **"[How to design a highly available system? What are the areas to consider?](docs/high-availability/高可用系统设计.md)》** 。

### Flow limiting

Flow limiting considers how to respond to system failures from the perspective of user access pressure.

The purpose of flow limiting is to limit the frequency of requests received by the server-side interface to prevent the service from hanging. For example, if an interface is limited to 100 requests per second, requests that exceed the limit are either dropped or placed in a queue for processing. Limiting the flow can effectively deal with the excessive number of burst requests. Related reading: [What is flow limiting? What are the flow limiting algorithms?](docs/high-availability/limit-request.md)

### Downgrading

Downgrading is the consideration of how to respond to system failures from the perspective of system functional priorities.

Service degradation refers to the strategic downgrading of some services and pages based on the current business situation and traffic when the server is under pressure, in order to free up server resources to ensure the normal operation of core tasks.

### Meltdown

Meltdown and degradation are two concepts that are easily confused and do not have the same meaning.

Downgrades are intended to deal with failures of the system itself, while meltdowns are intended to deal with failures of external systems or third-party systems on which the current system depends.

### Queuing

An alternative type of flow limitation, analogous to real-world queuing. If you've played League of Legends, you'll know that every time there's an event, you have to go through a queue to get into the game.

### Clustering

Deploy multiple copies of the same service to avoid single points of failure.

### Timeout and retry mechanism

** Once a user's request goes beyond a certain time without a response, the request is ended and an exception is thrown. ** Failure to set a timeout may result in slow response times, or even a buildup of requests that prevents the system from processing them.

In addition, the number of retries is generally set to 3. More retries will not be beneficial, but will add pressure to the server (some scenarios may not be suitable to use the failure retry mechanism).

### Disaster recovery design and offsite multi-live

**Disaster recovery** = disaster recovery + backup.

- **Backup** : Backup several copies of all important data generated by the system.
- **Disaster Tolerant** : Create two identical systems in offsite locations. When the system in one place suddenly hangs, the whole application system can be switched to the other one so that the system can provide services normally.

**Offsite Multi-Live** describes the deployment of services offsite and the simultaneous provisioning of services to the outside world. The main difference from traditional disaster recovery design is "multi-live", i.e., all sites are providing services to the public at the same time. Off-site multiplication is designed to deal with unexpected situations such as fires, earthquakes, and other natural or perceived disasters.

Related reading.

- [Read this article to understand off-site multi-live](https://mp.weixin.qq.com/s/T6mMDdtTfBuIiEowCpqu6Q)
- [Four steps to build offsite multi-live](https://mp.weixin.qq.com/s/hMD-IS__4JE5_nQhYPYSTg)
- ["Learning Architecture from Scratch" - 28 | Guarantees for Highly Available Business: Offsite Multi-Live Architecture](http://gk.link/a/10pKZ)

## About the Author

- [Personal Introduction Q & A](https://javaguide.cn/about-the-author/)
- [I used to be an Internet addict too](https://javaguide.cn/about-the-author/internet-addiction-teenager/)
- [Feelings after one month of onboarding](https://javaguide.cn/about-the-author/feelings-after-one-month-of-induction-training/)
- [Feelings from graduation to six months of employment](https://javaguide.cn/about-the-author/feelings-of-half-a-year-from-graduation-to-entry/)
- [A training institution stole my article into a video also on the B station popular](https://javaguide.cn/about-the-author/my-article-was-stolen-and-made-into-video-and-it-became-popular/)

## Public

If you want to follow my updated articles and the dry goods I share in real time, you can follow my public number.

**《Java Interview Blitz》:** A PDF version of "Java Interview Blitz" derived from this document specifically for interviews [Public](#公众号) Reply back to **"Interview Blitz "** and get it for free!

![My Public](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)
