Chuyên mục

Backend

APIs, databases and distributed systems.

99 Ngày Java — Ngày 52: Functional interface

Bốn interface phân biệt bằng hai câu hỏi — nhận gì vào, trả gì ra; biến thể nguyên thủy tránh boxing; vì sao chỉ nên dùng andThen — và khi nào tự viết interface là đúng, kể cả để lách checked exception.

17 thg 9, 20268 phút5
99 Ngày Spring — Ngày 51: Unit test tầng service

Service là class Java bình thường nên test nó không cần Spring — vài mili-giây thay vì vài giây; Mockito với Mock và InjectMocks, verifyNoInteractions khẳng định điều không xảy ra, và bốn cái bẫy tạo ra test luôn xanh mà vô dụng.

16 thg 9, 20267 phút7
99 Ngày Java — Ngày 51: Lambda expression

Bốn dạng cú pháp và lý do lược bớt được, vì sao lambda KHÔNG phải anonymous class viết gọn — this trỏ khác chỗ và nó dựng bằng invokedynamic — cùng lý do thật đằng sau luật effectively final.

16 thg 9, 20268 phút6
99 Ngày Spring — Ngày 50: Security best practices

CSRF chỉ phụ thuộc một câu hỏi — trình duyệt có tự gửi thông tin đăng nhập không, CORS bảo vệ người dùng chứ không bảo vệ server, secret lỡ commit thì phải đổi — và rate limiting, thứ Spring Security không có sẵn.

15 thg 9, 20268 phút8
99 Ngày Java — Ngày 50: Checkpoint — xử lý file dữ liệu

Mốc nửa chặng: gộp mười bài vừa học thành một chương trình đọc CSV, thống kê bằng collections và xuất báo cáo — cùng quyết định phân biệt code chạy được với code dùng được: bỏ dòng hỏng hay dừng cả file.

15 thg 9, 20269 phút8
99 Ngày Spring — Ngày 49: Resource server

Một dòng issuer-uri là đủ, JWKS cho phép hai mươi service verify token mà không service nào giữ bí mật, vì sao bỏ kiểm iss là lỗ hổng chết người — và scope khác role ở chỗ nào.

14 thg 9, 20267 phút8
99 Ngày Java — Ngày 49: Debug & đọc lỗi hiệu quả

Hai dòng đầu stack trace nói gần hết câu chuyện, chuỗi Caused by phải đọc từ dưới lên, breakpoint có điều kiện và theo ngoại lệ — cùng ranh giới giữa lúc dùng debugger và lúc chỉ còn log.

14 thg 9, 20267 phút8
99 Ngày Spring — Ngày 48: OAuth2 login

Luồng authorization code năm bước và vì sao phải qua code thay vì trả token thẳng, tham số state chống CSRF, cấu hình oauth2Login gọn tới bất ngờ — và vì sao khóa định danh phải là cặp nhà cung cấp cộng id.

13 thg 9, 20267 phút8
99 Ngày Java — Ngày 48: Logging đúng cách

Vì sao System.out.println không phải logging, SLF4J là cái cầu chứ không phải bộ ghi log, mức log là câu hỏi ai sẽ đọc dòng này, dấu {} là chuyện hiệu năng — và những thứ tuyệt đối không được log.

13 thg 9, 20268 phút4