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 đủ
- 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:
- Use back of the envelope calculations
- Bảng lũy thừa của hai
- Con số latency mà lập trình viên nào cũng nên biết
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: