Câu hỏi phỏng vấn JavaScript thường gặp

Bởi Aaron Cao · Cập nhật

Câu hỏi phỏng vấn JavaScript thường gặp
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.

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 debouncethrottle, 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.all mà 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?

Thường thì không. Các câu hỏi thuật toán chung vẫn xuất hiện, nhưng các vòng riêng cho JavaScript thiên về cơ chế ngôn ngữ như closures, event loop, và binding của this, cùng những bài triển khai thực tế nhỏ như debounce hoặc một event emitter.

Một lập trình viên junior nên tập trung vào điều gì trước tiên?

Scoping, closures, các phương thức array, và giải thích rõ ràng == so với ===. Junior trượt vòng sàng lọc vì kiến thức nền tảng lung lay nhiều hơn hẳn so với việc thiếu các chủ đề nâng cao như generator hay proxy.

Làm sao giải thích event loop một cách đơn giản?

Gói gọn trong một câu: code đồng bộ chạy trên call stack, các callback đã hoàn tất chờ trong hàng đợi, và sau mỗi lượt chạy của stack, engine sẽ xử lý hết mọi microtask như callback của promise trước khi lấy macrotask tiếp theo như một timer. Sau đó, hãy đi qua một ví dụ về thứ tự log.

Phỏng vấn JavaScript có bao gồm TypeScript không?

Ngày càng có, khi nhóm sử dụng nó. Hãy chờ đợi các câu hỏi về kiểu dữ liệu cơ bản, union, generic ở mức dùng được, và TypeScript đảm bảo hay không đảm bảo điều gì lúc runtime. Kiến thức nền tảng JavaScript vẫn là yếu tố quyết định vòng phỏng vấn này.

Câu hỏi liên quan

← Thêm về Câu hỏi phỏng vấn theo vai trò & chủ đề