NodeJS运行时原理专题测试
考察知识点
| 知识模块 | 题目数 | 核心考点 |
|---|---|---|
| libuv工作原理 | 6题 | 事件循环阶段、线程池机制、Handle/Request区别、跨平台封装 |
| V8引擎与Node.js交互 | 4题 | Isolate概念、binding机制、启动流程、Hidden Class优化 |
| 垃圾回收机制 | 6题 | 分代回收算法、GC优化技术、内存泄漏、晋升条件、参数调优 |
| 网络编程底层实现 | 2题 | TCP socket异步机制、libuv网络封装 |
| 综合原理 | 1题 | 异步操作完整执行流程 |
Node.js垃圾回收触发时机由V8引擎自动判断,主要依据是内存分配量和堆使用情况,不是固定的时间间隔。
Node.js的TCP socket通过libuv的非阻塞异步机制实现,网络连接和数据读写不会阻塞主线程。
V8引擎使用Hidden Class(隐藏类)机制优化对象属性访问,动态添加属性会导致隐藏类变化,可能影响性能。
libuv中handle代表长期存在的对象(如TCP socket),request代表一次性操作(如文件读取),两者生命周期管理方式不同。
libuv通过封装不同平台的异步IO机制(Linux的epoll、macOS的kqueue、Windows的IOCP),实现了跨平台的统一异步IO接口。
V8垃圾回收器采用哪些优化技术减少GC暂停时间?
libuv作为Node.js的底层异步IO库,其核心架构不包括以下哪个组件?
Node.js的net模块底层使用哪个库实现网络通信?
libuv线程池默认处理以下哪些类型的异步操作?
V8引擎中Isolate是指什么?
Node.js如何将C++功能暴露给JavaScript调用?
Node.js(V8引擎)使用的垃圾回收策略是?
Node.js应用启动时,执行流程包括以下哪些步骤?
Node.js异步操作从JavaScript调用到回调执行的完整流程包括哪些步骤?
哪些情况下对象可能无法被垃圾回收器正确回收?
libuv事件循环包含哪些主要阶段?
libuv线程池默认 ____________ 个线程,可通过 ____________ 环境变量调整大小,最大建议不超过 ____________ 。线程池处理 文件IO 、 DNS解析 、 压缩操作 等异步任务,而 网络IO 使用系统原生异步机制不占用线程池。
Node.js可通过V8参数调整内存和GC行为: ____________ 设置老生代最大内存(如 ____________ 表示4GB); ____________ 允许手动触发 global.gc() ; --trace-gc 输出 GC日志 用于分析垃圾回收行为; --max-new-space-size 已废弃,V8会自动管理新生代大小。
V8堆内存分为 ____________ 和 ____________ 。新生代使用 ____________ 算法,空间小(约 1-8MB ),回收 频繁 。老生代使用 Mark-Sweep-Compact 算法,空间大,回收 较少 。对象从新生代 晋升 到老生代的条件包括存活多次Scavenge或 To空间 使用超过25%。