The strongest book list for learning Java is recommended, with learning methods (compilation of ten years of development experience)

Recalling that I learned Java 10 years ago, the resources were extremely scarce. The teacher recommended two books to us, one "Java Programming Thoughts" and one "Java Development Guide". The teacher thought that the first book talked about theory, and the second book talked about actual combat, a perfect combination.

But in fact, when graduating, only 13 students in the class were engaged in software development, and the remaining 30 or more students either changed their majors in their freshman year or gave up programming early.

"Java Programming Thoughts" is a classic good book, yes, but as an introductory book, it will only persuade you to retire. "Java Development Collection" is a book of persuasion. The projects made with Java in it are all classics, such as browsers and gomoku, but Xiaobai can't control it at all!

image

10 years have passed, and I already have more than 10 years of programming experience. Don't ask, ask is the overtime. Then I already have some of my own experience and experience in Java programming, so I recommend a book list on Zhihu. The number of readers exceeds 660,000, and the number of likes is 1,200+, which shows that everyone is very useful and likes it. what.

The above answer contains 13 classic books, and it is in a step-by-step manner. I believe that the students will send a private message to thank me after reading it. However, more than a year has passed since this answer, and I want to add some more book lists, still in the order of entry→advanced→in-depth.

01. Getting started

  • "Java Core Technology Volume 1"
  • 《Head First Java》

Pay attention to skip the chapters of Swing, AWT, and Applet. Of course, you can also take a look at these Java tutorials that I wrote, which are relatively easy to understand. I counted almost 200 articles. They are still very comprehensive and powerful.

  • "Niaoge's Linux Private Kitchen"

Why learn Linux? Because in the actual development work, the project basically has to be deployed to the Linux environment. Windows is rarely used as a server, and there is no other reason except slowness.

If you can master some basic Linux operations in advance, not only will you add points to your resume, but you will also be one step faster at work.

  • "Maven Actual Combat"
  • The Definitive Guide to Git

When I first learned Java, the code could only be local. If you want to perform version control, you have to install an SVN server and client. In addition, cloud synchronization is not yet possible. If you change the computer, you basically have to copy the code and the jar package that the project depends on again.

You know, the code is very trivial files, copy and paste is very slow; if the project is relatively large, there are more jar packages that rely on, and copy and paste will be even slower.

Well now, there are cloud repositories such as Code Cloud and GitHub that can be used, and it is very convenient for multiple computers to synchronize. Together with Maven (project build tool) and Git (version control tool), it's 666 to play!

image

02, advanced

  • "Java Programming Thoughts"

The book "Java Programming Thoughts" really has nothing to say, the quality is very high, but you need to read it after getting started with Java, so that you can really understand the thinking.

Many students who do not have enough programming foundation, blindly and confidently, directly gnawed this book, and then they found that the gnawing was very painful. This was caused by the lack of foundation. It was like starting to run without learning to walk, and fell very badly. pain.

The author has indicated in the preface that readers need to know basic program statements (such as if and for in C), that is, the author assumes that readers are already familiar with some of the syntax of C. It is conceivable how painful it is for students who have no programming knowledge to read this book.

I gnawed this book under the misleading of my university teacher. For the first time, I only read the preface and couldn't read it anymore. It was obscure and difficult to understand. After a year of internship, I read this book for the second time. I still felt my head was big and I tried to endure it. After reading almost 200 pages, my stamina was exhausted.

Until two years ago, I regained this book and found that I read it with gusto. Every chapter I read produces an article. The value of this book is truly reflected. why? Because I have many years of programming experience, combined with the theoretical knowledge in the book, I have a feeling of "sudden realization" when I read it.

"Java Programming Thoughts" not only teaches us how to do it, but also tells us why we should do it. This is the essence of the Java programming language.

However, "Java Programming Thought" was published in 2007, and more than ten years have passed. Although it is classic, it is unavoidable to be outdated. But fortunately, there is "On Java 8", the author of this book is Bruce Eckel, the author of "Java Programming Thoughts". In fact, "On Java 8" is the fifth edition of "Java Programming Thoughts", the fourth edition uses JDK 1.5, and the JDK used in "On Java 8" has been upgraded to Java 8.

The students may be asking, where can I buy "On Java 8"?

No need to buy it. Lei Feng has translated this book into Chinese and open sourced it. You can read it on GitHub by visiting the link above.

  • "Java Network Programming"

The overall evaluation of the book "Java Network Programming" is not high, but it is very useful for learning the basics of Java network programming.

  • "Netty Actual Combat"

Whether it is building high-performance Web, game servers, push systems, RPC frameworks, message middleware, or distributed big data processing engines, Netty is inseparable. In the entire industry, Netty's extensive and successful application has made it a An excellent framework for Java high-performance network programming.

  • 《Effective Java》

The third edition of "Effective Java" contains a total of 90 practical and valuable empirical rules, and each rule is worthy of reference by Java programmers in actual combat. This book does not need to be read step by step from beginning to end, you can choose any section to read at will, because each rule is relatively independent, although they will be cross-referenced, it does not prevent us from reading as we want.

The author Josh Bloch is very awesome. He was once the chief Java architect of Google. "Java Developer Magazine" listed him as one of the top 40 software figures in the world. James Gosling, the father of Java, has a very high evaluation of "Effective Java".

  • "Alibaba Java Manual"

Although the booklet "Alibaba Java Development Manual" is only dozens of pages, it mainly talks about some typical development protocols, programming specifications, and best practices, which have become the development specifications generally followed by the industry.

The latest version is the Songshan version, and there is a sweeping monk on the cover. Alas, this is amazing!

image

  • "The Way to Clean Code"

The quality of software depends not only on the architecture, but also closely related to the quality of the code. The quality of the code is directly proportional to its cleanliness. The neater the code, the higher its quality will undoubtedly be.

The first chapter of "The Way to Clean Code" laid out a definition of clean code, which every programmer should keep in mind.

1. Clean code strives to be focused, each method and each class should be fully focused on one thing; the naming should give people a "just as the name implies" feeling. 2. The clean code is simple and straightforward, and never hides the designer's intentions. 3. Clean code should have unit tests. 4. The neat code refuses to be repeated, and its expressive power hits people's hearts directly.

  • "Java Concurrent Programming Practice"
  • "The Beauty of Java Concurrent Programming"
  • "Practical Java High Concurrency Programming"

For the program, if it has the ability to be concurrent, the efficiency can be greatly improved. For programmers, if they are proficient in Java concurrent programming, their ability to make money will be greatly improved. This is really not a ridicule, but a word of conscience.

These three books on Java concurrency can be combined to read and complement each other to help students improve quickly in this area.

  • The Definitive Guide to Java Performance

By reading the book "The Definitive Guide to Java Performance", we can use 4 basic principles to maximize the effect of performance testing, use the tools that come with the JDK to collect program performance data, and understand the JIT (just-in-time compiler) compiler Pros and cons, tuning the JVM garbage collector, optimizing multithreading to the greatest extent, and so on.

  • "Spring Actual Combat"
  • "Spring Demystified"

Spring is an open source framework of the Java platform, which provides extensive support for web applications built on Java.

1. Spring can help us create and assemble dependencies between objects based on configuration files.

2. Spring aspect-oriented programming can help us realize logging, performance statistics, and security control without coupling.

3. Spring can help us manage database transactions very simply.

4. Spring can seamlessly integrate with third-party data access frameworks (such as MyBatis, JPA).

5. Spring can be easily integrated with Java EE (such as Java Mail, task scheduling).

"Spring Actual Combat" and "Spring Revealed" can help students have a more comprehensive understanding and mastery of Spring.

  • "Spring Boot+Vue Full Stack Development Actual Combat"

Spring Boot is a brand new framework provided by the Pivotal team. Its design purpose is to simplify the initial setup and development process of new Spring applications. The framework uses a specific way to configure, so that developers no longer need to define boilerplate configurations. To put it simply, Spring Boot is actually not a new framework. It is configured with many frameworks by default. Just like Maven integrates all Jar packages, Spring Boot integrates all frameworks.

There are not many good books on Spring Boot, so I simply recommend my good friend Jiang Nan Xiaoyu’s book. He himself has recorded a lot of free videos. These videos are accompanied by his books. They can definitely have a full understanding of Spring Boot. grasp.

springboot.javaboy.org/

This link is a collection of tutorials from a little rain in the south of the Yangtze River. I think the quality is still very high. I have referenced a lot when I was learning Spring Boot.

  • "Illustrated HTTP"
  • "HTTP The Definitive Guide"

Programmers, after all, are engaged in IT (Information Technology), and the network is still very important. The full name of HTTP is HyperText Transfer Protocal, that is: HyperText Transfer Protocol. It has been widely used on the WWW since 1990, and is now the most widely used protocol on the WWW. HTTP is an application layer protocol. When you browse the web on the Internet, the browser Data will be sent and received on the Internet via HTTP with the Web server.

"Graphic HTTP" and "HTTP The Definitive Guide" are worth reading.

  • "High Performance MySQL"
  • "MySQL Must Know and Know"
  • "MySQL Technology Insider-InnoDB Storage Engine"

MySQL has become the most popular open source database due to its high performance, low cost, and good reliability. As MySQL continues to mature, more and more large-scale websites start to use MySQL, such as Wikipedia and Google.

As a Java programmer, MySQL must know and know.

  • "MyBatis from entry to master"

MyBatis is an excellent persistence layer framework, which supports custom SQL, stored procedures and advanced mapping. MyBatis eliminates almost all JDBC code and the work of setting parameters and obtaining result sets. MyBatis can configure and map primitive types, interfaces and Java POJOs (Plain Old Java Objects) as records in the database through simple XML or annotations.

In addition to the book "MyBatis From Beginner to Master", students can also directly read the Chinese website of MyBatis.

  • "Redis Actual Combat"
  • "Redis Deep Adventure: Core Principles and Application Practice"

Redis Internet technology is the most widely used intermediate storage, which is Re Mote Di ctionary S composition ervice three bold letter word.

Redis is known for its ultra-high performance, perfect documentation, and concise source code. Many large Internet companies at home and abroad are using it, such as Ali, Tencent, GitHub, Stack Overflow, and so on. Its version is updated very quickly, and its functions are becoming more and more powerful. It was originally used as a cache database. Now it can be used to implement message queues.

It can be said that mastering Redis has become a basic skill that a back-end engineer must possess.

  • "RabbtiMQ Practical Guide"

RabbitMQ is an open source message queuing system. The main features are good robustness, ease of use, high performance, high concurrency, easy cluster expansion, and strong open source community support. "RabbitMQ Practical Guide" cuts in from the concept of message middleware and the history of RabbitMQ, and mainly elaborates the details of RabbitMQ's installation, use, configuration, management, operation and maintenance, principles, and extensions.

  • The Definitive Guide to Kafka

Every application generates data, including log messages, metrics, user activity records, response messages, etc. How to move data has become almost as important as the data itself. If you are an architect, developer or product engineer, and also new to Apache Kafka, then this practical guide will help you become an expert in real-time data processing on a streaming platform.

  • "The First Docker Book"

Docker is an open source application container engine. Developers can use Docker to package their own applications and dependent packages into a portable container, and then publish it to any popular Linux machine, which can also be virtualized.

"The First Docker Book" can help us learn the installation, deployment, management and expansion of Docker.

03, in-depth

  • "In-depth understanding of the Java virtual machine"

To what extent is the book "In-depth Understanding of the Java Virtual Machine", almost all articles on the Java virtual machine are written, and none of them are not noted at the end of the article: This article refers to the "In-depth Understanding of the Java Virtual Machine" by Zhou Zhiming. If there is no indication at the end of this article, then the guarantee is not to respect copyright.

  • "Refactoring to improve the design of existing code"

The book "Refactoring and Improving the Design of Existing Code" is also very well-known in the industry, but it seems to require some energy and stamina. After reading the above books, you can read this one. For re-examination Existing code is of great help.

  • "In-depth understanding of Nginx"

Nginx is a web server with an asynchronous framework and can also be used as a reverse proxy, load balancer, and HTTP cache. The book "In-depth understanding of Nginx" helps us develop HTTP modules quickly and efficiently by restoring Nginx design ideas and analyzing Nginx architecture.

  • "In-depth analysis of Tomcat"

Tomcat is a servlet container and provides some unique functions as a Web server. Basically, Java programmers who have written Web programs have used Tomcat as a server, so if you have time, it is worthwhile to analyze Tomcat in depth.

  • "Design Patterns in JDK"

  • "Explain the design pattern in a simple way"

  • "The Zen of Design Patterns"

  • "Head First Design Pattern"

Everyone has heard that learning design patterns is very important, so why is it so important? What are design patterns? Using a metaphor to learn programming is like learning martial arts.

There are two things you can't lose in martial arts. The first is internal strength; the second is martial arts secrets. Corresponding to programming is our basic programming ability, and the design pattern of programming can be imagined as the martial arts secrets in martial arts.

Design patterns are to design elegant (coding) solutions according to different types of scenarios. There are many benefits to learning design patterns, for example, it is easy to understand the logic in classic code (many excellent open source frameworks use design patterns extensively); responding to interviews with a smooth response (design patterns are the focus of the interview); you can write elegant solutions ( Or code).

  • "algorithm"
  • "Dahua Data Structure"

Nowadays, big factory interviews especially like to test the knowledge of algorithms and data structures, and regard this as an assessment standard for the level of programmers. For most business development, it is usually more to use ready-made interfaces and class libraries that have been encapsulated, and it is rarely necessary to implement data structures and algorithms by yourself.

However, if you know the principles behind these libraries and understand the time and space complexity analysis, you can definitely be handy in your work. Mastering data structures and algorithms is very useful for reading frame source code and understanding the design ideas behind it. Writing high-quality, open source-level code, algorithms and data structures is worthy of our grasp.

  • "Large Website System and Java Middleware Practice"
  • "Technical Architecture of Large Websites: Core Principles and Case Studies"
  • "The core technology of billion-level traffic website architecture"

If you can control these three books, you can basically say that you are already a rare senior talent in Java.

04, learning methods

We have all experienced the student days (some students are still experiencing), the same class, the same teacher, why are the grades so different? Some students are talented and learn everything fast, some students are poor in learning ability, but the method is appropriate and can Get good grades. If you have no talent and no learning method, then you have only two words-yes, scumbag (I am a scumbag at university, I can't bear to look back).

What is the correct way to learn?

First, make good use of search engines . Usually you need to find information and solve problems. If you have no solution for a while, go search.

Google is the first choice, Bing is the second choice, and WeChat search is the third choice. On the PC side, Google and Bing are very reliable. Basically, everything you are looking for has good results. On the mobile phone, just use WeChat to search, the answer is also very reliable.

Second, learn to ask questions . If the search engine can't find the answer, don't throw the question directly to the group, to the colleague, leader, or big cow. You need to sort out the question first.

What do I want to ask, what is my environment, whether the description of the problem is clear enough, and whether the attitude is correct.

Don't be abrupt, don't be presumptuous, and be thick-skinned, it's hard, right? This is the art of asking questions.

Third, be good at summarizing and summarizing . Many classmates gave me feedback, "Second brother, why don't you always feel that you can't remember, and forget about it after learning, is there any good way?"

Yes, of course there is. After learning a knowledge point, if you need to practice it, then type the code, type it again, or understand, type it again. If you really feel that you understand, try to write an article, share your learning experience, and see if you can teach others.

If you are half a bottle of water, you can only pour out half a bottle of water; only if you are a bottle of water, you can pour out half a bottle of water, right?

The advantage of generalization is to turn scattered knowledge into a system, build a blueprint in your mind, and accumulate over time, you will find that you have also turned from a stream into an ocean.

By the way, I recommend Feynman's learning method . It was inspired by the Nobel Prize winner Richard Feynman. Using Feynman's technique, it only takes 20 minutes to deeply understand the knowledge points. Does it sound amazing?

The four steps of Feynman's learning method:

The first step is to teach a child to understand . This is a bit similar to one of our ancient poets, Bai Juyi. He hopes that his poems can even be understood by old women, and that they are good poems.

How to do it? Take out a piece of white paper, write down the topic you want to learn, think about how to teach it to a child, what you can say, and then write it down.

Students can replace the blank paper with an iPad, you can take notes, and so on.

The second step is to review . When we try to teach knowledge points to children, we may get stuck. Then we need to relearn these stuck points. These points may be the boundary of our cognition-the place to relearn.

The third step is to simplify the language . If you find that the words expressed are more complicated and not clear enough, try to read them out until they are fluent, natural, and concise enough.

Fourth, teach . Although this is optional, it is really important. If you make sure that you understand it, then teach it to others and see if you can teach others to understand it, which is what I say is good at summarizing and generalizing.

The entire mind map (recommended online URLs are Baidu Mindtu, ProcessOn), or a blog (markdown format is recommended).

Fourth, practice more . Really knows through practice, whether Ma Di can do it, give him a street booth to guard him, right, it's just a matter of fact that he can't keep it, and it's no use for birds.

There are many excellent open source projects on GitHub or Code Cloud. Pick some high-quality ones, down and go to research and study, based on the original code, try to make some optimizations, or add some functions.

In the process of doing it yourself, you will find, wow, there really is a new world!

Fifth, proficient in using development tools . Intellij IDEA and VSCode are both very popular development tools, which can help us become more efficient in our study and work. Are there any shortcut keys in them? Are there any operations, right?

In the process of using Intellij IDEA to write code, we must pay attention to code specifications. Install the plugins such as SonarLint and Alibaba Development Protocol in advance, check after writing the code, and make corrections to some bad habits according to the prompts.

Sixth, learn English well . This is really really really very very very important. Even if your English is very poor, you must not give up on yourself, right? Lei Jun dared to say "are you ok" to the world, what are you afraid of?

Besides, the Google translation plug-in can be installed in the Chrome browser, and the Translation translation plug-in can be installed in Intellij IDEA. As long as it has a little English foundation, it is completely unnecessary.

English level has improved, you can read the official documents, you can find answers on Stack Overflow, you can view the JDK source code, etc., the programming level will increase day by day.

Seventh, pay attention to rest . Physical health is very important. Don't become a working machine. You should work hard overtime when you are young and improve your skills by working overtime to earn more money. You can have this kind of thinking, but you have to be temperate, okay?

The task is tight and the deadline is coming. You can work overtime appropriately, but don't work overtime 365 days a year. Take time to travel, read, study, fall in love, and enjoy life.

Young people, don't be a "struggle and force". You can struggle, but don't be blind. Think about that bit of hair on your head, don't stay up late. If one person works overtime, there will be a second person working overtime, a third person working overtime, and a fourth person working overtime endlessly. Only when everyone stops working overtime, will there be a virtuous working atmosphere!

image

Above, I hope to be helpful to the students, peace.

If you need the above books and materials, it is inconvenient to download them on GitHub, you can directly click here to get them directly .

Guess you like

Origin blog.csdn.net/m0_46657043/article/details/108450792