A while ago should CSDN invite audit Java Knowledge Base content, I also have the opportunity to comb the Java knowledge system. A written look can help the apes who are about to walk into or are in the Java world.
First, base map
About 2003 I started to know about Java (which was still using Delphi), but it was only after 2004 years of college that I formally decided to learn Java. At that time, I think the program with Delphi to write C/s architecture is not very interesting, Java at the time proposed the concept of the EE specifications, enterprise-class architecture feel all kinds of tall, suppress the desire of the heart to open a Java journey. Frankly speaking. At that time, the door to the Java world was faint, and various norms, concepts and English abbreviations can make the whole person dizzy.
- J2se
- J2ee
- J2me
- Jsp
- Jdbc
- Jms
- Ejb
- Jndi
- Jdbc
- Jta
Casually review the next time when I saw something, very many unfamiliar English noun abbreviation (fortunately, Java has not been all kinds of frameworks blossom, or more dizzy), do not know where to start learning. And just the students have this JSP book. So I started with JSP. Honestly, that's a bad book. I do not even remember the name now, probably remember to start with some examples to build a JSP Demo site.
By a variety of environmental, container problems abused times finally ran a sample, from the native browser finally see the sample page, there is a second sense of accomplishment, and then is dazed. Because I have no idea how it all works, what are their principles? Around a large circle, walked a lot of detours. Suppose you give me another chance to start again. I'll start with the basic Java Language Foundation.
What is the basis? Java is an object-oriented language, the most important concept is the object, and all of its syntax is just to surround it to expand. and the main structure and variables of other programs: order, cycle, branch, and other languages before the foundation is just a change of form. Understand the object. So the concept of wrapping objects: classes, interfaces are natural extensions. Of course mastered the core concepts and the main grammar. It's just that you can write a Hello world level. But the point is that your starting point is right, and the journey is near.
This stage is familiar with the language and related libraries by reading good books and doing some major exercises. Java started the book in My impression of "thinking in Java" very suitable (eh. I took a detour to see the book), and of course there were other good books, such as "Introduction to Java programming". "Core Java". My feeling is that this kind of starting book can get a few more books, a knowledge point to read, after all, a writer may also have omissions, horizontal reading, rather than portrait of a book from scratch to the end.
A knowledge point a grasp of a knowledge point. Straightened out, step on a deep footprints, do not run around, the results are general, start slowly. Behind the talent fast.
On the basis. In my eyes the most core and important parts are not much, I am here simply listed below:
- Core Concepts
- Object model
- Interface design
- Class Library
- Lang
- Collections
- Concurrent
- Io
Here the core concept is not much to write, the primitives are now all Java code base, along with always, the difference is only understanding and abstraction of moderation or not. JDK so many libraries. Here are just a few of the above, Lang in fact the most important thing I want to say is String. This is a lot of people are ignoring.
There is no concept of String in C. Java provides this object, but it is not well understood and is good for this object. Will let you step on the endless pits, but also repeated stepping. No, no, go search. How many low-level questions about the various character encodings, along with various performance issues caused by String.
The core object of String is emitted out about the encoding of the character, the byte expression of the character (big, small end, network byte order), the effect on the GC, the regular expression, pattern matching, which is probably the most abundant object in Java.
The collections framework provides a large number of frequently used data structure encapsulation. Basically let the Java program ape Farewell to the manual implementation of the data structure you learn from the majority of the regular use of data structures. It is much more practical to understand the appropriate scenarios for different data structures than to implement them manually. Nothing more look at the code in collections, are the implementation of the Master level ah. Remember when I was learning Java or JDK 1.3. After entering the work mainstream is 1.4, then there is no concurrent library.
When processing their own communication between the threads, by a variety of notifications missed, early notification, deadlock to make a death. So today's Java program apes are much happier. Concurrent again a Master Class library implementation, but also can be nothing more to see, more try to figure out. IO Library, whether it is file IO or network IO is the Java program ape most often deal with, familiar with its API is important, but it is more important to understand how to abstract and modeling IO operations, understand the different IO model behind the essence and principle.
All right. After learning the basics above, we got the first map, like this one.
The second one, the skill map
It's a little difficult to master the first picture to be free in the world of Java. One of the mainstream uses of Java today is back-end development, which is the world of the Java EE (now known as the JavaScript) in its previous era. Also known as Java Enterprise Edition.
The Java EE includes very much content, the core is EJB.
At the time, I was just Red in the school. Distributed object technology, with CORBA and EJB as an example to implement. Looking at several EJB design patterns and best practice books, and then not graduating into the company an internship found that they do not use EJB now. We use a thing called Spring.
The IoC, DI, and other new English abbreviations appeared again, a mouthful of old blood before the spurt, and another perk up to start a new learning journey.
Yes, EJB started slowly exiting the mainstream at that time (2005). Dr. Rod Johnson, a "Expert one-on-one development without EJB", pronounced the death penalty for EJB, and Spring stepped onto the historical stage. Since then Java has entered the era of great development of the Framework. The combination of technical frameworks such as Ssh/ssi is the mainstream of Java development and continues to affect today.
There are more and more frameworks for Java. The ecology is getting bigger. People who have just started to learn face such a complex framework. must also be in the heart vacant, feel really learning. Endless.
In fact the real project. There are not many frameworks that are really used, Ssh/ssi is basically a core framework for Java WEB projects. You are the core of the tool to get started. Need to be proficient in your own hands.
But it needs to know why, Spring takes over the work of object creation and interdependence management, and hides the design pattern in the application of the framework, so many people just know it and never think about it. Web development from early JSP a big mess stew (HTML + CSS + JS + Java + SQL, early I just put all these in a JSP, think how difficult to maintain), to the Division of the role of MVC. Just a View layer has evolved from a tag library to a page template (Velocity, Freemarker), and now I prefer a more thorough front-end separation model.
Once a few pages of CSS style killed me how much time, specialization division is conducive to efficiency and depth. The evolution of the WEB version number caused by the great development of the Internet and mobile Internet makes today's front-end complexity no longer below the backend.
So how many frameworks do I have to master as a Java project teacher? This is a pseudo proposition. It's not enough to know how many. The core of the skilled master several. A general understanding of a large number of high-speed learning framework is the ability to solve the problem.
Or take Ssh/ssi as an example. The trend of professional front end division is becoming more and more obvious, completely liberating the back end Java Project division's distress.
The spring-based framework overcomes a number of general-purpose problems, and today's spring is dozens of times times bigger than it was before (with all of the spring-named sub-items counted). is to solve specific common problems.
So when you write code suddenly want to write a class named Util, stop to think this is a common problem to solve the class, it is best to search the ready-made class library, for example, the Apache Commons you need code. General-purpose libraries and frameworks let us free ourselves to focus on business logic and efficiency, which is probably the most valuable part of your code, and there are procedural apes who may complain about the technical content, and I think the most effective technology to maximize business value is the most technical content.
Frames such as weapons, 18-like (far more than 18) weapons I may not have everything. But we have to have the same ability. Like Zhang Mowgli learn Taiji sword. The enemy learns the sword still can win. The trick in this is not learning moves, like you might think that you know how to use Hibernate to master the mastery of the first online database has collapsed. The essence of this is still the understanding of relational (SQL) databases, which may now need to be coupled with an understanding of the principles and mechanisms of a particular non-relational (NoSQL) database, even the essential understanding of the O/R mapping model.
Therefore, the foundation like the internal strength, the framework such as weapons, the use of the moves, with the heart, the use of the wonderful, three mastery, it is already available in the Java World side. As mentioned above, we have a second map based on this.
The third one, the extension diagram
And the third picture, I can no longer give a suggestion that I think is a little more general.
At this stage each person's growth and development direction will be affected by their environment and the actual situation, I take the example of itself a little explanation. After entering the internet company these years. The development of Java technology has evolved from a single application of the EE container to the evolution of SOA and microservices. Large-scale distributed systems become the norm, so many of my other related work is focused on this area. On the one hand, deep excavation continues to complement the whole knowledge blind area, for example, the basis of distributed program is RPC call, RPC is the essence of network plus object serialization.
Corresponding to thoroughly understand the principle of TCP, Unix/linux network programming model. Several different network IO models.
Then rise to Java based on this provided network programming model, BIO (plug), NIO (non-clogging) and AIO (asynchronous IO), and in real practice to understand deeply.
This process is exposed to a number of different RPC technologies, from the Java-brought RMI to the WebService technical specification.
Later, some of the more concise, more powerful RPC frameworks emerge, such as Hessian, Thrift, and so on.
The nature of different frameworks is still the same, with the development of services based on the RPC framework and further derived from the provision of additional value-added functions of the service framework, such as Ali Open source Dubbo.
With the deepening of work practice. It is possible to go down to the JVM level to analyze the memory usage of the object, the scheduling execution of the thread, and the delay condition. The core role of this stage is still the ability of high-speed learning and application to work practice as mentioned earlier.
and the depth of the other side is the horizontal expansion, with the changes in the nature of work may require a wider range of technical knowledge. For example, after becoming an architect. The breadth of technical knowledge requires some aspects to be higher. Techniques of technical learning and techniques allow you to expand the width of the technology faster, standing in the higher dimensions to look at different technical directions and products, and make the right technical decisions most effectively.
Each person at this stage may face different environments and practices. So this stage of the map will be very diverse.
Here is my third picture, only for those of you who walk on the Java journey.
And according to the map of the way through the path, it happened to constitute a unique you.
Even if you do not have a map now, but also don't be dazed and Forever keychains. Keep going and always find the way, in fact that's how I came along. has been. Dare not stop.
Write some text and draw some pictures. "Wink" everything has changed. Think good, can long press or scan two-dimensional code attention.
Java Journey: A map of Walker