Learning Plan for a Java Backend Developer
Here is a list of points of knowledge I prepared for myself to learn or to review in order to be an advanced Java backend developer.
Java Fundamentals
- Collection,
java.util.concurrent
, IO/NIO, reflection
- Dynamic proxy, CGLIB
How to generate proxy class
- JVM, JMM (JVM Memory Model)
Mechanism of garbage collection (CMS GC + G1 GC) JMM: refer to java language specification JVM optimization: parameter optimization ConcurrentHashMap, CopyOnWrite, Thread pool, CAS, AQS
Commonly used Frameworks
- Spring
- IOC/AOP (design patterns): just skip through its source code
- Source code level
- MyBatis
- Source code level
Database
- MySQL
- common practice of parameter settings
- how to choose storage engine
- how to choose index engine
- table design
- SQL optimization
- Redis
- internals
- common practice of parameter settings
Web
- HTTP Protocol: wikipedia
- SOA: wikipedia
- Caching
- Guava cache
- memcached
- redis
- Serialization (Google protocol buffer)
- RPC
- dubbo
- JMS
- internals
Basics
- Algorithm & Data structure
- <= Red-black tree
- IOC/AOP
- Design pattern (~ 15) ~> Wikipedia
Software Engineering and Management
High-Quality Software Engineering
References
- Watchmen
- Collections of Java interview questions
- MyBatis Caching