Những cuốn sách kinh điển Java nên đọc
Java Basics

Nội dung của cuốn 《Head First Java》 rất nhẹ nhàng và thú vị, có thể nói đây là một trong những cuốn sách tôi yêu thích nhất khi mới học lập trình. Đồng thời, đây cũng là cuốn sách nhập môn Java của tôi. Nhờ sự trợ giúp của cuốn sách này trong giai đoạn đầu học Java, tôi mới có thể bước qua cánh cửa của ngôn ngữ Java.
Tôi nghĩ việc mình có thể kiên trì với Java đến nay có công rất lớn của cuốn sách này. Nhiều người bạn xung quanh tôi cũng đọc cuốn sách này khi mới học Java.
Nhiều bạn sẽ hỏi: Cuốn sách này có phù hợp với người mới học lập trình không?
Theo tôi, cuốn sách này khá phù hợp với người mới học lập trình, dù sao đây cũng là một phần của series “Head First”.
《Java Core Technology Vol. 1 + Vol. 2》

Hai cuốn sách này cũng rất hay. Tuy nhiên, nội dung của chúng khá nhiều, đọc hết sẽ tốn tương đối nhiều thời gian. Hiện giờ tôi dùng hai cuốn này như sách tra cứu. Chẳng hạn, khi viết bài mà gặp vấn đề về Java Basics, tôi thường lật hai cuốn này ra tham khảo!
Khi còn học đại học, tôi đã mua hai cuốn và đặt trong ký túc xá, lúc rảnh lại lật ra đọc. Bạn nên đọc sau khi đã có một chút kiến thức Java; nội dung được trình bày khá sâu và toàn diện, rất đáng đọc.

Ngoài ra, năm ngoái tác giả cuốn sách này đã xuất bản 《On Java》, tôi khuyên bạn đọc cuốn này hơn vì nội dung mới hơn và giới thiệu 3 bản long-term support của Java (Java 8, 11, 17).

Dù sao đây cũng là cuốn sách kỹ thuật duy nhất trên thị trường hiện nay giới thiệu 3 bản long-term support của Java (Java 8, 11, 17).

Java 8 có thể xem là một phiên bản mang tính cột mốc; hiện nay phần lớn doanh nghiệp vẫn sử dụng Java 8. Việc nắm được một số tính năng mới của Java 8 như Lambda và Stream API vẫn rất cần thiết. Về phần này, tôi giới thiệu cuốn 《Java 8 in Action》.
《The Logic of Java Programming》

Một cuốn sách hay nhưng khá kín tiếng, có nội dung sâu hơn so với sách nhập môn. Phù hợp với người mới học, đồng thời cũng thích hợp để mọi người ôn lại kiến thức Java Basics.
Java Concurrency
《The Beauty of Java Concurrent Programming》

Cuốn sách này rất phù hợp để học Java multi-thread, cách giải thích dễ hiểu; tác giả trình bày thành thạo mọi thứ từ nền tảng đến thực hành concurrent programming.
Ngoài ra, tác giả Jia Duo thường xuyên đăng nhiều bài viết kỹ thuật trên Internet. Cuốn sách này cũng là kết quả của nhiều năm tích lũy của Jia Duo trong lĩnh vực multi-thread. Nội dung trong sách hầu như đều được giải thích bằng code, rất thuyết phục!
《Practical Java High-Concurrency Programming》

Đây là cuốn sách thứ hai tôi muốn giới thiệu, khá phù hợp để nhập môn hoặc nâng cao về multi-thread. Cuốn sách cũng kết hợp lý thuyết với thực hành; phần giải thích từng kiến thức khá dễ hiểu và cấu trúc tổng thể cũng rõ ràng.
《A Comprehensive Guide to Java Multi-Threading》

Cuốn sách open source này được viết và công khai bởi một số chuyên gia đến từ các công ty lớn. Để viết tốt cuốn 《A Comprehensive Guide to Java Multi-Threading》, các tác giả đã đọc nhiều sách và blog về Java multi-thread, sau đó kết hợp kinh nghiệm, các ví dụ Demo và phân tích source code của mình để hoàn thiện cuốn sách.
Chất lượng cuốn sách này cũng rất tốt! Xin dành lời khen cho các tác giả! Sách có quy tắc trình bày và phong cách ngôn ngữ thống nhất, cách diễn đạt và logic rõ ràng. Sau khi hoàn thành bản thảo đầu tiên của mỗi bài viết, các tác giả còn review lẫn nhau; khi merge vào main branch, tất cả thành viên lại review một lần nữa, cuối cùng chỉnh sửa toàn bộ ba lần.
Đọc online: https://redspider.gitbook.io/concurrent/.
《Principles of Java Concurrent Implementation: JDK Source Code Analysis》

Cuốn sách chủ yếu giải thích source code của một số phần quan trọng trong Java Concurrent package. Ngoài ra, các kiến thức concurrent quan trọng như JMM, happens-before, CAS cũng được giới thiệu.
Dù bạn muốn nghiên cứu sâu về Java concurrency hay chuẩn bị cho phỏng vấn, bạn đều có thể đọc cuốn sách này.
JVM
《Understanding the Java Virtual Machine》

Có thể mô tả cuốn sách này bằng một câu: một trong những cuốn sách nội địa xuất sắc nhất, thực sự rất chất lượng! (Thật lòng hy vọng trong nước sẽ có thêm nhiều cuốn sách chất lượng như vậy! Cố lên! 💪)
Edition 3 của cuốn sách đã được phát hành vào cuối năm 2019, bổ sung nhiều nội dung thiết thực như phân tích nguyên lý của thế hệ GC mới như ZGC. Hiện sách đạt điểm cao 9.5 trên Douban; có đáng đọc hay không thì tôi không cần nói thêm!
Dù bạn chuẩn bị phỏng vấn hay muốn học sâu hơn trong lĩnh vực Java, bạn đều khó có thể bỏ qua cuốn sách này. Không chỉ nên đọc một lần, bạn còn nên đọc lại nhiều lần vì nội dung đều rất thiết thực. Sách cũng có một số phần cần tự thực hành, tôi khuyên bạn nên làm theo.
Các sách tương tự còn có 《Practical Java Virtual Machine》 và 《Virtual Machine Design and Implementation: Using JVM as an Example》, cả hai đều rất hay!


Nếu bạn hứng thú với việc thực hành và muốn tự viết một JVM đơn giản, có thể đọc cuốn 《Write Your Own Java Virtual Machine》.

Code trong sách được implement bằng ngôn ngữ Go. Sau khi hiểu nguyên lý, bạn có thể dùng Java để mô phỏng và viết lại, coi như luyện tập! Nếu hiện tại bạn chưa đủ khả năng tự dùng Java để viết lại, trên Internet cũng có thể tìm thấy nhiều implementation bằng Java, chẳng hạn series 《Zachaxy tự viết JVM》 của Zachaxy.
Hiện cuốn sách đạt 8.2 điểm trên Douban. Cá nhân tôi thấy thầy Zhang Xiuhong viết khá hay; cuốn sách xứng đáng có điểm cao hơn.
Ngoài ra, bài viết 《Học cách implement JVM từ bề mặt đến bên trong》 do R đăng trên Douban cũng giới thiệu nhiều sách hay liên quan đến JVM, rất đáng để đọc.
Công cụ thường dùng
Rất quan trọng! Rất quan trọng! Đặc biệt là Git và Docker.
- IDEA: Nắm các thao tác cơ bản và shortcut thường dùng. Tài liệu liên quan: 《Hướng dẫn chuyên đề IntelliJ IDEA tiếng Trung giản thể》.
- Maven: Rất khuyến khích bạn dành vài ngày học cách sử dụng Maven trước khi học các framework thường dùng. (Tự tìm và tải Jar package ở khắp nơi thực sự rất phiền; dùng Maven có thể giúp bạn tiết kiệm nhiều công sức.) Bài đọc liên quan: Tổng hợp khái niệm cốt lõi Maven.
- Git: Kỹ năng Git cơ bản cũng là điều bắt buộc, hãy thử host code của mình trên Github trong quá trình học. Bài đọc liên quan: Tổng hợp khái niệm cốt lõi Git.
- Docker: Hãy học cách dùng Docker để cài đặt những phần mềm cần cho việc học, chẳng hạn MySQL; như vậy sẽ thuận tiện hơn và giúp bạn tiết kiệm không ít thời gian. Tài liệu liên quan: 《Docker - Từ nhập môn đến thực hành》.
Ngoài những công cụ này, tôi đặc biệt khuyên bạn nhất định phải hiểu cách sử dụng GitHub. Bạn có thể xem bài viết Tổng hợp mẹo sử dụng GitHub hữu ích để biết một số mẹo dùng GitHub.
Framework thường dùng
Với phần framework, bạn nên tìm đọc tài liệu chính thức hoặc blog.
Spring/SpringBoot
Spring và SpringBoot thực sự rất quan trọng!
Nhất định phải hiểu hai khái niệm AOP và IOC. Các kiến thức như scope và lifecycle của bean trong Spring, giải thích chi tiết nguyên lý hoạt động của SpringMVC cũng rất quan trọng, nhất định phải nắm rõ.
Làm Java backend trong doanh nghiệp, bạn chắc chắn không thể thiếu SpringBoot; đây là kỹ năng bắt buộc. Nhất định, nhất định, nhất định phải học tốt!
Bạn cũng cần biết cách tích hợp SpringBoot với một số công nghệ phổ biến như MyBatis, ElasticSearch, SpringSecurity, Redis.
Dưới đây là một số sách/column được đề xuất.

Không nên đọc cuốn này như sách nhập môn; nếu mới bắt đầu, bạn có thể tìm sách hoặc video của tác giả trong nước. Cuốn sách này giống như một phần tổng quan về Spring, chỉ giới thiệu một số khái niệm cơ bản và ví dụ, bao quát nhiều khía cạnh của Spring nhưng không đi sâu. Đúng như tác giả viết ở trang cuối: “Học Spring, đây mới chỉ là khởi đầu”.
《Advanced Programming in Spring 5》

Cuốn sách giới thiệu khá chi tiết các tính năng mới của Spring5, nhưng cũng không thể nói là quá hay. Ngoài ra, bản dịch toàn sách có cảm giác hơi gượng và hơi khô khan. Nội dung khá nhiều, tôi thường dùng làm tài liệu tra cứu.
《Spring Boot Programming Ideas (Core)》

Hơi dài dòng, nhưng phần giới thiệu nguyên lý khá rõ ràng.
Phân tích SpringBoot, không phù hợp với người mới học. Tôi mua cuốn này năm ngoái nhưng hiện mới chỉ đọc vài chương, sau đó không đọc tiếp được. Sách dày, nhiều phần giải thích kiến thức rất dài dòng và lan man, tuy nhiên phần giải thích nguyên lý bên trong SpringBoot vẫn khá rõ ràng.

Một cuốn sách khá bình thường, có thể đọc lướt để tham khảo.
MyBatis
MyBatis được sử dụng khá nhiều trong nước, tôi khuyên bạn không cần dành quá nhiều thời gian cho nó. Dĩ nhiên, source code của MyBatis vẫn rất đáng học vì có nhiều thực hành code hay. Dưới đây là hai cuốn sách về source code MyBatis.
《Handwritten MyBatis: Progressive Source Code Practice》

Đây là cuốn sách do người bạn tốt của tôi, Fu Ge, xuất bản. Cuốn sách lấy thực hành làm trọng tâm, loại bỏ những phần phức tạp trong source code MyBatis, tập trung vào logic cốt lõi của MyBaits, đơn giản hóa quá trình implement code và từng bước implement các chức năng cốt lõi của MyBaits bằng phương pháp phát triển progressive.
Repository của project đi kèm cuốn sách: https://github.com/fuzhengwei/small-mybatis.
《A General Guide to Source Code Reading: MyBatis Source Code Explained》

Cuốn sách dùng open source code của MyBatis để giải thích quy trình và phương pháp đọc source code! Tổng cộng hơn 300 class trong source code MyBatis được phân tích chi tiết, bao gồm kiến thức nền, cách tổ chức, cấu trúc logic và chi tiết implementation.
Repository ví dụ đi kèm cuốn sách: https://github.com/yeecode/MyBatisDemo.
Netty

Cuốn sách này có thể dùng để nhập môn Netty. Nội dung bắt đầu từ BIO, chuyển sang NIO, sau đó mới giới thiệu chi tiết Netty là gì, vì sao Netty hữu ích và các kiến thức quan trọng về Netty.
Cuốn sách hầu như giới thiệu đầy đủ các kiến thức quan trọng của Netty, đồng thời chủ yếu giải thích thông qua thực hành.
《The Road to Advanced Netty: Learning Netty Through Examples》

Nội dung là các case thực hành về việc sử dụng Netty, chẳng hạn memory leak. Nếu bạn đã hoàn toàn nhập môn Netty và muốn hiểu sâu hơn về Netty, nên đọc cuốn sách này.
《Learn Netty with Flash: Netty Instant Messaging in Action and Underlying Principles》

Đây là cuốn sách được xuất bản vào tháng 3 năm 2022. Sách gồm hai phần; phần đầu đưa bạn nhập môn Netty thông qua case thực hành về một hệ thống instant messaging, phần sau giúp bạn hiểu các nguyên lý bên trong quan trọng của Netty thông qua phân tích source code Netty.
Tối ưu performance
《Java Performance: The Definitive Guide》

Hy vọng sẽ có thêm nhiều sách hay về Java performance optimization!
Sách thuộc series O'Reilly, là sách nhập môn performance tuning. Cá nhân tôi cho rằng performance tuning là kiến thức bắt buộc đối với mọi người làm Java.
Nội dung thực hành được giới thiệu trong sách khá tốt, đặc biệt là JVM tuning. Nhược điểm cũng khá rõ ràng: nội dung hơi cũ. Trên thị trường có rất ít sách dạng này. Cuốn sách không phù hợp với người mới học; nên đọc sau khi đã nắm Java tương đối vững. Ngoài ra, trước khi đọc, tốt nhất nên xem cuốn 《Understanding the Java Virtual Machine》 của Zhou Zhiming.
Kiến trúc website
Tôi đã đọc nhiều sách về kiến trúc website, chẳng hạn 《Web Site Technology Architecture: Core Principles and Case Analysis》, 《Core Technologies for Billion-Scale Traffic Website Architecture》, 《The Way of Architecture Practice: Core Technology Practice for Billion-Scale Gateways, Platform Openness, Distributed Systems, Microservices, Fault Tolerance, and More》.
Hiện tại, tôi chỉ có thể giới thiệu 《Learn Architecture from Scratch》 của thầy Li Yunhua và 《Software Architecture Design: Integrating Large-Scale Website Technology Architecture with Business Architecture》 của thầy Yu Chunlong.

Cuốn 《Learn Architecture from Scratch》 có một column trên GeekTime cũng mang tên 《Learn Architecture from Scratch》, nhiều nội dung trong sách đến từ column này; chỉ cần mua một trong hai. Tôi mới đọc một phần nhỏ, nội dung khá toàn diện, là một cuốn sách thực sự nói về cách làm architecture.

Transaction và lock, distributed systems (CAP, distributed transaction...), high concurrency, high availability đều được giới thiệu trong cuốn 《Software Architecture Design: Integrating Large-Scale Website Technology Architecture with Business Architecture》.
Phỏng vấn
《JavaGuide Interview Crash Course》


Phiên bản phỏng vấn của JavaGuide, bao quát phần lớn kiến thức về Java backend như collection, JVM, multi-thread và database MySQL.
Trả lời “Interview Crash Course” ở phần tin nhắn của tài khoản công khai để nhận miễn phí, không có chiêu trò nào.

