spring mvc中不同服务调用类型(声明式(Feign)、基于模板(RestTemplate)、基于 SDK、消息队列、gRPC)对比详解
@RestControllerAdvice 和 @ControllerAdvice 对比详解
1. 基本概念
注解 | 等效组合 | 核心作用 |
---|---|---|
@ControllerAdvice | @Component + @RequestMapping (隐式) | 定义全局控制器增强类,处理跨控制器的异常、数据绑定或全局响应逻辑。 |
@RestControllerAdvice | @ControllerAdvice + @ResponseBody | 继承 @ControllerAdvice ,并默认将返回值序列化为 HTTP 响应体(如 JSON)。 |
2. 核心区别
对比维度 | @ControllerAdvice | @RestControllerAdvice |
---|---|---|
返回值处理 | 默认返回视图名称(需配合 @ResponseBody 才能序列化) | 直接返回数据对象,自动序列化为响应体(如 JSON) |
适用场景 | 传统 MVC 应用(如返回 HTML 视图或混合响应) | RESTful API(需返回 JSON/XML 格式数据) |
注解组合 | 需手动添加 @ResponseBody 才能返回 JSON | 内置 @ResponseBody ,无需额外声明 |
返回类型示例 | String (视图名称)、ModelAndView | ResponseEntity , Map , 自定义 POJO |
3. 代码示例对比
场景:全局异常处理
@ControllerAdvice 示例(返回视图名称)
@ControllerAdvice
public class GlobalViewExceptionHandler {@ExceptionHandler(IOException.class)public String handleIOException() {return "error/500"; // 返回视图名称(如 Thymeleaf 模板)}
}
@RestControllerAdvice 示例(返回 JSON)
@RestControllerAdvice
public class GlobalApiExceptionHandler {@ExceptionHandler(IOException.class)public ResponseEntity<ErrorDetails> handleIOException() {ErrorDetails error = new ErrorDetails(500, "Internal Server Error", null);return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(error);}
}
4. 关键功能对比
功能 | @ControllerAdvice | @RestControllerAdvice |
---|---|---|
异常处理 | 支持,需手动定义返回类型(视图或 JSON) | 支持,直接返回 JSON 格式错误对象 |
数据绑定 | 可通过 @InitBinder 统一配置绑定规则 | 同样支持 @InitBinder ,但返回值默认序列化 |
全局方法增强 | 可通过 @ModelAttribute 注入公共数据 | 同样支持,但返回数据自动序列化 |
响应体控制 | 需显式使用 @ResponseBody 或 ResponseEntity | 内置 @ResponseBody ,无需额外声明 |
5. 配置与扩展
共同特性
-
包级作用域:通过
basePackages
指定需要增强的控制器包:@ControllerAdvice(basePackages = "com.example.controllers")
-
方法级过滤:通过
annotations
指定仅处理特定注解的控制器:@ControllerAdvice(annotations = RestController.class)
差异点
- 响应体格式:
-
@ControllerAdvice
需显式配置@ResponseBody
或ResponseEntity
才能返回 JSON:@ControllerAdvice public class MixHandler {@ResponseBody // 显式声明返回 JSON@ExceptionHandler(IOException.class)public ErrorDetails handleIOException() { ... } }
-
@RestControllerAdvice
默认支持序列化:@RestControllerAdvice public class ApiHandler {@ExceptionHandler(IOException.class)public ErrorDetails handleIOException() { ... } // 自动序列化为 JSON }
-
6. 典型使用场景
场景 | 推荐注解 | 原因 |
---|---|---|
传统 Web 应用(返回 HTML) | @ControllerAdvice | 需返回视图名称(如 Thymeleaf 模板路径)。 |
RESTful API 异常处理 | @RestControllerAdvice | 直接返回结构化的 JSON 错误信息,无需额外配置 @ResponseBody 。 |
混合场景(需同时处理视图和 JSON) | @ControllerAdvice | 需通过 @ResponseBody 区分返回类型,或使用 ResponseEntity 控制响应格式。 |
7. 总结表格
维度 | @ControllerAdvice | @RestControllerAdvice |
---|---|---|
核心作用 | 全局异常处理、数据绑定、视图增强 | 专为 REST API 设计,返回 JSON 格式响应 |
返回值默认行为 | 返回视图名称或需 @ResponseBody 显式声明 | 直接返回数据对象,自动序列化为响应体 |
适用场景 | 传统 MVC 应用、混合响应场景 | 纯 REST API 开发(如 Spring Boot 微服务) |
注解组合关系 | 独立注解,需手动配置响应格式 | 等效于 @ControllerAdvice + @ResponseBody |
关键总结### 声明式服务调用与其他服务调用类型对比详解
1. 什么是声明式服务调用?
定义:通过注解或配置声明服务调用接口,无需手动编写底层网络请求代码,由框架自动生成代理实现。
核心特点:
- 声明式:通过注解(如
@FeignClient
)或配置定义服务接口。 - 自动代理:框架(如 Spring Cloud Feign)自动处理 HTTP 请求、序列化、负载均衡等。
- 解耦:开发者只需关注业务逻辑,无需关心网络细节。
示例(Spring Cloud Feign):
@FeignClient(name = "service-provider") // 声明调用的服务名称
public interface ProductClient {@GetMapping("/products/{id}")Product getProduct(@PathVariable("id") String id);
}
2. 其他服务调用类型及对比
类型 1:基于模板的调用(如 RestTemplate/HttpClient)
定义:手动构造 HTTP 请求,通过模板工具(如 RestTemplate
、OkHttp
)发送请求并处理响应。
特点:
- 灵活控制:可完全控制请求参数、超时、重试等。
- 无侵入性:无需框架支持,纯 Java 实现。
- 代码冗长:需手动处理异常、序列化等。
使用方法:
// 使用 RestTemplate 调用服务
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<Product> response = restTemplate.getForEntity("http://service-provider/products/123",Product.class
);
Product product = response.getBody();
类型 2:基于 SDK 的调用
定义:通过第三方或自定义 SDK 封装服务调用逻辑,提供统一接口。
特点:
- 封装复杂逻辑:如 AWS SDK 封装了 S3、DynamoDB 的调用细节。
- 依赖性强:需引入 SDK 依赖,版本需与服务端兼容。
- 易用性高:开发者无需关心底层协议。
使用示例(AWS S3 SDK):
AmazonS3 s3Client = AmazonS3ClientBuilder.standard().withRegion("us-west-2").build();
S3Object object = s3Client.getObject("my-bucket", "key-name");
类型 3:基于消息队列的异步调用
定义:通过消息中间件(如 RabbitMQ、Kafka)发送异步消息,由消费者处理。
特点:
- 解耦:生产者与消费者无直接依赖。
- 异步:支持高并发和最终一致性。
- 需消息中间件:需维护消息队列基础设施。
使用示例(Spring Cloud Stream):
// 生产者发送消息
@Service
public class OrderService {@Autowiredprivate MessageChannel orderChannel;public void sendOrder(Order order) {orderChannel.send(MessageBuilder.withPayload(order).build());}
}// 消费者处理消息
@Service
public class OrderConsumer {@StreamListener("order-inbound")public void processOrder(Order order) {// 处理订单逻辑}
}
类型 4:基于 gRPC 的调用
定义:使用 gRPC 框架进行高性能的 RPC 调用,基于 Protocol Buffers 定义接口。
特点:
- 高性能:二进制协议,支持流式传输。
- 强类型定义:通过
.proto
文件定义接口和数据结构。 - 学习成本高:需掌握 gRPC 和 Protocol Buffers。
使用示例:
// 定义 proto 文件
service ProductService {rpc GetProduct (ProductRequest) returns (ProductResponse) {}
}// 生成客户端代码
ProductServiceBlockingStub stub = ProductGrpc.newBlockingStub(channel);
ProductResponse response = stub.getProduct(request);
类型 5:基于 HTTP 客户端(如 OkHttp)的直接调用
定义:直接使用低层 HTTP 客户端(如 OkHttp、URLConnection)发送请求。
特点:
- 完全控制:可配置超时、连接池等。
- 无需框架依赖:纯 Java 实现。
- 代码复杂度高:需手动处理序列化、异常等。
示例(OkHttp):
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url("http://service-provider/products/123").build();
Response response = client.newCall(request).execute();
String responseBody = response.body().string();
3. 对比总结表格
类型 | 声明式 | 基于模板 | 基于 SDK | 消息队列 | gRPC |
---|---|---|---|---|---|
核心特点 | 注解声明,框架代理 | 手动构造请求 | 封装第三方接口 | 异步解耦 | 高性能 RPC |
代码复杂度 | 简单(无需手动请求) | 中等(需处理细节) | 简单(依赖 SDK) | 中等(需消息配置) | 高(需 proto 定义) |
适用场景 | 微服务内同步调用 | 需灵活控制的场景 | 第三方服务调用 | 解耦异步场景 | 高性能同步 RPC |
框架依赖 | Spring Cloud | 无(需 RestTemplate) | SDK 依赖 | RabbitMQ/Kafka | gRPC 库 |
是否同步/异步 | 同步(可配置异步) | 同步/异步 | 同步/异步 | 异步 | 同步/异步流 |
典型工具 | Feign | RestTemplate,OkHttp | AWS SDK | Spring Cloud Stream | gRPC |
4. 选择依据
需求场景 | 推荐类型 | 原因 |
---|---|---|
快速集成微服务同步调用 | 声明式(Feign) | 零代码实现负载均衡、熔断,开发效率高。 |
需灵活控制 HTTP 请求细节 | 基于模板(RestTemplate) | 直接控制超时、重试等参数。 |
调用第三方服务(如 AWS) | 基于 SDK | 使用官方 SDK 确保兼容性和易用性。 |
解耦服务间依赖 | 消息队列 | 异步通信,高并发场景下避免阻塞。 |
高性能低延迟的 RPC 调用 | gRPC | 二进制协议和流式传输适合高频、低延迟场景。 |
5. 关键总结
- 声明式服务调用(如 Feign):开发效率最高,适合微服务内同步调用。
- 基于模板/SDK:灵活性与易用性平衡,适合复杂或第三方服务调用。
- 消息队列:解耦与异步的首选方案。
- gRPC:高性能场景的最优选择,需权衡学习成本。
根据项目需求(如性能、耦合度、开发效率),选择合适的调用方式,或混合使用多种类型以满足不同场景。
- 选择原则:
- REST API:优先使用
@RestControllerAdvice
,简化 JSON 响应处理。 - 传统 MVC:使用
@ControllerAdvice
,灵活控制视图或 JSON 响应(需配合@ResponseBody
)。
- REST API:优先使用
- 注意事项:
@ControllerAdvice
若需返回 JSON,必须显式添加@ResponseBody
或使用ResponseEntity
。@RestControllerAdvice
内置@ResponseBody
,无需额外声明,适合统一 API 响应格式。
- 最佳实践:
- 对于纯 API 项目,用
@RestControllerAdvice
集中处理异常和响应。 - 在混合项目中,通过
basePackages
区分不同场景的增强类。
- 对于纯 API 项目,用
相关文章:
spring mvc中不同服务调用类型(声明式(Feign)、基于模板(RestTemplate)、基于 SDK、消息队列、gRPC)对比详解
RestControllerAdvice 和 ControllerAdvice 对比详解 1. 基本概念 注解等效组合核心作用ControllerAdviceComponent RequestMapping(隐式)定义全局控制器增强类,处理跨控制器的异常、数据绑定或全局响应逻辑。RestControllerAdviceControll…...
敏捷迭代实战经验分享
一、敏捷迭代团队成员构成 比较高效的敏捷开发团队人员一般保持在7~10人左右,一般一个完整的敏捷迭代团队包含PM、BA、开发、测试、设计5类角色成员,由于不同项目的现状不同,可根据现实情况配置相应角色。 图:项目核心团队角色 二、敏捷实践活动 敏捷迭代的周期可以根据各…...
《从底层逻辑剖析:分布式软总线与传统计算机硬件总线的深度对话》
在科技飞速发展的当下,我们正见证着计算机技术领域的深刻变革。计算机总线作为信息传输的关键枢纽,其发展历程承载着技术演进的脉络。从传统计算机硬件总线到如今备受瞩目的分布式软总线,每一次的变革都为计算机系统性能与应用拓展带来了质的…...
服务器运维ACL访问控制列表如何配置
ACL(访问控制列表)在服务器运维中用于细粒度地控制用户或主机对资源的访问权限。正确配置ACL能有效限制未授权访问,增强系统安全性。以下是ACL的基本配置流程及示例,主要以Linux系统为例进行说明。 一、启用ACL支持 1. 检查文件系统是否支持ACL tune2fs …...
PIXOR:基于LiDAR的3D检测模型解析
目录 1、前言 2、PIXOR介绍 2.1. 什么是PIXOR? 2.2. PIXOR如何工作? 3、表现和应用 3.1、PIXOR的性能表现 3.2、PIXOR的应用场景 3.3、PIXOR的局限性与挑战 4. PIXOR的未来展望 5. 结语 1、前言 自动驾驶技术正以前所未有的速度发展ÿ…...
【OSG学习笔记】Day 2: 场景图(Scene Graph)的核心概念
今天课程分为两部分,第一部分我们学习一下Scene Graph理论知识,第二部分我们熟悉下OSG的源码。 第一部分(Scene Graph) 在OpenSceneGraph中,场景图(Scene Graph)通过树状层级结构高效管理3D对…...
虚幻5的C++调试踩坑
本地调试VS附加调试 踩坑1 预编译版本的UE5没有符号文件,无法调试源码 官方代码调试所需要的符号文件bdp需要下载导入。我安装的5.5.4是预编译版本,并非ue5源码。所以不含bdp文件。需要调试官方代码则需要通过EPIC中下载安装。右键UE版本,打…...
【软件测试】自动化测试框架Pytest + Selenium的使用
Pytest Selenium 是一种常见的自动化测试框架组合,用于编写和执行 Web 应用程序的自动化测试。Pytest 是一个强大的 Python 测试框架,而 Selenium 是一个用于浏览器自动化的工具,二者结合使用可以高效地进行 Web 应用的功能测试、UI 测试等。…...
蓝桥杯补题
方法技巧: 1.进行循环暴力骗分,然后每一层的初始进行判断,如果已经不满足题意了,那么久直接continue,后面的循环就不用浪费时间了。我们可以把题目所给的等式,比如说有四个未知量,那么我们可以用…...
2025年港口危货储存单位主要安全管理人员备考练习题
港口危货储存单位主要安全管理人员备考练习题: 单选题 1、依据《安全生产法》,危险物品的生产、储存单位的安全生产管理人员的任免,应当告知( )。 A. 主管的负有安全生产监督管理职责的部门 B. 当地人民政府 C. 行…...
openEuler欧拉系统配置local的yum源
1.下载iso openEuler | 开源社区 | openEuler社区官网 2.上传openEuler镜像文件至服务器(例如上传至/home目录) 3.创建挂载目录 #mkdir -p /mount/iso 4.镜像挂载 #mount -o loop /home/openEuler-22.03-LTS-x86_64-dvd.iso(镜像上传目…...
AI比人脑更强,因为被植入思维模型【52】福格行为模型
giszz的理解:重要公式,是BMAT,行为动机能力触发点。也许是乘以。这个挺深刻的,在产品设计中,界面交互,都可以用到这样的思维模型。 一、定义 福格行为模型(Fogg Behavior Model)是由…...
DocLayout-YOLO:通过多样化合成数据与全局-局部感知实现文档布局分析突破
论文地址:https://arxiv.org/pdf/2410.12628 目录 一、论文概览:当YOLO遇见文档分析 二、创新点解析:两大核心技术 创新点1:Mesh-candidate BestFit合成算法 创新点2:全局-局部可控感知模块(GL-CRM) 三、实验结果:全面超越SOTA 主要指标对比(D4LA数据集) 消融…...
栈(算法)
在 C 里,栈是一种遵循后进先出(LIFO)原则的数据结构。下面从多个方面为你介绍 C 栈: 1. 使用标准库中的std::stack C 标准库提供了std::stack容器适配器,能方便地实现栈的功能。以下是简单示例: cpp #in…...
leetcode每日一题:子数组异或查询
引言 今天的每日一题原题是3375. 使数组的值全部为 K 的最少操作次数,比较水,可以分成2种情况: 存在比k更小的数,由于每次操作只能使得部分数变小,但是不能把任何数变大,所以肯定无法达成 不存在比k更小的…...
openEuler-22.03-LTS-SP3-x86_64 离线编译安装 nginx 1.20.1
openEuler-22.03-LTS-SP3-x86_64 离线编译安装 nginx 1.20.1 一、概述二、安装依赖1、安装 pcre、pcre-devel2、安装 zlib、zlib-devel3、安装 make、gcc、gcc-c3、编译 openssl5、安装 libtool6、编译 pcre-8.45 三、下载编译 nginx四、运行 nginx 一、概述 本文档适用于无法…...
使用Alamofire下载网站首页内容
用Alamofire库写一个下载网站首页内容的Swift代码。首先,我需要确认用户的需求。他们可能是在开发一个iOS应用,需要从某个网站获取首页的数据,比如HTML内容或者API数据。Alamofire是一个常用的Swift网络库,基于URLSession…...
服务器DNS失效
服务器异常 xx.t.RequestException: java.net.UnknownHostException: test.ac.xxxx.cn现象分析 本地测试正常,说明域名本身无问题。服务器 DNS 解析异常,导致 UnknownHostException。**服务器可正常解析 ****baidu.com**,说明网络正常&#…...
#无类域间路由(快速复习版)
判断两个无类(CIDR)地址是否属于同一个子网 🎯 问题本质: 判断两个 IP 地址是否属于同一个子网,其实就是 对比它们的“网络地址”是否相同。 🔍 原理步骤(通用方法) 我们按步骤来判…...
【Linux】jumpserver开源堡垒机部署
JumpServer 安装部署指南 本文档详细记录了 JumpServer 安装部署的过程、核心脚本功能说明以及后续管理使用提示,方便运维人员快速查阅和二次安装。 1. 前提条件 操作系统要求: 仅支持 Linux 系统,不支持 Darwin(macOS࿰…...
Memcached缓存系统:从部署到实战应用指南
#作者:猎人 文章目录 一、安装libevent二、安装配置memcached三、安装Memcache的PHP扩展四、使用libmemcached的客户端工具五、Nginx整合memcached:六、php将会话保存至memcached Memcached是一款开源、高性能、分布式内存对象缓存系统,可应用各种需要缓…...
【rdma tx data flow问题】
rdma data flow问题 1 SQ_doorbell如何产生? --RDMA网卡doorbell寄存器触发;2 CPU如何访问网卡的Doorbell寄存器?3 为什么需要roce_qid_convert把local_qid转换成global_qid;4.WQE的format是什么?5.WQE在网卡硬件中的处理流程&…...
Vue 框架组件间通信方式
组件间通信方式 不管是 vue2 还是 vue3,组件通信方式很重要,以下是常见的几种通信方式: props:可以实现父子组件、子父组件、甚至兄弟组件通信自定义事件:可以实现子父组件通信全局事件总线 $bus:可以实现…...
React 第三十节 使用 useState 和 useEffect Hook实现购物车
不使用 redux 实现 购物车案例 使用 React 自带的 useState 和 useEffect Hook 即可实现购物车 export default function ShoppingCar() {// 要结算的商品 总数 以及总价const [totalNum, setTotalNum] useState(0)const [totalPerice, setTotalPerice] useState(0)// 商品…...
卷积神经网络CNN
目录 一、图像基础知识 图像基本概念 图像的加载 二、CNN概述 CNN概述 三、卷积层 卷积计算 Padding Stride 多通道卷积计算 PyTorch卷积层API 四、池化层 池化层计算 Stride Padding 多通道池化层计算 PyTorch 池化 API 五、图像分类案例 CIFAR10 数据集 …...
【大数据生态】Hive的metadata服务未开启
解决办法 进入到Hive的bin目录下,键入命令: #启动元服务 [atguiguhadoop102 bin]$ pwd /opt/module/hive-3.1.2/bin [atguiguhadoop102 bin]$ ./hive --service metastore & #启动hive [atguiguhadoop102 hive-3.1.2]$ pwd /opt/module/hive-3.1.2 [atguiguhadoop102 hiv…...
【RabbitMQ】死信队列
1.概述 死信,顾名思义就是无法被消费的消息,也就是没有被传到消费者的消息,或者即使传到了也没有被消费。当然有死信就有死信队列。死信队列就是用来存储死信的。 它的应用场景就是保证订单业务的消息数据不丢失,当消息消费发 生…...
区间 dp 系列 题解
1.洛谷 P4342 IOI1998 Polygon 我的博客 2.洛谷 P4290 HAOI2008 玩具取名 题意 某人有一套玩具,并想法给玩具命名。首先他选择 W, I, N, G 四个字母中的任意一个字母作为玩具的基本名字。然后他会根据自己的喜好,将名字中任意一个字母用 W, I, N, G …...
Typora使用笔记
文章目录 主题自动编号字体设置两端对齐Step1Step 2 代码块显示行号设置快捷键参考文献 主题自动编号 typora-theme-auto-numbering 字体设置两端对齐 Step1 切记从typora的偏好设置中打开主题所在的文件夹,并修改对应的css文件。(以 github.css 为例…...
k8s部署grafana
先决条件 这里部署过程的前提是已经部署好storageclass,所以pv会根据pvc自动创建. 详情参考:k8s-StoargClass的使用-基于nfs_a volume that contains injected data from multiple-CSDN博客 直接开始: 部署pvc [rootmodule /zpf/grafana]$cat pvc.yml apiVersion: v1 kind…...
第三章:SQL 高级功能与性能优化
1. 窗口函数(Window Functions) 用于在结果集的“窗口”(指定行范围)内执行计算,保留原数据行的同时生成聚合或排序结果。 1.1 核心语法 SELECT column1,column2,[窗口函数] OVER (PARTITION BY 分组列…...
[ACM_3] n组数据 | getchar() | getline(cin,s)
目录 14. 第⼀⾏是⼀个整数n,表示⼀共有n组测试数据, 之后输⼊n⾏ 字符串 15. 第⼀⾏是⼀个整数n,然后是n组数据,每组数据2⾏,每⾏ 为⼀个字符串,为每组数据输出⼀个字符串,每组输出占⼀⾏ 16. 多组测试…...
富士相机照片 RAF 格式如何快速批量转为 JPG 格式教程
富士(Fujifilm)相机拍摄的 RAW 格式文件(RAF)因其高质量和丰富的图像信息而受到摄影师的喜爱。然而,RAF 文件通常体积较大且不易于分享或直接使用。为了方便处理,许多人选择将其转换为更通用的 JPG 格式。在…...
[特殊字符]【高并发实战】Java Socket + 线程池实现高性能文件上传服务器(附完整源码)[特殊字符]
大家好!今天给大家分享一个 Java Socket 线程池 实现的高性能文件上传服务器,支持 多客户端并发上传,代码可直接运行,适合 面试、项目实战、性能优化 学习! 📌 本文亮点: ✅ 完整可运行代码&a…...
2025 年天津消防设施操作员考试攻略:深挖地区特色考点
天津作为重要的港口城市与工业基地,消防安全形势复杂多样,其消防设施操作员考试也带有鲜明的地区特色。 地区特色考点解析:天津化工产业发达,涉及众多危化品场所。因此,危化品储存场所的消防设施配置与应急处置成为…...
chrome extension开发框架WXT之Browser.runtime
以下是对 Browser.runtime API 中主要方法的参数、返回值、作用及运用场景的详细解释: 1. 连接与通信方法 connect(connectInfo?: ConnectInfo) / connect(extensionId: string, connectInfo?: ConnectInfo) 参数: extensionId(可选):目标扩展的 ID,未指定时默认连接当…...
dav_1_MySQL数据库排查cpu消耗高的sql
CPU消耗高sql定位 以下从2个维度进行分析,一个是当前cpu高占用排查,一个是历史sql占用高排查 一.当前cpu占用高排查 1 从os资源消耗逐步到mysql查询 1.1 输入top 然后按大P 使之进程按照消耗cpu排序 比如3889为mysql进程ID,接下来再用它查…...
数据结构刷题之贪心算法
贪心算法(Greedy Algorithm) 是一种在每个步骤中都选择当前最优解的算法设计策略。它通常用于解决优化问题,例如最小化成本或最大化收益。贪心算法的核心思想是:在每一步选择中,都做出局部最优的选择,希望…...
每日一题(小白)暴力娱乐篇23
由题意得知给我们一串数字,我们每次交换两位,最少交换多少次成功得到有顺序的数组。我们以平常的思维去思考,加入给你一串数字获得最少的交换次数,意味着你的交换后续基本不会变,比如说2 1 3 5 4 中1与2交换后不变&…...
回归预测 | Matlab实现RIME-CNN-GRU-Attention霜冰优化卷积门控循环单元注意力机制多变量回归预测
回归预测 | Matlab实现RIME-CNN-GRU-Attention霜冰优化卷积门控循环单元注意力机制多变量回归预测 目录 回归预测 | Matlab实现RIME-CNN-GRU-Attention霜冰优化卷积门控循环单元注意力机制多变量回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现RIME…...
第1章 对大型语言模型的介绍
人类正处在一个关键转折点。自2012年起,基于深度神经网络的人工智能系统研发进入快速通道,将这一技术推向了新高度:至2019年底,首个能够撰写与人类文章真假难辨的软件系统问世,这个名为GPT-2(生成型预训练变…...
PGA 简介
PGA(Programmable Gain Amplifier,可编程增益放大器)是一种可以通过外部控制信号改变增益大小的放大器,常用于需要灵活调节信号放大倍数的应用中,比如在模拟信号采集、数据转换(如 ADC 之前)、传…...
2025年CCF-C NCA:导航变量多目标粒子群算法NMOPSO,深度解析+性能实测
目录 1.摘要2.运动学模型和约束3.路径规划目标函数3.多目标粒子群算法4.结果展示5.参考文献6.代码获取 1.摘要 路径规划是无人机(UAV)任务执行的核心,因为它决定了无人机完成任务所需的飞行路径。为了解决这一问题,本文提出了一种…...
FFMpeg音视频解码实战
音频解码 一、初始化阶段 avformat_open_input 打开输入媒体文件。avformat_find_stream_info 读取媒体流信息,查找音频流。avcodec_find_decoder 查找对应的解码器(如 AAC、MP3 解码器)。avcodec_alloc_context3 分配解码器上下文。avcodec…...
day25学习Pandas库
文章目录 三、Pandas库4.函数计算7.合并8.随机抽样9.空值处理9.1检测空值9.2填充空值9.3删除空值行/列 5.读取CSV文件5.1 to_csv()5.2 read_csv() 6.绘图 三、Pandas库 4.函数计算 7.合并 merge 函数用于将两个 DataFrame 对象根据一个或多个键进行合并 函数: …...
去除Mysql表中的空格、回车、换行符和特殊字符
系列文章目录 文章目录 系列文章目录前言一、示例1.sql层面2.java层面 前言 一、示例 1.sql层面 参考 ## 例子1 ## CHAR(10) 表示换行符 ## CHAR(13) 表示回车UPDATE 表名 SET 列名 REPLACE(REPLACE(列名, CHAR(10), ), CHAR(13), )## 例子2 ## 删除字段中的空格、换行符、…...
以普通用户身份启动pure-ftpd服务端
Pureftp的优点包括 : 高性能,适用于大容量数据传输。安全性强,通过SSL/TLS加密和身份验证机制保证文件传输安全。易用性高,具有直观的用户界面。灵活性强,支持多种文件存储方式。没有漏洞,便于维护 基于Centos 9的pu…...
国内下载不了镜像,可以用国外机器下载完成,打成tar文件,在国内机器上重新加载
可以在 已经拉取过镜像的机器上打包(导出)镜像文件,然后 拷贝到另一台机器上导入使用。这是离线部署 Docker 镜像的常用方法,非常适合网络受限的环境。 🛠️ 步骤如下: ✅ 1. 在已有镜像的机器上打包镜像 …...
【Java】Java 中不同类型的类详解
目录 Java 中不同类型的类详解一、基础类类型1. 普通类(Concrete Class)2. 抽象类(Abstract Class)3. 接口(Interface)4. 枚举类(Enum Class) 二、嵌套类与特殊类5. 内部类ÿ…...
Cadence学习笔记之---热风焊盘制作
目录 01 | 前 言 02 | 环境描述 03 | 热风焊盘 04 | 规则热风焊盘制作 05 | 不规则热风焊盘制作 06 | 总 结 01 | 前 言 在上一篇Cadence小记中讲述了如何制作贴片(SMD)焊盘、通孔焊盘、以及过孔;本篇关于Cadence的小记主要讲如何制作热风焊盘。 上篇小记&a…...