1 Star 0 Fork 4K

杜剑锋 / JavaGuide

forked from SnailClimb / JavaGuide 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
README.en.md 26.85 KB
一键复制 编辑 原始数据 按行查看 历史
SnailClimb 提交于 2022-03-03 09:14 . ✨[docs feat]vuepress主题更新

👏 MAJOR UPDATE!!! Serious!

Read in other languages: Mandarin

  1. Introduction: For an introduction to the JavaGuide, see: Some notes on the JavaGuide
  2. Contribution Guide : You are welcome to participate in the maintenance of JavaGuide, it's a very rewarding thing to do.
  3. PDF Version : JavaGuide Interview Blitz Edition PDF Version
  4. Illustrated Computer Fundamentals : Illustrated Computer Fundamentals PDF Download
  5. Planet of Knowledge : Resume guide/Java learning/Interview guide/Interview booklet. You are welcome to join My Knowledge Planet
  6. Interview Special Edition : For those who are preparing for the interview, you can consider the interview special edition: [Java Interview Advanced Guide].(https://www.yuque.com/docs/share/f37fc804-bfe6-4b0d-b373-9c462188fec7) (Very high quality, built specifically for interviews, free for planet users)
  7. Reprint Instructions: All the following articles are my (Guide) original if not stated at the beginning of the text, reproduced at the beginning of the text to indicate the source, if found malicious plagiarism / transport, will use legal weapons to defend their rights. Let's maintain a good technical creation environment together! ⛽️

阅读 stars forks issues

Recommended

Java

Basis

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

Important Knowledge Points Explained:

Collection

  1. Java collection FAQ summary (must see :+1:)
  2. Summary of considerations for using Java containers
  3. source code analysis : ArrayList source code + expansion mechanism analysis, [HashMap(JDK1.8) source code + underlying data structure analysis](docs/java/collection/ hashmap-source-code.md), ConcurrentHashMap source code + underlying data structure analysis

Concurrency

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

  1. Java concurrency basic common interview questions summary
  2. Java concurrency advanced common interview questions summary

Important Knowledge Points Explained:

  1. Thread pool: Java thread pool learning summary, Java thread pooling best practices
  2. ThreadLocal keyword resolution
  3. Java concurrency container summary
  4. Atomic atomic class summary
  5. AQS principle and AQS synchronization component summary
  6. Getting Started with CompletableFuture

JVM (must see :+1:)

This part of JVM mainly refers to JVM Virtual Machine Specification-Java8 and Mr. Zhou's In-depth Understanding of Java Virtual Machine (3rd Edition) (Highly recommended to read more than once!) .

  1. Java Memory Regions
  2. JVM Garbage Collection
  3. JDK monitoring and troubleshooting tools
  4. Class file structure
  5. Class loading process
  6. Class loader
  7. [To be completed] Summary of the most important JVM parameters (half of the translation is perfected)
  8. [Extra Meal] The Big White Word takes you through the JVM

New features

  1. Java 8: Java 8 new features summary, Java8 common new features summary
  2. Java9~Java15 : An article to take you through the important new features of JDK9~15!

Tips

  1. JAD decompile
  2. Handy for locating common Java performance problems

Computer Basics

👉 Illustrated Computer Fundamentals PDF Download .

Operating system

  1. OS FAQ summary!
  2. Backend programmer essential Linux basics summary
  3. Introduction to Shell Programming

Networking

  1. Computer Network Common Interview Questions
  2. Xie Xiren teacher's "computer network" content summary

Data Structures

Diagrammatic Data Structures :

  1. Linear data structure :array, chain table, stack, queue
  2. diagram
  3. heap
  4. tree : focus on red-black-tree, B-, B+, B* tree, LSM tree

Other common data structures : 1.

  1. Bloom filter

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.

Summary of common algorithm problems :

In addition,GeeksforGeeks This site summarizes the common algorithms, which are more comprehensive and systematic.

Database

MySQL

Summary:

  1. Database Basics Summary
  2. MySQL Knowledge Summary (Must see:+1:)
  3. One Thousand Lines MySQL Study Notes
  4. MySQL High Performance Optimization Specification Recommendations

Important knowledge points:

  1. Transaction isolation level (graphic detail)

  2. MySQL's Three Major Logs (binlog, redo log and undo log) Explained

  3. InnoDB storage engine implementation of MVCC

  4. How does a SQL statement get executed in MySQL?

  5. Character set details: Why is it not recommended to use utf8 in MySQL?

  6. A little thought on how to store time in the database

Redis

  1. Redis FAQ Summary
  2. 3 common cache read and write strategies

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

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

Common frameworks

If you have not touched Java Web development, you can first look at my summary of J2EE Basics. 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
  2. SpringBoot Getting Started Guide

Important Knowledge Points Explained: 1.

  1. Spring/Spring Boot common annotations summary! Arrangement!
  2. Spring Transaction Summary
  3. What design patterns are used in Spring?
  4. SpringBoot auto-assembly principle?"

MyBatis

MyBatis Common Interview Questions Summary

Spring Cloud

Getting Started with Spring Cloud in Plain English

Security

Certification Authorization

Fundamentals of Certification Authorization 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.

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

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.

API gateway

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

Related reading.

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?

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
  2. [Advanced] Summary of ZooKeeper Related Concepts
  3. [Hands-on] ZooKeeper hands-on

High performance

Message Queues

Message queues are used in distributed systems primarily for decoupling and peak shaving. Related reading: Message Queues FAQ Summary

  1. RabbitMQ : Getting Started with RabbitMQ
  2. RocketMQ : Getting Started with RocketMQA few simple questions and answers for RocketMQ
  3. Kafka : Kafka FAQ Summary

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

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?

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?

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.

About the Author

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

Java
1
https://gitee.com/jianfeng_du/JavaGuide.git
git@gitee.com:jianfeng_du/JavaGuide.git
jianfeng_du
JavaGuide
JavaGuide
main

搜索帮助