- V8 là gì? Node có chạy được không nếu thiếu V8?
– V8 là một javascript engine dùng để compile, tối ưu và chạy Node.js
– Node có thể chạy mà không cần V8, một vài js engine khác: SpiderMonkey, ChakraCore - exports và module.exports
Ban đầu exports và module.exports cùng trỏ vào 1 object rỗng. Nhưng hãy luôn nhớ rằng, ở cuối mỗi module trong Nodejs, module.exports là object được return.
– Khi bạn code như sau:
123456exports.a = function() {console.log("a");}exports.b = function() {console.log("b");}
Nodejs sẽ add thêm 1 thuộc tính a và b vào object rỗng ban đầu. Do exports và module.exports vẫn đang trỏ vào cùng 1 object nên sẽ không có sự khác biệt khi bạn code:
123456module.exports.a = function() {console.log("a");}module.exports.b = function() {console.log("b");}
– Khi bạn code như sau:
1234exports = function Something() {console.log('bla bla');}var x = require('./file1.js')(); //Error: require is not a function
Nodejs sẽ báo lỗi ngay lập tức. Bởi vì exports giờ đã được trỏ tới 1 object hoàn toàn mới (function Something), trong khi module này vẫn return exports.moduleTips: chỉ dùng exports.module cho đỡ phải nhọc não
- Khi khai báo 1 biến global trong 1 module, tại sao nó không global với các module khác?
Do mỗi module trong Nodejs được wrap bởi 1 function:123(function (exports, require, module, __filename, __dirname) {// module code}); - Có thể dùng nhiều version của 1 package trong cùng 1 app ko?
Không - Event-loop là gì?
<wait-for-it> - Call-stack là gì?
Là 1 cấu trúc dữ liệu stack ghi lại các lời gọi hàm:Khi 1 hàm được gọi, nó được push vào stack. Khi 1 hàm return, nó được pop khỏi stack.
Mỗi khi chương trình gặp lỗi, browser sẽ hiển thị trạng thái hiện tại của call-stack. Trong Node, call-stack được xử lý bởi V8.
- Sự khác nhau giữa spawn, exec, và fork
- Xem memory used by Node?
1process.memoryUsage()
- V8 Object là gì?
La object C++ native biểu diễn object JS. Nói cách khác V8 object là cách V8. biểu diễn object của JS. - Libuv là gì?
Một thư viện đa nền tảng tập trung vào xử lý các tác vụ I/O bất đồng bộ: file system event, event loop, thread pool, timers…
- Làm sao để thực hiện 1 function trước khi exit process?
123process.on('exit', () => {console.log('Do something')})
- Node buffer có sử dụng V8 memory ko?
Không. Node buffer mem được allocated bên ngoài V8 heap. - Trường main trong file package.json có tác dụng gì?
123456789101112{"name": "test","version": "0.0.0","private": true,"main": "index.js","scripts": {"start": "node .","start:dev": "nodemon .","lint": "eslint .","test": "mocha --recursive --exit"}}
Xác định entry point khi app được chạy. Ví dụ khi app với package.json trên được chạy, nó sẽ chạy vào file index.js đầu tiên.
- 3 loại file sẽ được chạy khi require
.json, .node, .js - Bằng cách nào 1 module có thể được gọi trực tiếp và require từ module khác đồng thời?
12345if (require.main === module) {// call directly} else {// required as a module} - Đo execute time ntn?
12console.time('label')console.endTime('label')
- Callback là gì?
Là 1 hàm được gọi sau khi 1 tác vụ được hoàn thành. - Error-first callback là gì?
Là 1 callback với argument đầu tiên luôn là error, các argument khác được dùng để pass data.123456789fs.readFile(filePath, function(err, data) {if (err) {// handle the error, the return is important here// so execution stops herereturn console.log(err)}// use the data objectconsole.log(data)}) - Promise là gì?
Là 1 cơ chế giúp xử lý các tác vụ bất đồng bộ.123const wait(n) = new Promise((resolve) => {setTimeout(resolve, n)})