nodejs 语言特性(面试系列2)

发布于:2025-06-15 ⋅ 阅读:(15) ⋅ 点赞:(0)

Node.js 核心模块

1. HTTP 模块
  • 常见问题
    • 如何创建简单的 HTTP 服务器?
      const http = require('http');
      const server = http.createServer((req, res) => {
        res.writeHead(200, { 'Content-Type': 'text/plain' });
        res.end('Hello World!');
      });
      server.listen(3000);

      何处理请求参数(URL 参数、POST 数据)?

    • URL 参数:url.parse(req.url, true).query
    • POST 数据:监听 data 和 end 事件,通过 Buffer 拼接。

 

2.文件系统(fs 模块)
  • 同步 vs. 异步操作
    • 同步:fs.readFileSync(),阻塞线程。
    • 异步:fs.readFile(),非阻塞(推荐)。
  • 流式操作
    const fs = require('fs');
    const readStream = fs.createReadStream('large.txt');
    readStream.on('data', (chunk) => { /* 处理数据块 */ });

3.Buffer
  • 作用:处理二进制数据(如文件读写、网络请求)。
  • 常见操作
    const buf = Buffer.from('hello', 'utf8');
    console.log(buf.toString('hex')); // 68656c6c6f

 

 性能优化与调试

1. 内存泄漏排查
  • 常见原因
    • 未清理的定时器(如 setInterval)。
    • 闭包引用(如事件监听器未移除)。
  • 工具
    • heapdump:生成堆快照,分析内存占用。
    • node --inspect:结合 Chrome DevTools 调试
2. 性能监控
  • 常用工具
    • pm2:进程管理、自动重启、性能监控。
    • New Relic/AppDynamics:应用性能监控(APM)。

 

集群模式(Cluster)
  • 作用:利用多核 CPU,通过 child_process.fork() 创建子进程。
  • 实现
    const cluster = require('cluster');
    if (cluster.isMaster) {
      for (let i = 0; i < require('os').cpus().length; i++) {
        cluster.fork();
      }
    } else {
      // 子进程逻辑
    }

 

 框架与生态系统

1. Express/Koa
  • Express:轻量级 Web 框架,路由灵活(如 app.get()app.post())。
  • Koa:Express 原班人马打造,基于 async/await,中间件更简洁。
  • 中间件原理:洋葱模型(请求进入 → 中间件 1 → 中间件 2 → 响应 → 中间件 2 → 中间件 1)。

 

MongoDB 与 Node.js
  • ODM 工具
    • Mongoose:Schema 设计、数据验证、虚拟字段。
      const mongoose = require('mongoose');
      const UserSchema = new mongoose.Schema({ name: String });
      const User = mongoose.model('User', UserSchema);

 

3. WebSocket(Socket.io)
  • 应用场景:实时通信(如聊天、弹幕、实时数据推送)。
  • 与 HTTP 的区别:长连接,双向通信,基于 TCP。

工程实践与最佳实践

 错误处理

  • 全局错误捕获
    process.on('uncaughtException', (err) => {
      console.error('未捕获的异常:', err);
      process.exit(1); // 可选:是否重启进程
    });

 安全问题

  • 常见漏洞
    • XSS:通过 helmet 或 DOMPurify 过滤输入。
    • CSRF:使用 csurf 中间件生成令牌。
    • SQL 注入:参数化查询(如 mysql2 的 ? 占位符)。

 

 Docker 与 Node.js
  • Dockerfile 示例
    FROM node:18-alpine
    WORKDIR /app
    COPY package*.json ./
    RUN npm ci
    COPY . .
    EXPOSE 3000
    CMD ["node", "server.js"]

 


网站公告

今日签到

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