20 道 Node.js 高频面试题

发布于:2025-07-10 ⋅ 阅读:(20) ⋅ 点赞:(0)

1. Node.js 是什么?有哪些特点?

  • 基于 Chrome V8 引擎的 JavaScript 运行时。
  • 特点:事件驱动、非阻塞 I/O、单线程、跨平台。

2. Node.js 中的事件循环是什么?如何工作?

  • 事件循环是处理异步操作的核心机制。
  • 主要阶段包括:定时器(Timers)、Pending callbacks、Idle/Prepare、Poll、Check、Close callbacks。

3. Node.js 的模块系统有哪几种?区别是什么?

  • CommonJS(require):同步加载,用于 Node.js。
  • ES Module(import):异步加载,ES6 标准,支持 tree-shaking。

4. 什么是 Buffer?为什么需要它?

  • Buffer 是用于处理二进制数据的类,Node.js 中用于读写文件、网络传输等原始数据。

5. Node.js 如何实现异步编程?

  • 使用回调函数、Promise、async/await。
  • 利用事件循环和非阻塞 I/O 操作提高性能。

6. Node.js 中的 Stream 是什么?有哪些类型?

  • Stream 是处理流式数据的抽象接口。
  • 类型:可读流(Readable)、可写流(Writable)、双工流(Duplex)、转换流(Transform)。

7. Node.js 中的 Cluster 模块有什么作用?

  • 利用多核 CPU 创建多个子进程,提升并发能力。
  • 通过 fork() 启动多个 Node.js 实例,共享同一个端口。

8. Node.js 中的 child_process 模块有什么用途?

  • 用于创建子进程执行命令或脚本。
  • 方法:exec(), spawn(), execFile() 等。

9. Node.js 中如何处理错误?

  • 回调中第一个参数为 error。
  • Promise 使用 .catch()
  • 异步错误使用 try/catch(配合 async/await)。

10. Node.js 中的 EventEmitter 是什么?

  • Node.js 内置模块,用于实现事件驱动编程。
  • 通过 on() 监听事件,emit() 触发事件。

11. Node.js 中的 process 对象是什么?常用属性有哪些?

  • 表示当前 Node.js 进程。
  • 常用属性:process.pid, process.argv, process.env, process.cwd()

12. Node.js 中如何创建一个 HTTP 服务器?

const http = require('http');
http.createServer((req, res) => {
  res.end('Hello World');
}).listen(3000);

13. Node.js 中 path 模块的作用是什么?常用方法有哪些?

  • 处理路径相关操作。
  • 常用方法:path.join(), path.resolve(), path.basename(), path.extname()

14. Node.js 中 fs 模块可以做什么?

  • 文件系统操作,如读写文件、删除、重命名等。
  • 支持同步和异步方式。

15. Node.js 中的 global 对象与浏览器中的 window 有何不同?

  • global 是 Node.js 中的全局对象。
  • 浏览器中全局对象是 window

16. Node.js 中的 __dirname 和 __filename 分别代表什么?

  • __dirname:当前模块所在的目录路径。
  • __filename:当前模块的完整文件路径。

17. Node.js 中的 package.json 文件有什么作用?

  • 描述项目元信息,如名称、版本、依赖、脚本等。
  • 用于 npm 或 yarn 安装依赖和运行脚本。

18. Node.js 中的 Express 是什么?简述其特点。

  • 轻量级 Web 开发框架。
  • 特点:中间件机制、路由管理、灵活插件生态。

19. Node.js 中的 Express 中间件是什么?

  • 中间件是一个函数,接收请求对象、响应对象和下一个中间件函数。
  • 可用于日志、身份验证、错误处理等。

20. Node.js 中如何进行性能优化?

  • 使用 Cluster 模块利用多核 CPU。
  • 减少阻塞操作,合理使用缓存。
  • 使用 Profiling 工具(如 node --inspect)分析瓶颈。
  • 使用流式处理大文件。

网站公告

今日签到

点亮在社区的每一天
去签到