Skip to content

Cách tiếp cận một câu hỏi phỏng vấn system design ​

Cách xử lý một câu hỏi phỏng vấn system design.

Buổi phỏng vấn system design là một cuộc trò chuyện mở. Bạn được kỳ vọng sẽ dẫn dắt nó.

Bạn có thể dùng các bước sau để định hướng cuộc thảo luận. Để củng cố quy trình này, hãy làm phần Câu hỏi phỏng vấn system design kèm lời giải theo các bước dưới đây.

Bước 1: Xác định use case, ràng buộc và giả định ​

Thu thập yêu cầu và xác định phạm vi bài toán. Đặt câu hỏi để làm rõ use case và ràng buộc. Thảo luận các giả định.

  • Ai sẽ dùng nó?
  • Họ sẽ dùng nó như thế nào?
  • Có bao nhiêu người dùng?
  • Hệ thống làm gì?
  • Input và output của hệ thống là gì?
  • Chúng ta dự kiến xử lý bao nhiêu dữ liệu?
  • Chúng ta dự kiến có bao nhiêu request mỗi giây?
  • Tỷ lệ đọc/ghi dự kiến là bao nhiêu?

Bước 2: Tạo thiết kế mức cao ​

Phác thảo một thiết kế mức cao gồm mọi thành phần quan trọng.

  • Vẽ phác các thành phần chính và các kết nối
  • Biện luận cho các ý tưởng của bạn

Bước 3: Thiết kế các thành phần cốt lõi ​

Đi sâu vào chi tiết của từng thành phần cốt lõi. Ví dụ, nếu bạn được yêu cầu thiết kế một dịch vụ rút gọn url, hãy thảo luận:

  • Tạo và lưu hash của url đầy đủ
    • MD5 và Base62
    • Hash collision
    • SQL hay NoSQL
    • Database schema
  • Chuyển url đã hash thành url đầy đủ
    • Database lookup
  • API và object-oriented design

Bước 4: Mở rộng thiết kế ​

Xác định và xử lý các nút thắt cổ chai, dựa trên các ràng buộc. Ví dụ, bạn có cần những thứ sau để giải quyết vấn đề về khả năng mở rộng không?

  • Load balancer
  • Horizontal scaling
  • Caching
  • Database sharding

Thảo luận các giải pháp khả thi và đánh đổi. Mọi thứ đều là đánh đổi. Xử lý các nút thắt cổ chai bằng các nguyên lý thiết kế hệ thống có khả năng mở rộng.

Tính nhẩm ước lượng ​

Bạn có thể được yêu cầu tự ước lượng bằng tay. Xem Phụ lục để biết các tài nguyên sau:

Nguồn và đọc thêm ​

Hãy xem các link sau để hình dung rõ hơn điều có thể gặp: