Phá Đảo Phỏng Vấn Thiết Kế Hệ Thống: 40 Câu Hỏi 'Hot' Nhất 2025 Cùng Đáp Án Chuẩn
Lê Lân
0
40 Câu Hỏi Phỏng Vấn Thiết Kế Hệ Thống và Câu Trả Lời Thông Minh
Mở Đầu
Phỏng vấn thiết kế hệ thống không chỉ là bước kiểm tra kỹ năng lập trình mà còn là thước đo đánh giá khả năng tư duy hệ thống, kiến trúc phần mềm và giải quyết vấn đề của bạn dưới áp lực thực tế.
Trong năm 2025, các công ty công nghệ ngày càng ưu tiên tuyển dụng những kỹ sư có tư duy hệ thống sâu sắc—người cân bằng được giữa độ tin cậy, hiệu suất và khả năng bảo trì. Bài viết này sẽ giúp bạn trang bị bộ công cụ kiến thức vững chắc qua 40 câu hỏi phỏng vấn hệ thống phổ biến cùng các trả lời chi tiết, từ đó nâng cao khả năng ứng phó trong các vòng phỏng vấn đầy thử thách, chuẩn bị cho bước tiến lớn trong sự nghiệp kỹ thuật phần mềm của bạn.
1. ❓ Thiết Kế Hệ Thống Là Gì?
Thiết kế hệ thống là quá trình kiến trúc các thành phần, dịch vụ, giao diện và luồng dữ liệu để đáp ứng các yêu cầu chức năng và phi chức năng như khả năng mở rộng (scalability), độ sẵn sàng (availability), và độ tin cậy (reliability).
2. ⚖️ Phân Biệt Thiết Kế Hệ Thống Cấp Cao và Cấp Thấp
Thiết kế cấp cao tập trung vào các thành phần hệ thống tổng quát và cách chúng tương tác, ví dụ như lựa chọn giữa CDN và bộ cân bằng tải (load balancer).
Thiết kế cấp thấp chi tiết hơn về các module, sơ đồ lớp (class diagram), và chi tiết API.
Hiểu được phạm vi thiết kế giúp bạn linh hoạt trong việc giải thích kiến trúc tổng thể hoặc các chi tiết kỹ thuật khi phỏng vấn.
3. 🌐 Khái Niệm Về Khả Năng Mở Rộng (Scalability)
Khả năng mở rộng là khả năng của hệ thống xử lý lưu lượng, dữ liệu hoặc người dùng tăng lên mà không ảnh hưởng đến hiệu năng.
Phân loại:
Vertical scaling (mở rộng dọc): Tăng sức mạnh máy chủ (CPU, RAM).
Horizontal scaling (mở rộng ngang): Tăng số lượng máy chủ.
4. 🧩 Kiến Trúc Monolithic vs Microservices
Tiêu chí
Monolithic
Microservices
Triển khai
Đóng gói một khối duy nhất
Phân thành các dịch vụ độc lập
Khả năng mở rộng
Hạn chế
Cao và linh hoạt
Quản lý
Đơn giản
Phức tạp do cần phối hợp nhiều dịch vụ
Chọn kiến trúc phù hợp phụ thuộc vào quy mô dự án và yêu cầu về bảo trì, mở rộng.
5. 📈 So Sánh Vertical và Horizontal Scaling
Vertical Scaling: Thích hợp cho hệ thống nhỏ, dễ dàng thực hiện nhưng có giới hạn phần cứng.
Horizontal Scaling: Ưu tiên cho hệ thống phân tán lớn, có độ chịu lỗi cao và khả năng mở rộng gần như vô hạn.
6. 💽 Load Balancer Là Gì Và Tại Sao Quan Trọng?
Load balancer phân phối lưu lượng đến nhiều máy chủ, giúp tăng độ sẵn sàng và cải thiện thời gian phản hồi hệ thống.
7. 🔁 Caching Là Gì Và Cách Nó Cải Thiện Hiệu Suất
Caching lưu trữ dữ liệu truy cập thường xuyên tại bộ nhớ nhanh để giảm độ trễ và số lần truy cập cơ sở dữ liệu.
Ví dụ: Redis, CDN, cache trình duyệt.
8. 🕸️ CDN Là Gì Và Khi Nào Dùng?
CDN (Content Delivery Network) là mạng lưới máy chủ phân tán địa lý, lưu trữ bản sao nội dung tĩnh giúp giảm độ trễ truy cập, nâng cao tốc độ tải trang trên phạm vi toàn cầu.
9. 🔧 Reverse Proxy và Forward Proxy Khác Nhau Như Thế Nào?
Loại Proxy
Vị trí
Chức năng chính
Reverse Proxy
Đứng trước server
Phân phối yêu cầu, cân bằng tải, bảo mật
Forward Proxy
Đứng trước client (người dùng)
Ẩn danh hoạt động, kiểm soát truy cập mạng
10. 📂 Thiết Kế Dịch Vụ Rút Gọn URL (Bit.ly)
Các bước cơ bản:
Tạo hash duy nhất (base62 hoặc base64).
Lưu trữ URL gốc cùng hash trong DB.
Thiết lập redirect tới URL gốc khi người dùng truy cập URL rút gọn.
Sử dụng cache (Redis) để giảm tải DB.
Thêm tính năng như hết hạn URL hoặc thống kê lượng truy cập để nâng cao dịch vụ.
11. 🤖 Thiết Kế Web Crawler Như Googlebot
Quản lý hàng đợi URLs.
Thực hiện các worker lấy dữ liệu đồng thời.
Tôn trọng robots.txt.
Lưu trữ metadata trong cơ sở dữ liệu phân tán.
12. 🛒 Thiết Kế Hệ Thống Thương Mại Điện Tử
Các thành phần chính:
Quản lý người dùng.
Danh mục sản phẩm.
Giỏ hàng.
Xử lý đơn hàng và thanh toán.
Quan tâm đến tính nhất quán dữ liệu và độ an toàn giao dịch.
13. ✉️ Thiết Kế Hệ Thống Tin Nhắn Như WhatsApp
Sử dụng WebSocket để đảm bảo tin nhắn theo thời gian thực.
Message broker (Kafka) đảm bảo giao tiếp tin nhắn.
Cơ sở dữ liệu tái tạo tin nhắn và trạng thái người dùng.
Hỗ trợ tin nhắn offline và đồng bộ khi online lại.
14. 🎥 Thiết Kế Nền Tảng Streaming Video Như YouTube
Upload và mã hóa video vào nhiều định dạng.
Lưu trữ phân tán.
Phân phối qua CDN để giảm tải và tăng tốc.
Quản lý metadata và tương tác người dùng tách biệt.
15. 🔍 Thiết Kế Công Cụ Tìm Kiếm
Crawl và lập chỉ mục các website.
Token hóa nội dung và xây dựng inverted index.
Thuật toán xếp hạng như TF-IDF.
Frontend xử lý truy vấn, hiển thị kết quả phân trang.
16. 🎯 Định Nghĩa Consistency Cuối Cùng (Eventual Consistency)
Trong hệ thống phân tán, dữ liệu có thể không đồng bộ tức thì nhưng cuối cùng sẽ nhất quán trên tất cả node, giúp tăng khả năng sẵn sàng và chịu lỗi.
17. 🛠️ Thiết Kế Bộ Giới Hạn Tốc Độ (Rate Limiter)
Thuật toán phổ biến: Token Bucket, Leaky Bucket, Fixed Window.
Lưu trạng thái request theo user/IP trong Redis.
Xác định giới hạn như 100 requests/phút.
Từ chối hoặc trì hoãn khi vượt quá giới hạn.
18. 🗂️ Sharding Trong Cơ Sở Dữ Liệu Là Gì?
Chia nhỏ database thành các phân vùng nhỏ hơn (shard), mỗi shard lưu trữ một phần dữ liệu dựa trên khóa, giúp cải thiện hiệu năng đọc/ghi và phân phối tải.
19. 🔃 Thiết Kế Hệ Thống Phân Tích Dữ Liệu Thời Gian Thực
Sử dụng hệ thống ingest như Kafka.
Xử lý thời gian thực qua Apache Flink hoặc Spark Streaming.
Lưu trữ kết quả trong cơ sở dữ liệu time-series.
Hiển thị dashboard cập nhật tức thì.
20. 🧾 Đảm Bảo Tính Nhất Quán Dữ Liệu Giữa Các Microservices
Sử dụng transaction phân tán hoặc mẫu Saga.
Đảm bảo phát sinh và tiêu thụ event tin cậy.
Triển khai idempotent operation để xử lý retry không trùng lặp.
21. ⏱️ Phân Biệt Latency và Throughput
Thuật ngữ
Định nghĩa
Latency
Thời gian xử lý một yêu cầu đơn lẻ
Throughput
Số lượng yêu cầu xử lý trong một khoảng thời gian
Latency thấp giúp phản hồi nhanh, throughput cao giúp tăng khả năng xử lý.
22. 📤 Thiết Kế Hệ Thống Thông Báo
Sử dụng hệ thống queue (Kafka, RabbitMQ) để nhận sự kiện.
Worker gửi thông báo qua email, SMS, push.
Hỗ trợ retry và theo dõi trạng thái gửi.
Cho phép người dùng cấu hình kênh và tần suất nhận.
23. 🔐 Thiết Kế Xác Thực (Authentication) và Phân Quyền (Authorization)
Sử dụng OAuth2 hoặc JWT cho xác thực.
Lưu token an toàn.
Áp dụng RBAC để kiểm soát truy cập theo vai trò.
24. 🏠 Thiết Kế Nền Tảng Bất Động Sản Như Zillow
Thành phần hệ thống:
User Service quản lý tài khoản.
Listing Service xử lý bất động sản.
Media Service lưu trữ ảnh, video.
Search Service có khả năng lọc theo vị trí, giá.
Tích hợp CDN, Elasticsearch, Notification service.
25. 📝 Định Luật CAP
Trong hệ thống phân tán, chỉ có thể đảm bảo đồng thời hai trong ba yếu tố:
Consistency (nhất quán)
Availability (sẵn sàng)
Partition Tolerance (chịu lỗi phân vùng)
26. 📆 Thiết Kế Ứng Dụng Lịch Như Google Calendar
Quản lý sự kiện lặp lại, đa múi giờ.
Scheduler thông minh và cập nhật theo thời gian thực qua WebSocket.
Sync và xử lý xung đột dữ liệu.
27. 🎨 Thiết Kế Dashboard Giám Sát Tốc Độ API
Thu thập metrics qua middleware.
Lưu trữ bộ số liệu trong DB time-series.
Hiển thị giao diện với cảnh báo khi ngưỡng vượt mức.
28. 📸 Thiết Kế Ứng Dụng Chia Sẻ Ảnh Như Instagram
Microservices cho user, post, like, comment.
Hình ảnh lưu trữ trên cloud/CDN.
Sinh feed người dùng bất đồng bộ để tối ưu hiệu suất.
29. 🏎️ Thiết Kế Hệ Thống Đặt Xe Như Uber
Theo dõi vị trí tài xế GPS.
Ghép đôi khách và tài xế dựa trên vị trí địa lý.
Sử dụng hàng đợi xử lý yêu cầu đặt xe.
Cơ chế giá động và lưu lịch sử chuyến đi.
30. 🎧 Thiết Kế Dịch Vụ Streaming Nhạc Như Spotify
Stream âm thanh qua CDN.
Dữ liệu metadata và đề xuất dựa trên ML.
Lưu playlist, lịch sử người dùng, và bản quyền.
31. 🤼♂️ So Sánh SQL và NoSQL
SQL: Phù hợp dữ liệu có cấu trúc, truy vấn phức tạp.
NoSQL: Linh hoạt với dữ liệu phi cấu trúc, thích hợp yêu cầu throughput cao và thay đổi schema nhanh.
32. 🗃️ Xử Lý Thay Đổi Schema Trong Môi Trường Production
Thực hiện migration tương thích ngược.
Các bước: thêm cột mới → migrate dữ liệu → cập nhật code → xóa cột cũ.
33. 🌍 Quản Lý Triển Khai Đa Vùng (Multi-Region)
Sao chép dịch vụ và dữ liệu theo vùng.
Sử dụng geo-routing, load balancer vùng.
Áp dụng eventual consistency khi có thể.
34. 💬 Message Queue Là Gì?
Hàng đợi tin nhắn giúp xử lý bất đồng bộ.
Dùng cho các tác vụ như gửi email, xử lý ảnh.
35. 👀 Đảm Bảo Quan Sát (Observability) Trong Hệ Thống
Logs: tập trung và cấu trúc (ELK stack).
Metrics: đo lường hệ thống và nghiệp vụ (Prometheus).
Tracing: theo dõi phân tán (Jaeger, OpenTelemetry).
Dashboard: Grafana, hệ thống cảnh báo.
36. 🧮 Các Nút Thắt Cổ Chó Trong Hệ Thống Lớn
Cơ sở dữ liệu.
Băng thông mạng.
Đầu vào/ra đĩa.
Phụ thuộc đồng bộ giữa các dịch vụ.
37. 🧲 Kiến Trúc Push vs Pull
Push: server chủ động đẩy dữ liệu (WebSocket), hỗ trợ real-time nhưng phức tạp.
Pull: client chủ động lấy dữ liệu, đơn giản nhưng gây trễ.
38. 🏗️ Cách Kiểm Tra Khả Năng Mở Rộng
Dùng công cụ: Locust, Apache JMeter.
Mô phỏng tải với các kịch bản khác nhau.
Giám sát CPU, bộ nhớ, I/O, độ trễ và lỗi.
Kiểm tra khả năng tự động mở rộng.
39. ⛓️ Xử Lý Phụ Thuộc Vòng Trong Các Dịch Vụ
Tách logic dùng chung thành dịch vụ riêng.
Dùng kiến trúc event-driven thay vì gọi đồng bộ chéo.
40. 🧰 Công Cụ Vẽ và Lập Kế Hoạch Thiết Kế Hệ Thống
Các công cụ phổ biến:
Excalidraw
Lucidchart
Draw.io
Whimsical
Diagrams rõ ràng giúp truyền đạt ý tưởng kiến trúc hiệu quả hơn trong phỏng vấn và hợp tác nhóm.
Kết Luận
Phỏng vấn thiết kế hệ thống ngày nay là thử thách không thể thiếu để phân biệt kỹ sư giỏi với kỹ sư xuất sắc. Năm 2025 đánh dấu sự ưu tiên các tư duy hệ thống có khả năng thiết kế cho quy mô lớn, chịu lỗi, và thực tế. Bạn đừng quên, điều quan trọng không phải là có thiết kế "đúng nhất" mà là cách bạn tư duy, lựa chọn giải pháp hợp lý và truyền đạt rõ ràng. Hãy luyện tập thường xuyên với các câu hỏi trên để tăng sự tự tin và thành công trong các vòng phỏng vấn tiếp theo.