Java Journey: Map of a walker and map of a java journey Walker

Source: Internet
Author: User

Java Journey: Map of a walker and map of a java journey Walker

Some time ago, I had to sort out my own Java knowledge system. I hope this article will help programmers who are about to enter the Java World.

First, basic Diagram

I started to know Java in 2003 (Delphi was still in use), but I decided to study Java only after I graduated from my undergraduate course in 2004. At that time, I felt that it was meaningless to use Delphi to write the C/S architecture program. Java proposed the J2EE standard concept at that time, and the enterprise-level architecture felt a variety of heights, this is the way Java is started. To be honest, as soon as I entered the Java World, I was dizzy. various norms, concepts, and acronyms can make people dizzy.

  • J2SE
  • J2EE
  • J2EE
  • JSP
  • JDBC
  • JMS
  • EJB
  • JNDI
  • JDBC
  • JTA

I casually recalled what I saw when I first came in. There were many strange abbreviations of English names (fortunately, there were no various Java frameworks available at that time, or even more dizzy ), I don't know where to start learning. I started with JSP because I had a JSP book. To be honest, this is really a bad book. I don't even remember the name now. I probably remember to start with some examples to build a JSP Demo site. After being abused by various environments and containers for thousands of times, I finally ran an example. I finally saw the page in the example from my local browser and felt a sense of accomplishment for a second. Because I don't understand how it works. What is their principle? I made a lot of detours. If I had another chance, I would start with the basic Java language.

What is the foundation? Java is an object-oriented language. The most important concept is the object, and all its syntaxes are centered around it. The basic structure and variables of other programs include sequence, loop, and branch. The basic structure and variables of other languages are changed. After understanding the object, the concept around the object: class and interface are all natural extensions. Of course, I have mastered the core concepts and basic syntaxes, But I can write a Hello World Standard. But the point is that you have a correct starting point and your journey is approaching.

At this stage, you can familiarize yourself with the language and related classes by reading good books and making some basic exercises. In my opinion, the book "Thinking In Java" is quite suitable (ah, I only saw this book after a circle). Of course, there are also some other good books, for example, Introduction to Java Programming and Core Java. I feel that this kind of starting books can have several more books. One knowledge point can be read by reference. After all, an author may also have some omissions and read them horizontally, rather than starting from the beginning to the end. Grasp a knowledge point and a knowledge point. Step on a deep footprint step by step. Do not run around. The results are general and slow.

There are not many core and important parts in my eyes. Here is a simple list:

  • Core concepts
    • Object Model
    • Interface Design
  • Class Library
    • Lang
    • Collections
    • Concurrent
    • Io

Here, we will not write much about the core concepts, which are basically embodied in all Java code libraries. The difference is only in understanding and abstraction. There are so many JDK libraries. Here we only list the above few. In lang, the most important thing I want to talk about is String, which is ignored by many people. C does not have the concept of String. Java provides this object, but it fails to understand and use it well. In the future, it will let you step on endless pitfalls and continue to step on it. Do not believe to search for low-level problems related to various character encoding garbled characters, as well as various performance problems caused by String. The core object 'string' is used to escape character encoding, character byte expression (large-end, small-end, and network byte order), influence on GC, regular expression, and pattern matching, this may be the most abundant object in Java.

The Collections framework provides a large number of frequently-used data structure packages, which basically frees Java programmers from manually implementing most of the frequently-used data structures you have learned from the Data Structure course. Correct understanding of the applicable scenarios of different data structures is much more useful than manually implementing them. It's okay to take a look at the code in Collections, which is a master-level implementation. I remember that JDK 1.3 was used when I was studying Java. When I got into work, the mainstream was 1.4. At that time, there was no concurrent library. When handling inter-thread communication by yourself, various notifications are missed, early notifications, and deadlocks will survive. So now Java programmers are much happier. concurrent is another master‑level class library implementation, so it's okay to look at it and try again. IO libraries, whether file I/O or network I/O, are common for Java Programmers. It is important to be familiar with their APIs, but more importantly, to understand how to abstract and model IO operations, understand the nature and principles behind different IO models.

Well, after learning the basic content above, we get the first map, as shown below.

Second, skill chart

Even if you have mastered the first figure, it is still a little difficult to go freely in the Java World. Currently, a mainstream application scenario of Java is backend development. This field is the world of J2EE (now called Java EE) in its previous era, also known as Java Enterprise Edition. J2EE contains a lot of content, and the core is EJB. At that time, I had just finished learning distributed object technology in school, and implemented it using the example of "CORBA" and "EJB. I read several books on EJB Design Patterns and Best Practices. Before I graduated from the company, I found that we don't need EJB anymore. We use Spring. New abbreviations such as IoC and DI have emerged, and the old blood has not yet been sprayed out, and the new learning journey has been revived.

Yes. At that time, EJB (2005) began to gradually exit the mainstream. Musical doctor Rod Johnson, an "Expert One-on-One J2EE Development without EJB", sentenced the death penalty of EJB, and Spring was on the stage of history. Since then, Java has entered the Framework development era, and SSH/SSI and other technical frameworks have formed the mainstream of Java Development, which has been continuously affected so far.

Java frameworks are getting bigger and bigger, and beginners must be confused about these complex frameworks. I feel that there is no end to learning. In fact, there are not many frameworks actually used in real projects. SSH/SSI, as the core framework of Java Web projects, is the core tool you need to get started. However, Spring takes over object creation and dependency management, and hides the design pattern in the application of the framework. Many people only know it and never think about it. Web development from the early JSPs (HTML + CSS + JS + Java + SQL, in the early days I put all these in a JSP, think about how difficult maintenance ), to MVC. Only one View layer has evolved from a tag library to a page template (Velocity and Freemarker). Now I prefer a more thorough front-end and back-end separation model. How long has CSS styles on several pages killed me? Professional division of labor is conducive to efficiency and depth. Web Version evolution caused by the development of the Internet and mobile Internet, so that the current front-end complexity is no longer under the back-end.

As a Java engineer, how many frameworks do I have to master? This is a pseudo-proposition, because it won't be enough to grasp many of them. The core is familiar with a few, extensive understanding of a lot, and the ability to master the quick learning framework is the solution. Taking SSH/SSI as an example, the trend of professional frontend division of labor becomes more and more obvious, which completely frees the troubles of backend Java engineers. Taking Spring as an example, the framework solves a large number of general-purpose problems. Today, Spring is dozens of times larger than the original one (count all the sub-projects named by Spring ), they all solve specific general problems. So when you suddenly want to write a class named after Util when writing code, stop and think about it as a class to solve general problems. You may search for ready-made class libraries, for example, you may need the code in Apache Commons. General class libraries and frameworks allow us to free up and focus on business logic and efficiency. This is probably the most valuable part of your code. Some programmers may complain that these are not technical, in my opinion, the most effective technology to maximize business value is the most technical thing.

I may not be able to understand a framework like a weapon, but I have to have the same capabilities as I did when I learned the sword. The trick here is not to learn the tricks. For example, you may think that the usage of Hibernate is very prosperous, but the database crashes when it is launched. The essence here is still understanding relational (SQL) databases. Now, you may need to understand the principles and mechanisms of specific non-relational (NoSQL) databases, it even includes an essential understanding of the O/R ing model.

Therefore, basic functions, frameworks, such as weapons, and applications are a trick. They are dedicated and useful, and they can be integrated in the Java World. As mentioned above, we have the second map.

Third, extended Diagram

In the third figure, I can no longer give a suggestion that I think is more universal. At this stage, the development direction of each person will be influenced by the environment and actual situation. I will take my own example to explain it a little. Over the past few years, the development of Java technology has changed from a single J2EE containerized application to SOA and microservices. Large-scale Distributed systems have become the norm, so more work is concentrated in this field. On the one hand, in-depth mining continues to complete the knowledge blind zone. For example, the foundation of distributed programs is RPC calling, and the essence of RPC is network-based object serialization. As a result, we should thoroughly understand the principles of TCP, network programming models in Unix/Linux, and several different network I/O models. The network programming model provided by Java, BIO (blocking), NIO (non-blocking), and AIO (asynchronous IO), and further understanding based on actual work practices.

This process involves a large number of different RPC technologies, from the RMI of Java to the WebService technical specifications. Later, some more concise and powerful RPC frameworks emerged, such as Hessian and Thrift. The essence of different frameworks remains the same. With the development of servitization, RPC-based frameworks further derive service frameworks that provide additional value-added functions, such as Alibaba's open-source Dubbo. With the deepening of work practices, it is possible to go down to the JVM layer to analyze the memory usage, thread scheduling, and latency of objects. The core role of this phase is the ability to quickly learn and apply it to work practices.

The other side is horizontal expansion. As the nature of work changes, it may also require a broader technical knowledge. For example, when you become an architect, you have higher requirements on the breadth of technical knowledge. Skillful technical learning and techniques allow you to expand the technical breadth more quickly. You can view different technical directions and products in a higher dimension to make the most appropriate technical decisions.

At this stage, everyone may face different environments and practices. Therefore, maps formed at this stage may differ greatly. The following is my third figure, which is for reference only by fellow practitioners on the Java journey. However, the path traveled by the different maps makes you unique.

Even if you do not have a map yet, don't be at your fingertips forever. We always find a way to keep moving forward. In fact, I just came here and never dared to stop.

Java study and exchange QQ group: 523047986 chat prohibited, do not enter!

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.