First, the question answer 1. Point out the inadequacy of my study plan, or point out what I missed, but not learn. [1] Omission of Java is now widely used in server programming, which is a big reason for its concurrency and network programming is very useful, see your plan, the attention to concurrency is correct, design patterns and classic books on Java learning is the basis for advanced, but if you want to develop in a specific direction, I think there's still something missing: (1) distributed computing can be combined with the learning of Network programming (2) Java tuning can be combined with the study of the JVM [2] not enough from your description, see "Too much", you can add some practice. 2. Finally, you can give your own learning Plan (Learning Plan or success path, or how to learn and then learn the result is good). The establishment of the plan is based on the individual's existing basis, learning ability, time management ability to come, everyone will not be the same, my personal learning experience is this (I did not go too deep in Java, but also enough to advanced), my personal direction is actually big data/distributed computing, but big data too much to use in Java, So Java also learned well: d[1] laying the groundwork (with a problem when learning) (1) Language: Solid to play a good Java Foundation, focus on the concurrency and network parts, understand some common design patterns (do not back, need experience to understand). (2) Data structures and algorithms: If you cannot organize data, manipulate the data, and solve problems naturally cannot be improved. (3) Operating system and network: When it comes to performance, it will be used. Please use 20% of the time to master the essentials of the above content 80%. [2] Code (1) Project: This either go to the project to do, or own a very cool idea, after the foundation, to believe that they can do well, in the process you will encounter a variety of details, by looking at various APIs, various Google, to supplement the Foundation Stage missing details, Also has access to many tools, such as Maven/sbt,junit and so on. (2) Source: First, in order to see the source code and look at the source code, good project contains a lot of good design, good language details, through the source of learning you can learn more about the basis of how to use, to understand the design and concrete implementation of the trade-off, which for the future to design the system is very helpful; Project performance problems have to look at the source code, this drive is more powerful, and will drive you to modify the source code to improve performance, the basis for improving performance is that you learned knowledge before. You can look at the source of spring, you can also see the Java Collection source code, find a serious walk down.
How is Java learning advanced?