Chuyên đề Java Basics: cú pháp, lập trình hướng đối tượng, generic, reflection, proxy và serialization
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.
Dành cho ai
- Người mới bắt đầu học Java có hệ thống và muốn kết nối cú pháp cơ bản với các cơ chế cốt lõi.
- Bạn đang chuẩn bị cho câu hỏi phỏng vấn Java Basics và muốn nhanh chóng bổ sung những phần còn thiếu.
- Developer đã viết dự án Java nhưng chưa hiểu sâu về các cơ chế như reflection, proxy, generic, SPI và serialization.
- Kỹ sư muốn tiếp tục học source code của collection, concurrency, JVM và Spring, nhưng cần bổ sung kiến thức nền tảng trước.
Trọng tâm học
- Cú pháp cơ bản, lập trình hướng đối tượng, exception, các class thường dùng, keyword và chi tiết về encoding của Java.
- Mối quan hệ giữa truyền giá trị, reference variable, khả năng thay đổi của object và lời gọi method.
- Generic, wildcard, type erasure và ảnh hưởng của chúng đến collection, thiết kế API và reflection.
- Các cơ chế thường gặp ở tầng dưới của framework như reflection, dynamic proxy và SPI.
- Những kiến thức dễ khiến bạn mắc lỗi trong dự án và phỏng vấn như serialization,
BigDecimal,Unsafevà syntactic sugar.
Thứ tự đọc đề xuất
- Tổng hợp câu hỏi phỏng vấn Java Basics thường gặp (phần 1): đọc qua trước về cú pháp cơ bản, lập trình hướng đối tượng và các class thường dùng của Java.
- Tổng hợp câu hỏi phỏng vấn Java Basics thường gặp (phần 2) và Tổng hợp câu hỏi phỏng vấn Java Basics thường gặp (phần 3): bổ sung exception, generic, reflection, annotation và các điểm dễ mắc lỗi.
- Tổng hợp Java keyword và Giải thích chi tiết Java pass-by-value: làm rõ những hiểu lầm thường gặp về các khái niệm nền tảng.
- Giải thích chi tiết generic & wildcard, Giải thích chi tiết cơ chế Java reflection, Giải thích chi tiết Java proxy pattern: hiểu các cơ chế thường gặp ở tầng dưới của framework.
- Giải thích chi tiết Java serialization, Giải thích chi tiết cơ chế Java SPI, Giải thích chi tiết lớp Unsafe đặc biệt của Java: tiếp tục bổ sung kiến thức mở rộng trong thực tiễn dự án và quá trình đọc source code.
Bài viết cốt lõi
Câu hỏi phỏng vấn Java Basics
- Tổng hợp câu hỏi phỏng vấn Java Basics thường gặp (phần 1): bao quát đặc điểm ngôn ngữ Java, cú pháp cơ bản, lập trình hướng đối tượng, các class thường dùng và những điểm dễ nhầm.
- Tổng hợp câu hỏi phỏng vấn Java Basics thường gặp (phần 2): tiếp tục hệ thống hóa exception, generic, reflection, annotation và các năng lực nền tảng khác.
- Tổng hợp câu hỏi phỏng vấn Java Basics thường gặp (phần 3): bổ sung các câu hỏi phỏng vấn Java Basics thiên về chi tiết và nâng cao hơn.
Cơ chế ngôn ngữ
- Tổng hợp Java keyword: giải thích rõ các keyword như
final,static,this,super. - Giải thích chi tiết Java pass-by-value: giải thích vì sao Java chỉ có truyền giá trị và ngữ nghĩa thực tế khi truyền reference variable làm tham số.
- Giải thích chi tiết generic & wildcard: tìm hiểu cú pháp generic, wildcard giới hạn trên và giới hạn dưới, type erasure cùng các trường hợp sử dụng thường gặp.
- Giải thích chi tiết Java syntactic sugar: tìm hiểu compiler xử lý enhanced for, autoboxing và unboxing, enum, Lambda cùng các syntactic sugar khác như thế nào.
Cơ chế tầng dưới của framework
- Giải thích chi tiết cơ chế Java reflection: tìm hiểu object Class, lời gọi reflection, chi phí hiệu năng và các trường hợp sử dụng.
- Giải thích chi tiết Java proxy pattern: nắm được static proxy, JDK dynamic proxy và CGLIB proxy.
- Giải thích chi tiết cơ chế Java SPI: tìm hiểu service discovery và cơ chế mở rộng theo plugin.
- Giải thích chi tiết Java serialization: tìm hiểu quy trình serialization, serialVersionUID, rủi ro bảo mật và các phương án thay thế.
Chi tiết thực tiễn
- Giải thích chi tiết BigDecimal: nắm được các lưu ý về tính tiền, độ chính xác, rounding mode và cách khởi tạo.
- Java nên dùng long hay BigDecimal cho số tiền?: phân biệt trường hợp lưu trữ và tính toán số tiền, nắm được đơn vị nhỏ nhất, rounding, overflow và thiết kế field trong database.
- Giải thích chi tiết lớp Unsafe đặc biệt của Java: tìm hiểu off-heap memory, CAS, offset của field trong object và các năng lực tầng dưới trong source code.
Câu hỏi thường gặp
- Java truyền giá trị hay truyền tham chiếu? Vì sao field có thể bị thay đổi khi truyền object làm tham số?
==vàequals()khác nhau như thế nào? Vì sao overrideequals()bắt buộc phải overridehashCode()?- Nên chọn
String,StringBuilderhayStringBuffernhư thế nào? final,static,this,superlần lượt có tác dụng gì?- Type erasure của generic là gì?
List<String>vàList<Integer>khác nhau như thế nào tại runtime? - Vì sao reflection chậm? Có những trường hợp sử dụng điển hình nào?
- JDK dynamic proxy và CGLIB dynamic proxy khác nhau như thế nào?
- Vì sao không khuyến nghị sử dụng trực tiếp Java native serialization?
- Vì sao
BigDecimalđược khuyến nghị khởi tạo bằng string? - Số tiền nên dùng
longđể lưu đơn vị nhỏ nhất hay dùngBigDecimal?
Chuyên đề liên quan
Lời cuối
Nếu nội dung hữu ích với bạn, hãy tiện tay tặng JavaGuide một Star miễn phí để ủng hộ: GitHub | Gitee.
JavaGuide đã được duy trì gần bảy năm, tích lũy 6100+ commit, với sự chung tay hoàn thiện của 620+ contributor. Star, phản hồi và PR của bạn đều là động lực để dự án tiếp tục cập nhật.
Nếu bạn đang chuẩn bị phỏng vấn backend / phát triển ứng dụng AI, có thể tham khảo Knowledge Planet của tôi, bao gồm các project thực tế về backend và AI, tối ưu CV, hỏi đáp 1-1 và tài liệu về các trọng điểm thường gặp, đã được duy trì liên tục sáu năm.
