Java learning route and method recommendation


The following learning route and method are derived from the author's summary and improvement based on personal learning experience. I believe that your learning efficiency will be very high according to this learning route.

In addition, a very important point: It is recommended to use Intellij IDEA for coding, and you can take some time to learn the use of Intellij IDEA.

Let me talk about a mistake that is easy for beginners to make: learn through projects when you come up.

Many beginners come up like learning by doing projects, especially in companies. I think this is not desirable. If your Java foundation or Spring Boot foundation is not good, it is recommended that you learn it in advance before you start watching videos or doing projects in other ways. There is something else. I don’t know why everyone says that it’s best to follow the project and learn to do it. I think this requires that you have a basic understanding of this technology or that you have a certain understanding of programming.

On how to learn and listen to me, start with the creation of an e-commerce system website. If we want to create a Java-based distributed/microservice e-commerce system, we can follow the learning route below:

The first step is to learn from the basics of Java (if you don't have basic computer knowledge, I recommend reading introductory books like "Introduction to Computer").

One, Java basics

"Java Core Technology Volume 1/2" and "Head First Java" are both very good books for introductory Java in my opinion (" Java Core Technology Volume 1/2" has more knowledge points, and I recommend it This book), I feel that "Java Programming Thoughts" is a bit of a novice to persuade the book to quit, read it carefully, and I suggest that you read it after a little foundation. You can also watch the video while reading a book to learn (individuals who are not capable of self-study are recommended to attend the training). For the new features of Java8, I suggest you read it after you have learned the basics. It doesn't matter if you don't understand it for the time being. Take time to look back later.

After reading it, you can implement a simple Java program with what you have learned, or you can try to solve some programming problems in Java, so as to put what you have learned into practice.

It is not recommended to use games to consolidate when learning the basics of Java. Why do training courses like this way? To put it plainly is to find your G-spot (sorry to drive). It is generally not realistic for a novice to play games after learning the basics of Java. It is better to find some simple program problems to solve such as simple algorithm problems.

Remember to summarize! Lay the foundation! Write down your important things. The API documentation is placed where you can see it so that you can refer to it at any time. In order to allow yourself to write better code, you can read the two books "Effective Java" and "Refactoring" .

In addition, after learning, you can read the following articles to check your learning situation. These articles are not my own, but may be the most valuable Java basic knowledge summary on the entire network. After all, they are open sourced in my JavaGuide, and they have been continuously improved by various leaders and me.

2. Operating system and computer network

In terms of operating system, I think it is enough to master the basic knowledge of operating system and common commands of Linux and some important concepts.

Regarding the operating system, I don't have any books on operating systems that I can recommend, because I haven't read a few seriously. Because the operating system is relatively boring, I suggest that this part may be better to watch the video first.

In addition, for Linux, if we want to master the basic use, we need to be very familiar with some common commands such as: directory switching commands, directory operation commands, file operation commands, commands to compress or decompress files, and so on.

For the study of computer network, I think it is enough to master the basic knowledge. It does not need to be studied too deeply. The general interview is not very demanding in this aspect. After all, it is not specialized in networking. I recommend the two books " How the Internet is Connected" and "Illustrated HTTP". Both of these books are of more interesting and easy-to-understand type, and are suitable for people who have no basic knowledge.

Everyone who writes programs knows a formula called "program design = algorithm + data structure" . If we want to make our website stronger, I think it is necessary to learn data structures and algorithms. So in the third step, I recommend taking the time to look at the data structure and algorithm. You must make up for the time!

Three, data structure and algorithm

If you want to enter a big factory, I recommend that you start to take a little time every day to learn algorithms and data structures after learning the basics of Java. In order to improve your programming ability, you can also stick to Leetcode . As far as the interviews with major companies at home and abroad are concerned, it can be said that brushing Leetcode has become a way to go.

For those who want to get started with algorithms and data structures, it is recommended to read these two books, "An Illustration of Algorithms" and "Data Structures in Big Talk" . Although these two books are not very classic books, they are more interesting. Friends of the data structure are very friendly. ** "Introduction to Algorithms" ** is very classic, but not so friendly for those who just started.

In addition, there is a very good algorithm book recommended to you, the name of this book is "Algorithm" , the code in the book is written in Java language. There are too many advantages of this book, such as its basic and comprehensive explanations, friendliness to readers and so on. I think the only shortcoming of this book is that it is too thick (low-pitched BB, which may be related to the author's a bit verbose when explaining some knowledge points). In addition to this book, the three books "Sword Finger Offer" , "Programming Pearls" , and "The Beauty of Programming" have been recommended by many bigwigs, which are very helpful for algorithm interviews. The book "The Beauty of Algorithms" is also very good, very suitable for reading in leisure time.

The page construction of our website requires front-end knowledge, and our front-end and back-end interaction also requires front-end knowledge. So the fourth step, I recommend you to learn about front-end knowledge, but you don't need to learn too well. After I have a basic understanding of front-end knowledge, pass

Four, front-end knowledge

This step is mainly to learn the basics of the front-end (HTML, CSS, JavaScript), of course, you can also learn about the relatively simple front-end frameworks such as BootStrap, Layui. There are many resources in this area online.

In addition, if I remember correctly, Spring Boot's official recommendation is that the template engine is thymeleaf, which is very similar to HTML, and it is easy to use after understanding the basic syntax. Combining these frameworks with layui and booystrap can also make a more beautiful page. Develop some simple pages, such as a back-end project, just to make a simple front-end page to do some operations, just use thymeleaf directly.

Now the front and back ends are separated. For the moment, most projects prefer to develop with powerful frameworks such as React, Angular, and Vue. The requirements for getting started with these frameworks are higher. If you want to develop in the full-stack direction (the author's current direction, I used React to do two small projects in the company), it is recommended to lay a good JS foundation, and then choose one of React, Angular, Vue to be serious Learn it. Vue is used more domestically, and React and Angular are generally used abroad.

How to interact with the backend? Generally, Axios is often used when using frameworks such as React and Vue.

The data of our website, such as user information and order information, need to be stored, so in the next step, I recommend you to learn MySQl, a database widely used in major websites. Not only do you need to learn how to write SQL statements, but it is better to understand important concepts such as indexes.

Five, MySQL

Learn the basic use of MySQL, basic additions, deletions, modifications, SQL commands, indexes, and stored procedures. Recommended books **"SQL Basic Course (2nd Edition)" (Entry Level), "High Performance MySQL: 3rd Edition" (Advanced), "MySQL Must Know and Know"**.

Six, commonly used tools

Very important! Very important! Especially Git and Docker.

  1. IDEA : Familiar with basic operations and common shortcuts.
  2. Maven : It is recommended to spend half a day in advance to learn the use of Maven before learning common frameworks. (Find Jar packages everywhere, downloading Jar packages is really troublesome, using Maven can save you a lot of things).
  3. Git : Basic Git skills are also necessary. Try to host your code on Github during the learning process.
  4. Docker : Learn to use Docker to install software such as MySQL that you need to use in your studies. This is much more convenient and can save you a lot of time.

Using common frameworks can greatly simplify our development work. After learning the common tools, we can start learning the common frameworks!

Seven, commonly used framework

Learn Struts2 (you don't need to learn), Spring, SpringMVC, Hibernate, Mybatis, shiro and other frameworks, (optional) familiar with Spring principles (required for interviews with major manufacturers), and then it is necessary to learn SpringBoot , learning SpringBoot is really great Important . Many companies use SpringBoot directly for fresh graduates , but if time permits, I still recommend that you learn Spring and SpringMVC in advance.

Spring is really important! Must understand the two concepts of AOP and IOC. Knowledge points such as the scope and life cycle of beans in Spring, detailed explanation of SpringMVC working principle, etc. are all very important, and must be understood.

8. Simple use of multithreading

This part of multi-threading may be more difficult to understand and get started. In the early stage, you can briefly understand the basics, and then come back to take a closer look when you have energy and capabilities later.

After learning multithreading, you can check whether you have mastered it through the following questions.

Knowledge base of Java multithreading:

  1. What are threads and processes?
  2. Please briefly describe the relationship, differences, advantages and disadvantages between threads and processes?
  3. Talk about the difference between concurrency and parallelism?
  4. Why use multithreading?
  5. What problems might be caused by using multithreading?
  6. Talk about the life cycle and state of threads?
  7. What is context switching?
  8. What is thread deadlock? How to avoid deadlock?
  9. What are the differences and commonalities between sleep() and wait() methods?
  10. Why do we execute the run() method when we call the start() method, why can’t we call the run() method directly?

Advanced knowledge of Java multithreading:

  1. Synchronized keyword: ① Tell me about my understanding of the synchronized keyword; ② Tell me how I use the synchronized keyword and have you used it in the project; ③ Tell me about the underlying principle of the synchronized keyword; ④ Talk about JDK 1.6 What optimizations have been made at the bottom of the synchronized keyword later? Can you introduce these optimizations in detail; ⑤ Talk about the difference between synchronized and ReentrantLock.
  2. Volatile keyword: ① Talk about the Java memory model; ② Talk about the difference between the synchronized keyword and the volatile keyword.
  3. ThreadLocal: ① Introduction; ② Principle; ③ Memory leak problem.
  4. Thread pool: ① Why use thread pool? ②Realize the difference between Runnable interface and Callable interface; ③What is the difference between execute() method and submit() method? ; ④ How to create a thread pool.
  5. Atomic Atomic Class: ① Introduce Atomic Atomic Class; ② What are the 4 types of Atomic Class in the JUC package?; ③ Tell me about the use of AtomicInteger; ④ Can you give me a brief introduction to the principle of AtomicInteger class.
  6. AQS: ① Introduction; ② Principle; ③ AQS commonly used components.

Nine, distributed

  1. Learn Dubbo and Zookeeper to implement simple distributed services
  2. Learn Redis to improve access speed and reduce dependence on MySQL database;
  3. Learn how to use Elasticsearch to add search functions to our website
  4. Learn common message queues (such as RabbitMQ, Kafka ) to decouple our services (Don't learn ActiveMq, it has been eliminated);

At this point, you should be a basic Java programmer. I recommend you to learn through a distributed project. I think it should be a better way to master these knowledge points. In addition, it is recommended to watch the video and do it by yourself. If you encounter knowledge points you don’t understand, you should check online blogs and related books in time, so that the learning effect will be better.

We must learn to expand knowledge and develop the consciousness of independent learning. The introduction of these knowledge points in the Dark Horse Project is relatively superficial.

If we continue to study in depth, we need to understand Netty and JVM.

10. In-depth study

You can come back to look at the knowledge of multi-threading, and you can also use your spare time to learn NIO and Netty , so that you can have more things on your resume. If you want to go to a big factory, some knowledge of JVM is also necessary ( Java memory area, virtual machine garbage algorithm, virtual garbage collector, JVM memory management ) recommended "In-depth understanding of the Java virtual machine: JVM advanced features and best practices (latest "Second Edition" and "Practical Java Virtual Machine", if you find it troublesome to read, you can also read the documents I have compiled.

In addition, microservices are particularly popular nowadays, and many companies clearly require knowledge of microservices during interviews. If you have energy, you can learn about the microservices of the SpringCloud ecosystem.

The concept of microservices is huge and there are many types of technologies, but currently large Internet companies are widely using these things. I am not good at these things to be honest. I have not really done microservice projects. However, the following are some important knowledge about microservice price comparison that I have summarized myself.

11. Microservices

This part is too much, selective learning.

Related technologies:

  1. Gateway : kong, soul;
  2. Distributed call chain : SkyWalking, Zipkin
  3. Logging system : Kibana

Spring Cloud related:

  1. Eureka: service registration and discovery;
  2. Ribbon: load balancing;
  3. Hytrix: Fuse;
  4. Zuul: Gateway;
  5. Spring Cloud Config: Configuration Center;

Spring Cloud Alibaba is also worth learning:

  1. Sentinel : A lightweight powerful flow control component enabling reliability and monitoring for microservices. (Lightweight flow control, fuse downgrade Java library).
  2. dubbo : Apache Dubbo is a Java-based high-performance open source RPC framework.
  3. nacos : Nacos is committed to helping you discover, configure, and manage microservices . Nacos provides a set of easy-to-use features to help you quickly realize dynamic service discovery, service configuration, service metadata and traffic management. Nacos can be used as the registration center of Dubbo.
  4. seata : Seata is an easy-to-use, high-performance, Java-based open source distributed transaction solution.
  5. RocketMQ : A high-performance, high-throughput distributed messaging middleware open sourced by Alibaba.

12. Summary

I mainly summarized the content of each step, and I have a suggestion for learning planning. After knowing what to learn, how can I learn it? I think learning every knowledge point can consider starting like this:

  1. Official website (most likely to be in English, not recommended for beginners).
  2. Books (knowledge is more systematic and complete, recommended).
  3. Video (easy to understand, recommended, especially when you are a beginner).
  4. Online blog (you can look at it when you solve a problem with a certain knowledge point).

Here is a suggestion for everyone, it is best to follow along while watching the video and take notes ! ! !

It is best to look for a book while watching the video. Knowledge points that are not understood by watching the video must be solved as soon as possible. How to solve it?

First of all, Baidu/Google, if you can't solve it through search engines, find friends or people you know. In addition, the actual project must be carried out! At this time, many people will ask what should I do if there is no actual project. I think there are several ways:

  1. Find a practical project video or blog online that meets your abilities and job-hunting needs and follow the teacher to do it. In the process of doing this, you must have your own thinking, don't just try to get it done. For many knowledge points, other people’s explanations may be enough to satisfy the project. If you want more knowledge yourself, you must learn to go to the important knowledge points yourself. Deep learning.
  2. There are many practical projects on Github or Code Cloud. You can choose one to study. In order to make yourself understand the project better, you can improve or add functions to the original project based on understanding the original code.
  3. Do it yourself to make something that you want to accomplish. When you encounter something you don’t know, you can learn it temporarily, and sell it now (this method is more difficult, and this method is not recommended for beginners, because you have no basic concepts in your mind. The written code is generally difficult or impossible to make a decent thing).

Doing projects is not only to do, but also to improve and improve. In addition, if your teacher has related Java background projects, you can also actively apply for participation.

You must learn to allocate your time. There are a lot of things to learn, really a lot. It's enough to figure out which things are the focus and which ones are only enough to understand. Do not spend your energy on learning various frameworks, algorithms and data structures are really important!



Reference materials: "Comprehensive Analysis of Java Intermediate and Advanced Core Knowledge" It's time to get learning materials to learn to prepare for March! ! !
Seats are limited first come first served! ! !

Students who want to get these learning materials can click here to get them for free """""""

Guess you like

Origin blog.csdn.net/Java_Caiyo/article/details/112568919