Cracking the Coding Interview chỉ hợp với một kiểu vòng code FDE
Vòng thuật toán 45 phút ở Google là sân nhà của cuốn sách, còn bài build 60 phút kiểu production ở OpenAI cần cách đọc khác.

Tóm tắt nhanh
- Bản thứ 6 (CareerCup, 2015, 708 trang) có 189 câu hỏi, dù tên sách trên trang chính thức vẫn ghi 150
- Hai chương mở đầu về Big O và kỹ thuật giải bài đáng giá hơn việc cày hết 189 câu
- Vòng code FDE có thể là bài thuật toán 45 phút hoặc bài build 60 phút có thêm yêu cầu, nên hỏi recruiter trước
Còn một tháng nữa là tới vòng phỏng vấn FDE, và trên bàn bạn là một cuốn sách 708 trang. Không có thời gian đọc hết, nên câu cần trả lời là đọc chương nào.
Câu trả lời tùy vào việc vòng code của bạn thuộc dạng nào. Ở một số công ty, đó là bài thuật toán quen thuộc mà cuốn sách dạy rất kỹ. Ở những nơi khác, đó là bài build kiểu production, và khi ấy chỉ vài chương trong sách thật sự có ích.
Cuốn sách lớn hơn cả cái tên của nó
Tác giả là Gayle Laakmann McDowell. Theo thông tin của nhà sách, bản thứ 6 do CareerCup phát hành ngày 1 tháng 7 năm 2015, dày 708 trang, ISBN 978-0-9847828-5-7. Trang chính thức vẫn ghi tên bản này là “150 Programming Interview Questions and Solutions”, nhưng bên trong có tới 189 câu hỏi, câu nào cũng có gợi ý.
Trang của tác giả cho biết bản này có thêm 70% nội dung so với bản trước. Sách đã ra đời khá lâu, nhưng phần lõi của nó vẫn chưa cũ: cách suy nghĩ khi gặp một bài toán lạ trước mặt người phỏng vấn.
Khó khăn là vòng code FDE không có một khuôn chung. Khóa học của Educative về phỏng vấn FDE ở Google mô tả vòng code là một buổi phỏng vấn cấu trúc dữ liệu và thuật toán bình thường. Buổi này kéo dài khoảng 45 phút, với một hoặc hai bài, và đó đúng là sân nhà của cuốn sách.
Còn với OpenAI, hướng dẫn của Exponent mô tả vòng onsite là một bài build kiểu production dài 60 phút. Bài có thể chia thành nhiều phần nối tiếp, và yêu cầu mới được thêm vào sau khi bạn đã có phiên bản đầu tiên. Cùng một cuốn sách, nhưng mỗi vòng cần một cách đọc khác.
Phần đáng tiền nằm trước câu hỏi số 1
Trước phần 189 câu hỏi, sách có mấy chương mở đầu: quy trình phỏng vấn, chuẩn bị phần behavioral, Big O, và một chương về câu hỏi kỹ thuật kèm 5 cách tiếp cận thuật toán. Nhiều người lật thẳng tới bài tập, và đó là một sai lầm. Các chương mở đầu dạy cách làm, còn bài tập chỉ là chỗ để luyện.
Chương Big O nói về độ phức tạp thời gian và bộ nhớ, thời gian amortized, khi nào log N xuất hiện, và cách tính runtime của hàm đệ quy. Mục “Multi-Part Algorithms: Add vs. Multiply” rất đáng đọc kỹ.
Thử hình dung bạn duyệt hết danh sách đơn hàng A, rồi duyệt hết danh sách khách hàng B. Hai vòng lặp nối tiếp nhau thì độ phức tạp là O(A + B), còn nếu lồng vòng B vào trong vòng A thì thành O(A × B).
Với 10.000 đơn và 1.000 khách, đó là chênh lệch giữa 11.000 bước và 10.000.000 bước.
Hãy luyện nói phép tính này thành tiếng trước khi gõ code. Chỉ một câu như “hai vòng nối tiếp nên là O(A + B)” cũng đủ cho người phỏng vấn thấy bạn hiểu thứ mình sắp viết.
Kỹ thuật có tên tốt hơn đáp án học thuộc
Chương kỹ thuật dạy những kỹ thuật giải bài có tên riêng như BUD, Base Case and Build và Data Structure Brainstorm, kèm hướng dẫn về thế nào là code tốt. Kỹ thuật có tên thì dễ nhớ. Lúc bế tắc, bạn có sẵn một danh sách để thử lần lượt thay vì ngồi im.
Với bài build của OpenAI, phần “code tốt” còn quan trọng hơn. Khi yêu cầu thứ hai xuất hiện ở phút 30, code đặt tên rõ ràng và chia hàm hợp lý có thể sửa trong vài phút. Code viết vội cho chạy được thì có khi phải viết lại từ đầu.
Đọc theo thứ tự nào cho từng dạng vòng code?
189 câu hỏi được chia theo chủ đề: mảng và chuỗi, danh sách liên kết, stack và queue, cây và đồ thị, đệ quy và quy hoạch động, sắp xếp và tìm kiếm, thiết kế hướng đối tượng, cơ sở dữ liệu, thread và lock, testing, cùng vài chủ đề khác. Vì thế bạn có thể chọn chương để đọc, không cần đi từ đầu đến cuối.
Nếu vòng code là bài thuật toán khoảng 45 phút, hãy đọc chương Big O và chương kỹ thuật trước. Sau đó đọc lần lượt Arrays and Strings, cây và đồ thị, sắp xếp và tìm kiếm, cuối cùng là đệ quy.
Nếu vòng code là bài build kiểu production, sau hai chương mở đầu bạn nên chuyển sang Object-Oriented Design, Scalability and Memory Limits và Threads and Locks. Ba chương này gần nhất với loại việc thực tế mà dạng vòng này mô phỏng.
Thử hình dung đề bài yêu cầu viết một tool đọc log và đếm lỗi theo từng dịch vụ. Sau đó đề thêm hai yêu cầu: file log lớn hơn bộ nhớ, và có nhiều luồng ghi cùng lúc. Đến lúc đó, hai chương về memory limits và lock chính là thứ bạn cần.
Biến việc luyện tập thành bằng chứng trên CV
Educative khuyên bạn hỏi recruiter để xác nhận định dạng vòng phỏng vấn, và đó nên là việc làm đầu tiên. Chỉ một email hỏi trước có thể giúp bạn khỏi mất hai tuần cày quy hoạch động cho một vòng không có dạng bài đó.
Sau đó, hãy biến những gì đã luyện thành thứ người khác nhìn thấy được. Một repo nhỏ có lịch sử commit cho thấy bạn mở rộng code qua hai, ba lần đổi yêu cầu, kèm ghi chú về độ phức tạp, sẽ nói về bạn rõ hơn dòng “giải 300 bài LeetCode” trên CV.
Cracking the Coding Interview vẫn là cuốn nền tảng tốt cho vòng code. Với FDE, cách đọc hiệu quả là học kỹ hai chương mở đầu, rồi chọn phần còn lại theo dạng vòng mà recruiter xác nhận.
Bài này có hữu ích không?
Cảm ơn bạn đã góp ý!
5 nguồn
- Cracking the Coding Interview (official site)
- Cracking the Coding Interview – Schweitzer Online (bookseller listing) · 2015-07-01
- Cracking the Coding Interview – Book Content Detail
- OpenAI Forward Deployed Engineer Interview Guide (Exponent / aced.io)
- The Coding Round – Google Forward Deployed Engineer Interview (Educative)