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

JavaScript được coi là 1 tiếng nói xuất sắc cho “người mới”. 1 phần do việc sử dụng internet càng ngày càng mở mang và tăng trưởng nên những lập trình viên có bản lĩnh làm việc trên web luôn được săn đón với mức lương khá quyến rũ, và đương nhiên nếu bạn đã làm việc trên web thì chẳng thể không tính tới hoạt ngôn. Ngôn ngữ JavaScript. 1 phần nữa là JavaScript ko “làm khó” được các lập trình viên mới hay nghiệp dư vì các luật lệ chặt chẽ của nó, chả hạn bạn có thể bỏ sót dấu chấm phẩy sau câu lệnh nhưng chương trình vẫn chạy tuyệt vời. tuyệt vời, rất khác so với các tiếng nói lừng danh khác, phải ko?

Nếu đã “xiêu lòng” và có ý định tìm việc làm liên can tới tiếng nói này, kiên cố bạn sẽ cần xem lại những vấn đề sau để có thể tự tin trình bày năng lực và kiến ​​thức của mình. bản thân trước các nhà phỏng vấn. Càng nắm vững kiến ​​thức, bạn càng dễ ợt vượt qua các câu hỏi phỏng vấn, thời cơ thu được việc làm và mức lương cao tương ứng. Hãy cùng điểm qua những vấn đề thường gặp trong các cuộc phỏng vấn JavaScript qua phần tổng hợp dưới đây của Phần Mềm Portable VN.com.

Phần 1: Câu hỏi hắc búa

Cuộc phỏng vấn của bạn sẽ rất “khó nhai” nếu 1 trong những câu hỏi sau bất thần bật ra

1. Vì sao Math.max () bé hơn Math.min ()

Trên thực tiễn, lúc chạy mã Math.max() > Math.min()trị giá trả về là False, nghe ko cân đối. Tuy nhiên, nếu ko có thông số nào được chuyển, Math.min () trở về vô cựcMath.max () trở về – Vô cực. Vậy nên Math.max() < Math.min().

Quan sát đoạn mã sau:

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

Nếu -infinity hiện ra như 1 thông số của Math.min() thì kết quả trả về kiên cố sẽ là -infinity ko có vấn đề bao lăm thông số. Trong lúc, nếu thông số hiện ra dưới dạng infinity và bất cứ số nào khác, kết quả sẽ là số có trị giá ấy.

2. Vì sao các phép tính trả về kết quả sai? 0,1 + 0,2 ko bằng 0,3.

Vấn đề này liên can tới Javascript lưu trữ dữ liệu float ở dạng nhì phân xác thực tới các địa điểm thập phân. 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ả sau:

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

Hẳn nhiên đây không hề là vấn đề quá phệ nếu bạn chỉ làm các phương trình dễ dãi ko đề xuất độ xác thực cao. Tuy nhiên nó sẽ gây đau đầu nếu bạn muốn rà soát sự đồng đẳng giữa các nhân vật.

Có 1 số biện pháp cho vấn đề này:

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

Sử dụng lúc bạn biết độ xác thực tối đa nhưng bạn cần, số chữ số sau dấu phẩy được cố định.

Thí dụ: nếu bạn đang giao dịch với 1 đơn vị tiền tệ, hãy nhập 1 số nguyên để lưu trữ trị giá, thay vì $ 4,99, vui lòng nhập 499 và tiến hành các phép tính trên con số này. Sau lúc xong xuôi phiên của bạn với nó, bạn có thể hiển thị kết quả cho người mua cuối bằng cách sử dụng 1 biểu thức như sau:

result = (value / 100).bựFixed(2)

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

Số thập phân được mã hóa nhì phân – Số thập phân được mã hóa nhì phân

Nếu độ xác thự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 Số thập phân được mã hóa nhì phân (BCD) điều này bằng cách truy cập thư viện BCD ngay trong JavaScript. Mỗi trị giá thập phân được lưu trữ biệt lập trong 1 byte đơn (8 bit). Điều này rõ ràng là hoang toàng rất nhiều bit, nhưng mà nó khiến cho việc dịch sang 1 chuỗi có thể đọc được dễ ợt hơn nhiều so với biến đổi từ nhì phân sang thập phân truyền thống. Nó cũng có thể không hề là cao cấp nhất, vì 1 byte có thể lưu trữ đến 16 trị giá không giống nhau khi mà hệ thống chỉ sử dụng các trị giá 0-9. Vì thế, như đã nói ở phần đầu, nếu phần mềm của bạn dành đầu tiên độ xác thực thì hãy sử dụng biện pháp này, nó rất đáng để đánh đổi 1 chút.

3. Vì sao 018 trừ 017 bằng 3?

018 - 017 trở về 3 là kết quả của 1 biến đổi kiểu yên lặng. Trong trường hợp này chúng ta đang nói về số bát phân.

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

Bạn có thể nghe và sử dụng rất nhiều hệ thống số nhì phân (cơ số 2) và hệ thập lục phân (cơ số 16) trong máy tính, nhưng mà bạn có thể nghe thấy rất ít về hệ thống số bát phân (cơ số 8). Hệ thống này cũng có 1 địa điểm nổi trội trong lịch sử máy tính. Trong những 5 1950 và 1960, hệ bát phân được sử dụng cho các chữ viết tắt nhì phân, giúp cắt giảm chi tiêu nguyên liệu trong các hệ thống đắt tiền để chế tác.

Hệ bát phân hiện nay

Hệ bát phân hữu ích thế hơn hệ thập lục phân trong 1 số trường hợp vì nó ko đề xuất bất cứ trình diễn chữ số nào (sử dụng 0-7 thay vì 0-F).

Thí dụ khai báo cho hàm sumArray () ở trên.

const sumArray = array => { return array.reduce((x, y) => x + y) };

9. Kế thừa dựa trên nguyên mẫu (Prototype-Based Inheritance) là gì?

Có 1 số kiểu lập trình hướng nhân vật không giống nhau và JavaScript được sử dụng là Kế thừa dựa trên nguyên mẫu. Hệ thống cho phép hành vi kế thừa phê duyệt việc sử dụng các nhân vật hiện có hoạt động như nguyên mẫu.

Xem xét, ngay cả lúc bạn chưa nghe nói về nguyên mẫu, bạn kiên cố đã gặp hệ thống nguyên mẫu phê duyệt việc sử dụng các cách thức tích hợp sẵn.

Thí dụ: các hàm được sử dụng để thao tác với mảng như map, less, splice… Là tất cả các phương thức của nhân vật Array.prototype. Trên thực tiễn, mọi trường hợp của 1 mảng (được xác định bằng dấu ngoắc vuông) [] hoặc dùng Array()) tất cả đều kế thừa từ Array.prototype, ấy là lý do vì sao các phương thức như map, reducesplice mặc định có sẵn.

Điều gần giống cũng xảy ra với gần như mọi nhân vật dựng sẵn khác, chả hạn như chuỗi và boolean (không kể). Infinity, NaN, nullundefined ko có tính chất hoặc phương thức).

Ở cuối chuỗi nguyên mẫu, chúng ta sẽ tìm thấy Object.prototype và gần như mọi nhân vật trong JavaScript đều là 1 tỉ dụ của Object.prototype. Thí dụ Array.prototypeString.prototype cả 2 tính chất và phương thức kế thừa từ Object.prototype.

Để thêm tính chất và phương thức vào 1 nhân vật bằng cú pháp nguyên mẫu, chỉ cần khởi tạo nhân vật dưới dạng 1 hàm và sử dụng nguyên mẫu từ khóa để thêm tính chất và phương thức:

function Person() {};
Person.prototype.forename = "John";
Person.prototype.surname = "Smith";

Trong bài viết này, Phần Mềm Portable VN.com đã giới thiệu tới các bạn 1 số câu hỏi nhưng nhà phỏng vấn thường hỏi để rà soát 1 nhà tăng trưởng JavaScript. Các câu hỏi phỏng vấn thực tiễn có thể không giống nhau, nhưng mà những vấn đề căn bản sẽ giống nhau và đều quay quanh những nội dung này. Nếu bạn chẳng thể giải đáp hết các câu hỏi, đừng lo âu, hãy nỗ lực đọc nhiều, làm nhiều, mày mò thật kỹ, Phần Mềm Portable VN kiên cố bạn sẽ làm tốt.

Nếu bạn có bất cứ câu hỏi thú vị nào liên can tới bài viết: Phỏng vấn nhà tăng trưởng JavaScript, hãy san sớt chúng trong phần bình luận, nó sẽ giúp ích cho nhiều người khác.

Cảm ơn bạn đã theo dõi bài viết này. Chúc may mắn!


 

Thông tin thêm

9 câu hỏi phỏng vấn JavaScript bình thường

[rule_3_plain]

JavaScript được coi là 1 tiếng nói xuất sắc dành cho các “newbie”. 1 phần do việc sử dụng internet đang càng ngày càng mở mang và tăng trưởng, lập trình viên có bản lĩnh làm về web luôn được săn đón với mức lương khá quyến rũ, và đương nhiên nếu đã làm web thì chẳng thể ko nhắc đến tiếng nói JavaScript. 1 phần khác là JavaScript không phải “làm khó” các lập trình viên ko chuyên hay mới vào nghề bởi những nguyên lý ngặt nghèo, tỉ dụ bạn có thể bỏ qua 1 dấu chấm phẩy sau câu lệnh thì chương trình vẫn chạy 1 cách tuyệt vời, rất khác với các tiếng nói lừng danh khác phải ko nào?

Nếu đã lỡ “xiêu lòng” và có ý định tìm 1 công tác nào ấy có liên can tới tiếng nói này, bạn kiên cố sẽ cần xem lại các vấn đề sau đây để có thể tự tin trình bày năng lực và tri thức của mình trước các nhà phỏng vấn. Càng nắm vững tri thức, vượt qua được các câu hỏi phỏng vấn dễ ợt bao lăm thì thời cơ 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 Phần Mềm Portable 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 nom dòm sẽ “khó nhai” nếu 1 trong những câu hỏi sau đây hiện ra bất thần
1. Vì sao Math.max() lại bé hơn Math.min()
Trên thực tiễn, lúc chạy code Math.max() > Math.min(), trị giá trả về là False, nghe có vẻ ko cân đối. Tuy nhiên, nếu ko có thông số nào được truyền vào, Math.min() trả về Infinity và Math.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 hiện ra là thông số của Math.min() thì kết quả trả về kiên cố sẽ là -infinity dù có bao lăm thông số. Trong lúc ấy, nếu thông số hiện ra là infinity và 1 số nào khác, kết quả trả về sẽ là số có trị giá ấy.
2. Vì sao các phép tính lại trả về kết quả sai? 0.1 + 0.2 ko bằng 0.3.
Vấn đề này liên can tới việc Javascript lưu trữ dữ liệu float ở dạng nhì phân xác thực đến 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
Hẳn nhiên điều này sẽ ko gây ra vấn đề gì quá phệ nếu bạn chỉ tiến hành các phương trình dễ dãi ko cần đến độ xác thực cao. Tuy nhiên nó sẽ gây đau đầu nếu bạn muốn rà soát tính bằng nhau giữa các nhân vật.
Có 1 vài biện pháp cho vấn đề như này:
Fixed Point – Điểm cố định
Sử dụng lúc bạn biết độ xác thực tối đa nhưng mình cần, số chữ số sau dấu phẩy được cố định.
Thí dụ bạn đang giao dịch với đơn vị tiền tệ, hãy nhập số nguyên để lưu trữ trị giá, thay vì nhập $4.99, bạn hãy nhập 499 và tiến hành các tính toán trên số này. Sau lúc xong xuôi phiên làm việc với nó, bạn có thể hiển thị kết quả cho người mua cuối bằng cách sử dụng 1 biểu thức như này:
result = (value / 100).bựFixed(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 độ xác thự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 trị giá thập phân được lưu trữ riêng trong 1 byte đơn (8 bit). Điều này rõ ràng hoang toàng rất nhiều bit, nhưng mà nó khiến cho việc dịch sang chuỗi nhưng ta có thể đọc được dễ ợt hơn nhiều so với công đoạn biến đổi nhì phân sang thập phân truyền thống. Nó cũng có thể không hề là ưu việt nhất, vì 1 byte có thể lưu trữ đến 16 trị giá biệt lập khi mà hệ thống chỉ sử dụng các trị giá 0-9. Vậy nên như khẳng định thuở đầu, nếu phần mềm của bạn dành đầu tiên sự xác thực thì hãy sử dụng biện pháp này, nó cũng đáng để đánh đổi 1 chút.
3. Vì sao 018 trừ 017 bằng 3?
018 – 017 trả về 3 là kết quả của phép biến đổi ngầm định (silent type conversion). Trong trường hợp này ta đang nói đến tới 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 mà có thể lại ít nghe đến hệ bát phân (cơ số 8) dù hệ thống này cũng có 1 địa điểm nổi trội trong lịch sử máy tính. Vào khoảng những 5 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 tiêu nguyên liệu trong các hệ thống đắt tiền để dùng cho chế tác.
Hệ bát phân hiện nay
Hệ bát phân hữu ích thế hơn hệ thập lục phân trong 1 số trường hợp vì ko đề xuất bất cứ chữ đại diện cho số nào (sử dụng 0-7 thay vì 0-F).
Thí 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ó 1 số kiểu lập trình hướng nhân vật không giống nhau và JavaScript sử dụng là Kế thừa theo chế độ prototype-based. Hệ thống cho phép hành vi kế thừa phê duyệt việc sử dụng các nhân vật hiện có nhập vai trò là prototype.
Xem xét, ngay cả lúc bạn chưa nghe gì về prototype, bạn kiên cố cũng đã gặp phải hệ thống prototype qua việc sử dụng các phương thức in-built.
Thí 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 nhân vật Array.prototype. Trong thực tiễn, mọi nhân vật 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, ấy là lý do vì sao các phương thức như map, reduce và splice mặc định có sẵn.
Điều này cũng gần giống với gần như mọi nhân vật built-in khác, tỉ dụ như string và boolean (trừ Infinity, NaN, null và undefined ko có tính chất hay phương thức).
Ở cuối chuỗi prototype, ta sẽ tìm thấy Object.prototype và gần như mọi nhân vật trong JavaScript đều là 1 trình bày của Object.prototype. Thí dụ Array.prototype và String.prototype đều kế thừa tính chất và phương thức từ Object.prototype.
Để thêm các tính chất và phương thức cho 1 nhân vật bằng cú pháp prototype, bạn chỉ cần khởi tạo nhân vật dưới dạng hàm và sử dụng từ khóa prototype để thêm tính chất và phương thức:
function Person() {};
Person.prototype.forename = “John”;
Person.prototype.surname = “Smith”;
Trong bài viết này, Phần Mềm Portable VN.com đã giới thiệu với các bạn 1 số vấn đề nhưng nhà phỏng vấn thường hỏi để rà soát 1 JavaScript developer. Câu hỏi lúc phỏng vấn thực tiễn có thể sẽ dị biệt nhưng mà về căn bản các vấn đề sẽ gần giống và quay quanh các nội dung này. Nếu chưa thể giải đáp được hết các câu hỏi thì cũng đừng lo âu, hãy nỗ lực đọc nhiều, làm nhiều, mày mò kĩ, Phần Mềm Portable VN kiên cố bạn có thể làm tốt.
Nếu bạn có bất kỳ câu hỏi thú vị nào liên can tới nội dung bài viết: phỏng vấn JavaScript developer, hãy san sớt chúng ở phần comment nhé, điều này sẽ giúp ích được cho rất nhiều người khác đó.
Cám ơn bạn đã theo dõi bài viết. Chúc bạn thành công!

[rule_2_plain]

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


  • Tổng hợp: Phần Mềm Portable
  • Nguồn: https://bigdata-vn.com/9-cau-hoi-phong-van-javascript-pho-bien/
Back to top button