20 道 Node.js 高频面试题

文章目录

      • [1. **Node.js 是什么?有哪些特点?**](#1. Node.js 是什么?有哪些特点?)
      • [2. **Node.js 中的事件循环是什么?如何工作?**](#2. Node.js 中的事件循环是什么?如何工作?)
      • [3. **Node.js 的模块系统有哪几种?区别是什么?**](#3. Node.js 的模块系统有哪几种?区别是什么?)
      • [4. **什么是 Buffer?为什么需要它?**](#4. 什么是 Buffer?为什么需要它?)
      • [5. **Node.js 如何实现异步编程?**](#5. Node.js 如何实现异步编程?)
      • [6. **Node.js 中的 Stream 是什么?有哪些类型?**](#6. Node.js 中的 Stream 是什么?有哪些类型?)
      • [7. **Node.js 中的 Cluster 模块有什么作用?**](#7. Node.js 中的 Cluster 模块有什么作用?)
      • [8. **Node.js 中的 child_process 模块有什么用途?**](#8. Node.js 中的 child_process 模块有什么用途?)
      • [9. **Node.js 中如何处理错误?**](#9. Node.js 中如何处理错误?)
      • [10. **Node.js 中的 EventEmitter 是什么?**](#10. Node.js 中的 EventEmitter 是什么?)
      • [11. **Node.js 中的 process 对象是什么?常用属性有哪些?**](#11. Node.js 中的 process 对象是什么?常用属性有哪些?)
      • [12. **Node.js 中如何创建一个 HTTP 服务器?**](#12. Node.js 中如何创建一个 HTTP 服务器?)
      • [13. **Node.js 中 path 模块的作用是什么?常用方法有哪些?**](#13. Node.js 中 path 模块的作用是什么?常用方法有哪些?)
      • [14. **Node.js 中 fs 模块可以做什么?**](#14. Node.js 中 fs 模块可以做什么?)
      • [15. **Node.js 中的 global 对象与浏览器中的 window 有何不同?**](#15. Node.js 中的 global 对象与浏览器中的 window 有何不同?)
      • [16. **Node.js 中的 __dirname 和 __filename 分别代表什么?**](#16. Node.js 中的 __dirname 和 __filename 分别代表什么?)
      • [17. **Node.js 中的 package.json 文件有什么作用?**](#17. Node.js 中的 package.json 文件有什么作用?)
      • [18. **Node.js 中的 Express 是什么?简述其特点。**](#18. Node.js 中的 Express 是什么?简述其特点。)
      • [19. **Node.js 中的 Express 中间件是什么?**](#19. Node.js 中的 Express 中间件是什么?)
      • [20. **Node.js 中如何进行性能优化?**](#20. Node.js 中如何进行性能优化?)

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 服务器?

javascript 复制代码
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)分析瓶颈。
  • 使用流式处理大文件。