NodeJS事件循环与异步模型专题测试
考察知识点
- 事件循环机制:六阶段执行顺序、各阶段职责、事件循环与主线程关系
- 微任务与宏任务:任务分类、执行优先级、nextTick与Promise队列
- process.nextTick:执行时机、使用场景、与setImmediate区别、递归调用风险
- 定时器与延迟执行:setTimeout/setInterval/setImmediate、延迟精度、执行顺序差异
- 异步I/O与回调:libuv实现原理、回调执行阶段、非阻塞I/O机制
- Promise与async/await:async函数执行特点、await与then区别、错误处理、状态管理
- 事件驱动与EventEmitter:on/once/emit方法、监听器顺序、移除监听器、最大监听器限制
Node.js的事件循环运行在独立的线程中,与主线程并行执行,从而实现非阻塞I/O。
process.nextTick()和setImmediate()的主要区别是:nextTick在当前事件循环阶段结束后执行,而setImmediate在下一轮事件循环的check阶段执行。
Node.js实现非阻塞异步I/O的核心机制是?
在Node.js事件循环中,pending callbacks阶段的主要作用是?
Node.js采用的单线程并发模型的核心优势是?
在Node.js中,以下哪个属于微任务(Microtask)?
关于Node.js事件循环的六个阶段,以下说法正确的是?
关于process.nextTick(),以下说法正确的是?
以下代码中,事件监听器的执行顺序是?
const emitter = new EventEmitter();
emitter.on('test', () => console.log('A'));
emitter.on('test', () => console.log('B'));
emitter.prependListener('test', () => console.log('C'));
emitter.emit('test');
以下代码中,setTimeout的实际延迟时间可能超过100ms的原因是?
setTimeout(() => console.log('done'), 100);
在Node.js中,以下代码的执行结果是什么?
setTimeout(() => console.log('timeout'), 0);
setImmediate(() => console.log('immediate'));
以下代码的执行结果是什么?
async function test() {
console.log('start');
await Promise.resolve();
console.log('end');
}
test();
console.log('main');
以下代码执行后,控制台输出的顺序包含哪些特点?(多选)
console.log('1');
setTimeout(() => console.log('2'), 0);
Promise.resolve().then(() => console.log('3'));
process.nextTick(() => console.log('4'));
console.log('5');
以下关于Node.js异步I/O的说法,正确的是?(多选)
以下关于process.nextTick()的使用,正确的是?(多选)
以下关于Node.js EventEmitter的说法,正确的是?(多选)
以下关于Node.js事件循环的说法,正确的是?(多选)
在Node.js中,取消setTimeout定时器使用____________函数,取消setInterval定时器使用____________函数,取消setImmediate使用____________函数。这些函数接收定时器返回的Timer对象作为参数。
Promise有三种状态:____________(进行中)、____________(已成功)、____________(已失败)。状态一旦改变就不可逆转,只能从Pending变为Fulfilled或从Pending变为Rejected。Promise.all方法在所有Promise都resolve时才成功,Promise.race方法返回最先完成的Promise结果。
EventEmitter提供了移除监听器的方法:____________用于移除指定事件的某个监听器,____________用于移除指定事件或所有事件的监听器,____________是removeListener的别名。当监听器数量超过setMaxListeners方法设置的阈值时会发出警告,默认阈值是10。