JavaScript được coi là một ngôn ngữ tuyệt vời dành cho các “newbie”. Một phần do việc sử dụng internet đang ngày càng mở rộng và phát triển, lập trình viên có khả năng làm về web luôn được săn đón với mức lương khá hấp dẫn, và tất nhiên nếu đã làm web thì không thể không nhắc tới ngôn ngữ JavaScript. Một phần khác là JavaScript không hề “làm khó” các lập trình viên không chuyên hay mới vào nghề bởi những nguyên tắc nghiêm ngặt, ví dụ bạn có thể bỏ lỡ một dấu chấm phẩy sau câu lệnh thì chương trình vẫn chạy một cách hoàn hảo, rất khác với các ngôn ngữ nổi tiếng khác phải không nào?
Nếu đã lỡ “phải lòng” và có ý định tìm một công việc nào đó có liên quan đến ngôn ngữ này, bạn chắc chắn sẽ cần xem lại các vấn đề sau đây để có thể tự tin thể hiện năng lực và kiến thức của mình trước các nhà tuyển dụng. Càng nắm vững kiến thức, vượt qua được các câu hỏi phỏng vấn dễ dàng bao nhiêu thì cơ hội bạn được nhận và mức lương tốt cũng sẽ cao tương ứng. Chúng ta cùng xem thử các vấn đề thường gặp phải trong các bài phỏng vấn JavaScript qua bài tổng hợp của WebGiaibaitap.com dưới đây nhé.
Có nhiều mô hình lập trình khác nhau, nhưng trong điện toán đương đại, hai trong số các phong cách phổ biến nhất là Lập trình hàm (FP) và Lập trình hướng đối tượng (OOP) – JavaScript có thể làm cả hai.
a. Lập trình hướng đối tượng
OOP dựa trên khái niệm “đối tượng”. Đây là các cấu trúc dữ liệu chứa các trường dữ liệu được biết đến trong JavaScript là “thuộc tính” – và các thủ tục được gọi là “phương thức”.
Một số đối tượng được tích hợp sẵn trong JavaScript có thể được kể đến như Math
(sử dụng các phương thức như random
, max
, sin
…), JSON
(sử dụng để phân tích dữ liệu JSON
) hay các loại dữ liệu như String
, Array
, Number
và Boolean
.
Về cơ bản, bất cứ khi nào bạn sử dụng các phương thức tích hợp sẵn, nguyên mẫu (prototype) hoặc các lớp (class) thì là bạn đang sử dụng lập trình hướng đối tượng
b. Lập trình hàm
Có rất nhiều mô hình lập trình hàm được tích hợp trong JavaScript như hàm higher-order
. Đây là hàm có thể lấy hàm khác làm đối số.
Ngoài ra, JavaScript còn có một số hàm làm việc với mảng (array) như map()
, reduce()
, filter()
… tất cả đều là hàm higher-order
. Điều này có nghĩa là bạn có thể xâu chuỗi chúng lại với nhau để nhanh chóng thực hiện các cách thức trong một mảng.
Mặc dù JavaScript ban đầu có một số vấn đề với khả năng biến đổi, nhưng các phiên bản mới hơn của tiêu chuẩn ECMAScript cung cấp các bản sửa lỗi. Thay vì sử dụng từ khóa var
để xác định biến, bạn có thể dùng const
và let
. Từ khóa đầu tiên cho phép bạn xác định các hằng số làm tên ngụ ý. Từ khóa thứ hai let
, giới hạn phạm vi của một biến số trong hàm mà nó khai báo.
8. Sự khác biệt giữa Imperative programming và Declarative programming
Bạn có thể dựa vào sự khác biệt giữa OOP và FP để trả lời câu hỏi về imperative programming (lập trình mệnh lệnh) và declarative programming (lập trình khai báo) này.
Đây là những thuật ngữ mô tả các đặc điểm chung giữa nhiều mô hình lập trình khác nhau. FP là một ví dụ về lập trình khai báo, trong khi OOP là một ví dụ về lập trình mệnh lệnh.
Có thể hình dung là với Imperative Programming thì bạn quan tâm tới việc làm thế nào để giải quyết bài toán, đi kĩ càng từng bước theo cách thiết yếu nhất, đặc trưng là các vòng lặp for
, while
, câu lệnh if
, switch
…
const sumArray = array => {
let result = 0;
for (let i = 0; i < array.length; i++) {
result += array[i]
};
return result;
}
Ngược lại, Declarative Programming quan tâm tới đầu vào và đầu ra của bài toán. Điều này thường dẫn đến code ngắn gọn hơn, nhưng chỉ ở một quy mô nhất định, tuy nhiên nó có thể trở nên khó gỡ lỗi hơn vì không tường minh.
Ví dụ khai báo cho hàm sumArray() ở trên.
const sumArray = array => { return array.reduce((x, y) => x + y) };
9. Kế thừa kiểu prototype-based (Prototype-Based Inheritance) là gì?
Có một số kiểu lập trình hướng đối tượng khác nhau và JavaScript sử dụng là Kế thừa theo cơ chế prototype-based. Hệ thống cho phép hành vi kế thừa thông qua việc sử dụng các đối tượng hiện có đóng vai trò là prototype.
Lưu ý, ngay cả khi bạn chưa nghe gì về prototype, bạn chắc chắn cũng đã gặp phải hệ thống prototype qua việc sử dụng các phương thức in-built.
Ví dụ, các hàm được sử dụng để thao tác với mảng như map
, less
, splice
… đều là phương thức của đối tượng Array.prototype
. Trong thực tế, mọi đối tượng instance của mảng (được xác định bằng dấu ngoặc vuông []
hoặc sử dụng Array()
) đều kế thừa từ Array.prototype, đó là lý do tại sao các phương thức như map
, reduce
và splice
mặc định có sẵn.
Điều này cũng tương tự với hầu hết mọi đối tượng built-in khác, ví dụ như string và boolean (trừ Infinity
, NaN
, null
và undefined
không có thuộc tính hay phương thức).
Ở cuối chuỗi prototype, ta sẽ tìm thấy Object.prototype
và hầu hết mọi đối tượng trong JavaScript đều là một thể hiện của Object.prototype
. Ví dụ Array.prototype
và String.prototype
đều kế thừa thuộc tính và phương thức từ Object.prototype
.
Để thêm các thuộc tính và phương thức cho một đối tượng bằng cú pháp prototype, bạn chỉ cần khởi tạo đối tượng dưới dạng hàm và sử dụng từ khóa prototype để thêm thuộc tính và phương thức:
function Person() {};
Person.prototype.forename = "John";
Person.prototype.surname = "Smith";
Trong bài viết này, WebGiaibaitap.com đã giới thiệu với các bạn một số vấn đề mà nhà tuyển dụng thường hỏi để kiểm tra một JavaScript developer. Câu hỏi khi phỏng vấn thực tế có thể sẽ khác biệt nhưng về cơ bản các vấn đề sẽ tương tự và xoay quanh các nội dung này. Nếu chưa thể trả lời được hết các câu hỏi thì cũng đừng lo lắng, hãy cố gắng đọc nhiều, làm nhiều, tìm hiểu kĩ, Quantrimang chắc chắn bạn có thể làm tốt.
Nếu bạn có bất cứ câu hỏi thú vị nào liên quan đến nội dung bài viết: phỏng vấn JavaScript developer, hãy chia sẻ chúng ở phần comment nhé, điều này sẽ giúp ích được cho rất nhiều người khác đấy.
Cám ơn bạn đã theo dõi bài viết. Chúc bạn thành công!