Java backend development learning path

In fact, focus on the “Java recruitment” that the following is good, the rest is just a panorama of the entire Java back end.

To tell you the truth, in fact, want to be lazy, directly on the basis of the C++ version of the Java foundation, JVM, Java Web these supplements on it, because the CS basic knowledge is common.

However, I am considerate, in order to better help the students to learn Java, or according to the requirements of Java development post, such as Linux programming, network programming and other importance of the adjustment.

Let me first tell you how long I expect it to take me to learn 60 or 70 percent of this route:

If you are a non-professional, such as traditional engineering, university learned some C programming, the rest of the complete not have, then it may take 8 months to 1 year or more. High efficiency, more hard work may be five or six months (intensive study more than ten hours a day).

If you have other language foundation, also learned the operating system, computer network these CS required courses, so only need to strengthen the shock brush + systematic comb the following questions + learn Java, this process is enough for 6 months, 3 months barely.

If you are learning JAVA, have done projects, also learned CS basic courses, I think you intensive assault 1 month is enough to go to the interview, mainly to read some high-frequency interview eight-part essay and brush Leetcode.

Of course, these are all times that vary from person to person, so I’m just giving you a rough time that I think is reasonable for reference.

First, the foundation of Java

The first thing to learn is Java foundation, that is, Java SE, if there is a C language foundation, 1 month should be sufficient.

If you have C++ foundation, I guess two weeks is enough. Right?

Because, in effect, disintegrating the language into a “combination of syntax features,” Java has more object-oriented, interfaces, and exceptions than C, while C++ is a Java superset with almost everything but reflection and no support for annotations.

So actually for those of you who have learned C++, learning Java is just changing keywords, there’s no burden of learning new language features, so I say it’s going to be fast.

What are the Java SE options?

Basic syntax: if, else, functions, etc

Object Oriented: Inheritance, Polymorphism

interface

abnormal

The generic

reflection

annotations

I/O: File, network programming

Java SE I recommend to watch video learning, do not come up to read a book, I was a freshman to see the “Shang Xuetang Gao Qi Java300 sets”, do not know how many people have seen this version, I really think it speaks very well.

Of course, you can also go to some of the latest out of similar videos, I do not recommend.

After watching the video, write a little stand-alone small projects, such as the five-finger chess I wrote at that time, chat room, HTTP Server, generally there are some small projects in this video.

Java Core Technology Volume 1 is recommended for reading.

Second, the Java Web

I started with JSPs and servlets, the cornerstones of the Java Web, but to be honest, these two technologies are really old.

But I still think it is worth learning, after all, the later Spring MVC and other things are to solve JSP, Servlet in the development efficiency of the problem.

For example, the DispatcherServlet in Spring MVC will intercept all requests and be responsible for finding out if there is a suitable processor. A front-end controller will do the job, instead of having to go to the web.xml configuration for each Servlet.

Take a look at Head First Servlets and JSPs. While many of its technologies are obsolete, you can still pick up some interesting chapters on the evolution of Java Web technologies

For Java Web use classes are all to learn

how2j.cn

This website:

It covers almost every aspect of Java learning.

Why do you want to learn Java Web?

Of course, CRUD, so also need to learn the database knowledge, this time will install MySQL, will use JDBC to add, delete, check and change on it.

The approximate route is:

Servlet, Tomcat -> JDBC -> HTTP protocol -> Spring MVC-> Spring family bucket.

After the completion of this part of learning, you can complete a CRUD MIS system, and then go to the cloud server and deploy it to the cloud.

Then let your classmates use it hahaha, I am sure you will experience Crud Boy fun.

Basically, you’ve experienced the full Java Web development process, which is, of course, a wild path development process.

Third, Java in-depth

The Java basics above and the Java Web are commonly used in practical programming, and this is a common interview question.

Including JVM, multithreading, locking.

This section mainly contains the following contents:

Class-loading mechanism, bytecode execution mechanism, JVM memory model

GC algorithm

Thread pools, locks, atomic classes, JUC packages

Here will not expand to speak, basically is to read the book, look at the blog supplement.

Recommended books “Deep Understanding of Java Virtual Machine”, “The Art of Java Concurrent Programming”, “Java Concurrent Programming in Practice”

4. Operating system

This is actually the same thing as C++, so I’ll just copy it.

In my opinion, the course of operating system is easy to learn but difficult to master, but it is relatively easy to master the daily programming and interview.

So what’s the level of graduate or you need to prepare for an interview?

The theoretical knowledge of OS four modules: process and thread management, memory management, IO and file system, device management

Understand the implementation principle of Linux kernel parts, such as memory management, process management, virtual file system, etc

Among them, memory, process and IO are the key points, which are also the most closely related to programming. It is recommended to pick this theoretical book first to see, to understand the overall picture of the operating system:

Modern Operating Systems

Operating System — Essence and Design Principles

I don’t have to read all of them. Either one is good. I read the second one carefully, because it is our textbook, and I also read some chapters on modern operating systems.

By the end of this section you should have a clear understanding of the following topics:

What constitutes an operating system

The state, switching, and scheduling of processes

Interprocess communication (shared memory, pipes, messages)

The difference between processes and threads

Thread implementation (one-to-one, many-to-one)

Mutual exclusion and synchronization (semaphore, pipe, lock)

Deadlock detection and avoidance

Concurrent classical problems: readers, writers, philosophers dining problems

Why do you need virtual memory? How does MMU do address translation

Why is memory segmented and paged

Page replacement algorithm

How is the file system organized

How is the Virtual File System (VFS) abstracted

.

Operating system, the best practice is to look at the Linux kernel is how to achieve, of course, do not call you directly to gnaw Linux source code, that is not the average person can master.

The best way is to read a book, the context of the book is very clear to you.

Recommended books:

Linux Kernel Design and Implementation

This book is just right, that is, the key points of the kernel realization, but not the entire source code.

The book focuses on Chapter 3 Process Management, Chapter 5 System Calls, Chapter 12 Memory Management, Chapter 13 Virtual File Systems, and Chapter 15 Process Address Spaces.

These chapters are the core parts of the operating system, but others such as interrupt handling, block IO, and device management are just as interesting as you want to read.

Basically, there are no major problems with the operating system.

Five, computer network

In addition to the chapter on the transport layer in the book Top-down, you can also read part of the chapter on TCP/IP Volume 1, because it will explain in great detail things like congestion control, slow start, sliding Windows, and so on.

The word of video recommends Harbin Institute of Technology “computer network”.

Network protocols and knowledge to master:

HTTP, TCP, IP, ICMP, UDP, DNS, ARP

IP address, MAC address, OSI 7-layer model (or TCP/IP 5-layer model)

HTTPS security-related: digital signatures, digital certificates, TLS

Common network attacks: LAN ARP Flood, DDOS, TCP SYN Flood, XSS, etc

Network knowledge is more complex, many students reflect that the network is difficult to learn, a lot of network protocols, in turn after learning, or do not know how the network is constituted.

This is not the use of learning methods, resulting in only the trees, not the forest.

When studying, it is recommended that you focus on the main line “How is a packet sent?”

With this problem in mind, go to the application layer, the transport layer, the network layer, and the link layer, and think about how these layers are connected in series.

This is the top-down approach, which naturally recommends:

Computer Networks: A Top-down Approach

This book from our most common contact with HTTP, FTP, SMTP and other application layer protocols, we can clearly see the role of the introduction of each layer.

For example, in order to distinguish different applications on the same host, the transport layer is introduced, and different port numbers are used as the distinction.

A network layer was introduced to transfer data between different subnets and IP address routing was used;

The network layer solves the routing problem between different subnets, but the host in the same LAN is determined by MAC address, so the link layer is introduced to carry IP packets.

At the same time, in order to do IP address and MAC address translation mapping and ARP protocol.

Step by step, layer by layer uncovered network, very recommended!

There is also a book:

How the Web Is Connected

Very easy to understand the description of “how a packet is sent out”, also does not waste time, used to read the big black book of the mechanic society, read this kind of but have a feeling of reading the comic book, if there is a basic, a day or so will be over.

Only grasp the whole network vein of the main line will not be confused by the complex network protocol, the rest is to continue to refine, fill the details of these trunk.

So what details can you fill in?

Such as ARP work process, IP address, IP sharding, NAT (UDP hole), link layer access control protocol and so on.

And most importantly, the TCP protocol, which is the most important concept in interviewing and networking:

Three handshakes and four waves

State transition

TIME_WAIT in TCP state

Congestion control

Fast retransmission, slow start, etc

So many things must be memorized, but instead of memorizing them, it is better to bring questions to think about why you are doing it.

Here are a few questions:

How does TCP achieve reliable transport (voiceover: how to achieve reliable transport based on UDP

WHY TCP CONNECTION ESTABLISHMENT IS NOT A TWO-HANDSHAKE (VOICEOVER: A SUFFICIENT EXPLANATION OF THE NECESSITY OF THREE-HANDSHAKES

What problem does TIME_WAIT solve and why is the wait time 2 MSL

The core of the whole TCP is around reliable transmission + efficient transmission (flow control and window management)

The top down book is a bit short on TCP due to too much detail, so you need to check it out:

TCP/IP Detail Volume 1: Protocol

Don’t start the book at the beginning, but pick out the chapters that deal with TCP

To here, for the whole network and TCP should have a comprehensive and detailed understanding.

But there are still some interesting questions that you might not be able to answer if you haven’t thought about them.

Such as:

What is the difference between an IP address and a MAC address?

How to understand broadcast domain and conflict domain?

What’s the difference between a router and a switch?

What is the nature of a TCP connection? Is it really a “link”? (Ever asked: What is the difference between a host hanging and a JVM hanging when a TCP connection is created with a Java socket?

These questions can only be answered when you really understand them, and it’s hard to answer flexible interview questions just by memorizing the protocol.

In addition, the network part also needs to prepare HTTP, HTTPS, recommended:

Illustrated HTTP

Finally, don’t forget to answer that over-asked, over-written question for yourself:

What happens from the URL input to the presentation of the page

The finer the better, 500 words or more, hahaha

Six, network programming

(it’s even… Here we will refer to the C++ learning route, but C++ and Java have different emphasis.

For example, C++ does not have a unified network library, which is basically bare writing sockets. However, Java itself has a well encapsulated network API, plus a unified library such as Netty.

The learning path is also clear.

Socket API + multithreading + network model /IO model + IO reuse

Learn Socket API and then Reactor and ProActor patterns to understand why this is needed and what scenarios it is applicable to.

Can write one of the best, do not want to write, you can directly to learn Netty.

In fact, the focus of network programming is not on the socket itself, but the threading model + IO model, so essentially back to multithreading.

Some key points of network programming:

Interprocess communication: semaphore, pipe, shared memory, socket, etc

Multithreaded programming: mutexes, condition variables, read-write locks, thread pools, etc

Five IO models: synchronous, asynchronous, blocking, non-blocking, and signal-driven

There are two modes of high-performance IO: Reactor and ProActor (Linux lacks asynchronous IO support)

IO reuse mechanism: EPOLL, SELECT, POLL (C10K solution to the weapon)

However, in practical work, except for the development of Infra, we seldom involved in network programming. Now almost all of us are doing Web development. A variety of frameworks have helped us with such low-level operations as protocol parsing, network data transmission and unpacking.

Nanny frameworks like SpringBoot, for example, basically do everything a framework can do, so much so that all we need to do is define the data format for receiving and returning packages, and then do the logical processing.

Things like serialization, unmarshalling, and IO handling are the dirty stuff of network programming that business development doesn’t touch at all.

But network programming skills or very important, learned, you can write some network applications, such as P2P download, imitation QQ chat room, file transmission.