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

NodeJS运行时原理专题测试

19 题 50 分钟 难度:★★★

考察知识点

知识模块题目数核心考点
libuv工作原理6题事件循环阶段、线程池机制、Handle/Request区别、跨平台封装
V8引擎与Node.js交互4题Isolate概念、binding机制、启动流程、Hidden Class优化
垃圾回收机制6题分代回收算法、GC优化技术、内存泄漏、晋升条件、参数调优
网络编程底层实现2题TCP socket异步机制、libuv网络封装
综合原理1题异步操作完整执行流程
💡 参考答案在文末
判断题
1

Node.js垃圾回收触发时机由V8引擎自动判断,主要依据是内存分配量和堆使用情况,不是固定的时间间隔。

A

B

2

Node.js的TCP socket通过libuv的非阻塞异步机制实现,网络连接和数据读写不会阻塞主线程。

A

B

3

V8引擎使用Hidden Class(隐藏类)机制优化对象属性访问,动态添加属性会导致隐藏类变化,可能影响性能。

A

B

4

libuv中handle代表长期存在的对象(如TCP socket),request代表一次性操作(如文件读取),两者生命周期管理方式不同。

A

B

5

libuv通过封装不同平台的异步IO机制(Linux的epoll、macOS的kqueue、Windows的IOCP),实现了跨平台的统一异步IO接口。

A

B

单选题
6

V8垃圾回收器采用哪些优化技术减少GC暂停时间?

A

增量GC(Incremental GC)

B

并发GC(Concurrent GC)

C

惰性清理(Lazy Sweeping)

D

以上都是

7

libuv作为Node.js的底层异步IO库,其核心架构不包括以下哪个组件?

A

事件循环(Event Loop)

B

线程池(Thread Pool)

C

V8编译器

D

IO观察者(IO Watcher)

8

Node.js的net模块底层使用哪个库实现网络通信?

A

OpenSSL

B

libuv

C

直接调用系统socket API

D

Node.js自己实现

9

libuv线程池默认处理以下哪些类型的异步操作?

A

所有文件系统操作和DNS解析

B

所有网络IO操作

C

所有定时器回调

D

所有Promise.then回调

10

V8引擎中Isolate是指什么?

A

一个独立的JavaScript文件

B

一个独立的V8运行实例(包含完整VM状态)

C

一个异步IO线程

D

一个Node.js进程

11

Node.js如何将C++功能暴露给JavaScript调用?

A

通过动态链接库导出

B

通过V8的binding机制(process.binding)

C

通过直接修改JavaScript原型

D

通过HTTP接口调用

12

Node.js(V8引擎)使用的垃圾回收策略是?

A

单纯的引用计数

B

单纯的标记清除

C

分代垃圾回收(Generational GC)

D

手动内存管理

多选题
13

Node.js应用启动时,执行流程包括以下哪些步骤?

A

初始化V8引擎和libuv

B

创建执行上下文(Context)

C

执行bootstrap代码

D

加载内置模块

E

执行用户入口脚本

14

Node.js异步操作从JavaScript调用到回调执行的完整流程包括哪些步骤?

A

JavaScript调用异步API

B

Node.js binding调用libuv或V8

C

libuv提交异步任务到线程池或系统异步机制

D

任务完成,libuv通知事件循环

E

事件循环在合适阶段执行JavaScript回调

15

哪些情况下对象可能无法被垃圾回收器正确回收?

A

被全局对象引用

B

未关闭的事件监听器

C

循环引用的对象

D

未清除的定时器引用

E

已释放引用的对象

16

libuv事件循环包含哪些主要阶段?

A

Timers阶段(执行定时器回调)

B

Pending Callbacks阶段(执行延迟IO回调)

C

Poll阶段(执行IO回调)

D

Check阶段(执行setImmediate回调)

E

Close Callbacks阶段(执行关闭回调)

填空题
17

libuv线程池默认 ____________ 个线程,可通过 ____________ 环境变量调整大小,最大建议不超过 ____________ 。线程池处理 文件IO 、 DNS解析 、 压缩操作 等异步任务,而 网络IO 使用系统原生异步机制不占用线程池。

18

Node.js可通过V8参数调整内存和GC行为: ____________ 设置老生代最大内存(如 ____________ 表示4GB); ____________ 允许手动触发 global.gc() ; --trace-gc 输出 GC日志 用于分析垃圾回收行为; --max-new-space-size 已废弃,V8会自动管理新生代大小。

19

V8堆内存分为 ________________________ 。新生代使用 ____________ 算法,空间小(约 1-8MB ),回收 频繁 。老生代使用 Mark-Sweep-Compact 算法,空间大,回收 较少 。对象从新生代 晋升 到老生代的条件包括存活多次Scavenge或 To空间 使用超过25%。

参考答案
1.正确 2.正确 3.正确 4.正确 5.正确 6.D 7.C 8.B 9.A 10.B 11.B 12.C 13.A;B;C;D;E 14.A;B;C;D;E 15.A;B;C;D 16.A;B;C;D;E 17.4;UV_THREADPOOL_SIZE;CPU核心数 18.--max-old-space-size;4096;--expose-gc 19.新生代;老生代;Scavenge
想在手机上练习这套试卷?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一套试卷 NodeJS调试与工具链专题测试
下一套试卷 → NodeJS进程与线程管理专题测试
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码