Hệ thống kiến thức Java này dành cho việc học Java backend và ôn phỏng vấn, sắp xếp các bài viết Java trên website theo thứ tự “cú pháp cơ bản -> collection -> lập trình concurrency -> IO/NIO -> JVM -> tính năng mới”.
Hệ thống kiến thức Java này dành cho việc học Java backend và ôn phỏng vấn, sắp xếp các bài viết Java trên website theo thứ tự “cú pháp cơ bản -> collection -> lập trình concurrency -> IO/NIO -> JVM -> tính năng mới”.
Java Basics là nền tảng cần có trước khi học collection, concurrency, JVM, Spring và các middleware. Phần này không chỉ để ghi nhớ cú pháp; quan trọng hơn là hiểu object model của Java, truyền tham số, type erasure của generic, lời gọi bằng reflection, dynamic proxy, ranh giới serialization và cơ chế mở rộng của framework.
《Sổ tay phát triển Java của Alibaba》 có đề cập: “Để tránh mất độ chính xác, có thể sử dụng BigDecimal để thực hiện phép tính số floating-point”.
Phép tính số floating-point cũng có nguy cơ mất độ chính xác sao? Đúng vậy!
Ví dụ code:
float a = 2.0f - 1.9f;
float b = 1.8f - 1.7f;
System.out.println(a);// 0.100000024
System.out.println(b);// 0.099999905
System.out.println(a == b);// false
Java Generics là một tính năng mới được giới thiệu trong JDK 5. Việc sử dụng tham số generic có thể cải thiện khả năng đọc và tính ổn định của code. Nếu không có chú thích đặc biệt, các hành vi dưới đây tuân theo Java 8.
Tổng quan sơ đồ phân cấp exception của Java:

Exception và Error khác nhau thế nào?Keyword final có nghĩa là cuối cùng, không thể sửa đổi, được dùng làm modifier cho class, method và variable, với các đặc điểm sau:
Class được modifier bởi final không thể được kế thừa; mọi member method trong final class sẽ được ngầm định chỉ định là final method;
Method được modifier bởi final không thể bị override;
Variable được modifier bởi final chỉ có thể được gán một lần. Nếu là variable có primitive data type, value của nó không thể thay đổi sau khi khởi tạo; nếu là variable kiểu reference, sau khi khởi tạo không thể trỏ tới object khác, nhưng bản thân object được reference vẫn có thể thay đổi. Chỉ final variable thỏa điều kiện “constant variable” của JLS mới là compile-time constant.
Trong phần bình luận của một bài viết thảo luận về kiểu dữ liệu của field tiền, tôi thấy vài câu trả lời hoàn toàn khác nhau: có người nhất quyết dùng Long lưu cents, có người nói các trường hợp như lãi suất, tỷ giá phải dùng BigDecimal, cũng có người đề cập việc truyền trực tiếp string trong interface.
Proxy pattern là một design pattern tương đối dễ hiểu. Nói đơn giản, chúng ta sử dụng proxy object để thay thế việc truy cập real object, nhờ đó có thể cung cấp thêm các thao tác chức năng và mở rộng chức năng của target object mà không cần sửa target object ban đầu.