Harbor

Cách chuẩn bị

Lộ trình 2, 4 hoặc 8 tuần cho lập trình viên JS 4+ năm: đọc gì theo thứ tự nào, luyện bằng mock có bấm giờ, và người phỏng vấn kỳ vọng gì ở mức mid, senior, staff.

9 phút đọcBắt đầu nhanh

Điểm xuất phát của bạn

Với 4 năm làm React và Node.js, bạn đã có sẵn nhiều thứ: thiết kế REST API, viết truy vấn SQL, dùng Redis, deploy container. Phần thường thiếu nằm ở ba chỗ:

  • Con số. Một Postgres chịu bao nhiêu QPS, một instance Node.js phục vụ bao nhiêu request, Redis cần bao nhiêu RAM. Chọn con số vô lý khi ước lượng có thể dẫn tới thiết kế sai.1
  • Hệ thống phân tán. Sharding, replication, queue, nhất quán dữ liệu khi có nhiều node. Phần lớn lý thuyết system design đến từ lĩnh vực hệ thống phân tán.2
  • Trình bày. Nói mạch lạc trong một buổi ngắn, biết dừng ở đâu, biết đào sâu chỗ nào. Làm việc im lặng là một trong những điều nên tránh.3

Kế hoạch dưới đây nhắm vào đúng ba chỗ đó. Chọn mức 2, 4 hoặc 8 tuần tuỳ thời gian bạn có, mỗi ngày khoảng 1–1,5 giờ. Các mốc thời gian này là gợi ý của khoá học. Grokking ước lượng một ứng viên trung bình cần khoảng 3–4 tháng chuẩn bị, tuỳ cấp bậc và độ thành thạo, nên kế hoạch ngắn chỉ hợp khi bạn đã có nền tảng.4

Thứ tự đọc

Đọc theo bốn lớp. Lớp sau dựa vào lớp trước. Grokking cũng sắp xếp như vậy: phần nhập môn và ước lượng, rồi các khối xây dựng, rồi mới tới các bài thiết kế, và khuyên đọc theo thứ tự.5

  1. Khung và con số: Khung trả lời 45 phút, Con số cần thuộc, Chọn server.
  2. Khái niệm nền: Mạng cơ bản, Thiết kế API, Mô hình dữ liệu, Database index, Caching, Chọn database, Sharding, Consistent hashing, CAP.
  3. Pattern: Scale đọc, Scale ghi, Tranh chấp tài nguyên, Cập nhật realtime, Tác vụ dài, File lớn, Quy trình nhiều bước.
  4. Công nghệ: bắt đầu với Redis, PostgreSQL, Kafka, Elasticsearch. Các công nghệ còn lại đọc khi bài thiết kế cần tới.

Xen kẽ bài thiết kế ngay từ tuần đầu. Đọc lý thuyết liền một mạch rồi mới làm bài thường khiến bạn quên gần hết (kinh nghiệm của khoá học, không phải số liệu đo).

Kế hoạch 2 tuần

Dành cho trường hợp đã có lịch phỏng vấn. Ưu tiên khung trả lời và các bài phổ biến, vì người phỏng vấn thường hỏi các bài toán quen thuộc như thiết kế WhatsApp.6 Lịch theo ngày dưới đây là gợi ý của khoá học.

NgàyViệc cần làm
1–2Khung trả lời, Con số cần thuộc, Chọn server
3–4Caching, Chọn database, Sharding. Làm Rút gọn link
5–6Scale đọc, Scale ghi. Làm Rate limiter
7–8Tranh chấp tài nguyên. Làm Đặt vé sự kiện
9–10Cập nhật realtime. Làm Ứng dụng chat
11–12Làm News feed dạng mock 45 phút
13–14Mock thêm 2 bài chưa đọc, ôn lại ghi chú lỗi

Kế hoạch 4 tuần

TuầnĐọcLàm bài
1Lớp 1 và nửa đầu lớp 2Rút gọn link, Rate limiter
2Hết lớp 2, Redis, PostgreSQLĐặt vé sự kiện, Booking và tracking container, Bộ đếm top K
3Lớp 3, KafkaChat, News feed, Gọi xe
4Ôn và đọc công nghệ theo nhu cầu4–5 mock 45 phút, mỗi buổi một bài mới

Kế hoạch 8 tuần

Hai tuần đầu như kế hoạch 4 tuần nhưng chậm hơn. Từ tuần 3, mỗi tuần làm 3 bài thiết kế và đọc 2–3 bài công nghệ. Tuần 7 và 8 chỉ làm mock, tốt nhất có người đóng vai phỏng vấn. Grokking gợi ý ghép cặp với bạn để hỏi nhau; nếu không có ai, tự ghi hình và đóng cả hai vai.7 Danh sách bài theo độ khó có trong Tổng quan bài thiết kế.

Mẹo: giữ một file ghi chú "lỗi của tôi". Sau mỗi bài, ghi 2–3 ý bỏ sót. Trước buổi phỏng vấn thật, chỉ cần đọc lại file này.

Cách luyện tập

Đọc lời giải chỉ giúp bạn hiểu. Muốn làm được trong phòng phỏng vấn thì phải luyện đúng điều kiện.

  • Bấm giờ 45 phút. Chia thời gian theo khung: 5 phút yêu cầu, 5 phút ước lượng, 5 phút API, 15 phút thiết kế, 10–15 phút đào sâu. Hết giờ là dừng. Cách chia phút này là gợi ý của khoá học; Grokking chỉ ghi buổi phỏng vấn thường dài 35–40 phút và cần chia nhỏ phạm vi cho vừa thời gian.6
  • Vẽ thật. Dùng Excalidraw hoặc giấy. Vẽ client, load balancer, service, database, cache, queue. Sơ đồ giúp bạn và người nghe cùng nhìn một thứ. Thiết kế kiến trúc thường vẽ thành phần là các hộp, mũi tên giữa các hộp cho biết ai nói chuyện với ai.8
  • Nói thành tiếng. Tự nói như đang giải thích cho người khác, hoặc ghi âm rồi nghe lại. Bạn sẽ phát hiện ngay những chỗ nói vòng vo hoặc thiếu lý do. Ghi lại rồi tự nhận xét, hoặc nhờ người có kinh nghiệm góp ý, là cách luyện Grokking đề xuất.7
  • So sánh với bài mẫu. Sau khi xong, mở bài trên site, đối chiếu từng phần: yêu cầu, API, sơ đồ, đào sâu, hạ tầng ba mức.
  • Làm lại sau một tuần. Bài làm lần hai thường tốt hơn hẳn. Đó là dấu hiệu kiến thức đã thành phản xạ.

Sai lầm hay gặp: đọc 20 bài lời giải nhưng không tự làm bài nào. Khi vào phòng, bạn nhận ra mình nhớ sơ đồ nhưng không giải thích được vì sao chọn từng thành phần. Grokking cảnh báo đúng điều này: học công thức cho từng đề dễ dẫn tới thuộc lòng lời giải thay vì hiểu vấn đề.9

Kỳ vọng theo cấp bậc

Cùng một đề, người phỏng vấn chấm khác nhau tuỳ cấp bậc bạn ứng tuyển. Ứng viên mid và senior thường có ít nhất một vòng system design, ứng viên senior hơn thường có hai đến ba vòng.10 Bảng dưới là đánh giá của khoá học về kỳ vọng từng cấp.11

CấpHọ cần thấyHọ dẫn dắt bao nhiêuĐào sâu
MidThiết kế chạy đúng các yêu cầu chính, API rõ, chọn database hợp lýKhá nhiều, có thể gợi ý hướng1 vấn đề, mức cơ bản
SeniorTự dẫn buổi phỏng vấn, ước lượng có số, nêu trade-off cho từng lựa chọnÍt, chủ yếu đặt câu hỏi2–3 vấn đề, có phương án và điểm yếu
StaffNhư senior, cộng thêm tầm nhìn vận hành: chi phí, đội ngũ, migrate, giám sát, lỗiGần như khôngChủ động chọn chỗ đáng đào sâu, biết bỏ qua chỗ không quan trọng

Với 4 năm kinh nghiệm, bạn thường ở ngưỡng mid lên senior. Mục tiêu hợp lý: tự dẫn được buổi phỏng vấn và với mỗi lựa chọn đều nói được "vì sao" và "đổi lại mất gì". Grokking nhấn mạnh không có một đáp án đúng duy nhất; mỗi thành phần có ưu nhược riêng và mỗi thiết kế đều có điểm yếu mà bạn nên tự nêu ra.12 Phần hạ tầng ba mức trong mỗi bài giúp bạn chạm tới vài ý của mức staff, như chi phí và ai vận hành.

Tuần cuối trước phỏng vấn

  • Đọc lại Khung trả lời 45 phút và file ghi chú lỗi.
  • Ôn Con số cần thuộc đến mức nói được không cần nhìn.
  • Làm 2 mock với bài chưa từng đọc.
  • Không học công nghệ mới. Nói về thứ mình hiểu chắc tốt hơn nhắc tên thứ mình chỉ mới đọc qua. Nếu không biết một điều, đừng che lấp hay giả vờ biết.3

Nguồn trích dẫn

  1. Grokking Modern System Design · ch.5 Back-of-the-envelope Calculations · bài "Put Back-of-the-envelope Numbers in Perspective", mục "Why do we use back-of-the-envelope calculations?". ↩

  2. Grokking Modern System Design · ch.2 System Design Interviews · bài "What Is a System Design Interview?", mục "Theory and practice". ↩

  3. Grokking Modern System Design · ch.2 System Design Interviews · bài "How to Perform Well", mục "What not to do in an interview". ↩ ↩2

  4. Grokking Modern System Design · ch.2 System Design Interviews · bài "How to Prepare for Success" (phần mở đầu). ↩

  5. Grokking Modern System Design · ch.1 Introduction · bài "Course Structure for Modern System Design", mục "Structure of the course". ↩

  6. Grokking Modern System Design · ch.2 System Design Interviews · bài "What Is a System Design Interview?", mục "How do we tackle a design question?". ↩ ↩2

  7. Grokking Modern System Design · ch.2 System Design Interviews · bài "How to Prepare for Success", mục "Mock interviews". ↩ ↩2

  8. Grokking Modern System Design · ch.2 System Design Interviews · bài "What Is a System Design Interview?", mục "Present the high-level design". ↩

  9. Grokking Modern System Design · ch.1 Introduction · mục "About this course" ("A fresh look at system design"). ↩

  10. Grokking Modern System Design · ch.2 System Design Interviews · bài "What Is a System Design Interview?", mục "Who gets a system design interview?". ↩

  11. Chưa có nguồn trong thư viện: không sách nào trong thư viện mô tả kỳ vọng theo cấp mid, senior, staff; bảng giữ lại vì giúp định hướng, nhưng là đánh giá của khoá học. ↩

  12. Grokking Modern System Design · ch.2 System Design Interviews · bài "How to Perform Well", mục "Discuss trade-offs". ↩