Live coding khi phỏng vấn: quy trình 6 bước để không bị đơ giữa chừng

  • author-image

    Nguyễn Đình Cường

  • blog-tag
  • blog-comment 0 comment
  • created-date 09 Nov, 2026
blog-thumbnail

Nhiều người code giỏi nhưng vẫn "đơ" khi bị yêu cầu viết code trực tiếp trước mặt người phỏng vấn. Nguyên nhân thường không phải thiếu kiến thức mà là thiếu quy trình và quá lo lắng. Với một quy trình sáu bước dưới đây, bạn sẽ luôn biết mình đang ở đâu và làm gì tiếp theo.

Bước 1: Hiểu đề và đặt câu hỏi làm rõ

Đừng lao vào code ngay. Hãy nhắc lại đề bằng lời của bạn và hỏi những điều chưa rõ: kiểu dữ liệu đầu vào là gì, kích thước tối đa, có số âm hoặc giá trị trùng không, đầu vào rỗng thì trả về gì, cần tối ưu thời gian hay bộ nhớ. Việc đặt câu hỏi cho thấy bạn làm việc như một kỹ sư thật, vì yêu cầu trong công việc hiếm khi đầy đủ ngay từ đầu.

Bước 2: Thử với ví dụ cụ thể

Tự viết ra một hai ví dụ nhỏ và đi qua bằng tay. Ví dụ này vừa giúp bạn hiểu đề, vừa là bộ test để kiểm tra lời giải về sau. Nếu người phỏng vấn đã đưa ví dụ, hãy thử thêm một trường hợp biên.

Bước 3: Nêu lời giải đơn giản trước

Hãy bắt đầu bằng cách làm vét cạn (brute force), dù chậm, và nói rõ độ phức tạp của nó. Điều này bảo đảm bạn luôn có một lời giải đúng, và tạo nền để cải tiến. Rất nhiều bạn bỏ qua bước này vì muốn đưa ngay đáp án tối ưu, rồi bí giữa chừng mà không có gì trong tay.

Bước 4: Tối ưu và chốt hướng đi

Tìm điểm nghẽn: có vòng lặp lồng nhau không, có tìm kiếm lặp đi lặp lại không. Gợi ý các công cụ quen thuộc: hash map để tra cứu nhanh, sắp xếp rồi dùng hai con trỏ, ngăn xếp, cửa sổ trượt, tìm kiếm nhị phân. Trình bày ý tưởng và xác nhận với người phỏng vấn trước khi viết. Họ có thể gợi ý nếu bạn đi lệch hướng, và đó là điều tốt.

Bước 5: Viết code gọn gàng và nói thành tiếng

  • Đặt tên biến có nghĩa, tránh a, b, tmp khắp nơi.
  • Chia nhỏ hàm nếu logic dài.
  • Nói khi bạn viết: "Mình dùng map để lưu những số đã gặp".
  • Nếu quên cú pháp, hãy nói thẳng và dùng tên hàm gần đúng, ví dụ "ở đây mình cần hàm sắp xếp mảng", thay vì im lặng.

Bước 6: Kiểm tra và phân tích

Chạy thử ví dụ ở bước hai bằng tay, theo từng dòng code. Kiểm tra các trường hợp biên như mảng rỗng, một phần tử, giá trị trùng, số âm. Cuối cùng nêu độ phức tạp thời gian và bộ nhớ, và nếu còn thời gian, bàn về cách cải tiến hoặc kiểm thử.

Ví dụ nhỏ: tìm ký tự đầu tiên không lặp

function firstUnique(s) {  const count = new Map();  for (const ch of s) {    count.set(ch, (count.get(ch) || 0) + 1);  }  for (let i = 0; i < s.length; i++) {    if (count.get(s[i]) === 1) return i;  }  return -1;}console.log(firstUnique('loveleetcode')); // 2console.log(firstUnique('aabb'));         // -1

Cách nói: "Cách đơn giản là với mỗi ký tự, duyệt cả chuỗi để đếm, độ phức tạp O(n²). Để nhanh hơn, mình đếm một lần bằng map rồi duyệt lần hai để tìm ký tự có số đếm bằng 1, tổng cộng O(n) thời gian và O(k) bộ nhớ với k là số ký tự khác nhau."

Khi bạn bị bí

  • Hít thở, nói thật rằng bạn đang suy nghĩ, thay vì để im lặng kéo dài.
  • Quay lại ví dụ nhỏ và đi từng bước bằng tay để tìm quy luật.
  • Hỏi gợi ý đúng cách: "Mình đang cân nhắc dùng hash map, bạn thấy hướng này có hợp lý không?".
  • Thử giải một phiên bản đơn giản hơn của bài toán trước.

Luyện tập thế nào cho hiệu quả

Giải bài với bộ đếm giờ, viết trên trình soạn thảo đơn giản không có gợi ý tự động, và tập nói to suy nghĩ ngay cả khi ngồi một mình. Ghi âm hoặc nhờ bạn bè đóng vai người phỏng vấn để quen với cảm giác bị quan sát.

Kết luận

Người phỏng vấn đánh giá cách bạn giải quyết vấn đề không kém kết quả cuối. Một quy trình rõ ràng giúp bạn bình tĩnh và để lộ năng lực thật của mình.

Muốn luyện tư duy giải bài bài bản hơn, bạn có thể xem các khóa thuật toán và lập trình tại codebem.com.

author_photo
Nguyễn Đình Cường

0 comment