+10

20 câu hỏi thường gặp khi phỏng vấn Nodejs - Part 1/2 😊 (Series: Bí kíp Javascript - PHẦN 18)

Hôm nay mình sẽ chia sẻ cho các bạn một số câu hỏi thường gặp khi đi phỏng vấn Nodejs nhé. Bạn cũng có thể đọc bài này để nắm một số kiến thức cơ bản nếu thấy những câu hỏi này khó nhé

1. Node.js là gì? Được dùng để làm gì?

Node.js là một run-time JavaScript environment (Môi trường để chạy các đoạn code javascript) được xây dựng dựa trên Engine V8 của Chrome. Lập trình theo hướng sự kiện và mô hình I/O non-blocking. Nó nhẹ và rất hiệu quả. Node.js có một hệ sinh thái để quản lý các dependency package được gọi là npm .

Node.js có thể được sử dụng để xây dựng các loại ứng dụng khác nhau như ứng dụng web, ứng dụng trò chuyện thời gian thực, máy chủ API REST, v.v. Tuy nhiên, nó chủ yếu được sử dụng để xây dựng các chương trình máy chủ web, tương tự như PHP, Java hoặc ASP v.v. Node.js được phát triển bởi Ryan Dahl vào năm 2009.

2. Lập trình hướng sự kiện là gì?

Lập trình theo hướng sự kiện (Event-driven programming) là xây dựng ứng dụng dựa trên phản hồi các sự kiện. Khi một sự kiện xảy ra, chẳng hạn như nhấp chuột hoặc nhấn phím, chúng ta đang chạy một hàm callback được đăng ký cho sự kiện đó.

Lập trình theo hướng sự kiện chủ yếu tuân theo mô hình publish-subscribe pattern.

image.png

3. Event loop trong Node.js là gì? Và hoạt động như thế nào?

Event loop xử lý tất cả các lệnh callback asynchronous. Node.js (hoặc JavaScript) là một ngôn ngữ hướng sự kiện đơn luồng. Điều này có nghĩa là chúng ta có thể đính kèm listeners vào các sự kiện và khi một sự kiện kích hoạt, listeners sẽ thực hiện lệnh callback mà chúng ta đã cung cấp từ trước.

Bất cứ khi nào chúng ta gọi và setTimeout, Node.js sẽ push nó vào API Node và tiếp tục chạy code khác mà không cần đợi kết quả. Khi hoạt động kết thúc, nó nhận output và chạy function callback của chúng ta. Tương tự với http.get, fs.readFile v.v.

Vì vậy, tất cả các hàm callback được xếp hàng đợi trong một vòng lặp và sẽ chạy từng hàm một khi nhận được phản hồi.

4. REPL trong Node.js là gì?

REPL có nghĩa là Read-Eval-Print-Loop. Nó là một môi trường ảo đi kèm với Node.js. Chúng ta có thể nhanh chóng test code JavaScript của mình trong môi trường Node.js REPL.

Để khởi chạy REPL trong Node.js, chỉ cần mở Prompt Terminal và nhập node. Dấu nhảy của Prompt Terminal sẽ thay đổi thành > trong WindowsMAC.

Bây giờ chúng ta có thể gõ và chạy JavaScript của mình một cách dễ dàng. Ví dụ, nếu chúng ta nhập 10 + 20, nó sẽ in 30 ở dòng tiếp theo.

5. Mục đích của module.exports trong Node.js là gì?

Module.exports đóng gói các code liên quan thành một đơn vị code duy nhất. Điều này có thể hiểu là chuyển tất cả các function liên quan vào một tập tin. Hãy tưởng tượng rằng chúng ta đã tạo một tệp có tên greetings.js và nó chứa hai hàm sau:

image.png

Trong đoạn code trên, module.exports đã xuất 2 function ra ngoài. Chúng ta có thể nhập chúng vào một tệp khác như sau:

image.png

6. Sự khác biệt giữa Asynchronous và Non-blocking là gì?

Asynchronous theo nghĩa đen có nghĩa là not synchronous (không đồng bộ). Ví dụ: Chúng ta đang thực hiện các yêu cầu HTTP Asynchronous, có nghĩa là chúng ta không chờ phản hồi của máy chủ. Mà tiếp tục xử lý các block code tiếp theo. Chúng ta sẽ trả lời yêu cầu sau khi nhận được kết quả từ HTTP Asynchronous.

Thuật ngữ Non-blocking được sử dụng rộng rãi với I/O. Ví dụ, các tác vụ read/write non-blocking sẽ không bao giờ Block call stack của chúng ta. Thay vào đó nó sẽ thực hiện các tác vụ này một cách bất đồng bộ. Cụ thể mình đã có giải thích trong bài viết này các bạn có thể tìm hiểu thêm.

7. Tracing trong Node.js là gì?

Tracing cung cấp một cơ chế để thu thập thông tin được tạo bởi Engine V8, Node Core và có thể ghi thành một tệp nhật ký. Có thể bật tính năng Tracing bằng cách sử dụng flag --trace-events-enabled khi khởi động ứng dụng Node.js.

image.png

Có thể chỉ định tập hợp các danh mục mà Tracing được ghi lại bằng cách sử dụng flag --trace-event-categories theo sau là danh sách các tên danh mục được phân tách bằng dấu phẩy. Theo mặc định, nodev8được bật.

Chạy Node.js với tính năng theo dõi được bật sẽ tạo ra các tệp nhật ký có thể được mở trong tab chrome://tracing của Chrome.

8. Bạn sẽ debug một ứng dụng trong Node.js như thế nào?

Node.js bao gồm một tiện ích debug được gọi là debugger. Để kích hoạt nó, hãy bắt đầu Node.js với đối số debug theo sau.

Chèn câu lệnh debugger; vào source code muốn debug nó sẽ kích hoạt breakpoint tại vị trí đó trong code:

image.png

9. Sự khác biệt giữa setImmediate() vs setTimeout()

setImmediate()setTimeout() tương tự nhau, nhưng về thứ tự thực hiện thì có chút khác biệt. Mình có một bài viết chi tiết về vấn đề này tham khảo nhé.

image.png

Thứ tự được thực hiện sẽ khác nhau tùy thuộc vào contexts mà chúng được gọi. Nếu cả hai được gọi từ bên trong mô-đun chính, thì thời gian sẽ bị ràng buộc bởi hiệu suất của quá trình.

10. process.nextTick() là gì?

setImmediate()setTimeout() dựa trên event loop. Nhưng process.nextTick() về mặt kỹ thuật không phải là một phần của event loop. Thay vào đó, nextTickQueue sẽ được xử lý sau khi hoạt động hiện tại hoàn thành, bất kể giai đoạn hiện tại của event loop.

Mình có một bài viết chi tiết về vấn đề này tham khảo nhé.

Do đó, bất kỳ lúc nào bạn gọi process.nextTick() trong một giai đoạn bất kỳ, tất cả các lệnh callback được chuyển đến process.nextTick() sẽ được giải quyết trước khi event loop tiếp tục.

Đón xem Part 2 nhé.

Mình hy vọng bạn thích bài viết này và học thêm được điều gì đó mới.

Donate mình một ly cafe hoặc 1 cây bút bi để mình có thêm động lực cho ra nhiều bài viết hay và chất lượng hơn trong tương lai nhé. À mà nếu bạn có bất kỳ câu hỏi nào thì đừng ngại comment hoặc liên hệ mình qua: Zalo - 0374226770 hoặc Facebook. Mình xin cảm ơn.

Momo: NGUYỄN ANH TUẤN - 0374226770

TPBank: NGUYỄN ANH TUẤN - 0374226770 (hoặc 01681423001)

image.png


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí