Thư Viện Câu Hỏi Phỏng Vấn

Tổng hợp các câu hỏi tuyển dụng thực tế theo nhiều cấp độ từ Entry đến Expert để bạn tự tin chinh phục nhà tuyển dụng.

01

Clean Architecture (Kiến trúc sạch) hoạt động theo nguyên lý nào và làm thế nào để đảm bảo Dependency Rule (Luật phụ thuộc)?

Senior

Clean Architecture do Robert C. Martin giới thiệu, chia hệ thống thành các vòng tròn đồng tâm với mục tiêu tách biệt mã nguồn nghiệp vụ khỏi các công cụ kỹ thuật (như Database, Web Framework, UI):

  1. Các tầng cốt lõi: Entities (Nghiệp vụ cốt lõi) -> Use Cases (Luồng nghiệp vụ ứng dụng) -> Interface Adapters (Controllers, Presenters) -> Frameworks & Drivers (Database, Web).
  2. Luật phụ thuộc (Dependency Rule): Mã nguồn ở vòng tròn bên trong không được phép biết hoặc chứa bất kỳ tham chiếu nào tới mã nguồn ở vòng tròn bên ngoài. Mọi sự phụ thuộc phải luôn hướng từ ngoài vào trong.
  3. Cách đảm bảo: Sử dụng kỹ thuật Dependency Inversion (DIP). Ví dụ, Use Case cần lưu dữ liệu sẽ không gọi trực tiếp class Database ở ngoài. Thay vào đó, nó định nghĩa một Interface (Port/Gateway) ở trong. Class Database ở ngoài sẽ implement interface đó. Khi chạy, IoC Container sẽ tiêm thực thể database vào Use Case.
02

Mẫu thiết kế CQRS (Command Query Responsibility Segregation) kết hợp Event Sourcing hoạt động như thế nào? Ưu và nhược điểm là gì?

Senior
  • CQRS: Tách biệt hoàn toàn luồng ghi dữ liệu (Command) và luồng đọc dữ liệu (Query). Sử dụng 2 database riêng biệt được tối ưu hóa cho từng mục đích (ví dụ: DB Ghi dạng Write-optimized SQL, DB Đọc dạng Read-optimized NoSQL/Elasticsearch).
  • Event Sourcing: Thay vì chỉ lưu trữ trạng thái hiện tại của đối tượng trong DB, ta lưu trữ toàn bộ chuỗi các sự kiện thay đổi trạng thái xảy ra theo trình tự thời gian (Event Store). Trạng thái hiện tại được dựng lại bằng cách chạy lại (replay) toàn bộ chuỗi sự kiện này.
  • CQRS + Event Sourcing: Khi Command Service ghi một sự kiện mới vào Event Store (DB Ghi), một event handler sẽ lắng nghe sự kiện đó và cập nhật (project) dữ liệu tương ứng sang DB Đọc để phục vụ Query Service.
  • Ưu điểm: Khả năng mở rộng đọc/ghi độc lập cực cao, lưu giữ lịch sử kiểm toán (Audit Trail) hoàn chỉnh, dễ dàng tái tạo trạng thái tại bất kỳ thời điểm nào trong quá khứ.
  • Nhược điểm: Hệ thống cực kỳ phức tạp, tính nhất quán cuối cùng (Eventual Consistency) làm tăng độ khó khi thiết kế UI/UX.
  • vừa nâng cấp PRO khóa 1 phút trước   Tìm hiểu khóa học