当前位置: 首页 > news >正文

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

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"]

 

http://www.xdnf.cn/news/1018171.html

相关文章:

  • 【Pandas】pandas DataFrame droplevel
  • java中跨域问题及解决方案
  • Spring XML 常用命名空间配置
  • React Native 项目实战 —— 记账本应用开发指南
  • 【React Native 性能优化:虚拟列表嵌套 ScrollView 问题全解析】
  • Java-数组-异常(基础)
  • 包含40个购物网站UI界面的psd适用于电商项目
  • 在 Linux 系统中通过 yum 安装 Sublime Text
  • 平压印刷机设计原理与关键技术研究
  • 网络安全防护:点击劫持
  • Linux 系统设置时区
  • Token 的流动性:为什么它是项目的关键?
  • 传染病传播模拟:基于社会接触网络的疫情预测模型
  • 【设计模式】UML图与工厂模式
  • 德信软件,512天,我的创作纪念日
  • RocketMQ总结
  • Rimini Street宣布将SAP ECC和S/4HANA支持延长至2040年,为企业提供替代路径
  • 基于大模型预测过敏性紫癜的技术方案大纲
  • Rust 学习笔记2025.6.13
  • Excel词典(xllex.dll)文件丢失或损坏导致功能异常?别慌!专业修复策略来了!
  • 排序--计数排序
  • Active Directory Certificate Services(AD CS)攻击基础
  • Java单例模式有几种实现方式
  • 为什么py文件打包后大小会增加很多?
  • 亚马逊云 Lambda 容器化部署教程
  • Rust 学习笔记:关于处理任意数量的 future 的练习题
  • Redis 使用场景、缓存什么数据?怎么保证数据一致性?
  • 自定义线程池 4.0
  • 基于51单片机的简易售货机系统
  • 使用 C/C++ 和 OpenCV 构建智能停车场视觉管理系统