logo

Lộ trình

Khóa học

Tài liệu

Mock Interview

Liên hệ

Quay lại
  • Trang chủ

    /

  • Tài liệu

    /

  • Top 10 câu hỏi phỏng vấn về System Design và Microservices
Tài liệu

Top 10 câu hỏi phỏng vấn về System Design và Microservices

Ronin Engineer

14 Tháng 8 2024

<p>Giải quyết một số vấn đề của hệ thống Microservices và khả năng thiết kế hệ thống là những kỹ năng mà ứng viên ở vị trị Senior Backend Engineer cần có. Dưới đây là một số câu hỏi và gợi ý cách trả lời để bạn tham khảo về 2 chủ đề này.</p><p><em>Lưu ý: những câu hỏi và gợi ý dưới đây chỉ mang tính tham khảo. Bạn nên tự xây dựng câu trả lời hoàn chỉnh của riêng mình.</em></p><h2 id="system-design">System Design:</h2><h3 id="1-b%E1%BA%A1n-tr%C3%ACnh-b%C3%A0y-gi%C3%BAp-m%C3%ACnh-v%E1%BB%81-%C4%91%E1%BB%8Bnh-l%C3%BD-cap">1. Bạn trình bày giúp mình về định lý CAP?</h3><p>Gợi ý:<br><br>Bạn có thể tham khảo <a href="https://www.youtube.com/watch?v=BHqjEjzAicA&ref=roninhub.com">video này</a><br><br>Ngoài ra, bạn nên tìm hiểu thêm sự khác nhau sự Consistency trong định lý CAP và Consistency trong tính chất ACID.</p><p></p><h3 id="2-m%E1%BB%99t-b%E1%BA%A3ng-c%C3%B3-l%C6%B0%E1%BB%A3ng-d%E1%BB%AF-li%E1%BB%87u-l%E1%BB%9Bn-v%C3%A0-t%C4%83ng-d%E1%BA%A7n-theo-th%E1%BB%9Di-gian-khi%E1%BA%BFn-cho-c%C3%A1c-query-t%E1%BB%9Bi-b%E1%BA%A3ng-c%C5%A9ng-ch%E1%BA%ADm-d%E1%BA%A7n-b%E1%BA%A1n-s%E1%BA%BD-x%E1%BB%AD-l%C3%BD-nh%C6%B0-n%C3%A0o">2. Một bảng có lượng dữ liệu lớn và tăng dần theo thời gian, khiến cho các query tới bảng cũng chậm dần. Bạn sẽ xử lý như nào?</h3><p>Gợi ý:<br><br>Đầu tiên, bạn nên làm rõ ý nghĩa của dữ liệu trong bảng và độ lớn của bảng để đưa ra những giải pháp phù hợp. Và nên trình bày theo trình tự từ đơn giản đến phức tạp.</p><p></p><h3 id="3-thi%E1%BA%BFt-k%E1%BA%BF-h%E1%BB%87-th%E1%BB%91ng-tinyurl">3. Thiết kế hệ thống TinyURL?</h3><p>Gợi ý:<br><br>Đây là một câu hỏi rất phổ biến vì nó có tính phân hoá cao.<br>Độ phức tạp của hệ thống phụ thuộc vào yêu cầu của nhà tuyển dụng.<br>Bạn nên làm rõ những yêu cầu và chú ý một số vấn đề sau:</p><ul><li>Độ dài của short URL</li><li>Các yêu cầu về check trùng. Ví dụ khi shorten 1 URL nhiều lần, có cần trả về cùng 1 short URL không?</li><li>Bạn sử dụng DB nào?</li><li>Bạn xử lý đụng độ (collision) như nào?</li></ul><p></p><figure class="kg-card kg-image-card"><img src="https://roninhub.com/content/images/2024/09/alex.webp" class="kg-image" alt="" loading="lazy" width="1000" height="667" srcset="https://roninhub.com/content/images/size/w600/2024/09/alex.webp 600w, https://roninhub.com/content/images/2024/09/alex.webp 1000w" sizes="(min-width: 720px) 720px"></figure><p><em>Vẹt xám châu Phi được cho rằng là loài chim thông minh nhất thế giới. Chúng có những khả năng đặc biệt như bước chước giọng người, giải toán và có khả năng nhận thức. Đây là Alex (1976 - 2007) được biết đến là chú vẹt xám châu Phi nổi tiếng nhất trong lịch sử. Alex sở hữu hơn 100 âm thanh của các đồ vật và hành động khác nhau như tiếng gà gáy, tiếng lợn kêu, âm thanh của phi thuyền, tiếng thở dài, … Ngoài ra, Alex có thể sắp xếp đồ vật, có thể đếm đến 6, …</em></p><h2 id="microservice">Microservice:</h2><h3 id="4-b%E1%BA%A1n-h%C3%A3y-so-s%C3%A1nh-%C6%B0u-nh%C6%B0%E1%BB%A3c-%C4%91i%E1%BB%83m-c%E1%BB%A7a-monolithic-v%C3%A0-microservices">4. Bạn hãy so sánh ưu nhược điểm của monolithic và microservices?</h3><p>Gợi ý:<br>Để câu trả lời thuyết phục hơn, bạn có thể nêu ra những yếu tố ảnh hưởng tới từng ưu nhược điểm.</p><p></p><h3 id="5-t%E1%BA%A1i-sao-b%E1%BA%A1n-l%E1%BA%A1i-chia-service-nh%C6%B0-n%C3%A0y">5. Tại sao bạn lại chia service như này?</h3><p>Gợi ý:<br>Đây là một câu hỏi khó.<br>Nhiều bạn đề cập tới Domain-Driven Design nhưng hãy cẩn thận khi đề cập tới Domain-Driven Design. Bạn cần nắm rõ nghiệp vụ và cách model business bạn sử dụng là gì.</p><h3 id="6-order-%C4%91%C6%B0%E1%BB%A3c-x%E1%BB%AD-l%C3%BD-l%E1%BA%A7n-l%C6%B0%E1%BB%A3t-qua-nhi%E1%BB%81u-service-do-m%E1%BB%99t-s%E1%BB%B1-c%E1%BB%91-n%C3%A0o-%C4%91%C3%B3-1-service-x-trong-%C4%91%C3%B3-b%E1%BB%8B-down-b%E1%BA%A1n-x%E1%BB%AD-l%C3%BD-%C4%91%E1%BB%83-%C4%91%E1%BA%A3m-b%E1%BA%A3o-order-%C4%91%C3%B3-%C4%91%C6%B0%E1%BB%A3c-th%E1%BB%B1c-thi-ti%E1%BA%BFp-ngay-khi-service-x-s%E1%BB%91ng-l%E1%BA%A1i">6. Order được xử lý lần lượt qua nhiều service. Do một sự cố nào đó, 1 service X trong đó bị down. Bạn xử lý để đảm bảo order đó được thực thi tiếp ngay khi service X sống lại?</h3><p>Gợi ý:<br>Bạn có thể sử dụng message queue có khả năng persist được message.</p><p></p><h3 id="7-service-a-c%E1%BA%A7n-d%E1%BB%AF-li%E1%BB%87u-user-c%E1%BB%A7a-service-b-nh%C6%B0ng-service-b-c%C3%B3-user-schema-kh%C3%A1c-so-v%E1%BB%9Bi-c%E1%BB%A7a-service-a-b%E1%BA%A1n-s%E1%BA%BD-x%E1%BB%AD-l%C3%BD-t%C3%ACnh-hu%E1%BB%91ng-n%C3%A0y-nh%C6%B0-n%C3%A0o">7. Service A cần dữ liệu user của service B nhưng service B có user schema khác so với của service A. Bạn sẽ xử lý tình huống này như nào?</h3><p>Gợi ý:<br>Bạn cần dựa vào yêu cầu về tính nhất quán và tính đúng đắn của dữ liệu. Từ đó để đưa ra giải pháp như thêm một adapter layer hoặc đồng bộ dữ liệu từ B sang A. Lưu ý để đảm bảo tính đúng đắn của dữ liệu so với tài liệu, logic không thể dựa hoàn toàn vào tài liệu, ta cần kiểm tra dữ liệu thực tế trên môi trường prod và nonprod.</p><p></p><h3 id="8-frontend-g%E1%BB%ADi-request-order-t%E1%BB%9Bi-api-gateway-th%C3%B4ng-qua-rest-api-order-%C4%91%C6%B0%E1%BB%A3c-%C4%91i%E1%BB%81u-h%C6%B0%E1%BB%9Bng-t%E1%BB%9Bi-service-a-service-a-x%E1%BB%AD-l%C3%BD-xong-g%E1%BB%ADi-order-sang-service-b-th%C3%B4ng-qua-message-queue-service-b-x%E1%BB%AD-l%C3%BD-xong-l%C3%A0-h%E1%BA%BFt-th%C3%BAc-qu%C3%A1-tr%C3%ACnh-x%E1%BB%AD-l%C3%BD-order-l%C3%A0m-sao-%C4%91%E1%BB%83-h%E1%BB%87-th%E1%BB%91ng-tr%E1%BA%A3-l%E1%BA%A1i-response-cho-frontend">8. Frontend gửi request order tới API Gateway thông qua REST API, order được điều hướng tới service A. Service A xử lý xong gửi order sang service B thông qua message queue. Service B xử lý xong là hết thúc quá trình xử lý order. Làm sao để hệ thống trả lại response cho frontend?</h3><p>Gợi ý:<br>Có nhiều cách đáp ứng được yêu cầu trên. Bạn nên đánh giá về mặt hiệu năng và khả năng mở rộng của từng giải pháp.</p><p></p><h3 id="9-response-time-p95-c%E1%BB%A7a-qu%C3%A1-tr%C3%ACnh-x%E1%BB%AD-l%C3%BD-order-%C4%91ang-%E1%BB%9F-m%E1%BB%A9c-cao-theo-b%E1%BA%A1n-nguy%C3%AAn-nh%C3%A2n-c%C3%B3-th%E1%BB%83-l%C3%A0-g%C3%AC-v%C3%A0-c%C3%A1ch-ti%E1%BA%BFp-c%E1%BA%ADn-c%E1%BB%A7a-b%E1%BA%A1n-%C4%91%E1%BB%83-kh%E1%BA%AFc-ph%E1%BB%A5c-v%E1%BA%A5n-%C4%91%E1%BB%81-n%C3%A0y-l%C3%A0-g%C3%AC">9. Response time p(95) của quá trình xử lý order đang ở mức cao. Theo bạn, nguyên nhân có thể là gì? và cách tiếp cận của bạn để khắc phục vấn đề này là gì?</h3><p>Gợi ý:<br>Đầu tiên bạn nên review lại thiết kế luồng, đặc biệt chú ý tới điểm giao tiếp với các third party nếu có.<br>Sau đó cần nêu ra 1 quy trình sử dụng các công cụ monitor và distributed tracing để xác định được issue làm ở đâu.<br>Cuối cùng đưa ra những giải pháp khắc phục như tối ưu code, query và cấp thêm tài nguyên cho các service, …</p><h2 id="kh%C3%A1c">Khác:</h2><h3 id="10-trong-qu%C3%A1-tr%C3%ACnh-l%C3%A0m-vi%E1%BB%87c-b%E1%BA%A1n-g%E1%BA%B7p-ph%E1%BA%A3i-nh%E1%BB%AFng-v%E1%BA%A5n-%C4%91%E1%BB%81-k%E1%BB%B9-thu%E1%BA%ADt-n%C3%A0o-kh%C3%B3">10. Trong quá trình làm việc, bạn gặp phải những vấn đề kỹ thuật nào khó?</h3><p>Gợi ý:<br>Đây là một câu hỏi rất hay gặp thế nên bạn cần chuẩn bị kỹ. Mỗi người có kinh nghiệm, trải nghiệm khác nhau và gặp những vấn đề khác nhau. Bạn nên chọn ra và chuẩn bị kỹ 3 vấn đề khó nhất bạn gặp phải. Thêm nữa, cần đảm bảo rằng độ phức tạp của 3 vấn đề tương xứng với level hiện của bạn hoặc level đang hướng tới.</p><p>Nếu mọi người có câu trả lời hoặc câu hỏi khác thì comment ở dưới giúp mình nha 👇<br><br>Hẹn mọi người ở phần 2 với những câu hỏi về những chủ đề khác 👋</p><hr><p>Cám ơn mọi người rất nhiều 🙏<br>🏢 System Design VN: <a href="https://fb.com/groups/systemdesign.vn?ref=roninhub.com">https://fb.com/groups/systemdesign.vn</a></p>

Giải quyết một số vấn đề của hệ thống Microservices và khả năng thiết kế hệ thống là những kỹ năng mà ứng viên ở vị trị Senior Backend Engineer cần có. Dưới đây là một số câu hỏi và gợi ý cách trả lời để bạn tham khảo về 2 chủ đề này.

Lưu ý: những câu hỏi và gợi ý dưới đây chỉ mang tính tham khảo. Bạn nên tự xây dựng câu trả lời hoàn chỉnh của riêng mình.

System Design:

1. Bạn trình bày giúp mình về định lý CAP?

Gợi ý:

Bạn có thể tham khảo video này

Ngoài ra, bạn nên tìm hiểu thêm sự khác nhau sự Consistency trong định lý CAP và Consistency trong tính chất ACID.

2. Một bảng có lượng dữ liệu lớn và tăng dần theo thời gian, khiến cho các query tới bảng cũng chậm dần. Bạn sẽ xử lý như nào?

Gợi ý:

Đầu tiên, bạn nên làm rõ ý nghĩa của dữ liệu trong bảng và độ lớn của bảng để đưa ra những giải pháp phù hợp. Và nên trình bày theo trình tự từ đơn giản đến phức tạp.

3. Thiết kế hệ thống TinyURL?

Gợi ý:

Đây là một câu hỏi rất phổ biến vì nó có tính phân hoá cao.
Độ phức tạp của hệ thống phụ thuộc vào yêu cầu của nhà tuyển dụng.
Bạn nên làm rõ những yêu cầu và chú ý một số vấn đề sau:

  • Độ dài của short URL
  • Các yêu cầu về check trùng. Ví dụ khi shorten 1 URL nhiều lần, có cần trả về cùng 1 short URL không?
  • Bạn sử dụng DB nào?
  • Bạn xử lý đụng độ (collision) như nào?

Vẹt xám châu Phi được cho rằng là loài chim thông minh nhất thế giới. Chúng có những khả năng đặc biệt như bước chước giọng người, giải toán và có khả năng nhận thức. Đây là Alex (1976 - 2007) được biết đến là chú vẹt xám châu Phi nổi tiếng nhất trong lịch sử. Alex sở hữu hơn 100 âm thanh của các đồ vật và hành động khác nhau như tiếng gà gáy, tiếng lợn kêu, âm thanh của phi thuyền, tiếng thở dài, … Ngoài ra, Alex có thể sắp xếp đồ vật, có thể đếm đến 6, …

Microservice:

4. Bạn hãy so sánh ưu nhược điểm của monolithic và microservices?

Gợi ý:
Để câu trả lời thuyết phục hơn, bạn có thể nêu ra những yếu tố ảnh hưởng tới từng ưu nhược điểm.

5. Tại sao bạn lại chia service như này?

Gợi ý:
Đây là một câu hỏi khó.
Nhiều bạn đề cập tới Domain-Driven Design nhưng hãy cẩn thận khi đề cập tới Domain-Driven Design. Bạn cần nắm rõ nghiệp vụ và cách model business bạn sử dụng là gì.

6. Order được xử lý lần lượt qua nhiều service. Do một sự cố nào đó, 1 service X trong đó bị down. Bạn xử lý để đảm bảo order đó được thực thi tiếp ngay khi service X sống lại?

Gợi ý:
Bạn có thể sử dụng message queue có khả năng persist được message.

7. Service A cần dữ liệu user của service B nhưng service B có user schema khác so với của service A. Bạn sẽ xử lý tình huống này như nào?

Gợi ý:
Bạn cần dựa vào yêu cầu về tính nhất quán và tính đúng đắn của dữ liệu. Từ đó để đưa ra giải pháp như thêm một adapter layer hoặc đồng bộ dữ liệu từ B sang A. Lưu ý để đảm bảo tính đúng đắn của dữ liệu so với tài liệu, logic không thể dựa hoàn toàn vào tài liệu, ta cần kiểm tra dữ liệu thực tế trên môi trường prod và nonprod.

8. Frontend gửi request order tới API Gateway thông qua REST API, order được điều hướng tới service A. Service A xử lý xong gửi order sang service B thông qua message queue. Service B xử lý xong là hết thúc quá trình xử lý order. Làm sao để hệ thống trả lại response cho frontend?

Gợi ý:
Có nhiều cách đáp ứng được yêu cầu trên. Bạn nên đánh giá về mặt hiệu năng và khả năng mở rộng của từng giải pháp.

9. Response time p(95) của quá trình xử lý order đang ở mức cao. Theo bạn, nguyên nhân có thể là gì? và cách tiếp cận của bạn để khắc phục vấn đề này là gì?

Gợi ý:
Đầu tiên bạn nên review lại thiết kế luồng, đặc biệt chú ý tới điểm giao tiếp với các third party nếu có.
Sau đó cần nêu ra 1 quy trình sử dụng các công cụ monitor và distributed tracing để xác định được issue làm ở đâu.
Cuối cùng đưa ra những giải pháp khắc phục như tối ưu code, query và cấp thêm tài nguyên cho các service, …

Khác:

10. Trong quá trình làm việc, bạn gặp phải những vấn đề kỹ thuật nào khó?

Gợi ý:
Đây là một câu hỏi rất hay gặp thế nên bạn cần chuẩn bị kỹ. Mỗi người có kinh nghiệm, trải nghiệm khác nhau và gặp những vấn đề khác nhau. Bạn nên chọn ra và chuẩn bị kỹ 3 vấn đề khó nhất bạn gặp phải. Thêm nữa, cần đảm bảo rằng độ phức tạp của 3 vấn đề tương xứng với level hiện của bạn hoặc level đang hướng tới.

Nếu mọi người có câu trả lời hoặc câu hỏi khác thì comment ở dưới giúp mình nha 👇

Hẹn mọi người ở phần 2 với những câu hỏi về những chủ đề khác 👋


Cám ơn mọi người rất nhiều 🙏
🏢 System Design VN: https://fb.com/groups/systemdesign.vn

system_design
microservices
middle

Bài viết liên quan

Distributed Lock Là Gì? Tại Sao Nó Quan Trọng và Cách Triển Khai Với Redis

by @ AnhDH Mục lục 1. Đặt vấn đề 2. Distributed Lock 3. Triển khai Distributed Lock với Redis 4. Best practice 5. Tổng kết 6. Tham khảo Trong các hệ thống phân tán, việc đảm bảo tính nhất quán của dữ liệu (data consistency) và ngăn chặn tranh chấp tài nguyên (race condition) là một thách thức lớn, đặc biệt khi nhiều tiến trình hoặc service truy cập đồng thời vào các tài nguyên dùng chung. Một trong những giải pháp quan trọng để giải quyết vấn đề này chính là sử dụng distributed lock (k

Hướng dẫn xây dựng Video Call Webapp đơn giản với WebRTC

by @thanbv1510 Mục lục 1. Giới thiệu về WebRTC 2. Sequence Diagram 3. Hướng dẫn code chi tiết 4. Demo 5. Tổng kết và hướng phát triển 1. Giới thiệu về WebRTC WebRTC là gì? WebRTC (Web Real-Time Communication) là một công nghệ mã nguồn mở cho phép truyền thông theo thời gian thực (real-time) giữa các trình duyệt web và ứng dụng di động thông qua giao thức peer-to-peer (P2P), không cần cài đặt plugin hay phần mềm bổ sung. Kiến trúc WebRTC bao gồm các thành phần chính sau: 1. Signali

Java Concurrency (Phần 1): Thread

Một thread là một đơn vị thực thi nhỏ hơn một process. Một process có thể tạo ra nhiều thread trong quá trình thực thi. Tất cả các thread trong cùng một process sẽ chia sẻ, dùng chung một số vùng nhớ với nhau.

MySQL Thực Thi Lệnh SELECT Như Thế Nào?

select * from Member where CardNo = 1; Nhưng đã bao giờ bạn tự hỏi, điều gì đã diễn ra trong quá trình MySQL thực thi một câu lệnh truy vấn select chưa?

Ronin Engineer Tích Hợp với VNPay Như Thế Nào?

Khi tích hợp với cổng thanh toán nói chung, tính hợp với VNPay nói riêng, chúng ta cần đánh giá nhiều yếu tố khi chọn giải pháp thanh toán như độ bảo mật, phí, độ ổn định, tính năng, tốc độ tích hợp, … Nắm được cả về nghiệp vụ để hiểu rõ hơn về luồng thanh toán được xử lý như nào.

Tất cả bài viết
logo

HỘ KINH DOANH LẬP VƯƠNG

Giấy chứng nhận đăng ký doanh nghiệp số: 8656162915-001. Cấp ngày 21/02/2024. Nơi cấp: Sở Kế hoạch và Đầu tư TP. Hà Nội

PHƯƠNG THỨC THANH TOÁN

vnpay

LIÊN HỆ

roninengineer88@gmail.com

0362228388

26 ngõ 156 Hồng Mai, Hai Bà Trưng, Hà Nội

THEO DÕI CHÚNG TÔI

Facebook

Youtube

Tiktok

CHÍNH SÁCH

Chính sách bảo mật

Chính sách thanh toán

Đổi trả/Hoàn tiền

Hướng dẫn thanh toán VNPAY

PHƯƠNG THỨC THANH TOÁN

vnpay

Ronin Engineer 2024