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

SpringCloud Zuul 使用教程

SpringCloud Zuul 使用教程

目录

  1. Zuul 简介
  2. 环境准备
  3. 搭建 Zuul 网关
    • 3.1 Maven 依赖
    • 3.2 配置文件
    • 3.3 启动类注解
  4. 基本路由配置
    • 4.1 简单路由
    • 4.2 基于路径的路由
    • 4.3 基于服务的路由
  5. Zuul 高级配置
    • 5.1 过滤器配置
    • 5.2 限流与熔断
    • 5.3 负载均衡
    • 5.4 安全配置
    • 5.5 动态路由
  6. Zuul 与 Eureka 集成
  7. 监控与统计
  8. 常见问题与解决

Zuul 简介

Zuul 是 Netflix 开源的 API 网关组件,属于 Spring Cloud Netflix 项目的一部分。Zuul 作为网关,提供了以下功能:

路由与转发:将客户端请求转发到后端服务。
动态路由:根据请求的 URL 或其他规则动态分发请求。
过滤器机制:支持自定义过滤器,实现安全、权限校验、监控等功能。
负载均衡:与 Ribbon 结合,实现服务调用的负载均衡。
熔断保护:与 Hystrix 集成,提供服务的自我保护机制,防止故障扩散。

Zuul 的应用场景包括但不限于:
• 微服务架构中的统一入口
• API 管理与安全控制
• 实时监控与日志记录
• 服务流量管理与限流


环境准备

JDK:1.8 或更高版本
Maven:3.x 或更高版本
Spring Boot:2.5.x 或 2.6.x
Spring Cloud:2020.x 或 2021.x
开发工具:IntelliJ IDEA 或 Eclipse

确保您的网络环境可以访问 Maven 中央仓库,以便下载所需的依赖。


搭建 Zuul 网关

3.1 Maven 依赖

pom.xml 文件中添加以下依赖:

<dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-zuul</artifactId></dependency><!-- 如果需要与 Eureka 集成,可添加以下依赖 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>
</dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>2021.0.1</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>

注意:从 Spring Cloud 2020 版本开始,Zuul 由 spring-cloud-starter-netflix-zuul 提供支持,但使用方式与之前版本略有不同。对于新项目,建议检查 Spring Cloud 官方文档获取最新配置。

3.2 配置文件

application.yml 中添加以下配置:

server:port: 8080spring:application:name: zuul-gatewayeureka:client:service-url:defaultZone: http://localhost:8761/eureka/ # Eureka Server 地址zuul:routes:service-provider:path: /provider/**serviceId: service-providerservice-consumer:path: /consumer/**serviceId: service-consumerignored-patterns: /health/** # 忽略的路径prefix: /api # 统一前缀

配置说明
server.port:网关的端口号。
spring.application.name:应用的名称,用于服务注册。
eureka.client.service-url.defaultZone:Eureka Server 地址,进行服务注册与发现。
zuul.routes:定义路由规则,将特定路径转发到对应的服务。
path:客户端请求的匹配路径。
serviceId:对应服务的名称。
zuul.ignored-patterns:忽略不需要转发的路径。
zuul.prefix:为所有转发路径添加统一前缀。

3.3 启动类注解

创建启动类并添加 @EnableZuulProxy 注解:

@SpringBootApplication
@EnableZuulProxy // 启用 Zuul 代理功能
public class ZuulGatewayApplication {public static void main(String[] args) {SpringApplication.run(ZuulGatewayApplication.class, args);}
}

启动应用后,Zuul 网关将根据配置文件进行服务代理。


基本路由配置

4.1 简单路由

通过单个 URL 转发请求,例如将 /hello 请求转发到后端服务的 /hello 接口。

配置

zuul:routes:hello-service:path: /hello/**url: http://localhost:8082

请求

http://localhost:8080/hello/world

转发

http://localhost:8082/hello/world

4.2 基于路径的路由

根据请求路径的一部分来确定具体的后端服务。

配置

zuul:routes:user-service:path: /user/**serviceId: user-serviceorder-service:path: /order/**serviceId: order-service

请求

http://localhost:8080/user/profile

转发user-service/profile 接口。


4.3 基于服务的路由

使用服务注册中心(如 Eureka)动态发现服务并转发请求。

配置

zuul:routes:payment-service:path: /payment/**serviceId: payment-service

流程

  1. Eureka 注册中心中服务名为 payment-service 的所有实例。
  2. Zuul 根据负载均衡策略选择一个实例进行转发。

Zuul 高级配置

5.1 过滤器配置

Zuul 提供多种过滤器(Pre、Route、Post 等)来实现请求的预处理和后处理。可以自定义过滤器以实现业务需求。

示例

创建一个自定义前置过滤器:

import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import javax.servlet.http.HttpServletRequest;public class CustomPreFilter extends ZuulFilter {@Overridepublic String filterType() {return "pre"; // 前置过滤器}@Overridepublic int filterOrder() {return 1; // 执行顺序}@Overridepublic boolean shouldFilter() {return true; // 是否应用过滤器}@Overridepublic Object run() {RequestContext ctx = RequestContext.getCurrentContext();HttpServletRequest request = ctx.getRequest();System.out.println("请求来源: " + request.getRequestURL());// 可以进行权限校验等操作return null;}
}

注册过滤器

将过滤器注册为 Spring Bean:

@Configuration
public class ZuulConfig {@Beanpublic CustomPreFilter customPreFilter() {return new CustomPreFilter();}
}

5.2 限流与熔断

Zuul 可以与 Hystrix 集成实现熔断,与 Bucket4j 或其他限流库集成实现限流。

熔断配置

hystrix:command:default:execution:isolation:thread:timeoutInMilliseconds: 1000 # 设置超时时间

限流实现

Zuul 本身没有内置限流功能,需结合第三方库或自定义过滤器实现。例如,使用 Redis 和 Lua 脚本进行限流。


5.3 负载均衡

Zuul 默认集成 Ribbon 作为负载均衡器。可以通过以下配置自定义 Ribbon 的行为:

ribbon:ReadTimeout: 5000 # 读取超时时间ConnectTimeout: 3000 # 连接超时时间OkToRetryOnAllOperations: true # 重试所有操作MaxAutoRetries: 1MaxAutoRetriesNextServer: 1

通过 Eureka 实现动态服务发现和负载均衡。


5.4 安全配置

Zuul 提供基本的身份验证和安全控制,可以通过自定义过滤器实现更复杂的安全需求。

示例:添加 JWT 认证

  1. 创建 JWT 过滤器,验证请求中的 JWT 令牌。
  2. 配置过滤器顺序,优先于其他过滤器执行。
  3. 拒绝无效令牌的请求,返回相应错误信息。

5.5 动态路由

实现动态路由可以基于数据库或配置文件动态更新路由规则,而无需重启服务。

实现步骤

  1. 创建数据库表,管理路由规则。
  2. 在 Zuul 中读取路由配置,并动态注册路由。
  3. 监听数据库变化,动态更新路由。

示例

@Configuration
public class DynamicRouteConfig {@Autowiredprivate ZuulProperties zuulProperties;@PostConstructpublic void addRoutes() {// 从数据库读取路由规则并添加到 zuulProperties}
}

Zuul 与 Eureka 集成

Zuul 与 Eureka 集成后,可以动态发现服务,并基于服务名称进行路由。这种集成方式简化了服务管理和路由配置。

步骤

  1. 在 Zuul 网关的 pom.xml 中添加 Eureka 客户端依赖。
  2. application.yml 中配置 Eureka Server 地址。
  3. 在 Zuul 的路由配置中使用 serviceId 代替固定 URL。

示例配置

zuul:routes:user-service:path: /user/**serviceId: user-service

这样,/user/** 的请求将自动负载均衡到所有注册在 Eureka 为 user-service 的服务实例。


监控与统计

Zuul 可以通过集成 Hystrix 和 Turbine 实现服务调用的监控与统计。

配置步骤

  1. 集成 Hystrix 仪表盘
    • 在网关的 pom.xml 添加 spring-cloud-starter-netflix-hystrix-dashboard 依赖。
    • 配置 Hystrix Dashboard 地址。

  2. 集成 Turbine
    • 添加 spring-cloud-starter-netflix-turbine 依赖。
    • 配置集群中的服务实例。

  3. 访问 Hystrix Dashboard,监控各服务的健康状态和调用情况。

优点
• 实时监控服务调用状态
• 分析服务性能瓶颈
• 了解服务健康状况,及时处理故障


常见问题与解决

  1. Zuul 网关响应缓慢
    检查:服务提供者性能及网络状况
    解决:优化服务性能,增加网关或后端服务实例

  2. 路由规则不生效
    检查:配置文件中的路由路径和 serviceId 是否正确
    解决:确保路径无拼写错误,服务已在注册中心注册

  3. 过滤器报错
    检查:自定义过滤器的逻辑是否正确,是否影响后续过滤器执行
    解决:调试过滤器,捕获异常,确保不中断请求链

  4. 集成 Eureka 后无法发现服务
    检查:Eureka Server 是否正常运行,服务是否正确注册
    解决:验证服务注册状态,检查 Eureka 配置及网络连接

  5. 跨域问题
    检查:前端请求被浏览器阻止
    解决:在 Zuul 网关中添加 CORS 过滤器,允许相应域名的请求


总结

Zuul 作为强大的 API 网关组件,提供了丰富的功能,帮助构建高效、灵活的微服务架构。通过本文的详细介绍,您应该能够:

  1. 搭建并配置 Zuul 网关
  2. 配置基本和高级的路由规则
  3. 集成 Zuul 与 Eureka 实现动态服务发现
  4. 使用过滤器增强网关功能
  5. 实现监控和统计,及时发现并解决问题

在实际应用中,建议结合业务需求,灵活配置 Zuul,确保其高效、稳定运行,并与整体微服务架构无缝集成。

相关文章:

SpringCloud Zuul 使用教程

SpringCloud Zuul 使用教程 目录 Zuul 简介环境准备搭建 Zuul 网关 • 3.1 Maven 依赖 • 3.2 配置文件 • 3.3 启动类注解基本路由配置 • 4.1 简单路由 • 4.2 基于路径的路由 • 4.3 基于服务的路由Zuul 高级配置 • 5.1 过滤器配置 • 5.2 限流与熔断 • 5.3 负载均衡 •…...

介绍一款基于MinerU的PDF翻译工具

一。简介 Fast pdf translate是一款pdf翻译软件&#xff0c;基于MinerU实现pdf转markdown的功能&#xff0c;接着对markdown进行分割&#xff0c; 送给大模型翻译&#xff0c;最后组装翻译结果并由pypandoc生成结果pdf。 git地址&#xff1a; https://github.com/kv1830/fast…...

轻量级TLS反向代理工具TLS-reverse-proxy:打造安全通信桥梁

在数字化浪潮席卷全球的今天&#xff0c;数据隐私与传输安全已成为企业及个人的核心关切。TLS&#xff08;传输层安全协议&#xff09;作为互联网通信的"隐形卫士"&#xff0c;承担着保护数据在传输过程中不被窃取或篡改的重要使命。然而&#xff0c;对于许多传统服务…...

SQL问题分析与诊断(8)——前提

8.1. 前提 与其他关系库类似&#xff0c;SQL Server中&#xff0c;当我们对存在性能问题的SQL语句进行分析和诊断时&#xff0c;除了获取该SQL语句本身外&#xff0c;还需要获取SQL语句相应的查询计划及其相关的数据环境。这里&#xff0c;所谓数据环境&#xff0c;具体是指SQ…...

关于cmd中出现无法识别某某指令的问题

今天来解决以下这个比较常见的问题&#xff0c;安装各种软件都可能会发生&#xff0c;一般是安装时没勾选注册环境变量&#xff0c;导致cmd无法识别该指令。例如mysql&#xff0c;git等&#xff0c;一般初学者可能不太清楚。 解决这类问题最主要的是了解环境变量的概念&#x…...

如何处理不同输入类型(例如邮箱、电话号码)的验证?

处理不同输入类型(如邮箱、电话号码)的验证可以通过多种方法实现,包括使用 HTML5 内置验证、JavaScript/jQuery 自定义验证和正则表达式。以下是一些常用的验证方法和示例。 1. 使用 HTML5 内置验证 HTML5 提供了一些内置的输入类型,可以自动处理基本的验证。 示例 <…...

Redis集群哨兵相关面试题

目录 1.Redis 主从复制的实现原理是什么? 详解 补充增量同步 replication buffer repl backlog buffer 2.Redis 主从复制的常见拓扑结构有哪些? 3.Redis 复制延迟的常见原因有哪些? 4.Redis 的哨兵机制是什么? 主观下线和客观下线 哨兵leader如何选出来的&#x…...

【CXX-Qt】4.1 extern “RustQt“

QObjects Properties Methods Signals #[cxx_qt::bridge] mod ffi {extern "RustQt" {} }extern “RustQt” 部分是 CXX-Qt 桥接的核心&#xff0c;用于声明 Rust 类型和签名&#xff0c;使其可用于 Qt 和 C。 CXX-Qt 代码生成器使用你的 extern “RustQt” 部…...

当 0 编程基础,用 ChatGPT 和 Cursor 开发同一应用时… |AI 开发初体验

求人不如求己。 事情是这样的&#xff0c;前段时间&#xff0c;我看了本书&#xff0c;书里介绍了款应用&#xff0c;能计算财富自由价格&#xff0c;还能制定退休计划。 结果&#xff0c;我迫不及待去下载这个应用时&#xff0c;发现这应用功能残缺&#xff0c;完全不可用。 …...

如何排查C++程序的CPU占用过高的问题

文章目录 可能的原因程序设计的BUG系统资源问题恶意软件硬件问题 通常步骤一个简单的问题代码在windows平台上如何排查Windows Process ExplorerWinDBG 在Linux平台如何排查使用TOP GDBPerf 可能的原因 程序设计的BUG 有死循环低效算法与数据结构滥用自旋锁频繁的系统调用&a…...

数据库练习

完善t_hero表 -- 添加作者字段 alter table t_hero add author varchar(100);-- 更新数据update t_hero set author "曹雪芹" where id 1; update t_hero set author "曹雪芹" where id 2; update t_hero set author "曹雪芹" where id…...

nodejs-原型污染链

还是老规矩&#xff0c;边写边学&#xff0c;先分享两篇文章 深入理解 JavaScript Prototype 污染攻击 | 离别歌 《JavaScript百炼成仙》 全书知识点整理-CSDN博客 Ctfshow web入门 nodejs篇 web334-web344_web334 ctfshow-CSDN博客 334-js审计 var express require(expr…...

无人机与AI技术结合的突破性应用场景

1. 自主导航与动态避障 技术栈&#xff1a;SLAM 强化学习 (PPO算法) 代码示例&#xff08;Python PyTorch&#xff09;&#xff1a; import torch class DronePPO(torch.nn.Module):def __init__(self):super().__init__()self.actor torch.nn.Sequential(torch.nn.Linear…...

jsBridge在vue中使用

创建jsBridge.js /* eslint-disable */ function connectWebViewJavascriptBridge (callback) {if (window.WebViewJavascriptBridge) {callback(window.WebViewJavascriptBridge)} else {document.addEventListener(WebViewJavascriptBridgeReady, function () { callback(wi…...

Windows下docker使用教程

docker安装 镜像制作镜像加载容器创建更新镜像导出镜像 Windows10安装dockerdocker image制作docker 镜像加载docker 容器创建更新imageimage 导出为.tar文件 #以Windows10 、11为例 linux和Windows区别在于docker安装的程序是哪个操作系统的&#xff0c;后面的内容其实不变 …...

iOS:GCD信号量、同步、异步的使用方法

信号量的详细用法&#xff0c;可以用此方法进行队列管理 -(void)dispatchSignal{//crate的value表示&#xff0c;最多几个资源可访问dispatch_semaphore_t semaphore dispatch_semaphore_create(3);dispatch_queue_t quene dispatch_get_global_queue(DISPATCH_QUEUE_PRIORI…...

Nginx相关漏洞解析

一、CRLF注入漏洞 原理&#xff1a;Nginx将传入的url进行解码&#xff0c;对其中的%0a%0d替换成换行符&#xff0c;导致后面的数据注入至头部&#xff0c;造成CRLF 注入漏洞 1、开环境 2、访问网站&#xff0c;并抓包 3、构造请求头 %0ASet-cookie:JSPSESSID%3D1 这样就可以…...

SpringCloud构建一个服务步骤

Spring Cloud是一个用于构建分布式系统的开源框架&#xff0c;可以帮助开发者快速构建各种云原生应用。下面是一个简单的步骤&#xff0c;展示如何使用Spring Cloud构建一个服务&#xff1a; 创建一个Spring Boot项目&#xff1a;首先需要创建一个Spring Boot项目作为基础。可以…...

MySQL中怎么分析性能?

MySQL中主要有4种方式可以分析数据库性能&#xff0c;分别是慢查询日志&#xff0c;profile&#xff0c;Com_xxx和explain。 慢查询日志 先用下面命令查询慢查询日志是否开启&#xff0c; show variables like slow_query_log;# 一般默认都是以下结果 ---------------------…...

MinGW与使用VScode写C语言适配

压缩包 通过网盘分享的文件&#xff1a;MinGW.zip 链接: https://pan.baidu.com/s/1QB-Zkuk2lCIZuVSHc-5T6A 提取码: 2c2q 需要下载的插件 1.翻译 找到VScode页面&#xff0c;从上数第4个&#xff0c;点击扩展&#xff08;以下通此&#xff09; 搜索---Chinese--点击---安装--o…...

k8s存储介绍(五)PV与PVC

在 Kubernetes&#xff08;k8s&#xff09;中&#xff0c;持久化存储&#xff08;Persistent Storage&#xff09;是一个非常重要的概念&#xff0c;因为 Pod 本身是无状态的&#xff0c;重启后会丢失数据。为了支持有状态应用&#xff0c;Kubernetes 提供了持久化存储的机制&a…...

LangChain开发(五)消息管理与聊天历史存储

文章目录 消息存储在内存使用单参数session_id配置会话唯一键 消息持久化到redis安装redis依赖安装redis调用聊天接口&#xff0c;看Redis是否存储历史记录 裁剪消息总结记忆源码地址参考资料 消息存储在内存 我们展示一个简单的示例&#xff0c;其中聊天历史保存在内存中&…...

HTML 表单处理进阶:验证与提交机制的学习心得与进度(一)

引言 在前端开发的广袤领域中&#xff0c;HTML 表单处理堪称基石般的存在&#xff0c;是构建交互性 Web 应用不可或缺的关键环节。从日常频繁使用的登录注册表单&#xff0c;到功能多样的搜索栏、反馈表单&#xff0c;HTML 表单如同桥梁&#xff0c;紧密连接着用户与 Web 应用…...

【文献25/03/26】Hyperspectral Image Transformer Classification Networks

高光谱图像Transformer分类网络 Hyperspectral Image Transformer Classification Networks | IEEE Journals & Magazine | IEEE Xplore 摘要 高光谱图像&#xff08;HSI&#xff09;分类是地球观测任务中的一项重要工作。 卷积神经网络&#xff08;CNN&#xff09;凭借…...

数字转换(c++)

【题目描述】 如果一个数 xx 的约数和 yy &#xff08;不包括他本身&#xff09;比他本身小&#xff0c;那么 xx 可以变成 yy &#xff0c;yy 也可以变成 xx 。例如 44 可以变为 33 &#xff0c;11 可以变为 77 。限定所有数字变换在不超过 nn 的正整数范围内进行&#xff0c;…...

WPF ContentPresenter详解2

ContentPresenter与ContentControl的区别 ContentControl 和 ContentPresenter 是 WPF 中两个相关的控件&#xff0c;但它们在用途和功能上有一些关键的区别。理解这两者的区别和联系有助于更好地设计和开发用户界面。 1. 类层次结构 ContentControl&#xff1a;位于 WPF 控件…...

【git】认识git的本地仓库

1.创建本地仓库 git init2. 配置本地仓库 git config user.name xxx git config user.email xxx3. 认识本地仓库 创建完本地仓库后&#xff0c;目录下会有一个.git文件&#xff0c;这个就是本地仓库 而创建本地仓库的目录叫做工作区&#xff0c;我们不能对.git文件进行任何手…...

正则表达式基本语法和Java中的简单使用

先来个例子 public static final Pattern CHINESE_PATTERN Pattern.compile("[\\u4e00-\\u9fa5]"); / 检测字符串是否包含汉字 String text "Hello 世界"; boolean hasChinese CHINESE_PATTERN.matcher(text).find(); // 返回 true// 提取所有汉字 Mat…...

【大模型】什么是循环神经网络(RNNs)

在人工智能&#xff08;AI&#xff09;的世界里&#xff0c;**循环神经网络&#xff08;Recurrent Neural Networks, RNNs&#xff09;**是一种非常强大的工具&#xff0c;特别适合处理序列数据。无论是语言、时间序列还是音乐&#xff0c;RNNs都能帮助我们理解和预测这些数据的…...

Leetcode 交错字符串

java solution class Solution {public boolean isInterleave(String s1, String s2, String s3) {//首先获取这三个字符串的长度int m s1.length();int n s2.length();int l s3.length();if(m n ! l) return false;//创建dp数组,dp[i][j]其含义是s3的前ij个字符是否可以由…...

Vue动态绑定:文本框、单选按钮、下拉列表、多选按钮

Vue 指令系列文章: 《Vue插值:双大括号标签、v-text、v-html、v-bind 指令》 《Vue指令:v-cloak、v-once、v-pre 指令》 《Vue条件判断:v-if、v-else、v-else-if、v-show 指令》 《Vue循环遍历:v-for 指令》 《Vue事件处理:v-on 指令》 《Vue表单元素绑定:v-model 指令》…...

MySQL - 数据库基础操作

SQL语句 结构化查询语言(Structured Query Language)&#xff0c;在关系型数据库上执行数据操作、数据检索以及数据维护的标准语言。 分类 DDL 数据定义语言(Data Definition Language)&#xff0c;定义对数据库对象(库、表、列、索引)的操作。 DML 数据操作语言(Data Manip…...

从入门到精通:SQL注入防御与攻防实战——红队如何突破,蓝队如何应对!

引言&#xff1a;为什么SQL注入攻击依然如此强大&#xff1f; SQL注入&#xff08;SQL Injection&#xff09;是最古老且最常见的Web应用漏洞之一。尽管很多公司和组织都已经采取了WAF、防火墙、数据库隔离等防护措施&#xff0c;但SQL注入依然在许多情况下能够突破防线&#…...

关于优麒麟ukylin如何更换清华源以及ubuntu24.04安装gcc-i686-linux-gnu找不到包的问题

打算把这个文章当成一个调试Linux bug的汇总&#xff0c;会持续更新 1、关于优麒麟ukylin如何更换清华源 &#xff08;1&#xff09;首先打开命令行&#xff0c;切换root权限 su root 输入密码 如果第一次使用ubuntu会提示密码不正确&#xff0c;输入 sudo passwd root …...

Spring Boot 自定义 Starter 组件的技术指南

1、简述 Spring Boot 通过 Starter 机制&#xff0c;让开发者可以快速集成第三方组件。在企业级开发中&#xff0c;我们常常需要封装自己的 Starter 组件&#xff0c;以提高代码复用性&#xff0c;简化配置&#xff0c;并实现可插拔的模块化开发。 Spring Boot Starter 机制 …...

基于Spring Boot的ONLY在线商城系统设计与实现的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

HarmonyOS 之 @Require 装饰器自学指南

在 HarmonyOS 应用开发工作中&#xff0c;我频繁碰到组件初始化传参校验的难题。在复杂的组件嵌套里&#xff0c;要是无法确保必要参数在构造时准确传入&#xff0c;就极易引发运行时错误&#xff0c;而且排查起来费时费力。一次偶然的机会&#xff0c;我接触到了 Require 装饰…...

【Unity】 HTFramework框架(六十三)SerializableDictionary可序列化字典

更新日期&#xff1a;2025年3月26日。 Github 仓库&#xff1a;https://github.com/SaiTingHu/HTFramework Gitee 仓库&#xff1a;https://gitee.com/SaiTingHu/HTFramework 索引 一、SerializableDictionary可序列化字典1.使用SerializableDictionary2.实现思路 二、Serializ…...

JavaScript的性能优化指导

JavaScript 的性能优化可以从多个层面入手&#xff0c;涵盖代码执行效率、内存管理、DOM 操作、网络请求等。以下是一些关键优化策略&#xff1a; 一、代码执行优化 减少作用域链查找 避免在循环中频繁访问全局变量或深层嵌套的属性&#xff0c;将其缓存到局部变量中。 // 优化…...

如何在 Vue 项目中使用v - for指令进行列表渲染,如何优化其性能?

大白话如何在 Vue 项目中使用v - for指令进行列表渲染&#xff0c;如何优化其性能&#xff1f; 在Vue项目里&#xff0c;咱们常常会碰到要把一组数据渲染成列表的状况。这时候&#xff0c;v-for指令就派上大用场啦&#xff01;它能让咱们轻松地把数据数组里的每个元素渲染成对…...

Notepad++ 替换 换行符 为 逗号

多行转一行&#xff0c;逗号分隔 SPO2025032575773 SPO2025032575772 SPO2025032575771 SPO2025032575771 SPO2025032575770为了方便快速替换&#xff0c;我们需要先知道这样类型的数据都存在哪些换行符。 点击【视图】-【显示符号】-【显示行尾符】 对于显示的行尾换行符【C…...

《基于机器学习发电数据电量预测》开题报告

个人主页&#xff1a;大数据蟒行探索者 目录 一、选题背景、研究意义及文献综述 &#xff08;一&#xff09;选题背景 &#xff08;二&#xff09;选题意义 &#xff08;三&#xff09;文献综述 1. 国内外研究现状 2. 未来方向展望 二、研究的基本内容&#xff0c;拟解…...

【Linux】MAC帧

目录 一、MAC帧 &#xff08;一&#xff09;IP地址和MAC地址 &#xff08;二&#xff09;MAC帧格式 &#xff08;三&#xff09;MTU对IP协议的影响、 &#xff08;四&#xff09;MTU对UDP协议的影响 &#xff08;五&#xff09;MTU对TCP协议的影响 二、以太网协议 &…...

企业入驻成都国际数字影像产业园,可享150多项专业服务

企业入驻成都国际数字影像产业园&#xff0c;可享150多项专业服务 全方位赋能&#xff0c;助力影像企业腾飞 入驻成都国际数字影像产业园&#xff0c;企业将获得一个涵盖超过150项专业服务的全周期、一站式支持体系&#xff0c;旨在精准解决企业发展各阶段的核心需求&#xf…...

飞速(FS)企业网布线解决方案:赋能能源行业客户高效网络部署与智能化管理

国家&#xff1a;中国 行业&#xff1a;能源与公用事业 网络类型&#xff1a;楼宇主干局域网 方案类型&#xff1a;企业网络布线 案例亮点 部署高密度、高性能飞速&#xff08;FS&#xff09;24口千兆企业级交换机&#xff0c;有效节省客户机房安装空间&#xff0c;提高并发…...

前端性能优化方案总结

首屏加载优化 把老版本的库替换成新版本&#xff0c;支持tree shaking的库&#xff0c;按需引入&#xff0c;只打包用到的部分&#xff0c;大大优化项目体积&#xff0c;加快项目的首屏渲染。 能不用第三方库&#xff0c;就不用第三方库&#xff0c;比如时间格式化&#xff0c;…...

基于ADMM无穷范数检测算法的MIMO通信系统信号检测MATLAB仿真,对比ML,MMSE,ZF以及LAMA

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 ADMM算法 4.2 最大似然ML检测算法 4.3 最小均方误差&#xff08;MMSE&#xff09;检测算法 4.4 迫零&#xff08;ZF&#xff09;检测算法 4.5 OCD_MMSE 检测算法 4.6 LAMA检测算法 …...

[plugin:vite:import-analysis] Cannot find module ‘vuex\dist\vuex.esm-bundler

我的是升级了uview-plus版本&#xff0c;导致一直报错&#xff0c;即时将版本降回去也报错&#xff0c;需要将package-lock.json和package-lock.yaml文件删掉重新安装软件包...

用Deepseek + Kimi 快速生成高质量的ppt

AI系列文章&#xff1a; AWS AI认证考试中经常提及几个重要的工具介绍 简单理解机器学习中top_k、top_p、temperature三个参数的作用 用Deepseek Kimi 快速生成高质量的ppt 在职场&#xff0c;不管干什么&#xff0c;都少不了和 PPT 打交道&#xff1a;客户交流&#xff0c…...

【Go万字洗髓经】Golang中sync.Mutex的单机锁:实现原理与底层源码

本章目录 1. sync.Mutex锁的基本用法2. sync.Mutex的核心原理自旋到阻塞的升级过程自旋CAS 饥饿模式 3. sync.Mutex底层源码Mutex结构定义全局常量Mutex.Lock()方法第一次CAS加锁能够成功的前提是&#xff1f;竞态检测 Mutex.lockSlow()lockSlow的局部变量自旋空转state新值构造…...