The best way to learn is to read books
"The best way to learn is to read books", this is my first experience after studying on my own and gaining some experience. . Personally, I think there are two benefits to reading books:
1. Books that can be published must have gone through repeated thinking, polishing and review. Therefore, from a professional perspective, the value of a good book is far more than Other information
2. It is convenient when typing the code in the book
"The best way to improve yourself again after reading the book is to read some related good blog posts." Personally I think this is the second step of learning, because a book often has hundreds of pages. Good blog posts are some summaries and refinements after reading and studying. It is very useful for sorting out the content of learning. Of course, this is not talking about your own learning. Method, I won’t talk about it anymore.
Many programmers often have the urge to read books, but don’t know which books to read. Below I will recommend some good books to Java programmers (the author of each book will be highlighted in bold and red), among which Most of them are books that I usually read. It can be regarded as a small summary and reflections on the books that I usually read.
There are many books on the market that explain design patterns. Although I said before that reading books is the best, for friends who are interested in design patterns, I recommend this blog. This blogger's design pattern is very, very good. I think 90% of the content is problem-free and worth learning. The general route of explaining the design pattern is:
1. The opening chapter points out the Definition of design pattern
2. Explain the structure of this design pattern with pictures and texts
3. Write the implementation of this design pattern in detailed code form
4. Supplement Content
5. Explain the advantages and disadvantages of this design pattern
Aren’t the knowledge points we pay attention to and learn about a design pattern just above?
However, I would like to remind netizens that there are many ways to write the same design pattern. It does not mean that only writing in a certain way is this design pattern. Take the adapter pattern for example. When we pay attention to the adapter pattern, we must pay attention to what the adapter pattern is and not how to write the adapter pattern. Don't think that if a certain piece of code is not written according to the adapter pattern, it is not the adapter pattern. Remember this, When you learn design patterns, you will definitely have a deeper understanding of the design patterns used in the code.
"In-depth Understanding of Java Virtual Machine: JVM Advanced Features and Best Practices"
It is also worth mentioning that the book "In-depth Understanding of the Java Virtual Machine: JVM Advanced Features and Best Practices" is available in electronic form and can be downloaded by searching online. However, it is recommended that interested friends buy the book and read it. The electronic version downloaded is usually an older version. Compared with the latest revised version of "In-depth Understanding of the Java Virtual Machine: JVM Advanced Features and Best Practices", there are many new additions by the author. There is no knowledge point.
《HotSpot Practical Combat》
Most of the Java virtual machines we usually use and even commercially use are Sun's HotSpot. You can see it by entering the command line with cmd and using the "java -version" command. If you want to have a more in-depth understanding of how some details of the virtual machine are implemented based on the Java virtual machine specifications, you can read the book "HotSpot Practice", written by Chen Tao. However, since the source code of HotSpot is written in C/C++, readers are required to have a very good foundation in C/C++. If you are not very familiar with these two languages, reading this book may not be of great help to you.
Finally, if you are interested, you may wish to download an openJDK online first. The source code of HotSpot is in it.
《Java Concurrent Programming Practice》
1. Text and code Less
2. More explanations and less practice
I think this may be the characteristic of foreigners writing books. Because Java is developed and maintained in North American countries (Canada, the United States), foreigners are not familiar with Java. All aspects of the theoretical knowledge system are mastered very clearly and thoroughly. Open this book and read, what is multi-threading, what is deadlock, what is competition, what is thread safety, etc. All aspects of knowledge points are explained in a lot of text, which makes people feel very boring and difficult to understand. Readers have made substantial progress. I have read this book twice and it has the meaning of ten lines in one glance. I will focus on the places I am interested in.
In any case, as a book that is often among the top ten must-read books for Java programmers, it must be recommended to everyone.
"Java Multi-Threaded Programming Core Technology"
This book is opposite to "Java Concurrent Programming in Practice". This book is characterized by large-scale code + small-scale precise explanation. This may be related to the pragmatic style of books written by Chinese people. This book explains thread safety, synchronized, Reentrant, Timer, etc. with detailed code, and multiple small knowledge points under each big knowledge point are explained in detail, which is very practical value.
For those who are interested, I believe that as long as you follow the code in this book to type, run, and think about it in three steps, your use and understanding of multi-threading will definitely take a few big steps forward.
However, the shortcoming of this book is that it does not cover some classes under the Java concurrency package such as CountDownLatch, Semphore, CyclicBarrier, Future, Callable, etc. The key CAS and AQS are not touched on, and the implementation of key classes is not mentioned. The principle was not mentioned either. Of course, this is very in-depth. If you can continue to study and research on this knowledge after studying this book, you will slowly grow into a very powerful multi-threading expert.
"Effective Java Chinese Edition"
Good code is what every Java programmer should pursue. It’s not that if I write a piece of good code today, it will improve performance compared to writing a piece of bad code. It should be more of an improvement. The readability of the code can avoid many potential and unknown problems, and avoid the time-consuming maintenance caused by problems after the code is online - this is very high in terms of time cost, labor cost and risk cost. .
"In-depth Analysis of the Inside Story of Java Web Technology"
I can sum up this book in one word: complete. It is really comprehensive, including HTTP, DNS, CDN, static, Jetty, Tomcat, Servlet, Spring, MyBatis, etc. It has everything. It covers a wide range of knowledge, but it is not like a book that focuses on a certain knowledge point. The explanation is very in-depth, and I feel that this book is trying to use a short length to explain some of the inside stories of the technologies used in Java Web, so that readers can have a rational understanding of the technical inside stories of these knowledge points. However, although there is not much space for each knowledge point, the key points are basically covered. It is a book that is truly rewarding. If you want to know more about the technical details of these technologies, you have to buy relevant books or check the information on your own online. It feels like you are trying to attract new ideas, or you can say that a master leads you in, and you practice on your own."Large Website Technical Architecture Core Principles and Case Analysis"
Most Java applications are used on the Web. Nowadays, any larger Web application must be a distributed system. So what technologies are used in a distributed system? How does a large website grow from a small website? How to keep your website secure? Distributed systems use caches. What caches are there? What are the things worth noting when using cache?
All the knowledge points about distributed distribution are reflected in this book. Only you can’t think of it, no one can’t write it, and it is very easy to understand. You can basically read it once or twice and take some notes. You know what's going on. After reading it a few more times, your understanding of distribution will definitely deepen. And it not only contains distributed knowledge, but also writes in a very down-to-earth manner how to be a good architect. In fact, I think this is not just for readers who want to be architects, but also to give readers some suggestions on how to be a good architect. How to better express your opinions, how to make others pay more attention to your voice, how to see the advantages of others, and gain a lot from it.
"Practice of Large Website Systems and Java Middleware"
Part of the content of this book overlaps with the previous book "Core Principles and Case Analysis of Large Website Technical Architecture" by Li Zhihui, such as the evolution of distributed systems, CDN, CAP theory and BASE theory, etc. This also shows that these are distributed systems or the focus of a large website. It is not bad to learn them again.
The focus of this book is the word middleware. Middleware is a very important thing in distributed systems. Its most important role should be decoupling and reducing the strength between modules. Dependence, the dependence between different modules is reduced, and each can develop its own functions independently. This can also be said to be the goal and driving force of software engineering development.
Therefore, part of the content of this book is based on middleware, explaining various knowledge of middleware and JMS in detail. It is suitable for readers who are familiar with distributed systems and want to do some research on middleware. .
《From Paxos to ZooKeeper Distributed Consistency Principle and Practice》
This book is a book I have been studying recently. Like the above "Large Website System and Java Middleware Practice", it belongs to the category of distributed components and is somewhat in-depth content. Of course, it is also my own personal interests. Of course, if you aspire to be an excellent large-scale website architect, technical director of a company, etc., you must master this knowledge.
This book starts from the basic theory of distributed systems, talks about the Paxos algorithm, and finally introduces it to Zookeeper, step by step. Of course, it is not convenient for me to express any further opinions at the moment, because I have not yet understood the Paxos algorithm in the second chapter of this book (the Paxos algorithm is indeed somewhat difficult to understand and not easy to understand), and the following chapters are not yet available. Read on.
If the company where netizens work is using Zookeeper, and you are interested in Zookeeper and want to study its principles, this book will be the best choice.
"Learn MySQL5.6 from Scratch"
As a Java programmer, I think we must not think that the database is a DBA matter. The database is also a knowledge that a Java programmer must master. Rich database performance optimization experience is a Essential skills for top programmers. The current mainstream databases include Oracle and MySQL. Of course, MySQL is recommended to everyone. I think there are two main reasons: 1. MySQL is more lightweight and smaller than Oracle. It is more convenient to install and uninstall. SQL is actually the same. If you want to learn databases, just learn MySQL. You can study it conveniently at home. If your company uses Oracle, just use the comparative learning method and pay attention to Oracle and The difference between MySQL is 2. With the progress of Alibaba’s move to IOE in 2009, many domestic Internet companies will choose MySQL as their database. Because MySQL is free, it saves money and No need to rely on Oracle if something goes wrongWhat I recommend for learning MySQL is "MySQL 5.6 Learning from Scratch" which I read myself. I think this book is very good. The knowledge points in the book are very detailed and comprehensive. Readers should choose this book. Aren't most of the standards just these two points?
"In-depth Analysis of Spring Source Code"
The Spring framework is so well done and so powerful that many developers only know Spring and don’t know what a factory is, what a singleton is, and what an agent is (my real experience in interviewing others ). This powerful framework must have a very complex implementation inside. This will cause problems once your program uses Spring. It may be an Error, an Exception, or the result of the program is not what you expected. Problems like this may occur. Sometimes, it will make you feel confused. There seems to be no better solution except checking information online or asking others.
Studying Spring's source code is a good learning method. I personally think this has many benefits:
1. After understanding the internal implementation of the framework, you can take the initiative to solve problems, and No need to rely on others
2. The internal implementation of the Spring framework uses a lot of design patterns and good code design ideas. This will greatly improve your code writing and understanding of design patterns
3. Studying the Spring framework will greatly enhance your ability to read code. I believe that as long as you can study clearly how Spring is implemented internally, the source code of any other framework will not be difficult for you
All in all, I think the ability to read code is one of the biggest differences between an ordinary programmer and a good programmer. The former will only use what others have written, while the latter can not only use it well, but also know it clearly. Knowing how the bottom layer of things written by others is implemented can easily solve problems when they arise.
Spring source code, I personally recommend the book "In-depth Analysis of Spring Source Code". If you really want to study thoroughly and write down the Spring source code clearly, I am afraid that three or four books are not enough. The author tried his best in nearly 400 pages. It is not easy to explain how Spring source code is implemented. Although it cannot be explained completely, I believe that the author's explanation combined with readers' own research will surely give them a deeper understanding of Spring's implementation.
Postscript
The above are some good books worth reading that I recommend to Java developers. But there are no Java basics or Java tutorials in these books. It’s not that I don’t recommend it, but it’s been several years since I learned the basic Java technology myself. I forgot everything I read when I was studying, so I can’t I irresponsibly recommend some books to everyone that I have not read myself.
Attention, students learning Java! ! !
If you encounter any problems during the learning process or want to obtain learning resources, you are welcome to join the Java learning exchange group: 299541275 Let’s learn Java together!
The above is the detailed content of How to become a top Java programmer. For more information, please follow other related articles on the PHP Chinese website!