Kỹ năng phỏng vấn tuyển dụng

Bộ Câu Hỏi Phỏng Vấn Javascript Hữu Ích

Bạn có phải là một lập trình viên Javascript và chuẩn bị có một buổi phỏng vấn với nhà tuyển dụng để có được một công việc mơ ước. Vậy thì đừng bỏ qua bài viết dưới đây của Masterskills vì chúng mình sẽ mang đến cho bạn bộ câu hỏi phỏng vấn Javascript hữu ích, giúp bạn tự tin hơn trong bất kỳ buổi phỏng vấn nào sắp tới. Cùng bắt đầu nào. 

Các câu hỏi phỏng vấn Javascript và cách trả lời

Giải thích phép so sánh trong JavaScript

1. Phép so sánh bằng

Phép so sánh === (!=): Phép so sánh bằng trong Javascript tuân theo quy tắc: 

  • Nếu hai vế của phép so sánh khác kiểu dữ liệu, kết quả là false
  • Khi hai vế là kiểu Number, nếu 1 trong 2 là NaN, kết quả trả về sẽ là false. Nếu không ta phải so sánh giá trị
  • Khi hai vế là kiểu String thì ta cần so sánh nội dung, nếu nội dung giống nhau sẽ ra kết quả true, nội dung khác nhau là false
  • Khi hai vế là kiểu Boolean, nếu cùng true hoặc cùng false thì kết quả là true, còn lại sẽ ra kết quả false
  • Khi hai vế là kiểu đặc biết như undefined, null, nếu như cùng underfined hoặc cùng thì là true, còn lại là false

Phép so sánh ==(!=) cũng tuân theo các quy luật như sau:

  • Nếu hai vế có cùng kiểu dữ liệu, ta quy chúng về kiểu so sánh ===
  • Nếu khác kiểu dữ liệu:
    • Nếu một trong hai vế là Number, vế còn lại là kiểu String, ta cần phải convert String sang kiểu Number để so sánh
    • Nếu một trong hai vế là Number, vế còn lại là kiểu Boolean, ta cần phải convert Boolean sang Number để so sánh
    • Nếu một trong hai vế là String, vế còn lại là kiểu Boolean, ta cần phải chuyển cả 2 vế sang Number để so sánh
    • Nếu một trong hai vế là String, vế còn lại là kiểu Object tham chiếu, ta cần phải chuyển Object tham chiếu sang String để so sánh
    • Nếu một trong hai vế là Number, vế còn lại là kiểu Object tham chiếu, ta cần chuyển Object tham chiếu sang Number để so sánh
    • Nếu cả hai vế đều là null hoặc undefined, ở đây tính cả trường hợp một vế null, vế kia là undefined thì là true

2. Phép so sánh hơn kém

Phép so sánh hơn kém bao gồm >, <, >=, <= tuân theo các quy tắc sau: 

  • Trường hợp 1: Nếu cả 2 vế cùng kiểu
    • Cả 2 vế đều cùng kiểu Number, ta sẽ so sánh theo giá trị
    • Cả 2 vế đều cùng kiểu String, ta sẽ so sánh theo thứ tự UniCode
  • Trường hợp 2: Nếu cả 2 vế khác kiểu, ta cần tuân theo những quy tắc sau:
    • Nếu một trong hai vế là kiểu Number và ta có thể chuyển vế còn lại về kiểu Number, chuyển về kiểu Number và so sánh giá trị. Đặc biệt, nếu 1 trong 2 là kiểu NaN, kết quả là false
    • Nếu một trong hai vế là kiểu String và vế còn lại có thể chuyển về kiểu String, ta sẽ chuyển về kiểu String và thực hiện so sánh theo Unicode
    • Nếu một trong hai vế là kiểu Number, vế còn lại là kiểu String, ta sẽ chuyển kiểu String về kiểu Number và so sánh theo giá trị số
    • Nếu một trong hai vế không thể chuyển về kiểu Number/String hoặc khi chuyển trở thành giá trị NaN, kết quả là false

Callback function là gì? Cho một ví dụ đơn giản.

Callback function – hay còn gọi là hàm gọi lại – là một hàm chỉ được thực thi một khi hàm khác đã thực thi xong. 

Tham khảo:   Kỹ Năng Phỏng Vấn Của Nhà Tuyển Dụng: 8 Nghệ Thuật “Đọc Vị” Ứng Viên

Ví dụ:

function writeBlog(topic, callback) {

  alert(`Starting my ${topic} blog.`);

// then execute the callback function that was passed

  callback();

}

writeBlog(‘JS’, function() {

  alert(‘Finished my blog!’);

});

Nếu bạn chạy đoạn code trên, kết quả sẽ trả về hai thông báo. Thông báo đầu tiên là “Starting my JS blog.” và thông báo thứ hai là: “Finished my blog!”

Toán tử && để làm gì?

Toán tử trong JavaScript, có kí hiệu là && sẽ trả về giá trị true nếu cả hai toán hạng là true, ngược lại sẽ trả về false. 

câu hỏi phỏng vấn javascript
Các câu hỏi phỏng vấn Javascript và cách trả lời bạn nên học.

Primitive là gì? Nêu các primitive value trong JavaScript

Trong JavaScript có hai kiểu dữ liệu: Kiểu nguyên thủy (primitive) và object.

Kiểu nguyên thuỷ là bất biến, một kiểu nguyên thuỷ không phải là object vì vậy chúng không có các method (phương thức) riêng của mình. 

Có sáu loại nguyên thủy trong JS:

  • Boolean — true or false
  • Undefined — một biến được khai báo nhưng chưa được cung cấp giá trị
  • Null — no value
  • Symbol — một giá trị duy nhất không bằng bất kỳ giá trị nào khác (được giới thiệu trong ES6)
  • Number — integers, floats..
  • String — tất cả những gì bên trong dấu “ ”

Toán tử || dùng để làm gì trong JavaScript

Toán tử || trả về true nếu 1 trong 2 số hạng là true : a || b.

Nêu sự khác biệt giữa undefined và null

Undefined nghĩa là không xác định. Giá trị của biến là underfined trong javascript khi bạn khai báo một biến nhưng chưa gán giá trị cho nó.

Null nghĩa là giá trị rỗng hoặc giá trị không tồn tại, một biến null là khi chúng không có giá trị.

Sự khác biệt giữa null và undefined: undefind có kiểu giá trị là undefined nhưng null lại là 1 object.

Hãy cho biết Falsy value và Truthy value là gì? Có các falsy value nào trong JavaScript?

Falsy values là giá trị trong Javascript mà khi ta ép kiểu về Boolean sẽ cho ra giá trị false. 

Tương tự, truthy values là những giá trị mà khi ta ép kiểu về Boolean sẽ cho ra giá trị true.

Có 7 falsy values trong JavaScript:

  • number 0
  • keyword undefined
  • BigInt 0n
  • number NaN
  • keyword null
  • boolean false
  • empty string “” (tương ứng với “ hay ‘’)

IIFEs (Immediately Invoked Function Expressions) là gì?

Một IIFEs – viết tắt của Immediately Invoked Function Express – được thực thi ngay sau khi nó được tạo.

Làm cách nào để bạn kiểm tra một số có phải là số nguyên hay không?

Để kiểm tra một số có phải số nguyên hay không, cách nhanh chóng là sử dụng hàm issInteger. Tuy nhiên cách này sẽ không cho bạn biết số đó là số âm hay số dương. 

Cách làm khác là lấy số đo chia số cho 1 và xem có phần dư hay không. 

Phân biệt giữa anonymous và named functions?

Anonymous function – hay còn được biết đến là hàm ẩn danh – là hàm không có tên và được tạo ra trong thời gian ứng dụng đang chạy. 

Named function – hay còn gọi là hàm được đặt tên – được sử dụng để gỡ lỗi và tìm kiếm những hàm gây ra lỗi.

Ba giai đoạn của sự lan truyền sự kiện (event propagation) là gì?

Ba giai đoạn của sự lan truyền sự kiện là propagation, capturing sau đó là bubbling. 

Đầu tiên, propagation (lan truyền) xảy ra với việc capturing trước. Trong giai đoạn capturing, các sự kiện sẽ truyền từ Window qua DOM tree cho đến khi nó đến đích. Sau đó, phần tử mục tiêu được truy cập và (trong đoạn code này có thể là event.target), giai đoạn bubbling xảy ra.

câu hỏi phỏng vấn javascript thường gặp
Có rất nhiều kiến thức về Javascript cần tham khảo trước phỏng vấn.

Kết quả của đoạn code sau là gì?

Kết quả của đoạn code sau trả về false. 

Tham khảo:   Các Câu Hỏi Phỏng Vấn Cho Người Có Kinh Nghiệm Thường Gặp Nhất

Từ khóa “this” hoạt động như thế nào? Bạn hãy cho một ví dụ

Từ khóa this được dùng để đại diện cho một đối tượng. Cụ thể, đối tượng ở đây là đối tượng đang thực thi cose JS hiện tại. 

Ví dụ: 

function state() {

  console.log(this.name);

}

var name = “NY”;

var obj1 = { name: “IN”, state: state };

var obj2 = { name: “CA”, state: state };

state();           // “NY”

obj1.state();      // “IN”

obj2.state();      // “CA”

Tại sao Math.max() nhỏ hơn Math.min()?

Math.min () trả về infinity và Math.max () trả về -infinity nếu không có đối số nào được đưa ra. Đây là một phần của đặc tả cho các phương thức min () và max (), và nó có logic đằng sau. 

Ví dụ: 

Math.min(1) 

// 1

Math.min(1, infinity)

// 1

Math.min(1, -infinity)

// -infinity

Nếu -infinity là đối số mặc định của Math.min (), thì mọi kết quả sẽ là -infinity, điều này là vô dụng. Trong khi đó, nếu đối số mặc định là infinity, thì việc thêm bất kỳ đối số nào khác, kết quả sẽ trả về số đó. Đó chính là hành vi mà chúng ta muốn.

Tại sao 018 Trừ 017 lại bằng 3? 

Kết quả của việc chuyển đổi kiểu cho ra kết quả 018 – 017 trả về 3. Đây là một trường hợp của số bát phân (octal numbers). 

Trong Javascript, tiền tố 0 sẽ chuyển đổi bất kỳ số nào đứng sau thành số bát phân. Tuy nhiên, số 8 không được sử dụng trong hệ bát phân nên với các số có chưa số 8, chúng sẽ trở về số thập phân thông thường. 

Do đó 018 – 17 tương đương với 18 (số thường) – 15 (bát phân của 017) và trả về kết quả là 3. 

AJAX là gì? Những ưu điểm và nhược điểm của nó là gì?

AJAX – Asynchronous JavaScript And XML. AJAX hoạt động như sau: một yêu cầu XHR được tạo bởi Javascript sẽ được gửi đến máy chủ mỗi khi một sự kiện xảy ra trên trang web. Máy chủ sẽ xử xử lý yêu cầu và trả về phản hồi cho trang web và các hành động cần thiếu được thực hiện. 

Ưu điểm của AJAX

  • Cập nhật một trang web mà không thực sự cần phải tải lại nó
  • Yêu cầu sau đó nhận dữ liệu từ máy chủ sau khi trang đã tải xong
  • Gửi dữ liệu cho máy chủ ở background

Nhược điểm của AJAX:

  • AJAX sẽ không thể hoạt động trong trường hợp JavaScript disabled
  • AJAX có thể làm cho trang web của bạn dễ bị tấn công bởi các mối đe dọa bảo mật vì AJAX làm tăng kích thước mã
  • Khiến button quay lại của trình duyệt trở nên vô dụng

Function Expression khác thế nào với Function Declaration?

Một Function declaration, hay còn biết đến là khai báo hàm, thường sử dụng từ khóa function, tên của hàm sẽ theo sau. 

Ngược lại, một Function Expression, hay còn gọi là biểu thức hàm, bắt đầu bằng var, const hoặc let, theo sau là tên của hàm và toán tử gán =. 

Hoisting là gì?

Hoisting là việc JavaScript di chuyển khai báo lên đầu mọi scope (phạm vi). Đây là một khía cạnh không xác định của JavaScript, vậy nên để tránh tạo ra lỗi, bạn nên khai báo tất cả các biến ở đầu mọi scope. 

Hoisting chỉ đơn giản là việc bạn có thể sử dụng một biến trước khi nó được khai báo.

Bạn hãy phân tích biết sự khác nhau giữa bind, call và apply?

  • .bind () được dùng để gọi một hàm ở ngữ cảnh nhất định. Cần chú ý rằng khi sử dụng .bind () sẽ không gọi hàm, chỉ sửa đổi ngữ cảnh.
  • .call () và .apply () ngược lại sẽ gọi hàm ngay lập tức, đồng thời sửa đổi ngữ cảnh. 
Tham khảo:   Top Câu Hỏi Phỏng Vấn Ban Truyền Thông Thường Gặp Và Cách Trả Lời Hiệu Quả

Sự khác biệt giữa call() và apply():

  • .call () chấp nhận một danh sách giá trị trở thành đối số của nó
  • .apply () chỉ chấp nhận một mảng làm đối số của nó

Cách sử dụng: Ta sử dụng .bind () khi muốn sửa đổi ngữ cảnh tuy nhiên bạn lại muốn gọi hàm sau này. Sử dụng .call () hoặc .apply () khi bạn muốn sửa đổi ngữ cảnh và gọi hàm ngay lập tức.

Điều gì sẽ xảy ra nếu bạn xác định một biến mà không có từ khóa?

Về mặt kỹ thuật, nếu xác định một biến mà không có từ khoá sẽ gây rò rỉ bộ nhớ.

phỏng vấn javascript
Phỏng vấn Javascript không còn khó nếu bạn học bộ câu hỏi này.

Promise có thể có ở trạng thái nào?

Promise có thể ở một trong ba trạng thái sau:

  • Pending (đang chờ xử lý): trạng thái ban đầu của promise
  • Fulfilled (hoàn thành): được cập nhật khi promise đã được thực hiện thành công.
  • Rejected (bị từ chối): khi promise đã bị từ chối, có lỗi.

Nêu ưu điểm và nhược điểm của việc sử dụng Promises

Ưu điểm của việc sử dụng Promises:

  • Không giống các lệnh gọi lại, Promises có thể kết hợp, vì vậy có thể tránh được những địa chỉ gọi lại
  • Khi nhiều phản hồi gửi về, bạn có thể dễ dàng thực thi mã với Promises.all
  • Với sự trợ giúp của Promise.race, bạn có thể đợi kết quả từ Promises đòng thời đang chờ xử lý
  • Đồng bộ các mã viết không đồng bộ nếu kết hợp Promises vpwos async/await. 

Nhược điểm:a

  • Chỉ có thể hoạt động trên một giá trị duy nhất/thời điểm
  • Không có sẵn ở những trình duyệt cũ
  • Chậm hơn so với việc dùng câu lệnh gọi lại, gây ảnh hưởng đến hiệu suất 

Lời kết 

Trên đây bạn đã cùng Masterskills tìm hiểu về 20+ câu hỏi phỏng vấn Javascript phổ biến nhất hiện nay. Chúc bạn sẽ tràn đầy tự tin trong buổi phỏng vấn sắp tới của mình và thành công nhận được công việc mơ ước nhé. 

  Viện Đào Tạo Kỹ Năng Masterskills chuyên Đào Tạo tại Doanh Nghiệp (In-house) trên Toàn Quốc  
G

0903966729

1
Hỗ trợ bạn qua Zalo