Thẻ
#java

Khi nào đáng tạo exception mới và khi nào dùng lại loại chuẩn, thiết kế exception mang dữ liệu có cấu trúc chứ không chỉ message, ba nguyên tắc viết message — cùng cây phân cấp, mã lỗi và fail fast.

Thứ tự catch từ con tới cha và multi-catch, ba cái bẫy của finally — trong đó return làm exception biến mất không dấu vết — cùng chuyện ném lại hay bọc lại và cách xử lý InterruptedException.

Cây thừa kế Throwable và vì sao nó quyết định cách hành xử, ranh giới checked với unchecked cùng câu hỏi duy nhất để phân loại, cách đọc stack trace từ Caused by — và bốn kiểu bắt exception khiến người khác khổ.

Vì sao List<Integer> không truyền được vào List<Number>, ? extends chỉ đọc và ? super chỉ ghi, quy tắc PECS giải thích luôn chữ ký của nửa bộ Collections — cùng giới hạn và lúc không nên dùng wildcard.

Vì sao Generics tồn tại: bắt lỗi lúc biên dịch thay vì lúc chạy, lớp và method generic với bounded type, type erasure cùng bốn giới hạn của nó — và vì sao List<String> không phải con của List<Object>.

Thứ tự tự nhiên gắn vào lớp với compareTo và bẫy tràn số khi trừ tay, Comparator ghép bằng comparing/thenComparing cùng bẫy reversed() đảo cả chuỗi — và vì sao TimSort ổn định lại quan trọng.

for-each chỉ là đường cú pháp của Iterator: hợp đồng Iterable một method, cơ chế fail-fast với modCount sinh ra ConcurrentModificationException — và hai cách xóa đúng với removeIf và it.remove().

FIFO xếp hàng và LIFO chồng đĩa, hai bộ method offer/poll/peek, ArrayDeque mảng vòng một mình hai vai (và bản án cho class Stack) — cùng PriorityQueue trên binary heap với bài toán top-K.
