Phần 2: Câu hỏi thường gặp về JavaScript (6–9) hàng đầu
JavaScript là ngôn ngữ lập trình đã trở thành một trong những kỹ năng được yêu cầu nhiều nhất trong các yêu cầu công việc. Đó là một ngôn ngữ protean được sử dụng để phát triển web, phát triển ứng dụng dành cho thiết bị di động, lập trình phía máy chủ, v.v.
Trong bài đăng trên blog này, chúng tôi sẽ đề cập đến 6–9 câu hỏi phỏng vấn JavaScript phổ biến tiếp theo thường được hỏi trong các cuộc phỏng vấn chuyên ngành.
Bạn có thể tham khảo phần 5 câu hỏi đầu tiên tại đây
Phần 1: Top (1-5) câu hỏi JavaScript phổ biến
Câu hỏi 6: Sự khác biệt giữa mã đồng bộ và mã không đồng bộ là gì?
Mã đồng bộ là loại mã được thực thi theo thứ tự tuần tự, mỗi lần một dòng. Nói cách khác, dòng mã tiếp theo sẽ không thực thi cho đến khi dòng hiện tại thực thi xong.
Loại mã này thường được sử dụng trong các ứng dụng đơn giản hơn, nhỏ hơn, nơi ứng dụng không cần chạy nhiều tác vụ cùng một lúc. Ví dụ: xem xét mã đồng bộ sau:
function printNumbers() {
console.log(1);
console.log(2);
console.log(3);
}
printNumbers();
Mặt khác, mã không đồng bộ cho phép nhiều chức năng chạy đồng thời mà không cần đợi một chức năng kết thúc trước khi bắt đầu chức năng tiếp theo.
Loại mã này thường được sử dụng trong các ứng dụng lớn hơn, phức tạp hơn, nơi có nhiều tác vụ cần được thực hiện cùng một lúc. Ví dụ: xem xét mã không đồng bộ sau:
async function printNumbers() {
console.log(1);
setTimeout(() => {
console.log(2);
}, 1000);
console.log(3);
}
printNumbers();
Sự khác biệt chính giữa mã đồng bộ và mã không đồng bộ là thứ tự mã được thực thi và tác động đến khả năng thực hiện các tác vụ khác của ứng dụng trong khi chờ một tác vụ cụ thể hoàn thành.
Mã đồng bộ sẽ chặn việc thực thi phần còn lại của mã cho đến khi tác vụ hiện tại kết thúc, trong khi mã không đồng bộ cho phép nhiều tác vụ chạy đồng thời, nâng cao hiệu quả tổng thể của ứng dụng.
Câu hỏi 7: Đâu là sự khác biệt giữa pass-by-value và pass-by-reference trong JavaScript?
Trong JavaScript, có hai cách để truyền đối số cho một hàm: truyền theo giá trị và truyền theo tham chiếu.
Truyền theo giá trị có nghĩa là khi một biến được truyền dưới dạng đối số cho hàm, một bản sao giá trị của biến đó sẽ được tạo và truyền cho hàm.
Mọi thay đổi đối với đối số bên trong hàm sẽ không ảnh hưởng đến biến ban đầu bên ngoài hàm. Ví dụ:
let x = 5;
function changeValue(y) {
y = 10;
}
changeValue(x);
console.log(x); // Output: 5
Mặt khác, truyền theo tham chiếu có nghĩa là khi một đối tượng được truyền dưới dạng đối số cho một hàm, thì một tham chiếu đến đối tượng sẽ được truyền chứ không phải bản sao giá trị của nó.
Điều này có nghĩa là bất kỳ thay đổi nào được thực hiện đối với đối tượng bên trong hàm sẽ ảnh hưởng đến đối tượng ban đầu bên ngoài hàm. Ví dụ:
let obj = {value: 5};
function changeValue(y) {
y.value = 10;
}
changeValue(obj);
console.log(obj.value); // Output: 10
Điều quan trọng là phải hiểu sự khác biệt giữa chuyển theo giá trị và chuyển theo tham chiếu trong JavaScript, vì nó có thể có tác động đáng kể đến hành vi của mã của bạn.
Khi làm việc với các kiểu dữ liệu nguyên thủy như số và chuỗi, truyền theo giá trị được sử dụng, nhưng khi làm việc với các đối tượng, truyền theo tham chiếu được sử dụng.
Câu hỏi 8: Việc sử dụng 'chế độ nghiêm ngặt' trong JavaScript là gì và bạn kích hoạt nó như thế nào?
Chế độ nghiêm ngặt là một tính năng trong JavaScript cung cấp môi trường thực thi an toàn và bảo mật hơn cho mã của bạn. Nó giúp bạn viết mã tốt hơn, gọn gàng hơn bằng cách thực thi các quy tắc không bắt buộc trong quá trình thực thi JavaScript thông thường.
Ví dụ: chế độ nghiêm ngặt không cho phép sử dụng các biến không được khai báo, điều này có thể giúp ngăn chặn các biến toàn cục ngẫu nhiên và các sự cố khác liên quan đến biến. Nó cũng ngăn việc vô tình sửa đổi các thuộc tính chỉ đọc, chẳng hạn như argumentsđối tượng và loại bỏ việc sử dụng một số tính năng không dùng nữa, chẳng hạn như withcâu lệnh.
Để bật chế độ nghiêm ngặt trong JavaScript, bạn có thể thêm dòng sau vào đầu tập lệnh hoặc chức năng của mình:
"use strict";
(function () {
"use strict";
// Your code here
})();
Tóm lại, việc sử dụng chế độ nghiêm ngặt trong JavaScript là tùy chọn, nhưng nó rất được khuyến khích để cải thiện chất lượng tổng thể và tính bảo mật của mã của bạn. Bằng cách sử dụng chế độ nghiêm ngặt, bạn có thể phát hiện sớm các lỗi tiềm ẩn, tránh những cạm bẫy phổ biến và viết mã dễ bảo trì và có thể mở rộng hơn.
Câu hỏi 9: Các cách để tối ưu hóa hiệu suất của mã JavaScript là gì?
Có một số cách để tối ưu hóa hiệu suất của mã JavaScript và một số phương pháp phổ biến nhất là:
- Giảm thiểu mã: Giảm thiểu mã có nghĩa là loại bỏ tất cả các ký tự không cần thiết, chẳng hạn như khoảng trắng và nhận xét cũng như rút ngắn tên biến, để giảm kích thước của mã. Kích thước mã nhỏ hơn có nghĩa là ít dữ liệu hơn để truyền, điều này có thể dẫn đến thời gian tải nhanh hơn.
- Sử dụng bộ nhớ đệm: Bằng cách lưu trữ dữ liệu được sử dụng thường xuyên vào bộ nhớ đệm, bạn có thể tránh tính toán dư thừa và tăng tốc mã của mình. Bạn có thể lưu trữ dữ liệu trong các biến cục bộ hoặc trong bộ đệm của trình duyệt.
- Tránh chặn luồng chính: JavaScript là ngôn ngữ đơn luồng, có nghĩa là nó chỉ có thể thực thi một thứ tại một thời điểm. Nếu bạn có một tác vụ kéo dài, nó sẽ chặn luồng chính, khiến trang không phản hồi. Để tránh điều này, bạn có thể sử dụng các kỹ thuật lập trình không đồng bộ, chẳng hạn như gọi lại hoặc Lời hứa, để giảm tải tác vụ chạy dài cho chuỗi công nhân.
- Tránh sử dụng các biến toàn cục: Các biến toàn cục có thể làm chậm mã của bạn vì chúng có thể truy cập được từ mọi nơi trong mã và chúng có thể gây xung đột với các biến khác có cùng tên. Thay vào đó, hãy sử dụng các biến cục bộ trong các hàm, nhanh hơn và ít bị xung đột hơn.
- Sử dụng tải từng phần: Tải từng phần là một kỹ thuật chỉ tải nội dung cần thiết chứ không phải toàn bộ trang cùng một lúc. Bằng cách này, bạn có thể giảm lượng dữ liệu cần truyền và xử lý, dẫn đến thời gian tải nhanh hơn.
- Sử dụng cấu trúc dữ liệu phù hợp: Việc chọn cấu trúc dữ liệu phù hợp cho mã của bạn có thể tác động đáng kể đến hiệu suất. Ví dụ: sử dụng một mảng để tìm kiếm, sắp xếp và thao tác với các tập dữ liệu lớn có thể chậm trong khi sử dụng một đối tượng hoặc bản đồ có thể nhanh hơn nhiều.
- Lập hồ sơ: Lập hồ sơ mã của bạn giúp bạn xác định các nút cổ chai và tối ưu hóa hiệu suất mã của bạn. Bạn có thể sử dụng DevTools trong trình duyệt của mình để lập hồ sơ mã của mình và tìm các khu vực cần cải thiện.
// Minifying the code
const name = "John Doe";
console.log("Hello, " + name);
// Becomes:
const n="John Doe";console.log("Hello, "+n);
// Using caching
const myArray = [1, 2, 3, 4, 5];
function sumArray(array) {
let sum = 0;
for (let i = 0; i < array.length; i++) {
sum += array[i];
}
return sum;
}
let sum = sumArray(myArray);
console.log(sum);
// Using proper data structures
const data = [1, 2, 3, 4, 5];
let sum = 0;
for (let i = 0; i < data.length; i++) {
sum += data[i];
}
console.log(sum);
// Becomes:
const data = new Map([[1, 1], [2, 2], [3, 3], [4, 4], [5, 5]]);
let sum = 0;
for (const value of data.values()) {
sum += value;
}
console.log(sum);
<=====>
Nếu bạn muốn tìm hiểu thêm về viết mã trong Javascript, hãy nhớ theo dõi tôi để biết thêm các đoạn mã và ví dụ. Tôi sẽ chia sẻ thông tin có giá trị và mẹo về cách làm chủ ngôn ngữ và cải thiện kỹ năng của bạn với tư cách là nhà phát triển. Vì vậy, hãy theo dõi để biết thêm thông tin cập nhật và chúng ta hãy tiếp tục học cùng nhau.
Cảm ơn vì đã đọc. Học vui vẻ
Hãy ủng hộ ấn phẩm của chúng tôi bằng cách theo dõi nó
Tích hợp Splunk với SpringBoot Phần — 1 Click jacking và các biện pháp phòng ngừa Tự cải thiện: Hành trình phát triển cá nhân Tích hợp Splunk với SpringBoot — Phần 2 Năm 2023 Phản ứng lại các xu hướng JS để theo dõi các doanh nhân hiện đại chuyển sang viết mã Propane: Đảo ngược thứ tự các từ trong một Chuỗi trong chuyển đổi và quảng cáo Javascript trong tích hợp Java Splunk với SpringBoot - Phần cuối cùng
![Dù sao thì một danh sách được liên kết là gì? [Phần 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































