Introduction: You need enough time to read this article. The author will take you step by step from shallow to deep to understand the various knowledge points that a senior architect needs to master. You can also compare yourself according to the knowledge system listed in the article and check yourself. If you think this article is helpful to you, you can like and follow.
content:
1. Basics
2. Advanced
3. Advanced
4. Architecture
5. Extensions
6. System articles
7. Recommended books
8. Summary
1. Basics
JVM
JVM memory structure
Difference between heap, stack, method area, direct memory, heap and stack
Java memory model
memory visibility, reordering, sequential consistency, volatile, locking, final
garbage collection
Memory allocation strategy, garbage collector (G1), GC algorithm, GC parameters, determination of object survival
JVM parameters and tuning
Java Object Model
oop-klass, object header
HotSpot
Just-in-time compiler, compilation optimization
class loading mechanism
classLoader, class loading process, parent delegation (destroy parent delegation), modularity (jboss modules, osgi, jigsaw)
Virtual Machine Performance Monitoring and Troubleshooting Tools
jps, jstack, jmap、jstat, jconsole, jinfo, jhat, javap, btrace、TProfiler
Compile and decompile
javac 、javap 、jad 、CRF
Java Basics
read the source code
String、Integer、Long、Enum、BigDecimal、ThreadLocal、ClassLoader & URLClassLoader、ArrayList & LinkedList、 HashMap & LinkedHashMap & TreeMap & CouncurrentHashMap、HashSet & LinkedHashSet & TreeSet
Various variable types in Java
Familiar with the use of Java String, familiar with the various functions of String
The principle and difference of substring in JDK 6 and JDK 7,
replaceFirst、replaceAll、replace区别、
String overloads of "+",
The difference between String.valueOf and Integer.toString,
immutability of strings
Automatic unpacking
Integer's caching mechanism
Familiar with various keywords in Java
Principle and usage of transient, instanceof, volatile, synchronized, final, static, const.
Collection class
The use of common collection classes
Difference between ArrayList and LinkedList and Vector
The difference between SynchronizedList and Vector
HashMap、HashTable、ConcurrentHashMap区别
Stream related usage in Java 8
The use of apache collection processing tool class
Differences and reasons for the implementation of HashMap in different versions of JDK
enumerate
Enumeration usage, enumeration and singleton, Enum class
Java IO & Java NIO, and learn to use
The difference between bio, nio and aio, the usage and principles of the three IOs, netty
Java reflection and javassist
Reflection and Factory Patterns, java.lang.reflect.*
Java serialization
What is serialization and deserialization and why serialization
The underlying principle of serialization
Serialization and Singleton Pattern
protobuf
Why serialization is not safe
annotation
Meta-annotations, custom annotations, the use of common annotations in Java, the combination of annotations and reflection
JMS
What is Java Message Service, JMS Messaging Model
JMX
java.lang.management.*、 javax.management.*
Generics
Generics and Inheritance
type erasure
Generic KTVE
The meaning of object, etc., various usages of generics
unit test
junit, mock, mockito, in-memory database (h2)
regular expression
java.lang.util.regex. *
Commonly used Java tool library
commons.lang, commons.*... guava-libraries netty
What is API&SPI
abnormal
Exception types, handling exceptions correctly, custom exceptions
time processing
Time Zone, Season, Time API in Java
Encoding
Solve the problem of garbled characters, common coding methods
syntactic sugar
The principle of syntactic sugar in Java, the solution of syntactic sugar
Java concurrent programming
What is a thread and the difference from a process
Read the source code and learn to use
Thread、Runnable、Callable、ReentrantLock、ReentrantReadWriteLock、Atomic*、Semaphore、CountDownLatch、、ConcurrentHashMap、Executors
Thread Pool
Design your own thread pool, submit() and execute()
thread safety
Deadlock, how to troubleshoot deadlock, Java thread scheduling, the relationship between thread safety and memory model
Lock
CAS, optimistic locks and pessimistic locks, database-related lock mechanisms, distributed locks, biased locks, lightweight locks, heavyweight locks, monitor, lock optimization, lock elimination, lock coarsening, spin locks, reentrant locks, blocking lock, deadlock
deadlock
volatile
happens-before, compiler instruction reordering, and CPU instruction reordering
synchronized
How is synchronized implemented?
The relationship between synchronized and lock
How to implement a thread-safe singleton without using synchronized
sleep 和 wait
wait 和 notify
notify 和 notifyAll
ThreadLocal
Write a deadlocked program
Write code to solve the producer consumer problem
Daemon thread
The difference and usage of daemon threads and non-daemon threads
2. Advanced
Basic knowledge of Java
Bytecode, class file format
CPU cache, L1, L2, L3 and false sharing
tail recursion
bit operation
Add, Subtract, Multiply, Divide, and Take the remainder using bitwise operations
Design Patterns
Learn about 23 design patterns
Use common design patterns
Singletons, policies, factories, adapters, chains of responsibility.
Implement AOP
Implementing IOCs
Implement thread-safe singleton pattern without synchronized and lock
nio and reactor design patterns
Network programming knowledge
Common protocols such as tcp, udp, http, https
Three-way handshake and four-time close, flow control and congestion control, OSI seven-layer model, tcp sticking and unpacking
Difference before http/1.0 http/1.1 http/2
Java RMI,Socket,HttpClient
cookie 与 session
cookie is disabled, how to implement session
Write a simple HTTP server for static files in Java
Implement client-side caching function, support returning 304 Implement concurrent download of a file Use thread pools to process client requests Use nio to process client requests Support simple rewrite rules The above functions need to meet the "open and closed principle" when implemented
Understand the characteristics of nginx and apache servers and build a corresponding server
Implementing FTP and SMTP Protocols with Java
way of communication between processes
What is a CDN? If realized?
What is DNS?
reverse proxy
Framework knowledge
Servlet thread safety issues
Filter and listener in Servlet
Hibernate's caching mechanism
Lazy loading of Hiberate
Initialization of Spring Beans
Spring's AOP principle
Implement Spring's IOC by yourself
Spring MVC
Spring Boot2.0
Spring Boot's starter principle, implement a starter yourself
Spring Security
application server
JBoss
tomcat
jetty
Weblogic
tool
git & svn
maven & gradle
3. Advanced
new technology
Java 8
lambda expressions, Stream API,
Java 9
Jigsaw、Jshell、Reactive Streams
Java 10
Local variable type inference, G1 parallel Full GC, ThreadLocal handshake mechanism
Spring 5
reactive programming
Spring Boot 2.0
performance optimization
Use singleton, use Future pattern, use thread pool, select ready, reduce context switching, reduce lock granularity, data compression, result caching
online problem analysis
dump get
Thread Dump, Memory Dump, gc situation
dump analysis
Analyze deadlocks and analyze memory leaks
Write various outofmemory, stackoverflow programs by yourself
HeapOutOfMemory、 Young OutOfMemory、MethodArea OutOfMemory、ConstantPool OutOfMemory、DirectMemory OutOfMemory、Stack OutOfMemory Stack OverFlow
Common problem solving ideas
Memory overflow, thread deadlock, class loading conflict
Use tools to try to solve the following problems and write a summary
How to find problems when a Java program responds slowly,
How to solve the problem when a Java program frequently FullGC,
How to view garbage collection logs,
How to solve when OutOfMemory occurs in a Java application,
How to judge whether there is a deadlock,
How to tell if there is a memory leak
Compilation principle knowledge
Compile and decompile
Compilation and decompilation of Java code
Java decompiler
Lexical Analysis, Syntax Analysis (LL Algorithm, Recursive Descent Algorithm, LR Algorithm), Semantic Analysis, Runtime Environment, Intermediate Code, Code Generation, Code Optimization
Operating system knowledge
Common Commands in Linux
Process synchronization
buffer overflow
Segmentation and pagination
virtual memory vs main memory
Database knowledge
MySql execution engine
MySQL execution plan
How to view the execution plan and how to optimize SQL based on the execution plan
SQL optimization
affairs
The isolation level of the transaction and whether the transaction can implement the lock function
database lock
Row locks, table locks, optimistic locking using database locks,
Active and standby database construction
binlog
Memory Database
h2
Commonly used nosql database
redis、memcached
Use database locks and NoSql to implement distributed locks respectively
performance tuning
Knowledge of data structures and algorithms
simple data structure
stack, queue, linked list, array, hash table,
Tree
Binary tree, dictionary tree, balanced tree, sorting tree, B-tree, B+ tree, R-tree, multi-way tree, red-black tree
Sorting Algorithm
Various sorting algorithms and time complexity depth-first and breadth-first search full permutation, greedy algorithm, KMP algorithm, hash algorithm, massive data processing
Big data knowledge
Zookeeper
Basic concepts and common usage
Solr,Lucene,ElasticSearch
Deploy solr, solrcloud, and add, delete, and query indexes on Linux
Storm, Streaming Computing, Understanding Spark, S4
Deploy storm on linux, coordinate with zookeeper, run storm hello world, run and debug storm topology in local and remote mode.
Hadoop, offline computing
HDFS、MapReduce
Distributed log collection flume, kafka, logstash
data mining, mahout
Network security knowledge
What is XSS
Defense against XSS
What is CSRF
What is an injection attack
SQL injection, XML injection, CRLF injection
What is a file upload vulnerability
encryption and decryption
MD5,SHA1、DES、AES、RSA、DSA
What is DOS attack and DDOS attack
Why memcached can lead to DDos attacks and what is reflective DDoS
SSL、TLS,HTTPS
How to do a DOS attack via Hash collision
Sign a certificate with openssl and deploy to apache or nginx
4. Architecture
distributed
Data Consistency, Service Governance, Service Degradation
Distributed transaction
2PC, 3PC, CAP, BASE, Reliable Message Eventual Consistency, Best Effort Notification, TCC
Dubbo
Service registration, service discovery, service governance
Distributed database
How to create a distributed database, when do you need a distributed database, mycat, otter, HBase
Distributed file system
mfs、fastdfs
Distributed cache
Cache Coherency, Cache Hit Rate, Cache Redundancy
Microservices
SOA, Conway's Law
ServiceMesh
Docker & Kubernets
Spring Boot
Spring Cloud
High concurrency
Sub-library and sub-table
CDN technology
message queue
ActiveMQ
monitor
what to monitor
CPU, memory, disk I/O, network I/O, etc.
Monitoring means
Process monitoring, semantic monitoring, machine resource monitoring, data fluctuation
Monitoring data collection
log, log
Dapper
load balancing
tomcat load balancing, Nginx load balancing
DNS
DNS principle, DNS design
CDN
data consistency
If you want to know more about Java architecture technology, you can follow me. I will share more knowledge points about architecture technology in the future. In addition, I will recommend an architecture exchange and learning group to you: 650385180 , which will share some Video recordings recorded by senior architects: Source code analysis of Spring, MyBatis, Netty, principles of high concurrency, high performance, distributed, and microservice architecture, JVM performance optimization, and concurrent programming have become essential knowledge systems for architects. You can also receive free learning resources, which have benefited a lot at present. The following course system diagram is also obtained in the group.
5. Extensions
cloud computing
IaaS, SaaS, PaaS, virtualization technology, openstack, Serverlsess
search engine
Solr、Lucene、Nutch、Elasticsearch
authority management
Shiro
blockchain
Hash algorithm, Merkle tree, public key cryptography algorithm, consensus algorithm, Raft protocol, Paxos algorithm and Raft algorithm, Byzantine problem and algorithm, message authentication code and digital signature
bitcoin
Mining, Consensus Mechanism, Lightning Network, Sidechains, Hot Issues, Forks
Ethereum
Hyperledger
artificial intelligence
Mathematical foundation, machine learning, artificial neural network, deep learning, application scenarios.
Common framework
TensorFlow、DeepLearning4J
other languages
Groovy、Python、Go、NodeJs、Swift、Rust
6. System articles
1. Performance tuning
Whether it’s dealing with front-end interviews or improving product experience, performance optimization is an inescapable topic.
The purpose of optimization is to make users feel "fast", so how to make users feel fast?
The loading speed is really fast, the user opens the input URL and presses enter to see the page immediately
It doesn't load faster, but users feel your site is fast
Performance optimization depends on several factors, including garbage collection, virtual machine, and underlying operating system (OS) settings. There are several tools available to developers for analysis and optimization, you can learn and use them by reading Java Tools for Source Code Optimization and Analysis.
It must be understood that no two applications can use the same optimization, and there is no perfectly optimized reference path for a java application. Use best practices and stick to the proper way to handle performance optimizations. To achieve the truly highest performance optimizations, you as a Java developer need to have a proper understanding of the Java Virtual Machine (JVM) and the underlying operating system.
The following five knowledge systems are the experiences I have gathered from many years of practice, and they are all the most mainstream technologies at present. If you want to know more and learn in depth, you can join the group: 650385180 , which will share some videos recorded by senior architects: Spring, MyBatis, Netty source code analysis, high concurrency, high performance, distributed, and the principle of microservice architecture, JVM performance optimization and concurrent programming have become a must-have knowledge system for architects.
The following figure is a summary of several knowledge systems that I should learn and understand about performance optimization:
2. Source code interpretation
Source code analysis is a kind of critical knowledge. Once you have mastered this critical knowledge, you can adapt to any changes. For many people, source code analysis is boring, jerky and difficult to understand.
Source code reading, I think there are three core points: technical foundation + strong curiosity + patience.
I think it is the core driving force of reading source code. I have seen the vast majority of programmers, and their attitude towards learning is basically these levels (very extreme):
1. Just focus on the project itself, if you don't understand it, just baidu it.
2. In addition to doing a good job in the project, I will also read technical books related to the project, see wikipedia.
3. In addition to reading books related to projects, I will also read books in the IT industry. For example, when learning Java, I will also learn about functional languages, such as LISP.
4. Look for some open source projects, try a lot of third-party frameworks, and write demos.
5. Read the basic framework, J2EE specification, Debug server kernel.
Most programs are type 1, and reaching type 5 requires not only intense interest, but also courage: Can I read it? Actually, you can read it.
Patience is really important. Because you rarely see instructive articles or books for reading source code, and no one asks or recommends that you read them. You will often get stuck while reading, and one card owner may be stuck in a maze. At this time, what you need to do may be to temporarily interrupt it, and then look at it from the periphery: such as the API structure and the design diagram of the framework.
The following figure is my summary of the source code knowledge points that should be learned most at present:
3. Distributed
Distributed system is an old and broad topic, but in recent years, due to the rise of the concept of "big data", it has radiated new youth and vitality. In addition, distributed system is also a subject content that attaches equal importance to theoretical models and engineering techniques. Compared with the research direction of machine learning, students who study distributed systems often feel: "It is easy to get started, but difficult to go deep." Indeed, learning distributed systems hardly requires much math.
Distributed systems is a complex and broad field of study, and taking an online course or two and reading a book or two may not cover it all.
In general, the task of a distributed system is to organically combine and connect multiple machines, so that they can cooperate to complete a task, which can be a computing task or a storage task. If we must make a classification of distributed system research in recent years, I personally think that it can include three major parts:
1. Distributed storage system
2. Distributed computing system
3. Distributed management system
The following figure is my summary of the most mainstream distributed technologies in recent years:
4. Microservices
At present, microservices are very hot, and everyone claims to be using microservice architecture, but what exactly is microservice architecture? Is the microservice architecture a development trend? We all lack a clear understanding of these issues.
In order to solve various problems under the monolithic architecture, the microservice architecture came into being. Rather than building a bloated, untamable monster, it's better to break up the service sooner rather than later. The core idea of microservices is to split and decouple services to reduce complexity. Microservices emphasize the rational disassembly of functions, ensure that each service has a single function as much as possible, and define roles according to the Single Responsibility Principle. Each service is made lighter, so as to be flexible and reusable, and it can also be deployed and scaled independently according to the resource requirements of each service.
The following figure is my summary of the knowledge points that microservices need to learn:
5. Engineering
If you want to do a good job, you must first sharpen your tools. Whether you are a novice or a senior developer, you need to choose a good tool first. Improve development efficiency and team collaboration efficiency. Allow yourself more time to think.
7. Recommended books
"In-depth understanding of the Java virtual machine"
《Effective Java》
"In-depth analysis of Java Web technology insider"
"Technical Architecture of Large Websites"
"Clean Code"
"Head First Design Patterns"
"maven combat"
"Blockchain Principle, Design and Application"
"Java Concurrent Programming Practice"
"Brother Bird's Linux Private Kitchen"
"From Paxos to Zookeeper"
"Architecture is the Future"
8. Summary:
The above are the technical points of Java that I have summarized from the shallower to the deeper. I hope that the above content can help Java programmers who are struggling silently, encounter bottle disease and don’t know what to do, and need to learn, and those who obtain information can also add the above. The recommended group hopes to help friends and children’s shoes who are developing in this industry, spend less time looking for information in forums, blogs and other places, and spend limited time on learning.
If there are any shortcomings in the summary of the knowledge points, friends are welcome to correct them, and friends who feel that they have gained something can also like and follow.