前端经典面试题合集, Node.js 有哪些全局对象?它们分别有什么作用?
前端经典面试题合集, Node.js 有哪些全局对象?它们分别有什么作用?
QA
Step 1
Q:: Node.
js 有哪些全局对象?它们分别有什么作用?
A:: Node.
js 提供了多个全局对象,其中一些主要的全局对象包括:
1.
global
:相当于浏览器中的 window
对象,可以用来定义全局变量。
2.
process
:提供与当前 Node.
js 进程相关的信息和控制,包括环境变量、标准输入输出等。
3.
Buffer
:用来处理二进制数据。
4.
__dirname
和 __filename
:分别表示当前模块的目录名和文件名。
5.
module
和 exports
:用于模块系统,帮助模块间进行引用。
6.
require
:用来引入外部模块。
Step 2
Q:: 在 Node.
js 中,如何处理未捕获的异常?
A:: 在 Node.
js 中,可以通过监听 process
对象的 uncaughtException
事件来处理未捕获的异常,例如:
process.on('uncaughtException', (err) => {
console.error('There was an uncaught error', err);
process.exit(1); // 强制退出进程
});
不过建议尽量避免使用这种方式,最好在代码中捕获并处理可能的异常。
Step 3
Q:: Node.
js 的事件循环是什么?它是如何工作的?
A:: Node.js 的事件循环是一个基于事件驱动的非阻塞 I/O 模型。它允许 Node.
js 处理大量并发连接,而无需为每个连接创建一个新的线程。事件循环主要分为以下几个阶段:
1.
timers
:执行 setTimeout
和 setInterval
的回调。
2.
I/O callbacks
:执行一些系统操作的回调。
3.
idle, prepare
:仅在内部使用。
4.
poll
:检索新的 I/O 事件,执行与 I/
O 相关的回调。
5.
check
:执行 setImmediate
的回调。
6.
close callbacks
:执行一些关闭回调,比如 socket.on('close', ...)
。
Step 4
Q:: 如何在 Node.
js 中实现文件的读写?
A:: 可以使用 Node.
js 提供的 fs
模块来实现文件的读写操作。例如,读取文件:
const fs = require('fs');
fs.readFile('path/to/file', 'utf8', (err, data) => {
if (err) throw err;
console.log(data);
});
写入文件:
const fs = require('fs');
fs.writeFile('path/to/file', 'Hello, World!', (err) => {
if (err) throw err;
console.log('File has been saved!');
});
Step 5
Q:: 在 Node.
js 中如何使用流(Streams)?
A:: Node.
js 中的流可以处理大文件或大量数据时非常有用。流有四种类型:Readable
、Writable
、Duplex
、Transform
。示例:
读取流:
const fs = require('fs');
const readStream = fs.createReadStream('path/to/file');
readStream.on('data', (chunk) => {
console.log('New chunk received:', chunk);
});
写入流:
const writeStream = fs.createWriteStream('path/to/file');
writeStream.write('Hello, World!');
writeStream.end();