Các câu hỏi phỏng vấn tìm việc làm thường gặp | VietnamWorks

1 . Callback hell là gì? (What is Callback Hell ?)

Mục đích: Câu hỏi để
đánh giá ứng viên đã từng trải nghiệm một tình huống rất thường gặp khi lập
trình NodeJs
Chiến lược trả lời: Mô tả callback hell bằng ví dụ đơn giản và chỉ ra trên
ví dụ vấn đề về việc đọc hiểu code gây ra từ callback hell

Tham khảo câu trả lời phỏng vấn mẫu bằng Tiếng Việt:
“Callback hell là trạng thái nhiều callback lồng vào nhau nhiều cấp
khiến cho việc đọc hiểu code trở nên cực kì khó khăn
Ví dụ:
doSomething(function() {
doSomeThingAfter(function() {
doSomethingAfterAfter(function() {
// And many more levels …
});
});
});

Tham khảo câu trả lời phỏng vấn mẫu bằng Tiếng Anh:
“Callback hell is a status that many callback will be nested
altogether and It leads to understanding code really difficult.

For example: as above”

2 . Làm sao để không gặp phải callback hell (How to avoid Callback Hell ?)

Mục đích: Câu hỏi để
đánh giá ứng viên về cách sử dụng promise và async-await, hai kỹ thuật rất
tiện dụng khi lập trình NodeJs, để giải quyết vấn đề callback hell
Chiến lược trả lời: Phân tích từ khó khăn gây ra bởi callback hell tức là
khiến cho việc đọc code trở nên khó khăn thì đề ra hướng xử lý theo những kĩ
thuật format code

Tham khảo câu trả lời phỏng vấn mẫu bằng Tiếng Việt:
“Phương pháp chính là phân tách code thành nhiều function nhỏ, mỗi
callback được viết thành một function riêng và gọi tới function xử lý tiếp
theo
Ví dụ:
doSomeThing(doSomeThingCb);

function doSomeThingCb() {
doSomeThingAfter(doSomeThingAfterCb);
}

function doSomeThingAfterCb() {
doSomethingAfterAfter(doSomethingAfterAfterCb);
}

Ngoài ra, có 2 kĩ thuật để dễ dàng xử lý callback hell:

1. Sử dụng promises
doSomething()
.then(function() {
return doSomeThingAfter();
})
.then(function() {
return doSomethingAfterAfter();
});
.then(…)
.catch(function(e) {
// handle error
});

2. Sử dụng async-await
const result = await doSomething();
const resultAfter = await doSomeThingAfter();
const resultAfterAfter = await doSomethingAfterAfter();

Tham khảo câu trả lời phỏng vấn mẫu bằng Tiếng Anh:
“The main method is to distinguish code to smaller functions, each of
callbacks is written to another specific function.
For example: as above

In addition, there are 2 methods to handle callback hell easily:
1: using promises, 2 : using async await. All examples will be same as above

3 . NodeJs đơn luồng hay đa luồng? (Is NodeJs running as single-thread or multi-threads ?)

Mục đích: Câu hỏi để
đánh giá ứng viên có tìm hiểu về cách vận hành của NodeJs và cách thức NodeJs
có thể xử lý nhiều tác vụ cùng lúc
Chiến lược trả lời: là cho dù trả lời NodeJs đơn luồng hay đa luồn thì phải
đưa ra giải thích vì sao chọn lựa chọn đó

Tham khảo câu trả lời phỏng vấn mẫu bằng Tiếng Việt:
“NodeJs đơn luồng nghĩa là nói tới việc trong NodeJs chỉ có một tác vụ
Javascript được xử lý tại một thời điểm
Bản thân NodeJs khi chạy sử dụng một luồng chính để thực thi Javascript, là
nơi event loop chạy và một thread pool chứa n luồng để Node dùng cho các xử
lý nội bộ”

Tham khảo câu trả lời phỏng vấn mẫu bằng Tiếng Anh:
“Nodejs as a single thread means that there is only 1 task which is
excecuted in the same time.
Nodejs when running will use single main thread to execute javascript,
which event loop is run and another thread pool contains n threads. Node will
use theme for internal tasks”

4 . Điều gì khiến NodeJs có thể chạy các tác vụ bất đồng bộ (How NodeJs is able to handle asyncronous requests ?
What are they ?)

Mục đích: Câu hỏi để
đánh giá ứng viên có tìm hiểu về cách vận hành của NodeJs và cách thức NodeJs
có thể xử lý nhiều tác vụ cùng lúc, cụ thể là cơ chế Event Loop vốn là thành
phần then chốt cho việc xử lý bất đồng bộ các tác vụ I/O của NodeJs
Chiến lược trả lời: Là nêu ra được Event loop đóng vai trò chính cho việc
xử lý bất đồng bộ trong NodeJs, nêu ra được cách vận hành cơ bản của Event
Loop là điểm cộng

Tham khảo câu trả lời phỏng vấn mẫu bằng Tiếng Việt:
“NodeJs sử dụng một cơ chế có tên gọi là Event Loop để xử lý bất đồng
bộ các tác vụ I/O
Event Loop cho phép NodeJs có thể xử lý đồng thời cùng lúc nhiều tác vụ mà
không cần phải đợi tác vụ trước đó xử lý xong
Khi các tác vụ hoàn tất, Event Loop sẽ trả kết quả về dưới dạng các
callback.”

Tham khảo câu trả lời phỏng vấn mẫu bằng Tiếng Anh:
“NodeJs uses a mechanism named Event loop which to handle asyncronous
in I/O tasks
Event Loop allows Nodejs in handling many processes in the same time
without waiting last process done.
When task done, Event Loop will release result back in callback type.”

5 . NodeJs có khả năng xử lý bất đồng bộ, nhưng có trường hợp nào không thể xử lý bất đồng bộ không, hậu quả là gì? (Do we have any case that Nodejs cannot handle async requests ? and What are the consequences ?)

Mục đích: Đánh giá
ứng viên có tìm hiểu về điểm hạn chế của NodeJs hay không qua đó đánh giá
được khả năng tìm hiểu sâu về NodeJs
Chiến lược trả lời: là nêu ra được những khả năng có thể làm hạn chế tốc độ
của NodeJs, có thể kể ra những tình huống trong quá trình làm việc với NodeJs
mà bạn gặp vấn đề về tốc độ xử lý

Tham khảo câu trả lời phỏng vấn mẫu bằng Tiếng Việt:
“Do NodeJs chạy đơn luồng nên các xử lý liên quan tới CPU sẽ làm ảnh
hưởng tới tốc độ xử lý của NodeJs
Các xử lý đó bao gồm:
– Mã hóa dữ liệu
– Nén dữ liệu
– Xử lý json dung lượng lớn
– Vòng lặp lồng nhau

Hậu quả là Event Loop của NodeJs phải chờ một callback xử lý xong mới có
thể tiếp nhận và xử lý các yêu cầu khác.”

Tham khảo câu trả lời phỏng vấn mẫu bằng Tiếng Anh:
“Because Nodejs run as single-thread so all of handling logic related
to CPU will affect to handling speed of NodeJs.
Approachs:
– Encode data
– Compress data
– handling meta json
– nested loop
The consequence is that Event Loop of NodeJs need to wait a callback done
to get the next task/process”