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

Sự khác biệt giữa Integration Testing (Kiểm thử tích hợp) và Unit Testing (Kiểm thử đơn vị)? Tại sao cần Mocking trong Unit Test?

Middle
  • Unit Testing: Kiểm thử các khối mã nguồn nhỏ nhất độc lập (thường là một hàm hoặc một class) trong môi trường hoàn toàn cô lập. Tốc độ thực thi cực nhanh (vài mili giây) và không phụ thuộc vào yếu tố bên ngoài.
  • Integration Testing: Kiểm thử sự tương tác và tích hợp giữa nhiều module/thành phần với nhau, hoặc giữa ứng dụng với các hệ thống bên ngoài (như Database, API bên thứ ba).
  • Tại sao cần Mocking trong Unit Test: Unit Test yêu cầu code phải được kiểm thử cô lập. Nếu hàm cần test gọi đến database hoặc gọi API của bên thứ ba, việc kết nối thực tế sẽ làm test chạy rất chậm, không ổn định (nếu mất mạng) và có thể làm thay đổi dữ liệu thật. Mocking cho phép ta giả lập (simulate) các đối tượng phụ thuộc này để trả về kết quả định trước ngay lập tức, giúp tập trung kiểm thử đúng logic của hàm hiện tại.
  • 02

    Middleware hoạt động như thế nào trong Request Pipeline của một ứng dụng web? Cho ví dụ về xử lý Authentication và CORS?

    Middle

    Middleware hoạt động theo mô hình Onion (củ hành) hoặc Pipeline (đường ống). Khi HTTP Request gửi đến, nó đi qua một chuỗi các middleware được cấu hình sẵn trước khi chạm tới Controller xử lý chính. Response sau đó cũng đi ngược lại qua chuỗi middleware này để trả về cho client.

    • Ví dụ xử lý Authentication: Middleware kiểm tra xem Request có chứa JWT Token hợp lệ ở Header hay không. Nếu có, nó giải mã lấy thông tin người dùng gắn vào Request và gọi next() để đi tiếp. Nếu không, nó chặn Request và trả về mã lỗi 401 Unauthorized ngay lập tức.
    • Ví dụ xử lý CORS (Cross-Origin Resource Sharing): Middleware chặn các request Preflight (OPTIONS) hoặc các request thông thường để chèn thêm các header cần thiết (như Access-Control-Allow-Origin, Access-Control-Allow-Methods) vào response nhằm cho phép trình duyệt ở domain khác truy cập tài nguyên một cách hợp lệ.
    03

    Mạng phân phối nội dung (CDN) hoạt động trên nguyên lý nào? Giải thích sự khác biệt giữa cơ chế Push CDN và Pull CDN?

    Middle

    CDN hoạt động trên nguyên lý phân tán các máy chủ bộ nhớ đệm (Edge Servers) tại nhiều điểm địa lý khác nhau trên thế giới để lưu trữ bản sao dữ liệu tĩnh (ảnh, video, JS/CSS), giúp giảm độ trễ (latency) khi người dùng truy cập từ khoảng cách xa.

    • Push CDN: Lập trình viên chủ động tải (upload/push) nội dung mới lên máy chủ CDN mỗi khi có sự thay đổi. CDN là nơi lưu trữ gốc của các file này.
      • Ưu điểm: Tiết kiệm băng thông cho server gốc (Origin Server) vì CDN không cần hỏi lại server gốc để lấy file.
      • Nhược điểm: Phải tự quản lý luồng upload và cập nhật khi file thay đổi.
    • Pull CDN: Khi người dùng request một file, Edge Server của CDN sẽ kiểm tra xem đã có file đó trong cache chưa. Nếu chưa (Cache Miss), nó sẽ tự động gửi request về server gốc để kéo (pull) file đó về, lưu vào cache tại Edge Server và trả về cho người dùng.
      • Ưu điểm: Cực kỳ đơn giản khi tích hợp, CDN tự động đồng bộ hóa với server gốc.
      • Nhược điểm: Request đầu tiên của người dùng sẽ bị chậm (do cache miss phải pull từ origin).
    04

    Sự khác biệt giữa Entity và Value Object trong Domain-Driven Design (DDD) là gì? Cho ví dụ minh họa?

    Middle
  • Entity (Thực thể):
    • Là đối tượng được định danh bằng một ID duy nhất và cố định trong suốt vòng đời của nó. Cho dù các thuộc tính khác thay đổi, Entity đó vẫn là duy nhất.
    • Ví dụ: Customer (Học viên) có ID là 1. Học viên này có thể đổi tên, đổi email nhưng ID vẫn là 1 và hệ thống vẫn xác định đó là cùng một người.
  • Value Object (Đối tượng giá trị):
    • Là đối tượng không có ID riêng và được định nghĩa hoàn toàn bởi giá trị của các thuộc tính mà nó chứa. Nếu hai Value Objects có tất cả các thuộc tính giống hệt nhau, chúng được coi là tương đương.
    • Value Object là bất biến (immutable). Muốn thay đổi, ta bắt buộc phải tạo ra một thực thể Value Object mới thay thế hoàn toàn.
    • Ví dụ: Address (Địa chỉ gồm số nhà, đường, thành phố) hoặc Money (gồm số tiền và đơn vị tệ). Nếu đổi địa chỉ giao hàng, ta gán một địa chỉ hoàn toàn mới thay vì sửa đổi từng thuộc tính của địa chỉ cũ.
  • 05

    Hãy so sánh các thuật toán cân bằng tải phổ biến: Round Robin, Weighted Round Robin, Least Connections và IP Hash?

    Middle
  • Round Robin (Vòng tròn): Luân chuyển tuần tự các request đến từng server trong danh sách. Đơn giản, công bằng nếu cấu hình phần cứng các server giống hệt nhau.
  • Weighted Round Robin (Vòng tròn có trọng số): Mỗi server được gán một trọng số (weight) dựa trên năng lực xử lý (CPU, RAM). Server có trọng số lớn hơn sẽ nhận được nhiều request hơn. Phù hợp cho cụm server có cấu hình không đồng đều.
  • Least Connections (Kết nối ít nhất): Định tuyến request đến server hiện đang có ít kết nối hoạt động (active connections) nhất. Cực kỳ tối ưu cho các tác vụ cần nhiều thời gian xử lý (như tải file, truy vấn DB nặng) để tránh dồn ứ request tại một server.
  • IP Hash (Băm IP): Tính mã băm (hash) từ địa chỉ IP của client để quyết định server xử lý. Đảm bảo một client (một địa chỉ IP) luôn luôn được kết nối đến duy nhất một server cố định. Thích hợp cho các ứng dụng cần duy trì trạng thái phiên làm việc (Session Persistence) mà không có Session Store tập trung.
  • 06

    Làm thế nào để thiết kế và triển khai một thành phần hệ thống giải quyết vấn đề Saga Pattern for transactions trong chủ đề Microservices?

    Middle

    Khi thiết kế hệ thống ở quy mô lớn với Microservices, việc giải quyết bài toán Saga Pattern for transactions yêu cầu kiến thức vững chắc về kiến trúc phân tán:

    1. Tính sẵn sàng (High Availability): Thiết kế dự phòng (Redundancy) và tự động chuyển vùng khi có lỗi xảy ra để tránh Single Point of Failure.
    2. Khả năng mở rộng (Scalability): Ưu tiên mở rộng theo chiều ngang (Scale Out) và sử dụng các cơ chế lưu trữ bất đồng bộ.
    3. Tính an toàn & giám sát: Thiết kế hệ thống bảo mật Zero-Trust kết hợp thu thập số liệu tập trung (Monitoring, Logging) để xử lý sự cố nhanh chóng.
    07

    Làm thế nào để thiết kế và triển khai một thành phần hệ thống giải quyết vấn đề Ingress controllers trong chủ đề Kubernetes?

    Middle

    Khi thiết kế hệ thống ở quy mô lớn với Kubernetes, việc giải quyết bài toán Ingress controllers yêu cầu kiến thức vững chắc về kiến trúc phân tán:

    1. Tính sẵn sàng (High Availability): Thiết kế dự phòng (Redundancy) và tự động chuyển vùng khi có lỗi xảy ra để tránh Single Point of Failure.
    2. Khả năng mở rộng (Scalability): Ưu tiên mở rộng theo chiều ngang (Scale Out) và sử dụng các cơ chế lưu trữ bất đồng bộ.
    3. Tính an toàn & giám sát: Thiết kế hệ thống bảo mật Zero-Trust kết hợp thu thập số liệu tập trung (Monitoring, Logging) để xử lý sự cố nhanh chóng.
    08

    Làm thế nào để thiết kế và triển khai một thành phần hệ thống giải quyết vấn đề End-to-End browser simulation trong chủ đề Software Testing?

    Middle

    Khi thiết kế hệ thống ở quy mô lớn với Software Testing, việc giải quyết bài toán End-to-End browser simulation yêu cầu kiến thức vững chắc về kiến trúc phân tán:

    1. Tính sẵn sàng (High Availability): Thiết kế dự phòng (Redundancy) và tự động chuyển vùng khi có lỗi xảy ra để tránh Single Point of Failure.
    2. Khả năng mở rộng (Scalability): Ưu tiên mở rộng theo chiều ngang (Scale Out) và sử dụng các cơ chế lưu trữ bất đồng bộ.
    3. Tính an toàn & giám sát: Thiết kế hệ thống bảo mật Zero-Trust kết hợp thu thập số liệu tập trung (Monitoring, Logging) để xử lý sự cố nhanh chóng.
    09

    Làm thế nào để thiết kế và triển khai một thành phần hệ thống giải quyết vấn đề SSL/TLS certificates handshake trong chủ đề Cryptography?

    Middle

    Khi thiết kế hệ thống ở quy mô lớn với Cryptography, việc giải quyết bài toán SSL/TLS certificates handshake yêu cầu kiến thức vững chắc về kiến trúc phân tán:

    1. Tính sẵn sàng (High Availability): Thiết kế dự phòng (Redundancy) và tự động chuyển vùng khi có lỗi xảy ra để tránh Single Point of Failure.
    2. Khả năng mở rộng (Scalability): Ưu tiên mở rộng theo chiều ngang (Scale Out) và sử dụng các cơ chế lưu trữ bất đồng bộ.
    3. Tính an toàn & giám sát: Thiết kế hệ thống bảo mật Zero-Trust kết hợp thu thập số liệu tập trung (Monitoring, Logging) để xử lý sự cố nhanh chóng.
    10

    Làm thế nào để thiết kế và triển khai một thành phần hệ thống giải quyết vấn đề gRPC & Protocol Buffers trong chủ đề API Design?

    Middle

    Khi thiết kế hệ thống ở quy mô lớn với API Design, việc giải quyết bài toán gRPC & Protocol Buffers yêu cầu kiến thức vững chắc về kiến trúc phân tán:

    1. Tính sẵn sàng (High Availability): Thiết kế dự phòng (Redundancy) và tự động chuyển vùng khi có lỗi xảy ra để tránh Single Point of Failure.
    2. Khả năng mở rộng (Scalability): Ưu tiên mở rộng theo chiều ngang (Scale Out) và sử dụng các cơ chế lưu trữ bất đồng bộ.
    3. Tính an toàn & giám sát: Thiết kế hệ thống bảo mật Zero-Trust kết hợp thu thập số liệu tập trung (Monitoring, Logging) để xử lý sự cố nhanh chóng.
    11

    Làm thế nào để thiết kế và triển khai một thành phần hệ thống giải quyết vấn đề Message Queues trong chủ đề Systems Design?

    Middle

    Khi thiết kế hệ thống ở quy mô lớn với Systems Design, việc giải quyết bài toán Message Queues yêu cầu kiến thức vững chắc về kiến trúc phân tán:

    1. Tính sẵn sàng (High Availability): Thiết kế dự phòng (Redundancy) và tự động chuyển vùng khi có lỗi xảy ra để tránh Single Point of Failure.
    2. Khả năng mở rộng (Scalability): Ưu tiên mở rộng theo chiều ngang (Scale Out) và sử dụng các cơ chế lưu trữ bất đồng bộ.
    3. Tính an toàn & giám sát: Thiết kế hệ thống bảo mật Zero-Trust kết hợp thu thập số liệu tập trung (Monitoring, Logging) để xử lý sự cố nhanh chóng.
    12

    Làm thế nào để thiết kế và triển khai một thành phần hệ thống giải quyết vấn đề Index optimizations trong chủ đề Databases?

    Middle

    Khi thiết kế hệ thống ở quy mô lớn với Databases, việc giải quyết bài toán Index optimizations yêu cầu kiến thức vững chắc về kiến trúc phân tán:

    1. Tính sẵn sàng (High Availability): Thiết kế dự phòng (Redundancy) và tự động chuyển vùng khi có lỗi xảy ra để tránh Single Point of Failure.
    2. Khả năng mở rộng (Scalability): Ưu tiên mở rộng theo chiều ngang (Scale Out) và sử dụng các cơ chế lưu trữ bất đồng bộ.
    3. Tính an toàn & giám sát: Thiết kế hệ thống bảo mật Zero-Trust kết hợp thu thập số liệu tập trung (Monitoring, Logging) để xử lý sự cố nhanh chóng.
    13

    Làm thế nào để thiết kế và triển khai một thành phần hệ thống giải quyết vấn đề Docker Compose trong chủ đề Docker?

    Middle

    Khi thiết kế hệ thống ở quy mô lớn với Docker, việc giải quyết bài toán Docker Compose yêu cầu kiến thức vững chắc về kiến trúc phân tán:

    1. Tính sẵn sàng (High Availability): Thiết kế dự phòng (Redundancy) và tự động chuyển vùng khi có lỗi xảy ra để tránh Single Point of Failure.
    2. Khả năng mở rộng (Scalability): Ưu tiên mở rộng theo chiều ngang (Scale Out) và sử dụng các cơ chế lưu trữ bất đồng bộ.
    3. Tính an toàn & giám sát: Thiết kế hệ thống bảo mật Zero-Trust kết hợp thu thập số liệu tập trung (Monitoring, Logging) để xử lý sự cố nhanh chóng.
    14

    Làm thế nào để thiết kế và triển khai một thành phần hệ thống giải quyết vấn đề Saga Pattern for transactions trong chủ đề Microservices?

    Middle

    Khi thiết kế hệ thống ở quy mô lớn với Microservices, việc giải quyết bài toán Saga Pattern for transactions yêu cầu kiến thức vững chắc về kiến trúc phân tán:

    1. Tính sẵn sàng (High Availability): Thiết kế dự phòng (Redundancy) và tự động chuyển vùng khi có lỗi xảy ra để tránh Single Point of Failure.
    2. Khả năng mở rộng (Scalability): Ưu tiên mở rộng theo chiều ngang (Scale Out) và sử dụng các cơ chế lưu trữ bất đồng bộ.
    3. Tính an toàn & giám sát: Thiết kế hệ thống bảo mật Zero-Trust kết hợp thu thập số liệu tập trung (Monitoring, Logging) để xử lý sự cố nhanh chóng.
    15

    Làm thế nào để thiết kế và triển khai một thành phần hệ thống giải quyết vấn đề Ingress controllers trong chủ đề Kubernetes?

    Middle

    Khi thiết kế hệ thống ở quy mô lớn với Kubernetes, việc giải quyết bài toán Ingress controllers yêu cầu kiến thức vững chắc về kiến trúc phân tán:

    1. Tính sẵn sàng (High Availability): Thiết kế dự phòng (Redundancy) và tự động chuyển vùng khi có lỗi xảy ra để tránh Single Point of Failure.
    2. Khả năng mở rộng (Scalability): Ưu tiên mở rộng theo chiều ngang (Scale Out) và sử dụng các cơ chế lưu trữ bất đồng bộ.
    3. Tính an toàn & giám sát: Thiết kế hệ thống bảo mật Zero-Trust kết hợp thu thập số liệu tập trung (Monitoring, Logging) để xử lý sự cố nhanh chóng.

    vừa nâng cấp PRO khóa 1 phút trước   Tìm hiểu khóa học