126 bài viết

Ngày 27 của 99 Ngày Spring: FetchType và cơ chế proxy của LAZY (cùng LazyInitializationException và sự thật về open-in-view), tự tay tái hiện bài toán N+1 với 21 câu SQL cho 20 bài viết, sửa bằng JOIN FETCH với cặp LEFT + DISTINCT, @EntityGraph cho derived query, và bẫy phân trang trong bộ nhớ.

Ngày 27 của 99 Ngày Java: vì sao 0.1 + 0.2 không bằng 0.3 và ranh giới double-cho-đo-lường vs BigDecimal-cho-tiền, hai công cụ bị bỏ quên của Math là floorMod và addExact, Random tất định theo seed vs SecureRandom bắt buộc cho bảo mật, .....

Ngày 26 của 99 Ngày Spring: quan hệ N-N luôn sống trong bảng trung gian — @ManyToMany với @JoinTable cho quan hệ thuần túy, owning side và Set với luật cascade cấm REMOVE trên tài nguyên chia sẻ, và entity trung gian tách N-N thành hai lần 1-N khi quan hệ cần cột riêng, ....

Ngày 26 của 99 Ngày Java: java.time thay thế trọn bộ Date/Calendar với thiết kế immutable — bộ ba LocalDate/LocalTime/LocalDateTime, cặp khái niệm giờ máy Instant vs giờ người ZonedDateTime cùng quy tắc vàng lưu UTC hiển thị theo múi giờ, Duration vs Period và DateTimeFormatter thread-safe.

Ngày 25 của 99 Ngày Spring: ánh xạ quan hệ với @ManyToOne giữ khóa ngoại ở phía nhiều (và vì sao phải LAZY từ đầu), @OneToMany với mappedBy làm tấm gương đọc, owning side — phía duy nhất JPA lắng nghe khi ghi, cùng cascade và orphanRemoval cho quan hệ sở hữu trọn vẹn.

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.