The difference between you and Alibaba's senior architects is not only age (advanced must see)

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.

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=324483012&siteId=291194637