Chuyên mục

Backend

APIs, databases and distributed systems.

99 Ngày Spring — Ngày 29: Auditing với Spring Data JPA

BaseEntity với @CreatedDate/@LastModifiedDate, AuditorAware cho @CreatedBy, những chỗ auditing không chạy (bulk update, JDBC) — và cách test tất định bằng DateTimeProvider.

25 thg 8, 20269 phút17
99 Ngày Java — Ngày 29: Immutable & defensive copy

Công thức lớp bất biến, vì sao final chưa đủ và defensive copy hai chiều, List.copyOf vs unmodifiableList — và món quà thread-safe không cần lock.

25 thg 8, 202611 phút14
99 Ngày Spring — Ngày 28: Transaction & @Transactional

ACID, proxy đứng sau @Transactional, propagation REQUIRED vs REQUIRES_NEW, quy tắc rollback với bất ngờ checked exception — và bẫy self-invocation.

24 thg 8, 202612 phút31
99 Ngày Java — Ngày 28: Regex trong Java

Pattern & Matcher, cú pháp dùng hằng ngày, group có tên để trích xuất, replaceAll/split với các bẫy — và ranh giới nơi regex nên dừng lại.

24 thg 8, 202611 phút22
99 Ngày Spring — Ngày 27: Lazy vs Eager & bài toán N+1

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ớ.

23 thg 8, 20267 phút44
99 Ngày Java — Ngày 27: Math, Random & BigDecimal

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, .....

23 thg 8, 20268 phút10
99 Ngày Spring — Ngày 26: Quan hệ N-N

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, ....

22 thg 8, 20267 phút19
99 Ngày Java — Ngày 26: Date/Time API (java.time)

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.

22 thg 8, 20267 phút55
99 Ngày Spring — Ngày 25: Quan hệ 1-1 & 1-N

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.

21 thg 8, 20266 phút19