C++面试题更新 2026-08-03

请描述在 Node.js 环境下开发原生 C++ 扩展模块的具体实现流程和关键步骤。

考察说明

考查对 Node.js 原生模块开发流程及核心概念的理解。

回答思路

  1. 【回答框架 1】原生 C++ 扩展模块通过 V8 和 Node.js 的 API 与 JavaScript 交互。核心是使用 N-API 或 nan(原生抽象),推荐 N-API 以保证 ABI 稳定。
  2. 【回答框架 2】开发流程:定义模块初始化函数,使用 NAPI_MODULE 宏注册。导出函数使用 napi_create_function 创建,并通过 napi_set_named_property 挂载到导出对象。
  3. 【回答框架 3】需处理参数和返回值转换,如 napi_get_value_string_utf8 和 napi_create_string_utf8。异步操作需使用 libuv 工作队列和 napi_async_work。
  4. 【回答框架 4】构建使用 node-gyp,配置 binding.gyp 指定源文件和依赖。编译后生成 .node 文件,通过 require 加载。
  5. 【回答框架 5】注意内存管理和错误处理,使用 napi_throw_error 抛出异常,并确保资源正确释放。
  6. 【关键点 1】推荐使用 N-API 以保持 ABI 稳定,兼容不同 Node.js 版本。
  7. 【关键点 2】模块需通过 NAPI_MODULE 注册初始化函数。
  8. 【关键点 3】使用 node-gyp 构建,配置 binding.gyp。
  9. 【关键点 4】参数和返回值转换需使用 N-API 函数。
  10. 【关键点 5】异步操作使用 napi_async_work 和 libuv。
  11. 【易错点 1】避免直接使用 V8 API,因版本变化可能导致兼容性问题。
  12. 【易错点 2】注意内存泄漏,及时释放 napi 引用和异步资源。
  13. 【易错点 3】错误处理不当会导致崩溃,需正确设置异常。