第十五章(Node.js 面试真题)

四季读书网 1 0
第十五章(Node.js 面试真题)

面试真题

题目 1:Node.js 事件循环

描述 Node.js 事件循环的执行顺序

答案

  1. Timers:setTimeout、setInterval
  2. Pending callbacks:I/O 回调
  3. Idle, prepare:内部使用
  4. Poll:获取新 I/O 事件
  5. Check:setImmediate 回调
  6. Close callbacks:关闭回调

微任务:Promise 回调、process.nextTick(最先执行)


题目 2:Node.js 异步编程

Node.js 中如何处理异步编程?

答案

  • 回调函数
  • Promise
  • async/await
  • EventEmitter 事件
  • Stream 流

题目 3:模块系统

Node.js 模块导出方式有哪些?

答案

  • module.exports = {}
  • exports.xxx = {}
  • ES Module:export default / export

题目 4:Buffer 与 Stream

Buffer 和 Stream 有什么区别?

答案

  • Buffer:一次性读取整个数据到内存
  • Stream:流式处理,边读边处理
  • Stream 适合大文件处理,内存占用低

题目 5:Express vs Koa

Express 和 Koa 有什么区别?

答案

  • Express:功能完整,中间件形式
  • Koa:更轻量,async/await
  • Koa 更优雅,Express 更生态成熟

题目 6:中间件机制

描述 Express 中间件机制

答案

  • 线性执行
  • 每个中间件可调用 next()
  • 错误处理中间件在最后
  • 可同时处理请求和响应

题目 7:进程与线程

Node.js 是单线程的吗?

答案

  • 主线程单线程
  • I/O 操作异步非阻塞
  • Worker Threads 可创建多线程
  • Cluster 可多进程

题目 8:内存泄漏

Node.js 常见内存泄漏有哪些?

答案

  • 全局变量
  • 闭包
  • 事件监听未移除
  • 缓存未清理
  • 循环引用

题目 9:进程通信

Node.js 中进程间如何通信?

答案

  • process.send()(父子进程)
  • message queue
  • Socket
  • Redis/消息队列

题目 10:PM2 作用

PM2 的主要功能有哪些?

答案

  • 进程管理
  • 自动重启
  • 负载均衡
  • 日志管理
  • 集群模式

题目 11:NPM 原理

NPM 的工作原理

答案

  • package.json 定义依赖
  • npm install 下载到 node_modules
  • 扁平化安装
  • package-lock.json 锁定版本

题目 12:NestJS 特点

NestJS 有什么特点?

答案

  • 依赖注入
  • 模块化
  • TypeScript
  • 类似 Angular 的架构
  • 支持微服务

题目 13:GraphQL vs REST

GraphQL 相比 REST 的优势

答案

  • 按需获取数据
  • 减少请求次数
  • 类型安全
  • 强类型 schema

题目 14:性能优化

Node.js 性能优化手段

答案

  • 使用缓存
  • 异步 I/O
  • 减少循环
  • 使用流处理
  • 集群模式
  • 代码优化

题目 15:异常处理

Node.js 中如何处理异常?

答案

  • try/catch
  • Promise.catch
  • process.on('uncaughtException')
  • 域名模块(已废弃)

题目 16:垃圾回收

Node.js 垃圾回收机制

答案

  • V8 引擎
  • 新生代/老生代
  • Scavenge/Mark-Sweep/Incremental Marking
  • 优化:减少内存分配、及时释放

题目 17:模块加载机制

require 和 import 的区别是什么?

答案

  • require 是 CommonJS,import 是 ES Module
  • require 是运行时加载,import 是编译时解析
  • require 可以条件加载,import 必须在文件顶部
  • Node.js 默认支持 require,需要配置 type: "module" 才能使用 import

题目 18:处理 CPU 密集型任务

Node.js 如何处理 CPU 密集型任务?

答案

  • 使用 Worker Threads
  • 使用 child_process 或 fork
  • 使用集群模式(cluster)
  • 将任务拆分,利用异步 I/O 间隙执行

题目 19:Stream 流处理

大文件复制使用什么方式最好?为什么?

答案

  • 使用 Stream 流处理
  • 原因:流是分块处理,不需要将整个文件加载到内存
  • 内存占用小,性能好
fs.createReadStream('source.txt')
    .pipe(fs.createWriteStream('dest.txt'));

题目 20:JWT Token 安全

如何保证 JWT Token 的安全性?

答案

  • 使用强密钥存储
  • 设置过期时间
  • 使用 HTTPS 传输
  • 存储在 HttpOnly Cookie 中
  • 验证时指定算法,防止算法切换攻击

抱歉,评论功能暂时关闭!