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

9 câu hỏi phỏng vấn JavaScript tầm thường

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á thu hút, và hẳn 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ý cẩn mật, 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 xuất sắc, 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 đơn giản 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 Vik News 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 chuẩn xá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á bự nếu bạn chỉ tiến hành các phương trình dễ dãi ko cần đến độ chuẩn xá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 độ chuẩn xác tối đa nhưng mà 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 chấm dứt phiên làm việc với nó, bạn có thể hiển thị kết quả cho khách hàng cuối bằng cách sử dụng 1 biểu thức như này:
result = (value / 100).phệ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 độ chuẩn 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 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 phung phí rất nhiều bit, nhưng mà nó khiến cho việc dịch sang chuỗi nhưng mà ta có thể đọc được đơn giản hơn nhiều so với giai đ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 lúc đầu, nếu phần mềm của bạn dành đầu tiên sự chuẩn xá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 nhắc đế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 để chuyên dụng cho chế tác.
Hệ bát phân hiện tại
Hệ bát phân có ích thế hơn hệ thập lục phân trong 1 số trường hợp vì ko đề nghị 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 phần lớn 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à phần lớn 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, Vik News VN.com đã giới thiệu với các bạn 1 số vấn đề nhưng mà 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 quyết tâm đọc nhiều, làm nhiều, mày mò kĩ, Vik News 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ẻ 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]
[rule_3_plain]

[rule_2_plain] [rule_3_plain]

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

9 câu hỏi phỏng vấn JavaScript tầm thường

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á thu hút, và hẳn 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ý cẩn mật, 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 xuất sắc, 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 đơn giản 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 Vik News 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 chuẩn xá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á bự nếu bạn chỉ tiến hành các phương trình dễ dãi ko cần đến độ chuẩn xá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 độ chuẩn xác tối đa nhưng mà 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 chấm dứt phiên làm việc với nó, bạn có thể hiển thị kết quả cho khách hàng cuối bằng cách sử dụng 1 biểu thức như này:
result = (value / 100).phệ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 độ chuẩn 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 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 phung phí rất nhiều bit, nhưng mà nó khiến cho việc dịch sang chuỗi nhưng mà ta có thể đọc được đơn giản hơn nhiều so với giai đ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 lúc đầu, nếu phần mềm của bạn dành đầu tiên sự chuẩn xá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 nhắc đế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 để chuyên dụng cho chế tác.
Hệ bát phân hiện tại
Hệ bát phân có ích thế hơn hệ thập lục phân trong 1 số trường hợp vì ko đề nghị 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 phần lớn 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à phần lớn 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, Vik News VN.com đã giới thiệu với các bạn 1 số vấn đề nhưng mà 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 quyết tâm đọc nhiều, làm nhiều, mày mò kĩ, Vik News 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ẻ 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]
[rule_3_plain]

[rule_2_plain] [rule_3_plain]

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