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

NodeJS全栈开发面试题讲解——P9性能优化(Node.js 高级)

✅ 9.1 Node.js 的性能瓶颈一般出在哪?如何排查?

Node.js 单线程 + 异步模型,瓶颈常出现在:

  • 阻塞操作(如:同步 I/O、CPU 密集型计算)

  • 数据库慢查询 / 索引失效

  • 外部接口慢响应

  • 大量并发请求导致内存泄漏、事件堆积

🔍 排查工具

工具/命令用途
Chrome DevTools分析 V8 的 CPU/内存使用
clinic / 0x分析 event loop 阻塞点
pm2 monit监控 Node 应用性能(内存/CPU)
APM 工具(如SkyWalking)服务调用链追踪


✅ 9.2 如何避免主线程阻塞?哪些操作容易阻塞线程?

Node.js 的主线程负责处理事件循环,一旦被阻塞,所有请求都会卡住。

🚫 易阻塞的操作:

  • 文件同步 I/O(如 fs.readFileSync

  • 压缩/加密计算

  • 图片处理(如 sharp)

  • JSON 大对象解析

  • 无限循环 / 大型 for 循环

✅ 避免方案:

  • 异步处理(如 fs.promises

  • 使用 worker_threads 或子进程处理 CPU 密集型任务

  • 使用消息队列进行任务拆分

  • 限流、分批、延迟处理(如 setImmediate)


✅ 9.3 说说你对 Stream 的理解,什么时候用它来提升性能?

Stream 是 Node.js 的核心模块,适用于处理大文件或连续数据流,可极大降低内存占用。

🧠 Stream 四种类型:

  • Readable(可读流)→ 如 fs.createReadStream()

  • Writable(可写流)→ 如 fs.createWriteStream()

  • Duplex(双工流)

  • Transform(转换流)

📌 用法场景:

  • 文件上传/下载

  • 视频转码

  • 日志写入

  • 大 JSON 文件处理

fs.createReadStream('input.txt').pipe(transform).pipe(fs.createWriteStream('output.txt'));

✅ 9.4 如何用 cluster 或 worker_threads 实现多核并发?

Node.js 是单线程,但服务器有多核,我们可以利用 cluster 或 worker_threads 实现并发处理。

🔧 cluster 模块(常用于 HTTP 服务多进程)

if (cluster.isMaster) {for (let i = 0; i < os.cpus().length; i++) cluster.fork();
} else {app.listen(3000);
}

缺点:内存独立、无法共享数据


🔧 worker_threads(适合 CPU 密集型计算)

new Worker('./heavy-task.js', { workerData: { n: 100000 } });

适合拆分密码加密、图像处理、复杂循环等任务


✅ 9.5 如何对接口进行性能监控和报警?用过什么工具?

✅ 方法:

  • 接口响应时间统计(可打 log / 中间件埋点)

  • 异常监控(如 5xx 报错、耗时超过阈值)

  • 服务健康监控(/healthz)

  • 报警机制(钉钉机器人/飞书 webhook)

🧰 工具:

类型工具名
日志监控Winston、Pino + ELK
性能/APMSkyWalking、Jaeger、Zipkin
监控平台Prometheus + Grafana
告警集成Sentry / OpenTelemetry


✅ 9.6 如何做数据库性能优化?举几个具体手段。

✅ 优化点:

  1. 建索引

    • WHERE, JOIN, ORDER BY 常用字段建索引

    • 覆盖索引,避免回表

  2. 慢查询优化

    • 分析执行计划 EXPLAIN

    • 拆分大查询(LIMIT 分页 + 子查询)

  3. 缓存热点数据

    • 查询 Redis 缓存,命中即返回

  4. 字段优化

    • 避免 SELECT *,控制字段数量

    • 精简 JSON 类型字段


✅ 9.7 静态资源 / CDN 如何优化访问性能?

✅ 优化手段:

  • 静态资源部署到 CDN 节点(如:Cloudflare、阿里 CDN)

  • 利用 HTTP 缓存:

    • Cache-Control: max-age

    • ETag / Last-Modified

  • 图片压缩(WebP)、字体子集化

  • 按需加载 + 懒加载


✅ 9.8 如何实现缓存机制?本地缓存 vs Redis 缓存?

类型优点缺点
本地缓存(Map/LRU)快速、0延迟多进程不共享、易失效
Redis 缓存跨服务共享、高容量需要维护 Redis 服务、网络延迟

🧩 典型使用场景:

  • 本地缓存:接口幂等性缓存(短时)、配置缓存

  • Redis 缓存:用户数据缓存、热门文章、排行榜等

const val = await redis.get(`post:${id}`);
if (val) return JSON.parse(val);

✅ 9.9 如何处理高并发下的“缓存击穿 / 雪崩 / 穿透”?

类型说明解决方案
缓存穿透请求的 key 在缓存和数据库都不存在(如 user:-1)设置空值缓存 / 使用布隆过滤器
缓存击穿某个热点 key 突然过期,瞬间大量请求打到 DB加锁(互斥锁)+ 预加载
缓存雪崩大量缓存同时过期随机过期时间 / 分批加载 / 限流


✅ 9.10 前后端性能联调你做过哪些?前端也会影响响应时间吗?

是的,前端性能直接影响首屏加载时间、交互速度等用户体验。

✅ 联调优化经验:

  • 用 Chrome DevTools + Network 面板分析接口时间

  • 后端压缩响应(gzip)

  • 减少接口数量(合并请求)

  • 异步加载不影响首屏的数据

  • 数据分页 / 虚拟滚动

✅ 前端常见性能问题:

  • 不必要的 re-render(React)

  • Vue 的 computed 缓存未用好

  • 图表 / 表格渲染数据量过大

  • 图片未压缩、未懒加载


✅ 总结一图

编号关键点涉及知识
9.1性能瓶颈排查Chrome DevTools / APM
9.2主线程阻塞来源文件同步、CPU 任务、JSON大对象等
9.3Stream 用法文件处理、内存控制
9.4多核并发方案cluster + worker_threads
9.5接口监控与报警Prometheus、Grafana、Sentry
9.6数据库优化索引、分页、缓存
9.7静态资源优化CDN、缓存、压缩
9.8缓存策略本地缓存 vs Redis
9.9缓存三难问题击穿、雪崩、穿透
9.10前后端性能联调接口压缩、延迟分析、懒加载等

相关文章:

NodeJS全栈开发面试题讲解——P9性能优化(Node.js 高级)

✅ 9.1 Node.js 的性能瓶颈一般出在哪&#xff1f;如何排查&#xff1f; Node.js 单线程 异步模型&#xff0c;瓶颈常出现在&#xff1a; 阻塞操作&#xff08;如&#xff1a;同步 I/O、CPU 密集型计算&#xff09; 数据库慢查询 / 索引失效 外部接口慢响应 大量并发请求导…...

NVMe IP现状扫盲

SSD优势 与机械硬盘&#xff08;Hard Disk Driver, HDD&#xff09;相比&#xff0c;基于Flash的SSD具有更快的数据随机访问速度、更快的传输速率和更低的功耗优势&#xff0c;已经被广泛应用于各种计算领域和存储系统。SSD最初遵循为HDD设计的现有主机接口协议&#xff0c;例…...

5G-A时代与p2p

5G-A时代正在走来&#xff0c;那么对P2P的影响有多大。 5G-A作为5G向6G过渡的关键技术&#xff0c;将数据下载速率从千兆提升至万兆&#xff0c;上行速率从百兆提升至千兆&#xff0c;时延降至毫秒级。这种网络性能的跨越式提升&#xff0c;为P2P提供了更强大的底层支撑&#x…...

基于FPGA的DES加解密系统verilog实现,包含testbench和开发板硬件测试

目录 1.课题概述 2.系统测试效果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于FPGA的DES加解密系统verilog实现,包含testbench和开发板硬件测试。输入待加密数据&#xff0c;密钥&#xff0c;输出加密数据&#xff0c;然后通过解密模块输出解密后的原…...

基于生产-消费模式,使用Channel进行文件传输(Tcp方式)

Client端&#xff1a; #region 多文件传输 public class FileMetadata {public string FileName { get; set; }public long FileSize { get; set; } }class Program {const int PORT 8888;const int BUFFER_SIZE 60 * 1024 * 1024;//15s-50 25s-64 33s-32 27s-50 31s-40 25…...

tortoisegit 使用rebase修改历史提交

在 TortoiseGit 中使用 rebase 修改历史提交&#xff08;如修改提交信息、合并提交或删除提交&#xff09;的步骤如下&#xff1a; --- ### **一、修改最近一次提交** 1. **操作**&#xff1a; - 右键项目 → **TortoiseGit** → **提交(C)** - 勾选 **"Amend…...

Python----目标检测(《用于精确目标检测和语义分割的丰富特征层次结构》和R-CNN)

一、《用于精确目标检测和语义分割的丰富特征层次结构》 1.1、基本信息 原文标题&#xff1a;Rich feature hierarchies for accurate object detection and semantic segmentation 中文译名&#xff1a;用于精确目标检测与语义分割的丰富特征层次结构 版本&#xff1a;第5版技…...

Ansible 进阶 - Roles 与 Inventory 的高效组织

Ansible 进阶 - Roles 与 Inventory 的高效组织 如果说 Playbook 是一份完整的“菜谱”,那么 Role (角色) 就可以被看作是制作这道菜(或一桌菜)所需的标准化“备料包”或“半成品组件”。例如,我们可以有一个“Nginx Web 服务器安装配置 Role”、“MySQL 数据库基础设置 Ro…...

极简以太彩光网络解决方案4.0正式发布,“彩光”重构园区网络极简之道

5月28日下午,锐捷网络在京举办以“光,本该如此‘简单’”为主题的发布会,正式发布极简以太彩光网络解决方案4.0。作为“彩光”方案的全新进化版本,极简以太彩光4.0从用户需求出发,聚焦场景洞察,开启了一场从底层基因出发的极简革命,通过架构、部署、运维等多维度的创新升级,以强…...

国芯思辰| 霍尔电流传感器AH811为蓄电池负载检测系统安全护航

在电动车、储能电站、不间断电源&#xff08;UPS&#xff09;等设备中&#xff0c;蓄电池作为关键的储能单元&#xff0c;其运行状态直接关系到设备的稳定性和使用寿命。而准确监测蓄电池的负载情况&#xff0c;是保障其安全、高效运行的关键。霍尔电流传感器 AH811凭借独特的技…...

TortoiseSVN账号切换

SVN登录配置及账号切换 本文主要为了解答svn客户端如何进行账号登录及切换不同权限账号的方式。 一、环境准备与客户端安装 安装TortoiseSVN客户端 ​​下载地址​​&#xff1a;TortoiseSVN官网 ​​安装步骤​​&#xff1a; 双击安装包&#xff0c;按向导完成安装后&#x…...

2025年05月28日Github流行趋势

项目名称&#xff1a;agenticSeek 项目地址url&#xff1a;https://github.com/Fosowl/agenticSeek项目语言&#xff1a;Python历史star数&#xff1a;10352今日star数&#xff1a;2444项目维护者&#xff1a;Fosowl, steveh8758, klimentij, ganeshnikhil, apps/copilot-pull-…...

精益数据分析(91/126):商业模式与阶段匹配的指标体系构建

精益数据分析&#xff08;91/126&#xff09;&#xff1a;商业模式与阶段匹配的指标体系构建 在创业的不同阶段&#xff0c;企业面临的核心问题与目标差异显著&#xff0c;这就要求我们依据商业模式和所处阶段&#xff0c;动态调整关键指标体系。今天&#xff0c;我们将深入解…...

篇章五 数据结构——链表(一)

目录 1.ArrayList的缺陷 2. 链表 2.1 链表的概念及结构 2.2 链表结构 1. 单向或者双向 2.带头或者不带头 3.循环或者非循环 2.3 链表的实现 1.完整代码 2.图解 3.显示方法 4.链表大小 5. 链表是否存在 key 值 6.头插法 7.尾插法 8.中间插入 9.删除key值节点 10.…...

一文清晰理解目标检测指标计算

一、核心概念 1.交并比IoU 预测边界框与真实边界框区域的重叠比&#xff0c;取值范围为[0,1] 设预测边界框为&#xff0c;真实边界框为 公式&#xff1a; IoU计算为两个边界框交集面积与并集面积之比&#xff0c;图示如下 IoU值越高&#xff0c;表示预测边界框与真实边界框的对…...

【MySQL】索引下推减少回表次数

一、简述索引下推 “索引下推”是数据库领域的一个术语&#xff0c;主要出现在MySQL&#xff08;尤其是InnoDB存储引擎&#xff09;中&#xff0c;英文名叫 Index Condition Pushdown&#xff0c;简称 ICP。就是过滤的动作由下层的存储引擎层通过使用索引来完成&#xff0c;而…...

Artificial Analysis2025年Q1人工智能发展六大趋势总结

2025年第一季度人工智能发展六大趋势总结 ——基于《Artificial Analysis 2025年Q1人工智能报告》 趋势一&#xff1a;AI持续进步&#xff0c;竞争格局白热化 前沿模型竞争加剧&#xff1a;OpenAI凭借“o4-mini&#xff08;高智能版&#xff09;”保持领先&#xff0c;但谷歌&…...

DeepSeek模型高级应用:提示工程与Few-shot学习实战指南

引言 在DeepSeek模型的实际应用中,提示工程(Prompt Engineering)和Few-shot学习正成为提升模型性能的关键技术。相比全参数微调,这些技术能以更低成本实现领域适配。本文将深入解析DeepSeek模型的高级提示技巧、动态Few-shot实现方案,以及混合微调策略,帮助开发者在资源受…...

Android高级开发第三篇 - JNI异常处理与线程安全编程

Android高级开发第三篇 - JNI异常处理与线程安全编程 Android高级开发第三篇 - JNI异常处理与线程安全编程引言为什么要关注异常处理和线程安全&#xff1f;第一部分&#xff1a;JNI异常处理基础什么是JNI异常&#xff1f;检查和处理Java异常从C代码抛出Java异常异常处理的最佳…...

企业级应用狂潮:从Spotify到LinkedIn的Llama实战手册

当Spotify用Llama生成的个性化推荐文案让用户播放时长激增30%, 当LinkedIn靠开源框架将社交推荐延迟降低40%—— 企业级AI战场正经历从“技术炫技”到“利润引擎”的残酷蜕变。 核心数据:企业采用率爆发式增长(2025 Gartner调研) 指标2023年2025年增幅开源模型采用率42%87%…...

高效管理 Python 项目的 UV 工具指南

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 持续学习&#xff0c;不断…...

QT中子线程触发主线程弹窗并阻塞等待用户响应

目录 QT中子线程触发主线程弹窗并阻塞等待用户响应一、使用QMetaObject::invokeMethod实现子线程安全触发主线程弹窗并阻塞等待&#xff1a;&#x1f527; Qt多线程弹窗&#xff1a;安全阻塞等待方案&#xff08;QMetaObject::invokeMethod详解&#xff09;&#x1f9e0; 一、核…...

初识vue3(vue简介,环境配置,setup语法糖)

一&#xff0c;前言 今天学习vue3 二&#xff0c;vue简介及如何创建vue工程 Vue 3 简介 Vue.js&#xff08;读音 /vjuː/&#xff0c;类似 “view”&#xff09;是一款流行的渐进式 JavaScript 框架&#xff0c;用于构建用户界面。Vue 3 是其第三代主要版本&#xff0c;于 …...

HarmonyOS NEXT~鸿蒙开发工具CodeGenie:AI驱动的开发效率革命

HarmonyOS NEXT&#xff5e;鸿蒙开发工具CodeGenie&#xff1a;AI驱动的开发效率革命 一、CodeGenie概述 DevEco CodeGenie是华为鸿蒙开发生态中的一款AI辅助编程工具&#xff0c;集成于DevEco Studio IDE中&#xff0c;为开发者提供全方位的智能编程支持。这款工具通过AI技术…...

LeetCode-链表操作题目

虚拟头指针&#xff0c;在当前head的前面建立一个虚拟头指针&#xff0c;然后哪怕当前的head的val等于提供的val也能进行统一操作 203移除链表元素简单题 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(…...

【ARM】MDK浏览信息的生成对于构建时间的影响

1、 文档目标 用于了解MDK的代码浏览信息的生成对于工程的构建是否会产生影响。 2、 问题场景 客户在MDK中使用Compiler 5对于工程进行构建过程中发现&#xff0c;对于是否产生浏览信息会对于构建时间产生一定的影响。在Options中Output栏中勾选了Browse Information后&#…...

Python模块中__all__变量失效问题深度解析

文章目录 Python模块中__all__变量失效问题深度解析一、__all__ 的正确作用场景二、__all__ 不起作用的常见原因1. 未使用 from ... import \* 导入2. __all__ 定义不完整或错误3. 子模块未正确导出4. Python 解释器缓存问题5. 相对导入路径错误 三、解决方案1. 确保使用 from …...

py爬虫的话,selenium是不是能完全取代requests?

selenium适合动态网页抓取&#xff0c;因为它可以控制浏览器去点击、加载网页&#xff0c;requests则比较适合静态网页采集&#xff0c;它非常轻量化速度快&#xff0c;没有浏览器开销&#xff0c;占用资源少。当然如果不考虑资源占用和速度&#xff0c;selenium是可以替代requ…...

docker B站学习

镜像是一个只读的模板&#xff0c;用来创建容器 容器是docker的运行实例&#xff0c;提供了独立可移植的环境 https://www.bilibili.com/video/BV11L411g7U1?spm_id_from333.788.videopod.episodes&vd_sourcee60c804914459274157197c4388a4d2f&p3 目录挂载 尚硅谷doc…...

SpringBoot高校宿舍信息管理系统小程序

概述 基于SpringBoot的高校宿舍信息管理系统小程序项目&#xff0c;这是一款非常适合高校使用的信息化管理工具。该系统包含了完整的宿舍管理功能模块&#xff0c;采用主流技术栈开发&#xff0c;代码结构清晰&#xff0c;非常适合学习和二次开发。 主要内容 这个宿舍管理系…...