全部学科
Python全栈
python
NodeJS全栈
nodejs

NodeJS事件循环与异步模型专题测试

20 题 60 分钟 难度:★★

考察知识点

  • 事件循环机制:六阶段执行顺序、各阶段职责、事件循环与主线程关系
  • 微任务与宏任务:任务分类、执行优先级、nextTick与Promise队列
  • process.nextTick:执行时机、使用场景、与setImmediate区别、递归调用风险
  • 定时器与延迟执行:setTimeout/setInterval/setImmediate、延迟精度、执行顺序差异
  • 异步I/O与回调:libuv实现原理、回调执行阶段、非阻塞I/O机制
  • Promise与async/await:async函数执行特点、await与then区别、错误处理、状态管理
  • 事件驱动与EventEmitter:on/once/emit方法、监听器顺序、移除监听器、最大监听器限制
💡 参考答案在文末
判断题
1

Node.js的事件循环运行在独立的线程中,与主线程并行执行,从而实现非阻塞I/O。

A

B

2

process.nextTick()setImmediate()的主要区别是:nextTick在当前事件循环阶段结束后执行,而setImmediate在下一轮事件循环的check阶段执行。

A

B

单选题
3

Node.js实现非阻塞异步I/O的核心机制是?

A

使用多线程处理所有I/O操作

B

通过libuv库结合操作系统异步I/O和线程池

C

使用纯JavaScript的Promise实现异步

D

依赖浏览器提供的Web API

4

在Node.js事件循环中,pending callbacks阶段的主要作用是?

A

执行所有被延迟执行的回调函数

B

执行系统操作(如TCP错误)的回调

C

执行setImmediate注册的回调

D

执行nextTick队列中的回调

5

Node.js采用的单线程并发模型的核心优势是?

A

可以充分利用多核CPU的计算能力

B

避免了多线程编程中的锁和竞态条件问题

C

每个请求都有独立的线程处理,不会相互影响

D

内存使用更高,但吞吐量更大

6

在Node.js中,以下哪个属于微任务(Microtask)?

A

setTimeout回调

B

setImmediate回调

C

process.nextTick回调

D

setInterval回调

7

关于Node.js事件循环的六个阶段,以下说法正确的是?

A

timers阶段执行所有到期定时器的回调,然后立即进入pending callbacks阶段

B

poll阶段是事件循环的入口点,负责执行I/O事件回调

C

check阶段在poll阶段之前执行,专门处理setImmediate回调

D

close callbacks阶段会阻塞事件循环直到所有句柄关闭

8

关于process.nextTick(),以下说法正确的是?

A

nextTick回调在事件循环的下一轮执行

B

nextTick回调在当前操作完成后、事件循环继续之前执行

C

nextTick回调与Promise.then回调同时执行

D

nextTick回调在setTimeout回调之前、Promise回调之后执行

9

以下代码中,事件监听器的执行顺序是?

JavaScript
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');
A

A → B → C

B

C → A → B

C

C → B → A

D

A → C → B

10

以下代码中,setTimeout的实际延迟时间可能超过100ms的原因是?

JavaScript
setTimeout(() => console.log('done'), 100);
A

setTimeout的最小延迟是4ms,所以会超过100ms

B

如果事件循环在poll阶段被阻塞,回调执行会被延迟

C

setTimeout使用的是系统定时器,精度只有10ms

D

Node.js不支持精确的定时器功能

11

在Node.js中,以下代码的执行结果是什么?

JavaScript
setTimeout(() => console.log('timeout'), 0);
setImmediate(() => console.log('immediate'));
A

总是先输出'timeout'

B

总是先输出'immediate'

C

在I/O回调中先'immediate',在主模块中顺序不确定

D

两者的执行顺序完全随机

12

以下代码的执行结果是什么?

JavaScript
async function test() {
  console.log('start');
  await Promise.resolve();
  console.log('end');
}
test();
console.log('main');
A

start → end → main

B

start → main → end

C

main → start → end

D

start → end(main不会输出)

多选题
13

以下代码执行后,控制台输出的顺序包含哪些特点?(多选)

JavaScript
console.log('1');
setTimeout(() => console.log('2'), 0);
Promise.resolve().then(() => console.log('3'));
process.nextTick(() => console.log('4'));
console.log('5');
A

'1'最先输出

B

'4'比'3'先输出

C

'3'比'2'先输出

D

'2'最后输出

E

'5'比'4'先输出

14

以下关于Node.js异步I/O的说法,正确的是?(多选)

A

网络I/O优先使用操作系统的异步机制

B

文件系统I/O主要使用libuv线程池处理

C

I/O回调在poll阶段执行

D

异步I/O操作本身是阻塞的,但回调是非阻塞的

E

一个回调执行时间过长会影响其他I/O回调的执行

15

以下关于process.nextTick()的使用,正确的是?(多选)

A

适合在同步代码执行后立即执行某些操作

B

可以用于确保回调在事件循环继续之前执行

C

应该避免递归调用process.nextTick以防止I/O饥饿

D

process.nextTick的优先级高于Promise.then

E

process.nextTick回调在当前函数调用栈清空后立即执行

16

以下关于Node.js EventEmitter的说法,正确的是?(多选)

A

removeListener()可以移除指定事件的某个监听器

B

removeAllListeners()可以移除所有事件的所有监听器

C

emitter.listenerCount('event')返回指定事件的监听器数量

D

同一个监听器函数可以被多次添加到同一事件

E

默认情况下,单个事件最多可以注册10个监听器

17

以下关于Node.js事件循环的说法,正确的是?(多选)

A

timers阶段按照定时器注册顺序执行回调

B

poll阶段可能会阻塞等待I/O事件

C

check阶段专门用于执行setImmediate回调

D

事件循环会在每个阶段之间执行微任务队列

E

一个阶段内的所有回调执行完毕后才会进入下一阶段

填空题
18

在Node.js中,取消setTimeout定时器使用____________函数,取消setInterval定时器使用____________函数,取消setImmediate使用____________函数。这些函数接收定时器返回的Timer对象作为参数。

19

Promise有三种状态:____________(进行中)、____________(已成功)、____________(已失败)。状态一旦改变就不可逆转,只能从Pending变为Fulfilled或从Pending变为Rejected。Promise.all方法在所有Promise都resolve时才成功,Promise.race方法返回最先完成的Promise结果。

20

EventEmitter提供了移除监听器的方法:____________用于移除指定事件的某个监听器,____________用于移除指定事件或所有事件的监听器,____________是removeListener的别名。当监听器数量超过setMaxListeners方法设置的阈值时会发出警告,默认阈值是10。

参考答案
1.错误 2.错误 3.B 4.B 5.B 6.C 7.B 8.B 9.B 10.B 11.C 12.B 13.A;B;C;E 14.A;B;C;E 15.A;B;C;D;E 16.A;B;C;E 17.B;C;E 18.clearTimeout;clearInterval;clearImmediate 19.Pending;Fulfilled;Rejected 20.removeListener;removeAllListeners;off
想在手机上练习这套试卷?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一套试卷 NodeJS中级技能认证
下一套试卷 → NodeJS事件驱动基础专题测试
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码