Phỏng vấn vị trí Backend Engineer dùng Node.js đòi hỏi nhiều hơn là chỉ biết cú pháp ngôn ngữ. Bài viết này tổng hợp 5 sai lầm phổ biến mà ứng viên thường mắc phải, giúp bạn tự tin chinh phục nhà tuyển dụng kỹ thuật khó tính nhất.
Phớt lờ cơ chế Event Loop và Block Main Thread
Nhiều ứng viên trả lời thuộc lòng 'Node.js is single-threaded', nhưng khi bị hỏi sâu về việc Event Loop xử lý các I/O operation hay sự khác biệt giữa Microtask và Macrotask thì hoàn toàn lúng túng. Nếu bạn không hiểu tại sao việc chặn Main Thread lại nguy hiểm cho cả hệ thống, đó là một điểm trừ lớn.
Nhà tuyển dụng muốn thấy khả năng tư duy của bạn về việc tối ưu hóa, không phải chỉ là việc biết cách gọi API. Hãy chứng minh bạn hiểu rõ cơ chế vận hành của libuv đằng sau Node.js.
- Phân biệt chính xác giữa setImmediate(), setTimeout(), và process.nextTick().
- Hiểu rõ tại sao các tác vụ tính toán nặng (CPU intensive) lại cần offload sang Worker Threads hoặc child process.
- Khả năng giải thích quy trình thực thi code trong Event Loop (Call Stack, Web APIs/C++ APIs, Callback Queue).
Lạm dụng Promise và lỗi xử lý Asynchronous
Async/Await làm code trông sạch hơn, nhưng nếu sử dụng thiếu suy nghĩ trong các tác vụ tuần tự (ví dụ: await trong một vòng lặp map), bạn sẽ làm giảm nghiêm trọng performance của hệ thống.
Lỗi quên không xử lý unhandled promise rejection hoặc không có try-catch đúng cách là những biểu hiện rõ ràng của việc thiếu kinh nghiệm thực chiến.
- Sử dụng Promise.all hoặc Promise.allSettled thay vì chèn await liên tiếp một cách không cần thiết.
- Luôn có cơ chế Error Handling tập trung hoặc ít nhất là global catch.
- Hiểu được cách vận hành của non-blocking I/O trong các thư viện như fs hay database drivers.
Thiếu tư duy về Architecture và Scalability
Ứng viên junior thường chỉ tập trung vào việc làm sao để code chạy được. Ở vị trí Backend, bạn cần thể hiện tư duy hệ thống. Nếu interviewer hỏi về cách xử lý hàng triệu request đồng thời, việc trả lời hời hợt hoặc chỉ nói chung chung là 'cần scale' sẽ không đủ thuyết phục.
Hãy tập trung vào kiến trúc module, khả năng maintainable của code và hiểu biết về clustering.
- Biết cách sử dụng Node.js Clustering module để tận dụng đa nhân CPU.
- Hiểu về kiến trúc Microservices và cơ chế giao tiếp qua Message Queue (như RabbitMQ hoặc Kafka).
- Sẵn sàng thảo luận về ưu/nhược điểm khi cân bằng tải bằng Nginx hoặc các Load Balancer khác.
Bỏ qua quản lý tài nguyên và Security căn bản
Việc không nắm rõ cách quản lý Memory (Memory Leak), Buffer, hay Stream sẽ biến ứng dụng của bạn thành một 'quả bom hẹn giờ'. Ngoài ra, bảo mật vẫn là yếu tố sống còn mà nhiều backend dev thường bỏ qua.
Nếu bạn không thể kể tên các lỗ hổng OWASP Top 10 cơ bản như NoSQL Injection, bạn sẽ mất điểm ngay lập tức.
- Sử dụng Stream cho các file lớn thay vì đọc toàn bộ vào bộ nhớ bằng fs.readFile.
- Nắm vững các biện pháp ngăn chặn NoSQL injection và XSS.
- Biết cách sử dụng các công cụ profiling để phát hiện Memory Leak trong Node.js.
Ghi nhớ nhanh
- Nắm vững cơ chế Event Loop, Microtask và Macrotask thay vì chỉ thuộc lòng khái niệm lý thuyết.
- Luôn ưu tiên tối ưu hóa hiệu năng khi làm việc với các tác vụ I/O thông qua Stream và Promise.all.
- Chứng minh tư duy hệ thống bằng cách đề cập đến Clustering, cân bằng tải và quản lý bộ nhớ.
- Không bao giờ bỏ qua các kiến thức căn bản về Security như OWASP Top 10.
- Thể hiện sự tự tin khi giải quyết các vấn đề đánh đổi (trade-offs) trong kiến trúc backend.