Part 01 · Java Core · 1.4
Sai lầm thường gặp & checklist
Red flag không chỉ là “trả lời sai”; nó là dấu hiệu một mental model sai có thể dẫn đến bug hoặc quyết định kỹ thuật nguy hiểm.
6hiểu sai thường gặp
7lỗi triển khai
27checklist kiến thức
6checklist phỏng vấn
Hiểu sai thường gặp
Các câu dưới đây nghe có vẻ hợp lý, nhưng mỗi câu đều che giấu một mental model sai cần sửa trước khi đi sâu vào production hoặc phỏng vấn.
1. “Java truyền object bằng reference.”
Đúng phải là truyền bản sao của reference theo value. Nhầm lẫn này làm giải thích mutation/reassignment thiếu nhất quán.
Đúng phải là truyền bản sao của reference theo value. Nhầm lẫn này làm giải thích mutation/reassignment thiếu nhất quán.
2. “volatile làm biến thread-safe.”
volatile không biến compound operation thành atomic và không bảo vệ invariant nhiều biến.3. “ConcurrentHashMap làm mọi đoạn code dùng map atomic.”
Thread-safe method không tự biến sequence get-check-put thành một transaction.
Thread-safe method không tự biến sequence get-check-put thành một transaction.
4. “Parallel stream/virtual thread luôn nhanh hơn.”
Phải phân biệt CPU-bound, blocking I/O, overhead, pool và downstream capacity.
Phải phân biệt CPU-bound, blocking I/O, overhead, pool và downstream capacity.
5. “Có GC nên Java không memory leak.”
Object reachable ngoài ý muốn vẫn không được thu hồi.
Object reachable ngoài ý muốn vẫn không được thu hồi.
6. “Record là deep immutable.”
Record chỉ đảm bảo component reference final; mutable component cần defensive copy.
Record chỉ đảm bảo component reference final; mutable component cần defensive copy.
Lỗi triển khai thường gặp
- Dùng mutable object làm
HashMapkey rồi sửa field tham gia equality. - Override
equalsnhưng bỏhashCode, hoặc dùng inheritance khiến equality mất symmetry. - Catch
Exception, log rồi tiếp tục với state không hợp lệ; làm mất original cause khi translate. - Không đóng executor/resource, hoặc swallow
InterruptedExceptionmà không restore interrupt flag. - Block bằng
join/gettùy tiện trong async pipeline; thiếu timeout và cancellation. - Dùng unbounded queue/cache khiến latency và heap tăng dần.
- Đọc một thread dump hoặc heap histogram rồi kết luận nguyên nhân.
Checklist kiến thức
Tự đánh dấu khi bạn có thể giải thích bằng mental model và ví dụ, không chỉ nhớ định nghĩa.
- Tôi phân biệt chính xác JDK, JVM, bytecode và JIT.
- Tôi giải thích được primitive/reference và pass-by-value bằng code.
- Tôi hiểu initialization order và không gọi overridable method nguy hiểm từ constructor.
- Tôi chọn interface, abstract class, composition và inheritance theo domain.
- Tôi sử dụng record/sealed/pattern matching đúng giới hạn.
- Tôi thực hiện đúng equals/hashCode contract và thiết kế immutable value object.
- Tôi giải thích String Pool, intern, literal/new String và compile-time/runtime concatenation.
- Tôi hiểu checked/unchecked exception, suppressed exception và try-with-resources.
- Tôi giải thích invariance, wildcard, PECS và type erasure.
- Tôi vẽ được hierarchy Iterable/Collection/List/Set/Queue/Deque và giải thích vì sao Map đứng riêng.
- Tôi chọn collection implementation dựa trên semantics, complexity, ordering và concurrency, không theo thói quen.
- Tôi hiểu lazy stream, side effect và giới hạn parallel stream.
- Tôi phân biệt atomicity, visibility, ordering và happens-before.
- Tôi chọn synchronized, Lock, atomic và concurrent collection đúng invariant.
- Tôi thiết kế CompletableFuture có error, timeout và cancellation path.
- Tôi biết virtual thread phù hợp blocking I/O nhưng không tăng downstream capacity.
- Tôi phân biệt heap với process memory và biết dùng thread dump/JFR/jcmd bước đầu.
- Tôi phân biệt class loading, linking và initialization.
- Tôi hiểu class identity bao gồm defining class loader và nhận diện class-loader leak.
- Tôi phân biệt classpath, module path, exports và opens.
- Tôi xử lý text với charset rõ ràng và đóng stream từ Files API.
- Tôi hiểu rủi ro native serialization và không deserialize input không tin cậy.
- Tôi phân biệt reflection, MethodHandle, VarHandle và dynamic proxy.
- Tôi chọn executor queue/rejection policy và xử lý interruption đúng.
- Tôi sử dụng synchronizer/concurrent collection theo semantics.
- Tôi phân biệt collector theo throughput, latency và footprint.
- Tôi đọc được GC log cơ bản và biết giới hạn của histogram/heap dump.
Checklist thực chiến phỏng vấn
- Tôi trả lời 62 câu trong mục 1.2 mà không đọc đáp án.
- Tôi trả lời được ít nhất 6/8 câu trọng tâm bằng tiếng Anh trong 2 phút mỗi câu.
- Mỗi câu trả lời có definition, mechanism, trade-off và example.
- Tôi viết được code collections/equality/concurrency trong editor trống.
- Tôi tái hiện và sửa được race condition, deadlock hoặc resource leak.
- Tôi hoàn thành ít nhất năm lab, gồm một lab concurrency và một lab JVM.
- Tôi có thể nói lại Part 01 trong 15 phút như một buổi technical screening.
Definition of Done: đạt ít nhất 80% checklist kiến thức, hoàn thành tối thiểu năm lab, trả lời trôi chảy ít nhất 50/62 câu và đạt mốc 6/8 câu tiếng Anh trước khi chuyển Part 02.