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

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.

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.

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.

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.

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.

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.

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.

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.
