Câu hỏi phỏng vấn JavaScript thường gặp
Bởi Aaron Cao · Cập nhật

Hãy chuẩn bị các kiến thức nền tảng: closures, event loop, cách binding this, prototype, và cách scoping với var, let, const. Sau đó là các bài tập code như triển khai debounce, làm phẳng một array, hoặc viết một promise utility, cùng các chủ đề trình duyệt như event delegation. Ở vòng phỏng vấn senior sẽ có thêm các pattern async và hiệu năng.
Những kiến thức nền tảng JavaScript nào hay được hỏi nhất?
Danh sách câu hỏi JavaScript trông như vô tận, và học tủ ngẫu nhiên là cách chậm nhất để vượt qua nó. Phần này thu hẹp lại thành những khái niệm mà nhà tuyển dụng quay lại gần như trong mọi vòng, để việc luyện tập của bạn khớp với phân bố thực tế. Năm chủ đề chiếm phần lớn các vòng sàng lọc:
- Closures: một hàm nắm giữ điều gì, lỗi kinh điển với biến trong vòng lặp, và vì sao các pattern module hoạt động.
- Event loop: call stack, hàng đợi task, và hàng đợi microtask, cũng như thứ tự in log trong một ví dụ pha trộn.
- Binding của this: mặc định, ngầm định, tường minh với call và apply, và hàm mũi tên khác biệt ra sao.
- Prototype: tra cứu thuộc tính dọc theo chuỗi, và cú pháp class thực chất được biên dịch thành gì.
- Scoping: var so với let và const, hoisting, và vùng chết tạm thời (temporal dead zone).
Ép kiểu khi so sánh bằng với == so với ===, truthiness, và các phương thức array như map, filter, reduce lấp đầy phần còn lại của tầng sàng lọc. Nếu bạn có thể nói to giải thích từng mục trên trong vòng chưa đầy một phút, vòng kiến thức nền tảng coi như ổn.
Nên luyện những bài tập code nào?
Ngoài các câu hỏi khái niệm, phần lớn vòng JavaScript còn có một bài tập triển khai ngắn làm trực tiếp. Bộ bài tập lặp lại khá nhỏ và đáng để luyện đến khi mỗi bài chỉ tốn vài phút, không phải nhiều lần thử:
- Triển khai
debouncevàthrottle, và nói khi nào mỗi cái phù hợp. - Làm phẳng một array lồng nhau, cả có và không dùng đệ quy.
- Viết một phiên bản đơn giản của
Promise.allmà reject ngay khi có lỗi đầu tiên. - Xây dựng một event emitter nhỏ với on, off, và emit.
- Deep clone một object và nêu ra những trường hợp phiên bản của bạn bỏ sót.
Ví dụ, một ứng viên front-end phỏng vấn cho vị trí mid-level có thể được cho debounce để khởi động, rồi được yêu cầu gắn nó vào một ô tìm kiếm và giải thích điều gì xảy ra với các request đang chạy dở. Câu hỏi truy tiếp mới là bài kiểm tra thật sự; nhà tuyển dụng mở rộng bài tập để xem mô hình hiểu biết ngôn ngữ của bạn dừng lại ở đâu.
Luyện nói to trước một người phỏng vấn hay bẻ lại chính là cách khiến những điều này đọng lại; trang phỏng vấn thử nói về cách chạy các buổi luyện tập có tính giờ kèm câu hỏi truy tiếp.
Các câu hỏi về trình duyệt và async trông như thế nào?
Các vị trí thiên về trình duyệt thêm một lớp nữa lên trên kiến thức nền tảng ngôn ngữ. Event delegation là trọng tâm: vì sao một listener duy nhất trên phần tử cha lại tốt hơn cả nghìn listener trên các phần tử con, bubbling giúp điều đó hoạt động ra sao, và khi nào pha capture quan trọng. Việc gộp nhóm cập nhật DOM, layout thrashing, và điều gì kích hoạt reflow xuất hiện trong các vòng thiên về hiệu năng.
Các câu hỏi về async đã hội tụ về một dạng chuẩn: một đoạn code trộn setTimeout, chuỗi promise, và hàm async, nơi bạn phải đoán thứ tự xuất ra. Câu trả lời phụ thuộc vào thứ tự giữa microtask và macrotask, và nhà tuyển dụng quan tâm đến lý do hơn là bản thân trình tự. Xử lý lỗi qua ranh giới await, so sánh chuỗi promise với lồng nhau, và cho các request đua nhau bằng Promise.race hoàn thiện nốt phần này.
Cách các vòng này khác nhau giữa định dạng code, hành vi, và thiết kế hệ thống được nói tới trong trung tâm các loại phỏng vấn.
Luyện tập thế nào để áp dụng được vào vòng phỏng vấn thật?
Đọc đáp án tạo cảm giác hiệu quả nhưng gần như chẳng chuyển hoá thành gì cả. Vòng phỏng vấn diễn ra bằng lời nói, có tính giờ, và tương tác, nên việc luyện tập cũng phải như vậy. Hãy chạy các buổi luyện thử nơi bạn vừa gõ vừa thuyết minh, bị ngắt lời bằng câu hỏi truy tiếp, và chịu áp lực đồng hồ; chính áp lực đó khiến việc gợi nhớ trở nên tự động. Các bộ câu hỏi riêng cho ngôn ngữ và stack khác nằm trong trung tâm ngân hàng câu hỏi.
Một lưu ý thẳng thắn: các vòng JavaScript thật thường diễn ra trong một trình soạn thảo dùng chung với màn hình của bạn hiển thị rõ, và các bài đánh giá có giám sát sẽ ghi lại điều đó. Một trợ lý phù hợp cho việc chuẩn bị và luyện tập, không phải cho màn hình chia sẻ trực tiếp lúc đó. Còn ở nơi trợ giúp trực tiếp là chính đáng, như trong cuộc gọi điện thoại không chia sẻ màn hình hoặc các buổi tự luyện tập của riêng bạn, lớp phủ của SubcueAI vẫn ở cục bộ trên máy của bạn và không có bot nào tham gia cuộc gọi.
Câu hỏi thường gặp
Phỏng vấn JavaScript có chỉ toàn là bài LeetCode không?
Một lập trình viên junior nên tập trung vào điều gì trước tiên?
Làm sao giải thích event loop một cách đơn giản?
Phỏng vấn JavaScript có bao gồm TypeScript không?
Câu hỏi liên quan
- Tôi nên chuẩn bị những câu hỏi phỏng vấn Databricks nào?
- Tôi nên chuẩn bị những câu hỏi phỏng vấn .NET nào?
- Tôi nên chuẩn bị những câu hỏi phỏng vấn kỹ sư chất lượng nào?
- Tôi nên dự kiến những câu hỏi nào trong phỏng vấn định lượng?
- Tôi nên chuẩn bị những câu hỏi phỏng vấn Snowflake nào?
- Tôi nên chuẩn bị cho những câu hỏi phỏng vấn giáo viên nào?