Explore all courses in this category.
Explore all courses in this category.
Nguyễn Đình Cường
0 comment
09 Nov, 2026
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.
Đừ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.
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.
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.
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.
a, b, tmp khắp nơi.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ử.
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')); // -1Cá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."
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.
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.
Nguyễn Đình Cường
0 comment