Chuyên mục
Backend
APIs, databases and distributed systems.

Ngày 25 của 99 Ngày Java: varargs — mảng mặc cú pháp gọn với hai quy tắc cứng, bậc thang overload resolution chính xác → widening → boxing → varargs, cấu trúc base case + bước thu nhỏ của đệ quy, và ranh giới StackOverflowError quyết định khi nào nên đổi sang vòng lặp.

Ngày 24 của 99 Ngày Spring: vượt ranh giới derived query với @Query — JPQL truy vấn trên entity với lưới an toàn fail-fast lúc khởi động, bind tham số theo tên làm hàng rào chống SQL injection, native query cho tính năng riêng của DB kèm đánh đổi, và @Modifying cho bulk update đi thẳng xuống DB.

Ngày 24 của 99 Ngày Java: bộ ba contract của Object — equals chuyển "bằng nhau" từ tham chiếu sang định danh nghiệp vụ với contract 5 điều, quy tắc vàng equals đi cùng hashCode, hai bước tra cứu hash-rồi-equals của HashMap cùng bẫy key bị sửa, và Objects utility + record giúp cài chuẩn ít dòng nhất.

GC tự động nhưng không "miễn nghĩ": tiêu chí duy nhất của nó là reachability, heap chia thế hệ vì đa số object chết trẻ, stop-the-world pause là cái giá của việc dọn dẹp, và memory leak trong Java nghĩa là object vẫn reachable ngoài ý muốn — kèm 4 thủ phạm leak phổ biến và checklist vận hành GC trên production.

Ngày 23 của 99 Ngày Spring: Spring Data JPA repository — JpaRepository với bộ CRUD có sẵn trên một interface trống, phả hệ Repository → CrudRepository → JpaRepository và cơ chế proxy trên SimpleJpaRepository, derived query sinh truy vấn từ tên method với lưới fail-fast lúc khởi động.

Ngày 23 của 99 Ngày Java: enum — tập giá trị cố định an toàn kiểu với == đáng tin, lớp đầy đủ với field, constructor và method, switch expression exhaustive biến compiler thành lưới an toàn khi thay đổi, cùng EnumMap và EnumSet chuyên dụng — và quy tắc lưu trữ theo name() thay vì ordinal.

Ngày 22 của 99 Ngày Spring: entity đầu tiên với @Entity/@Id và lý do bắt buộc no-arg constructor (entity là class, không phải record), chiến lược sinh khóa IDENTITY vs SEQUENCE trên PostgreSQL, @Column với ràng buộc và ánh xạ kiểu — wrapper cho cột nullable, cùng show-sql và quy ước snake_case.

Ngày 22 của 99 Ngày Java: wrapper class và autoboxing — cầu nối tự động giữa primitive và đối tượng, Integer cache với hiện tượng == đúng ở 127 sai ở 128, bẫy unboxing null gây NPE, boxing thầm lặng trong vòng lặp, và cách chọn giữa parseInt với valueOf.
