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

ACID - A Deep Dive into Transactions

By @wuan580 Trong thế giới khắc nghiệt của các hệ thống dữ liệu, mọi thứ đều có thể xảy ra: * Phần mềm hoặc phần cứng cơ sở dữ liệu có thể bị lỗi bất cứ lúc nào (kể cả giữa thao tác ghi) * Ứng dụng có thể sập giữa chừng, khi một loạt thao tác vẫn chưa hoàn tất. * Sự cố mạng có thể bất ngờ cắt đứt ứng dụng khỏi cơ sở dữ liệu hoặc một nút cơ sở dữ liệu này khỏi nút khác. * Nhiều client có thể ghi đồng thời, vô tình ghi đè lên thay đổi của nhau. * Client có thể đọc dữ liệu vô nghĩa vì nó chỉ

Áp dụng Connection Multiplexing trong ProxySQL để tối ưu kết nối Database

By Đức Hiếu 1. Tổng quan Connection Multiplexing là một trong những tính năng nổi bật nhất của ProxySQL, giúp giải quyết vấn đề bottleneck về kết nối với hệ thống Database. Khác với connection pooling truyền thống, multiplexing cho phép nhiều frontend connections chia sẻ các backend connections thông qua tỷ lệ N:M thay vì 1:1, từ đó giảm đáng kể áp lực lên Database layer. 2. Vấn đề với mô hình Thread-per-Connection của MySQL Trong mô hình truyền thống, MySQL sử dụng thread-per-connection m

Java Virtual Thread: Cuộc cách mạng cho lập trình đồng thời

By @wuan.580 Bạn đã bao giờ viết một ứng dụng xử lý hàng ngàn request cùng lúc, và cảm thấy như mình đang chiến đấu với chính Java? Bạn từng dùng ThreadPoolExecutor và vắt óc cân chỉnh số lượng thread cho "vừa đủ dùng", tránh thiếu nhưng cũng không dám dư vì sợ OutOfMemoryError? Bạn từng nhăn mặt khi phải viết những dòng code callback chằng chịt, chỉ để tránh block một luồng? Và rồi đau đầu gỡ bug vì stacktrace rối như tơ vò? Nếu câu trả lời là "có", thì bạn không đơn độc. Và bạn cũng sắp có

DFS & BFS - Khi dữ liệu không được lưu trữ một cách tuyến tính

By Bùi Đức Toàn “Muốn tìm trân châu nơi đáy biển, ắt phải lặn sâu. Muốn nhìn toàn cảnh rừng xanh, phải leo lên đỉnh núi.” - Cổ nhân. Từ thuở khai hoang, con người khi thì đào sâu xuống lòng đất để tìm vàng, khi thì lại lần theo dòng sông để biết nó chảy về đâu. Trong thế giới khoa học máy tính, tinh thần khai hoang đó được tái hiện qua hai chiến lược kinh điển trong việc duyệt đồ thị là: 1. Tìm kiếm theo chiều sâu (Depth-First Search – DFS). 2. Tìm kiếm theo chiều rộng (Breadth-First Search

Transaction trong Store Procedure: Vấn đề gì xảy ra khi quên ROLLBACK?

By Đức Hiếu Store Procedure: Vũ khí hai lưỡi trong tối ưu hóa performance Trong quá trình phát triển phần mềm, chúng ta thường tin rằng Store Procedure là công cụ mạnh mẽ để tối ưu hiệu suất hệ thống. Tuy nhiên, qua trải nghiệm thực tế, mình nhận ra rằng nếu không sử dụng đúng cách, chúng có thể gây ra những vấn đề nghiêm trọng về hiệu năng. Bài viết này chia sẻ một bài học quý giá về trường hợp Store Procedure có thể trở thành nguyên nhân làm chậm hệ thống nếu không được xử lý lỗi đúng cách.

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