SpringBoot异常处理
SpringBoot异常处理
一、认识异常
异常分类:
Error:
代表编译和系统错误,不允许捕获Exception:
标准Java库的方法所激发的异常,包含运行异常Runtime_Exception和非运行异常 Non_RuntimeException 的子类Runtime_Exception:
运行时异常。Non_RuntimeException:
非运行时可检测的异常,Java 编译器利用分析方法或构造方法中可能产生的结果来检测程序中是否含有检测异常的处理程序,每个可能的可检测异常、方法或构造方法的 throws 子句必须列出该异常对应的类。Throw:
用户自定义异常
异常处理用于解决一些程序无法掌控, 但又必须面对的情况。例如,程序需要读取文件、连接网络、使用数据库等,但可能文件不存在、网络不畅通、数据库无效等情况。为了程序能继续运行,此时就需要把这些情况进行异常处理。异常处理的方法通常有以下几种:
- 将异常通知给开发人员、运维人员或用户。
- 使因为异常中断的程序以适当的方式继续运行,或者退出。
- 保存用户的当前操作,或者进行数据回滚。
- 释放资源。
二、SpringBoot默认的异常处理机制
默认情况下,Spring Boot为两种情况提供了不同的响应方式。
- 一种是浏览器客户端请求一个不存在的页面或服务端处理发生异常时,一般情况下浏览器默认发送的请求头中Accept: text/html,所以Spring Boot默认会响应一个html文档内容,称作“Whitelabel Error Page”。
- 使用Postman等调试工具发送请求一个不存在的url或服务端处理发生异常时,Spring Boot会返回类似如下的Json格式字符串信息
Sping Boot会根据消费者发送的**Content-Type
来返回相应的异常内容,如果Content-Type
是application/json
,则返回 JSON 文件; 如果Content-Type
** 是**text/html
**, 则返回 HTML 文件。
Spring Boot 默认提供了程序出错的结果映射路径**/error
。这个/error请求会在BasicErrorController
**中处理,其内部是通过判断请求头中的Accept的内容是否为text/html来区分请求是来自客户端浏览器(浏览器通常默认自动发送请求头内容Accept:text/html)还是客户端接口的调用,以此来决定返回页面视图还是 JSON 消息内容。
三、异常处理方式
1、使用 @ExceptionHandler
注解处理局部异常
只能处理使用@ExceptionHandler注解的方法的Controller的异常。
package com.gcxy.demo11.controller;import com.gcxy.demo11.dto.OrderDTO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/order")
public class OrderController {@GetMapping("/getOrderInfo")public String getOrderInfo(){if (true){throw new NullPointerException("fsdfs");}return "Success";}@ExceptionHandler(NullPointerException.class)public ResponseEntity<String> handlerException(NullPointerException ex){return new ResponseEntity<>("Specific error for this controller:" + ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);}
}
优点:可以自定义存储异常信息的key,和跳转视图的名称。
缺点:需要编写大量的异常方法,不能跨controller,如果两个controller中出现同样的异常,需要重新编写异常处理方法。
2、使用 @ControllerAdvice
+ @ExceptionHandler
注解处理全局异常
使用 @ControllerAdvice
+ @ExceptionHandler
注解能够处理全局异常,这种方式推荐使用,可以根据不同的异常对不同的异常进行处理。
使用方式:定义一个类,使用 @ControllerAdvice
注解该类,使用 @ExceptionHandler
注解方法,此处定义了一个 GlobalExceptionHandler
类表示来处理全局异常,代码如下:
package com.gcxy.demo11.exception;import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.context.request.WebRequest;@ControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(Exception.class)@ResponseBodypublic ResponseEntity<String> handleGeneralException(Exception ex, WebRequest request) {// 这里可以记录日志,或者做其他处理return new ResponseEntity<>("A general error occurred: " + ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);}@ExceptionHandler(NullPointerException.class)@ResponseBodypublic ResponseEntity<String> handleNullPointerException(NullPointerException ex, WebRequest request) {return new ResponseEntity<>("Null pointer exception occurred: " + ex.getMessage(), HttpStatus.BAD_REQUEST);}
}
// 你可以继续添加更多的 @ExceptionHandler 方法来处理其他类型的异常
缺点:编写大量的异常处理方法,代码冗余。
3、配置 SimpleMappingExceptionResolver
处理异常
package com.gcxy.demo11.exception;import org.springframework.context.annotation.Bean;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.servlet.handler.SimpleMappingExceptionResolver;import java.util.Properties;@ControllerAdvice
public class GlobalExceptionHandler {@Beanpublic SimpleMappingExceptionResolver getSimpleMappingExceptionResolver(){SimpleMappingExceptionResolver resolver = new SimpleMappingExceptionResolver();Properties properties = new Properties();properties.setProperty("java.lang.NullPointerException", "error");properties.setProperty("java.lang.RuntimeException", "error");// 设置异常与视图的映射信息resolver.setExceptionMappings(properties);return resolver;}
}
**注意:**该方法必须要有返回值。返回值类型必须是:SimpleMappingExceptionResolver
缺点:不显示具体异常信息 ,不能在跳转页面的同时携带异常信息,这样不利于排错 。
4、自定义 HandlerExceptionResolver
类处理异常
自定义异常的常见应用场景:
- 更好地表示业务逻辑错误:自定义异常可以根据具体业务需求来定义,并提供更有意义和准确描述的错误信息,以便于程序员和其他开发人员理解问题所在。
- 区分不同类型的错误:通过创建多个不同类型的自定义异常类,可以区分并捕获不同类型的错误。例如,如果某个系统需要处理多个网络连接相关的问题,就可以创建一个
NetworkConnectionException
和TimeoutException
等不同类型的自定义异常。 - 提供更详细的上下文信息:自定义异常可以携带额外的上下文信息,使得异常处理过程更具可读性和可理解性。例如,在数据库操作过程中出现问题时,可以使用自定义异常来携带有关数据库表、字段或查询条件等相关信息。
- 异常处理策略:通过捕获对应的自定义异常,我们可以实施针对不同类型问题的特定处理策略。这有助于提高程序容错性和系统稳定性。
- API设计:当我们编写库或框架时,通过使用自定义异常来抛出合适的错误信息给客户端用户能够更好地使用API,并能快速诊断和解决问题。
在使用自定义异常时应遵循一些最佳实践:
- 选择有意义且与问题相关的名称来命名自定义异常类。
- 继承现有合适的Java标准库中已存在的基础异常类(如RuntimeException或Exception)。
- 提供必要且恰当描述错误情况或原因的构造函数、方法和属性。
通过合理使用自定义异常,我们能够更好地管理代码中可能发生的非正常情况,并提供清晰明确、易于调试和维护的代码结构。
4.1、创建自定义异常及全局异常处理器
1、创建异常接口,提供获取编码和描述方法
package com.gcxy.demo11.exception;public interface BaseErrorInfoInterface {/*** 错误码* @return*/String getResultCode();/*** 错误描述* @return*/String getResultMsg();
}
2、创建异常枚举类,实现异常服务接口类的方法,并且定义数据操作异常的类型
package com.gcxy.demo11.exception;public enum ExceptionEnum implements BaseErrorInfoInterface {// 数据操作异常定义SUCCESS("2000", "请求成功!"),BODY_NOT_MATCH("4000", "请求的数据格式不符!"),SIGNATURE_NOT_MATCH("4001", "请求的数字签名不匹配!"),DATA_EMPTY("4002","数据为空!"),DATA_NOT_ENOUGH("4003", "数据不足!"),NOT_FOUND("4004", "数据不存在或已删除!"),DATA_FOUND("4005", "数据已存在!"),CODE_NOT_MATCH("4006", "验证码错误!"),CODE_TIME_OUT("4007", "验证码已过期!"),PASSWORD_NOT_MATCH("4008", "密码不一致!"),INTERNAL_SERVER_ERROR("5000", "服务器内部错误!"),SERVER_BUSY("5003", "服务器正忙,请稍后再试!");/*** 错误码*/private final String resultCode;/*** 错误描述*/private final String resultMsg;ExceptionEnum(String resultCode, String resultMsg) {this.resultCode = resultCode;this.resultMsg = resultMsg;}@Overridepublic String getResultCode() {return resultCode;}@Overridepublic String getResultMsg() {return resultMsg;}
}
3、创建自定义异常,继承RuntimeException
类
package com.gcxy.demo11.exception;
public class MyException extends RuntimeException {private static final long serialVersionUID = 1L;/*** 错误码*/protected String errorCode;/*** 错误信息*/protected String errorMsg;public MyException() {super();}public MyException(BaseErrorInfoInterface errorInfoInterface) {super(errorInfoInterface.getResultCode());this.errorCode = errorInfoInterface.getResultCode();this.errorMsg = errorInfoInterface.getResultMsg();}public MyException(BaseErrorInfoInterface errorInfoInterface, Throwable cause) {super(errorInfoInterface.getResultCode(), cause);this.errorCode = errorInfoInterface.getResultCode();this.errorMsg = errorInfoInterface.getResultMsg();}public MyException(String errorMsg) {super(errorMsg);this.errorMsg = errorMsg;}public MyException(String errorCode, String errorMsg) {super(errorCode);this.errorCode = errorCode;this.errorMsg = errorMsg;}public MyException(String errorCode, String errorMsg, Throwable cause) {super(errorCode, cause);this.errorCode = errorCode;this.errorMsg = errorMsg;}public String getErrorCode() {return errorCode;}public void setErrorCode(String errorCode) {this.errorCode = errorCode;}public String getErrorMsg() {return errorMsg;}public void setErrorMsg(String errorMsg) {this.errorMsg = errorMsg;}@Overridepublic Throwable fillInStackTrace() {return this;}}
4、创建返回响应实体类: 属于规范方法返回值结构体的类,也有利于一致化后端所有接口的返回结构,方便前端(客户端)读取所需要的数据;异常处理返回客户端的数据将采用该类的数据结构;
package com.gcxy.demo11.utils;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@AllArgsConstructor
@NoArgsConstructor
public class ResponseHelper<T> {private String code;private String msg;public T data;public static <T> ResponseHelper<T> success() {return new ResponseHelper<T>("200", "success", null);}public static <T> ResponseHelper<T> success(String msg) {return new ResponseHelper<T>("200", msg, null);}public static <T> ResponseHelper<T> success(String code, String msg) {return new ResponseHelper<T>(code, msg, null);}public static <T> ResponseHelper<T> success(T data) {return new ResponseHelper<T>("200", "success", data);}public static <T> ResponseHelper<T> success(String code, String msg, T data) {return new ResponseHelper<T>(code, msg, data);}public static <T> ResponseHelper<T> fail() {return new ResponseHelper<>("500", "Fail", null);}public static <T> ResponseHelper<T> fail(String code, String msg) {return new ResponseHelper<>(code, msg, null);}}
5、 创建全局异常处理控制类: 处理各类异常的业务(即根据不同的异常类型向客户端返回相应的信息)
package com.gcxy.demo11.exception;import com.gcxy.demo11.utils.ResponseHelper;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;@ControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(value={Exception.class})public ResponseHelper exceptionHandler(Exception e){return ResponseHelper.fail(e.errorCode, e.getErrorMsg());}@ExceptionHandler(value = {MyException.class})public @ResponseBody ResponseHelper myExceptionHandler(MyException e) {return ResponseHelper.fail(e.errorCode, e.getErrorMsg());}}
6、创建测试接口
@GetMapping("/test")public ResponseHelper test(){if (true){throw new MyException(ExceptionEnum.CODE_NOT_MATCH.getResultCode(),ExceptionEnum.CODE_NOT_MATCH.getResultMsg());}return ResponseHelper.success("Success");}
相关文章:
SpringBoot异常处理
SpringBoot异常处理 一、认识异常 异常分类: Error: 代表编译和系统错误,不允许捕获Exception: 标准Java库的方法所激发的异常,包含运行异常Runtime_Exception和非运行异常 Non_RuntimeException 的子类Runtime_Exception: 运行时异常。No…...
在 OAuth 2.0 中,refreshToken(刷新令牌)存在的意义
在 OAuth 2.0 中,refreshToken(刷新令牌) 的主要目的是为了提升用户体验和安全性,同时确保访问令牌的有效性。以下是需要使用 refreshToken 的原因: 1. 访问令牌的有限生命周期 访问令牌(accessToken&…...
【Redis】壹 —— Redis 介绍
文章目录: 前言 一、认识Redis 1. Redis 用途 作为数据库 作为流引擎 二、服务端高并发分布式结构演变 1. 单机架构 2. 应用数据分离架构 3. 应用服务集群架构 4. 读写分离 / 主从分离架构 5. 冷热分离 —— 引入缓存 6. 分库分表 7. 微服务架构 8. …...
【html网页页面010】html+css制作茶品牌文创网页制作含视频元素(7页面附效果及源码)
茶主题品牌文创网页制作 🥤1、写在前面🍧2、涉及知识🌳3、网页效果完整效果(7页):代码目录结构:page1、主页page2、精品包装page3、茶园一角page4、品牌地带page5、衍生品page6、联X我们page7、视频详情页 ἰ…...
【项目实战】基于python+爬虫的电影数据分析及可视化系统
注意:该项目只展示部分功能,如需了解,文末咨询即可。 本文目录 1.开发环境2 系统设计 2.1 设计背景2.2 设计内容 3 系统页面展示 3.1 用户页面3.2 后台页面3.3 功能展示视频 4 更多推荐5 部分功能代码 5.1 爬虫代码5.2 电影信息代码 1.开发环…...
K8S命令部署后端(流水线全自动化部署)
前言 本文为链接: 云效流水线k8s半自动部署java(保姆级)的补充,本文起初的目的是为了补充完善k8s流水线的全自动化部署,但是也适用于k8s的一键重启,因为使用k8s的web页面容易出现漏点的情况,因此也可以把代码保存为shell脚本,同样可以实现一键重启。关于…...
GPS北斗卫星授时服务器功能是什么?应用是什么?
GPS北斗卫星授时服务器功能是什么?应用是什么? GPS北斗卫星授时服务器功能是什么?应用是什么? 摘 要:首先对计算机网络时间同步相关技术进行了介绍,然后阐述了时间同步技术在现代计算机网络中的应用与发展,最后指出时间同步网络…...
学习笔记064——如何手动将jar包导入到maven本地库
文章目录 1、背景:2、方法 1、背景: 有时网络慢的情况, 本地maven库需要导入外部下载的jar包。 以便于在项目的pom文件中,直接写dependency写导入依赖。 2、方法 在Windows终端中,输入: mvn install:in…...
未来趋势系列 篇二:HBM题材解析和股票梳理
文章目录 系列文章HBM题材解析环氧塑封电镀液PSPI(光敏性聚酰亚胺)前驱体封装基板其他材料TSV技术封装测试股票梳理系列文章 未来趋势系列 篇一:AI题材解析和股票梳理 HBM HBM(High Bandwidth Memory,高带宽内存)是一种专为高效能运算设计的新兴高速内存接口技术。它通…...
网卡驱动测试
以下是网卡驱动不同测试类型的具体方法和命令: 1. 功能性测试 驱动加载/卸载测试: 方法:加载/卸载网卡驱动,观察日志是否报错。命令: modprobe <driver_name> # 加载驱动 rmmod <driver_name> # 卸载驱动…...
DDR的跨4K问题
参考视频:【深入理解FPGA底层逻辑】、4k边界和outsdanding_哔哩哔哩_bilibili 1、AXI4_FULL突发写一个字节是一个地址, 2、协议规定,把AXI4从机的地址区间从0进行到了4095....每4K进行一次分配 所以突发长度的计算如下: 另外AX…...
数据结构---栈(Stack)
1. 简介 栈(Stack)是计算机科学中的一种抽象数据类型,它遵循特定的操作顺序,即后进先出(Last In First Out,LIFO)。这意味着最后添加到栈中的元素将是第一个被移除的。栈的基本操作通常包括&am…...
【JavaWeb后端学习笔记】Java上传文件到阿里云对象存储服务
阿里云对象存储 1、创建阿里云对象存储节点2、上传文件2.1 修改项目配置文件2.2 定义一个Properties类获取配置信息2.3 准备一个alioss工具类2.4 创建注册类,将AliOssUtil 注册成Bean2.5 使用AliOssUtil 工具类上传文件2.6 注意事项 使用阿里云对象存储服务分为以下…...
Unity3D RPG战斗系统详解
前言 设计一个RPG(角色扮演游戏)的战斗系统是游戏开发中的关键环节,它决定了游戏的乐趣和挑战性。在Unity3D中,可以通过多种技术和工具来实现一个功能完善的战斗系统。以下是对RPG战斗系统的技术详解以及代码实现。 对惹&#x…...
Spark架构及运行流程
Spark架构图 Driver: 解析用户的应用程序代码,转化为作业(job)。创建SparkContext上下文对象,其负责与资源管理器(ClusterManager)通信,进行资源的申请、任务的分配和监控等。跟踪Executor的执行情况。可通过UI界面查询运行情况。…...
SpringBoot3整合MyBatis
一、MyBatis整合步骤: (1).导入依赖:在Spring Boot项目的构建文件(如pom.xml)中添加MyBatis和数据库驱动的相关依赖。例如,如果使用MySQL数据库,您需要添加MyBatis和MySQL驱动的依赖。 (2).配置数据源:在application.properties或application.yml中配置…...
【计网笔记】习题
物理层 不属于物理层接口规范定义范畴的是(C) A. 接口形状 B. 引脚功能 C. 物理地址 D. 信号电平 【2023-912】光网络只能通过导向型介质传播。() 【2017-408】若信道在无噪声情况下的极限数据传输速率不小于信噪比为30dB条件下的…...
力扣56.合并区间
题目描述 题目链接56. 合并区间 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。 示例 1: …...
【oracle】大数据删除插入
文章目录 引言本文目标 Oracle大数据插入操作插入操作的场景和需求使用并行查询进行数据插入示例代码:创建新表并插入数据解释代码中的关键点 性能优化建议 Oracle大数据删除操作删除操作的场景和需求使用游标和批量处理进行数据删除示例代码:批量删除数…...
mysql 双1设置
MySQL 的"双1"设置通常指的是两个配置参数:innodb_flush_log_at_trx_commit 和 sync_binlog。这两个参数都与 MySQL 的数据安全和性能有关。 innodb_flush_log_at_trx_commit:这个参数控制了 InnoDB 引擎中事务日志的刷新频率。它有三个可能的…...
《C++ 赋能 K-Means 聚类算法:开启智能数据分类之旅》
在当今数字化浪潮汹涌澎湃的时代,人工智能无疑是引领科技变革的核心驱动力之一。而在人工智能的广袤天地中,数据分类与聚类作为挖掘数据内在价值、揭示数据潜在规律的关键技术手段,正发挥着前所未有的重要作用。K-Means 聚类算法,…...
用Python开发一个经典贪吃蛇小游戏
Python 是开发小游戏的绝佳工具,借助第三方库,如 pygame,我们可以快速开发一个经典的贪吃蛇游戏。本篇将介绍如何用 Python 实现一个完整的贪吃蛇小游戏。 一、游戏设计 1.1 游戏规则 玩家通过方向键控制贪吃蛇移动。贪吃蛇吃到食物后会变长,同时得分增加。如果贪吃蛇撞到…...
《大宋豪侠传》客户端源码 + 服务端源码 + 工具源码 + 资源,大小16.3G
《大宋豪侠传》客户端源码 服务端源码 工具源码 资源,大小16.3G 下载地址: 通过网盘分享的文件:【源码】《大宋豪侠传》客户端源码 服务端源码 工具源码 资源,大小16.3G 链接: https://pan.baidu.com/s/1lUf84LzXKB3iM7L-1P…...
使用vue-seamless-scroll实现echarts图表大屏滚动,出现空白间隔的解决方案
一、背景介绍 最近的业务开发需求,想要实现echarts图表大屏滚动,小编首先采用vue-seamless-scroll进行实现,结果发现第二屏出现空白间隔,尝试了多种解决方案均不生效,最终选择换一个方案。 二、封装的ScrollList组件…...
zsh配置
zsh配置 https://zhuanlan.zhihu.com/p/58073103 $ cat .zshrc If you come from bash you might have to change your $PATH. export PATH H O M E / b i n : / u s r / l o c a l / b i n : HOME/bin:/usr/local/bin: HOME/bin:/usr/local/bin:PATH Path to your oh-my-zs…...
Brain.js(八):RNNTimeStep 实战教程 - 股票价格预测 - 实操需警慎
前置声明,个人浅度炒股,但计划将基金转入股市。然后 股市有风险,不是技术可以完全预测的,但是在无头绪的时候,用技术指标做个参考也不错。 本文涉及到的股票预测,只是代码简单示例,实操需警慎&a…...
Python+requests实现接口自动化测试
🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传…...
java------------常用API preiod duration 计算时间差
1,preiod 如果末天数比初天数小,需要进一位 package API;import java.time.LocalDate; import java.time.Period;public class preiod {public static void main(String[] args) {// 计算时间差// LocalDate获取对象其中的一个方法LocalDate d1 LocalD…...
Android水波纹效果
Android水波纹效果 需要到水波纹效果的场景还蛮少的。万一刚好你需要呢 一、思路: 自定义组件SpreadView 二、效果图: 看视频更直观点: Android轮子分享-水波纹效果 三、关键代码: public class SpreadView extends View {pr…...
yolov8 转华为昇腾om脚本
目录 yolov8 转华为昇腾 om脚本 测试ok 推理demo: yolov8 转华为昇腾 om脚本 测试ok import sys import osos.chdir(os.path.dirname(os.path.abspath(__file__)))import torchcurrent_dir = os.path.dirname(os.path.abspath(__file__))paths = [os.path.abspath(__file__)…...
【人工智能】从基础到实践:用Python和PyTorch实现深度学习图像分割模型
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 图像分割是计算机视觉中的核心任务之一,旨在将图像划分为具有语义意义的区域,在自动驾驶、医疗影像分析等领域有广泛应用。本篇文章将从图像分割的基础知识出发,详细讲解分割任务的目标、评价指标以及常…...
AI绘画设计实战-Day2
Stable Diffusion 提示词前缀 FF,(masterpiece:1.2),best quality,highres,extremely detailed CG,perfect lighting,8k wallpaper,anime,comic,game CG, FF,(杰作:1.2),最高质量,高分辨率,极其…...
详解LeetCode地下城游戏(动态规划)——区分两种状态表示形式
地下城游戏 题目链接:174. 地下城游戏 状态表示: 按照以往题的表示,dp[i][j]表示:从起点(0,0)位置到达(i,j)位置时,所需的最小初始健康值。但是…...
CV(3)--噪声滤波和特征
前言 仅记录学习过程,有问题欢迎讨论 图像噪声(需要主动干扰的场景): 添加高斯噪声:概率密度函数服从高斯分布的一类噪声 通过设置sigma和mean生成符合高斯分布的随机数,然后计算输出像素,放缩…...
[C++]常对象、常对象成员、指向对象的常指针、指向常对象的指针变量以及对象的常引用
一、 常对象 1.定义: 一个常对象就是声明为常量的对象。我们不能改变这个对象的任何成员数据。具体来说,它是通过const关键字来声明的。 2.语法格式: const 类名 对象名;3.代码示例: class MyClass { public:int x;void setX…...
Spring Boot微服务应用实战:构建高效、可扩展的服务架构
在当今的软件开发领域,微服务架构凭借其高度的灵活性、可扩展性和可靠性,已成为众多企业的首选。而Spring Boot,作为Spring框架的一个子项目,以其简洁的API、快速的应用启动以及内嵌的Servlet容器等特点,成为了构建微服…...
如何通过 Windows 自带的启动管理功能优化电脑启动程序
在日常使用电脑的过程中,您可能注意到开机后某些程序会自动运行。这些程序被称为“自启动”或“启动项”,它们可以在系统启动时自动加载并开始运行,有时甚至在后台默默工作。虽然一些启动项可能是必要的(如杀毒软件)&a…...
力扣每日一题 - 1812. 判断国际象棋棋盘中一个格子的颜色
题目 还需要你前往力扣官网查看详细的题目要求 地址 1.给你一个坐标 coordinates ,它是一个字符串,表示国际象棋棋盘中一个格子的坐标。下图是国际象棋棋盘示意图。2.如果所给格子的颜色是白色,请你返回 true,如果是黑色ÿ…...
Python subprocess.run 使用注意事项,避免出现list index out of range
在执行iOS UI 自动化专项测试的时候,在运行第一遍的时候遇到了这样的错误: 2024-12-04 20:22:27 ERROR conftest pytest_runtest_makereport 106 Test test_open_stream.py::TestOpenStream::test_xxx_open_stream[iPhoneX-xxx-1-250] failed with err…...
UI自动化测试框架:PO模式+数据驱动
🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 1. PO 设计模式简介 什么是 PO 模式? PO(PageObject)设计模式将某个页面的所有元素对象定位和对元素对象的操作封装成一个 Pa…...
第四十六篇 Vision Transformer论文翻译
论文连接:https://arxiv.org/abs/2010.11929 GitHub:https://github.com/google-research/vision_transformer 摘要 虽然Transformer架构已成为自然语言处理任务的实际标准,但其在计算机视觉中的应用仍然有限。在计算机视觉中,注意力机制要么与卷积网络结合使用,要么在保…...
如何在Ubuntu中利用repo和git地址下载获取imx6ull的BSP
01-设置git的用户名和邮箱 git config --global user.name "suwenhao" git config --global user.email "2487872782qq.com"这里不设置的话后面在第5步的repo配置中还是会要求输入,而且以后进行相关操作都要输入,不妨现在就进行配置…...
redis数据结构和内部编码及单线程架构
博主主页: 码农派大星. 数据结构专栏:Java数据结构 数据库专栏:数据库 JavaEE专栏:JavaEE 软件测试专栏:软件测试 关注博主带你了解更多知识 1. 数据结构和内部编码 Redis会在合适的场景选择合适的内部编码 我们可以通过objectencoding命令查询内部编码 : 2. 单线程架构 …...
2412d,d的6月会议
信息:gtkD的文档位置 原文 总结 DMDARM后端 Razvan问Walter他对DMD的ARM后端的分发,并想知道他是否考虑过其他选择,如整合DMD前端与LDC后端. Walter说,人们写信告诉他,他们喜欢使用DMD,因为它体积小,速度快.多年来,就要求他实现ARM后端. 有的人想写一个,但后来因为太难或太耗…...
提升网站流量的关键:AI在SEO关键词优化中的应用
内容概要 在当今数字时代,提升网站流量已成为每个网站管理员的首要任务。而人工智能的技术进步,为搜索引擎优化(SEO)提供了强有力的支持,尤其是在关键词优化方面。关键词是连接用户需求与网站内容的桥梁,其…...
【模型对比】ChatGPT vs Kimi vs 文心一言那个更好用?数据详细解析,找出最适合你的AI辅助工具!
在这个人工智能迅猛发展的时代,AI聊天助手已经深入我们的工作与生活。你是否曾在选择使用ChatGPT、Kimi或是百度的文心一言时感到一头雾水?每款AI都有其独特的魅力与优势,那么,究竟哪一款AI聊天助手最适合你呢?本文将带…...
利润表在Zebra BI 中的应用(一)
效果如图。本案例采用极简式对比 需要注意的是:如原始数据是一维的,则需要确保比较的各年份所含项目一致,缺失的也要占位,否则会出错! 2022% of Revenue(占收入%) DIVIDE( [值_2022], CALCULA…...
12.09 C++作业2
利用函数重载,实现对整形数组的冒泡排序,对浮点型数组的冒泡排序 #include <iostream>using namespace std;int maopao(int(&ra)[10]) {//求数组长度int len sizeof(ra)/sizeof(ra[0]);int i,j,t;for(int i0;i<len;i){cin >>ra[i];}…...
MongoDB性能监控工具
mongostat mongostat是MongoDB自带的监控工具,其可以提供数据库节点或者整个集群当前的状态视图。该功能的设计非常类似于Linux系统中的vmstat命令,可以呈现出实时的状态变化。不同的是,mongostat所监视的对象是数据库进程。mongostat常用于…...
如何防范顶级应用程序安全威胁
如今的网络攻击数量是五年前的两倍多。因此,掌握最新的应用程序安全威胁对于防止数据泄露、经济损失和声誉受损至关重要。您还需要实施强大的安全实践,以保护应用程序免受最常见和最危险的威胁。 顶级应用程序安全威胁......以及如何防范这些威胁 1. 注…...