Vĩnh Long 24h

9 câu hỏi phỏng vấn JavaScript phổ biến – Vĩnh Long Online

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?

9 câu hỏi phỏng vấn JavaScript phổ biến

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 Big Data VN.com dưới đây nhé.

Phần 1: Câu hỏi khó nhằn

Cuộc phỏng vấn của bạn xem chừng sẽ “khó nhai” nếu một trong những câu hỏi sau đây xuất hiện bất ngờ

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

Trên thực tế, khi chạy code Math.max() > Math.min(), giá trị trả về là False, nghe có vẻ không hợp lý. Tuy nhiên, nếu không có tham số nào được truyền vào, Math.min() trả về InfinityMath.max() trả về -Infinity. Vậy nên Math.max() < Math.min().

Theo dõi đoạn code sau đây:

Math.min(1)
// 1
Math.min(1, infinity)
// 1
Math.min(1, -infinity)
// -infinity

Nếu -infinity xuất hiện là tham số của Math.min() thì kết quả trả về chắc chắn sẽ là -infinity dù có bao nhiêu tham số. Trong khi đó, nếu tham số xuất hiện là infinity và một số nào khác, kết quả trả về sẽ là số có giá trị đó.

Tham khảo thêm  Khi Con Là Nhà (Khi Con Là Nhà OST) Lời bài hát - Khắc Việt

2. Tại sao các phép tính lại trả về kết quả sai? 0.1 + 0.2 không bằng 0.3.

Vấn đề này liên quan đến việc Javascript lưu trữ dữ liệu float ở dạng nhị phân chính xác tới từng con số sau dấu phẩy. Nếu bạn nhập chương trình sau vào bảng điều khiển, bạn sẽ thấy kết quả như sau:

0.1 + 0.2
// 0.30000000000000004
0.1 + 0.2 - 0.2
// 0.10000000000000003
0.1 + 0.7
// 0.7999999999999999

Tất nhiên điều này sẽ không gây ra vấn đề gì quá lớn nếu bạn chỉ thực hiện các phương trình đơn giản không cần tới độ chính xác cao. Tuy nhiên nó sẽ gây đau đầu nếu bạn muốn kiểm tra tính bằng nhau giữa các đối tượng.

Có một vài giải pháp cho vấn đề như này:

Fixed Point – Điểm cố định

Sử dụng khi bạn biết độ chính xác tối đa mà mình cần, số chữ số sau dấu phẩy được cố định.

Ví dụ bạn đang giao dịch với đơn vị tiền tệ, hãy nhập số nguyên để lưu trữ giá trị, thay vì nhập $4.99, bạn hãy nhập 499 và thực hiện các tính toán trên số này. Sau khi kết thúc phiên làm việc với nó, bạn có thể hiển thị kết quả cho người dùng cuối bằng cách sử dụng một biểu thức như này:

result = (value / 100).toFixed(2)

để trả về chuỗi kết quả như ý muốn.

Binary Coded Decimal – Số thập phân mã hóa nhị phân

Nếu độ chính xác trong phương trình của bạn là rất quan trọng thì hãy sử dụng định dạng Binary Coded Decimals (BCD) này bằng cách truy cập thư viện BCD ngay trong JavaScript. Mỗi giá trị thập phân được lưu trữ riêng trong một byte đơn (8 bit). Điều này rõ ràng lãng phí rất nhiều bit, nhưng nó làm cho việc dịch sang chuỗi mà ta có thể đọc được dễ dàng hơn nhiều so với quá trình chuyển đổi nhị phân sang thập phân truyền thống. Nó cũng có thể không phải là ưu việt nhất, vì 1 byte có thể lưu trữ tới 16 giá trị riêng biệt trong khi hệ thống chỉ sử dụng các giá trị 0-9. Vậy nên như khẳng định ban đầu, nếu ứng dụng của bạn ưu tiên sự chính xác thì hãy sử dụng giải pháp này, nó cũng đáng để đánh đổi một chút.

Tham khảo thêm  Người Việt Nam Lời bài hát - Đan Trường

3. Tại sao 018 trừ 017 bằng 3?

018 - 017 trả về 3 là kết quả của phép chuyển đổi ngầm định (silent type conversion). Trong trường hợp này ta đang đề cập đến số bát phân – octal number.

Giới thiệu nhanh về số bát phân

Bạn có thể nghe và sử dụng nhiều với các hệ thống số nhị phân (cơ số 2) và hệ thập lục phân (cơ số 16) trong điện toán, nhưng có thể lại ít nghe tới hệ bát phân (cơ số 8) dù hệ thống này cũng có một vị trí nổi bật trong lịch sử máy tính. Vào khoảng những năm 1950, 1960, hệ bát phân được sử dụng để viết tắt nhị phân, giúp cắt giảm chi phí vật liệu trong các hệ thống đắt tiền để phục vụ chế tạo.

Hệ bát phân ngày nay

Hệ bát phân có lợi thế hơn hệ thập lục phân trong một số trường hợp vì không yêu cầu bất kỳ chữ đại diện cho số nào (sử dụng 0-7 thay vì 0-F).

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.

Tham khảo thêm  Trị rôm sảy bằng lá kinh giới hiệu quả với 4 BƯỚC ĐƠN GIẢN

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, reducesplice 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, nullundefined 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.prototypeString.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, Big Data VN.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ĩ, Big Data VN 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!

Rate this post
You cannot copy content of this page