Java Core
Học lại Java từ mô hình thực thi, hệ thống kiểu và hướng đối tượng đến collections, concurrency, virtual threads, bộ nhớ JVM và chẩn đoán production.
- chương và chuyên đề
- 18
- câu hỏi phỏng vấn
- 62
- lab thực hành
- 9
- kết quả cần đạt
- 6
1. Lộ trình học: Học → Nói → Làm → Kiểm tra
Bốn chặng dưới đây là đường đi trong Part 01. Chạy ví dụ ngay khi học lý thuyết; sau bước tự đánh giá, quay lại đúng phần chưa vững thay vì chỉ đọc lại toàn bộ.
1.1 Lý thuyết
18 chương và chuyên đề bám Java SE 21, JLS, JVMS và OpenJDK, kèm ví dụ có thể chạy.
1.2 · 62 câu hỏi
Câu trả lời mẫu và follow-up, gồm kiến trúc Collections từ interface đến implementations.
1.3 Thực hành
9 lab về language, collections, concurrency, module, I/O, virtual threads và JVM.
1.4 Sai lầm & checklist
Nhận diện hiểu sai, lỗi triển khai và tự xác nhận mức độ thành thạo.
2. Kết quả cần đạt
Giữ sáu mục tiêu của Part 01. Dùng phần minh chứng gợi ý để tự kiểm tra mức độ làm chủ từng mục tiêu, không chỉ mức độ nhớ thuật ngữ.
-
Giải thích được Java chạy chương trình như thế nào.
Minh chứng gợi ý: Tự vẽ luồng mã nguồn, biên dịch, class file, nạp/liên kết/khởi tạo và thực thi. Đối chiếu một method với bytecode; giải thích vai trò stack frame và heap. [2] [3]
-
Đọc và viết được Java 21 có type-safety, resource-safety và error handling rõ ràng.
Minh chứng gợi ý: Đưa ra ví dụ có kiểm tra kiểu, quản lý vòng đời tài nguyên và nhánh lỗi. Chỉ rõ tài nguyên được đóng ở đâu, exception được xử lý hay truyền lên caller; tự kiểm tra cả nhánh thành công và thất bại.
-
Chọn collection dựa trên semantics, complexity và thread-safety.
Minh chứng gợi ý: Lập bảng lựa chọn theo semantics, complexity và thread-safety; nêu yêu cầu về thứ tự, phần tử trùng lặp, thao tác chủ đạo và chia sẻ dữ liệu. Giải thích từ interface contract đến implementation cụ thể.
-
Phân tích race condition bằng atomicity, visibility và ordering.
Minh chứng gợi ý: Trình bày shared state, invariant cần giữ và một interleaving gây lỗi; giải thích bản sửa theo cả ba khía cạnh atomicity, visibility, ordering thay vì chỉ đưa ra một lần chạy đúng.
-
Phân biệt platform thread, executor, CompletableFuture và virtual thread.
Minh chứng gợi ý: So sánh nơi task được thực thi, cách nhận kết quả/lỗi và cách quản lý vòng đời. Với virtual thread, nêu workload định áp dụng cùng giới hạn tài nguyên cần kiểm tra.
-
Điều tra bước đầu CPU cao, deadlock, GC pressure và memory leak.
Minh chứng gợi ý: Chuẩn bị hồ sơ chẩn đoán ban đầu cho từng triệu chứng: dấu hiệu, giả thuyết, bằng chứng phù hợp từ thread dump, GC log, JFR hoặc phân tích heap và bước kiểm tra tiếp theo. Tách điều quan sát được khỏi kết luận nguyên nhân.
3. Đọc tài liệu đúng câu hỏi
| Nguồn | Tra cứu điều gì? | Cách dùng khi học |
|---|---|---|
| Java SE 21 API | Contract của class, interface và method. Tài liệu phân biệt Java SE API với API riêng của JDK. [1] | Khi chọn Collections hoặc API concurrency, đọc contract và điều kiện sử dụng của đúng kiểu; không suy ra hành vi chỉ từ tên. |
| JLS 21 | Quy tắc ngôn ngữ: kiểu, hướng đối tượng, exceptions, execution và threads/locks. [2] | Dùng để lý giải chương trình hợp lệ hay không và những quy tắc liên quan tới kết quả thực thi. |
| JVMS 21 | Class file, run-time data areas, instruction set, loading, linking và initialization. [3] | Đối chiếu mô hình JVM với bytecode; tách mô hình trừu tượng khỏi một implementation cụ thể. |
| OpenJDK JEP | Tài liệu bối cảnh thiết kế; bắt đầu với JEP 444 về virtual threads do Oracle dẫn chiếu. [4] [5] | Khi đọc một JEP, kiểm tra phạm vi và phiên bản áp dụng, rồi đối chiếu specification/API của JDK đang học. |
4. Từ ví dụ học tập đến production
PHẠM VI BẢO ĐẢM JVMS mô tả một máy trừu tượng; layout bộ nhớ, thuật toán GC và tối ưu nội bộ thuộc lựa chọn implementation. Không biến quan sát trên một JVM thành bảo đảm chung cho mọi JVM. [3]
TRADE-OFF Virtual threads hướng tới nhiều tác vụ chờ I/O; chúng không tự làm mã CPU-bound chạy nhanh hơn. Lợi ích về throughput phải gắn với workload, không phải một cam kết giảm latency cho mọi chương trình. [5]
Version caveat · đừng trộn kết luận giữa các JDK.
Trong JDK 21, blocking bên trong synchronized có thể giữ carrier thread do pinning. [5] JDK 24 thay đổi trường hợp này qua JEP 491. [6] Điều đó không có nghĩa mọi pinning biến mất: native method và foreign function vẫn cần được xem xét. [7]
Đề xuất thực hành: khi lưu kết quả lab, ghi JDK vendor/build, cấu hình JVM, môi trường và workload. Khi so sánh hiệu năng, giữ điều kiện đo rõ ràng, lưu kết quả thực tế và nêu giới hạn suy luận; overview này không đặt benchmark cố định hay khẳng định đã chạy các lab.