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

说一下SpringBoot3新特新和JDK17新特性

JDK1.8(Java8)新特性

stream流式编程

流处理 Stream API 提供了对集合数据进行操作的一种高效、简洁的方式。它支持顺序和并行的聚合操作
如:过滤(filter)、排序(sort)、映射(map)、归约、collect(收集)等


Lambda表达式


CompletableFuture并发编程

接口中的默认方法和静态方法


新日期和时间类型

之前的包:java.util.Date,java.util.Calendar,java.text.SimpleDateFormat


新的包:java.time

里面有LocalDate 表示日期(不含时间)

LocalTime 表示时间(不含日期)

LocalDateTime 表示日期和时间

zonedDateTime 表示带时区的日期和时间

均为不可变对象,天然线程安全


为什么说之前的日期类型线程不安全而且可用性差

线程不安全

Date和Calendar是可变的,对象可能在多线程环境下被意外修改,导致数据不一致

例如可以通过setTime()和add()方法直接修改对象的值

Calendar calendar = Calendar.getInstance();
calendar.set(2023, Calendar.JANUARY, 1);
// 其他代码可能修改 calendar 的值,导致不可预测的行为

SimpleDateFormat是非线程安全类,开发者必须通过同步或每次创建新实例来规避问题

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
// 多线程调用 sdf.parse(dateStr) 会导致竞争条件

功能缺失

问题:旧 API 缺少现代日期时间操作所需的特性

不支持时区处理:需要手动计算时区偏移,容易出错。

无法直接进行日期算术:如计算两个日期之间的天数差需要复杂操作。

格式化与解析能力弱:依赖 SimpleDateFormat,且格式字符串易出错(如大小写敏感)

// 计算两个日期相差的天数(旧 API)
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
long diffMillis = c2.getTimeInMillis() - c1.getTimeInMillis();
long diffDays = diffMillis / (24 * 60 * 60 * 1000); // 可能因闰秒、时区等问题出错

JDK17新特性

switch的类型匹配

正如 instanceof 一样, switch 也紧跟着增加了类型匹配自动转换功能

instanceof代码展示

swtich代码示例

switch有了类型转换

case能对null进行判断


增强的伪随机数生成器

之前我们的Random,ThreadLocalRandom,SplittableRandom来生成伪随机数

不过这些类里面缺少常见的伪随机算法支持

所以我们有了个RandomGenerator类

说一下以前的随机数生成器的缺陷

主要就是线程不安全,算法单一,算法不能灵活切换这些问题

Random

Random 在多线程环境下的性能较差,因为多个线程可能会竞争同一个随机数生成器的实例,导致性能瓶颈

多线程环境中,如果多个线程使用 Random 的同一个实例,访问会被锁定。假设有 10 个线程同时请求随机数,只有一个线程能生成随机数,其他线程需要等待,这会导致性能瓶颈

ThreadLocalRandom

ThreadLocalRandom 虽然为多线程优化,但它的功能相对单一,缺乏对多种伪随机算法的支持

ThreadLocalRandom 每个线程都有自己的实例,避免了锁竞争,但不能自由切换到其他伪随机算法

SplittableRandom

SplittableRandom 提供了一些改进,但仍然不够灵活无法轻松地切换和使用不同的伪随机算法

RandomGenerator类的优点

1.允许开发者轻松选择和交换不同的伪随机数生成算法

2.新设计的随机数生成器在多线程环境下表现更佳,因为它们可以避免锁竞争。

3.新版算法支持多种常见的伪随机算法,开发者可以根据具体需求选择最适合的。


外部函数和内存API(孵化)

在 Java 开发中,有时需要使用 Java 本身无法直接提供的功能,比如调用操作系统底层的函数、使用一些用 C 或 C++ 编写的高性能库等

外部函数和内存 API 提供了一种机制,让 Java 程序可以通过该 API 与 Java 运行时之外的代码和数据进行互操作

通过高效地调用外部函数(即 JVM 之外的代码)和安全地访问外部内存(即不受 JVM 管理的内存),该 API 使 Java 程序能够调用本机库并处理本机数据,而不会像 JNI 那样危险和脆弱。

外部函数和内存 API 在 Java 17 中进行了第一轮孵化,由 JEP 412 提出


删除远程方法调用激活机制(RMI)

删除远程方法调用 (RMI) 激活机制,同时保留 RMI 的其余部分。RMI 激活机制已过时且不再使用

RMI(远程方法调用)

RMI 是 Java 提供的一种机制,允许一个 Java 程序调用另一个 Java 程序中的对象方法,即使它们在不同的计算机上运行。RMI 提供了一种简单的方式来实现分布式计算。

激活机制

RMI 激活机制是一种允许远程对象在需要时被动态创建和激活的机制。这意味着如果一个远程对象没有在 JVM 中运行,RMI 可以根据需要自动启动它。这种机制最初是为了提供灵活性,使得远程对象可以按需创建,而不需要在每次调用时都确保对象已存在。

删除激活机制的原因

过时:随着技术的发展,RMI 激活机制被认为已经不再适用或使用频率低,可能是因为新的技术和框架(如 RESTful API、gRPC、微服务架构等)提供了更好的解决方案。

复杂性:激活机制增加了 RMI 的复杂性,可能导致开发者在使用时遇到更多问题。

维护成本:随着时间推移,维护不再使用的功能会增加开发团队的负担。


密封类(转正)

密封类在JDK17中变成了一个稳定的特性

密封类(Sealed Classes)是 Java 语言的一项特性,最初由 JEP 360 提出,并在 Java 15 中以预览形式集成。

密封类允许开发者控制哪些类可以继承或实现该类,从而提高代码的安全性和可维护性。

JEP 360:这是提出密封类的提案,定义了密封类的基本概念和用法。

Java 15:在此版本中,密封类作为预览特性被引入,意味着开发者可以尝试使用,但它仍可能会在未来的版本中进行修改。

JDK 16:在这个版本中,密封类得到了改进,包括更严格的引用检查和对密封类继承关系的增强,这些改进是通过 JEP 397 提出的,并再次以预览形式提供


弃用的Applet API进行删除

Applet API 是一种用于创建可以在 Web 浏览器中运行的 Java 小程序的技术。然而,这种技术在很多年前就已经被淘汰,现代的 Web 开发中几乎没有人再使用它,因此没有必要继续支持。

被标记弃用:在 Java 9 中,Applet API 被标记为弃用(通过 JEP 289),这意味着开发者被建议不再使用它,但它并没有立即被删除。

不再使用的原因:随着 Web 技术的发展,像 HTML5、JavaScript 和其他现代框架变得更流行,Applet 的使用逐渐减少,导致其不再适用。

因此,虽然 Applet API 仍然存在于 Java 中,但它被认为是过时的技术,未来可能会被完全删除。


弃用的安全管理器

安全管理器(Security Manager)是 Java 中的一种机制,主要用于控制应用程序的权限和访问限制。它通过定义安全策略来决定 Java 应用程序可以执行哪些操作,从而保护系统的安全性

然而,随着时间的推移,这个机制逐渐被认为不再适用于现代的安全需求。

弃用的原因:Java 17 中决定弃用安全管理器,意味着将来可能会完全移除它。安全管理器在多年来并未成为保护客户端和服务器端 Java 代码的主要方法,使用频率非常低。这使得继续维护和支持它变得不再必要。

与 Applet API 的关系:安全管理器的弃用与 Applet API 的弃用相辅相成,反映了 Java 在向前发展过程中,清理过时和不再使用的特性的决心


SpringBoot3新特性

语言与框架基础升级

Java 17+:强制要求 Java 17 或更高版本,利用新语言特性(如密封类、模式匹配等)

Jakarta EE 9+:包命名空间从 javax.* 迁移到 jakarta.*(如 Servlet、JPA 等接口)


现代化安全支持

Spring Security 6:默认集成,支持 OAuth2 2.0、更简洁的配置方式

更严格的 CSRF 策略:默认启用 CSRF 保护,对 RESTful API 更友好

引入新的安全特性、修复已知安全漏洞,提供更强大的身份验证和授权机制,例如默认启用 https 和更严格的 CSP(内容安全策略)配置


新增配置注解

@ConfigurationProperties,简化读取配置文件配置

@ConfigurationPropertiesScan,对特定的包进行扫描

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.ConfigurationPropertiesScan;@SpringBootApplication
// 扫描带有 @ConfigurationProperties 注解的类
@ConfigurationPropertiesScan
public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
}
@SpringBootApplication
@ConfigurationPropertiesScan(basePackages = "com.example.config")
public class MyApplication {// ...
}

智能事务回滚(精准定位脏数据)

传统事务(无脑回滚) :使用 @Transactional 注解的方法,当执行批量更新操作(如 100 条数据更新)时,只要其中某一条(如第 50 条)更新失败,整个事务就会全部回滚,所有已更新的数据都会恢复原状,即便其他数据更新操作本身没有问题。

Spring Boot 3.4 神技(精准回滚)

  • 新增 @TransactionalsmartRollbackFor 属性,可指定需要回滚的异常类,如 DataIntegrityViolationException(数据完整性违规异常)和 OptimisticLockingFailureException(乐观锁失败异常)。
  • 执行批量更新时,若发生异常,仅会回滚触发异常的那笔记录。结合图中代码,jdbcTemplate 进行批量更新,并使用 SmartBatchPreparedStatementSetter,可以更精准地控制事务回滚范围。

核心配置 :在 application.yml 配置文件中,通过 spring.transaction.smart-rollback.enabled 开启智能回滚功能,设为 true 表示启用;savepoint-interval 则用于设置保存点间隔,图中设置为每 10 条数据设置一个保存点,便于精准定位和回滚出现问题的数据 。

Spring Boot 3.4 的智能事务回滚机制,相比传统事务回滚,能减少不必要的数据回滚操作,提高数据处理的准确性和事务处理的效率

在 Spring 事务管理中,@TransactionalsmartRollbackFor 属性和普通的 rollbackFor 属性有以下区别:

回滚粒度

rollbackFor:它是一个传统的事务回滚控制属性,当方法执行过程中抛出的异常类型匹配到 rollbackFor 所指定的异常或其子类时,整个事务范围内的所有操作都会进行回滚 。比如在批量操作场景中,即便只有一条数据操作出现异常,只要该异常类型符合 rollbackFor 的设定,整个事务涉及的所有数据变更都会被回滚

smartRollbackFor:这是 Spring Boot 3.4 及后续版本新增的属性,主要用于实现精准回滚。当方法执行抛出 smartRollbackFor 指定的异常类型时,只会回滚触发异常的那笔记录或相关局部操作,而不是整个事务的所有操作

例如在数据批量更新时,某条数据更新因违反数据完整性约束抛出异常,使用 smartRollbackFor 就仅回滚这条有问题的数据更新,其他正常更新的数据不受影响

应用场景

rollbackFor:适用于对事务一致性要求极高,希望在出现特定异常时,保证所有操作要么都成功、要么都失败的场景。比如金融系统中的转账操作,涉及多个账户的资金变动,只要其中一个步骤失败,就需要全部回滚,以保证资金的一致性

smartRollbackFor:更适合于一些批量处理或复杂业务逻辑场景,在这些场景中部分操作失败不影响其他操作的继续执行,并且希望尽可能保留已成功的操作结果,提高事务处理的效率和灵活性,减少不必要的数据回滚

底层机制差异

rollbackFor:基于传统的事务回滚机制,当满足回滚条件时,Spring 会按照事务传播机制和隔离级别等相关配置,统一对整个事务进行回滚处理。

smartRollbackFor:其实现依赖于保存点(savepoint)机制等更精细的事务控制手段。在执行过程中,会按照配置(如设置保存点间隔)创建保存点,当遇到指定异常时,回滚到最近的相关保存点位置,实现精准的局部回滚

使用smartRollbackFor

场景一:电商订单商品批量更新

场景二:员工信息批量导入

保存点和回滚条数的关系

假设我们配置了每10条记录为一个保存点

spring:transaction:smart-rollback:enabled: truesavepoint-interval: 10

事务执行正常

事务开始→ 处理第1-10条 → 设置保存点A→ 处理第11-20条 → 设置保存点B→ ... → 处理第91-100条 → 设置保存点J
事务提交(全部成功)

第15条失败

事务开始→ 处理第1-10条 → 设置保存点A ✔️→ 处理第11-15条 → 第15条失败 ❌→ 回滚到保存点A(保留前10条)→ 重新处理第11-15条(若配置了重试)

第7条失败

事务开始→ 处理第1-7条 → 第7条失败 ❌→ 没有保存点 → 回滚整个事务(前6条也丢失)

第99条失败

事务开始→ 处理第1-90条 → 设置保存点I ✔️→ 处理第91-99条 → 第99条失败 ❌→ 回滚到保存点I(保留前90条)

配置 savepoint-interval 的权衡

配置值

优点

缺点

interval=1

每条记录独立回滚,精度最高

保存点过多,性能差

interval=10

平衡回滚精度和性能

可能丢失最多9条数据

interval=100

性能最优

失败时可能丢失99条数据


声明式Http客户端

传统的RestTemplate调用

RestTemplate template = new RestTemplate();  
ResponseEntity<User> response = template.getForEntity(url, User.class);  
if (response.getStatusCode() == HttpStatus.OK) {  User user = response.getBody();  
}  

@HttpExchange注解调用

@HttpExchange(url = "/api/users", accept = "application/json")  
public interface UserClient {  @GetExchange("/{id}")User getById(@PathVariable Long id);  @PostExchangeUser create(@RequestBody User user);  
}  // 自动注入使用  
@Autowired
private UserClient userClient;  public User getUser(Long id) {  return userClient.getById(id);  
}  

相关文章:

说一下SpringBoot3新特新和JDK17新特性

JDK1.8&#xff08;Java8&#xff09;新特性 stream流式编程 流处理 Stream API 提供了对集合数据进行操作的一种高效、简洁的方式。它支持顺序和并行的聚合操作 如&#xff1a;过滤&#xff08;filter&#xff09;、排序&#xff08;sort&#xff09;、映射&#xff08;map&…...

二、Visual Studio2022配置OpenGL环境

文章目录 一、OpenGL库的下载二、OpenGL环境配置三、测试代码演示 一、OpenGL库的下载 OpenGL配置的库是GLFWGLAD &#xff0c;GLFW 主要用于创建 OpenGL 窗口和管理输入&#xff1b;GLAD 主要用于加载 OpenGL 函数 GLFW下载地址 下载Windows的32bit版本即可。 下载完成解压如…...

可视化编辑器选择

可视化页面编辑器选择 最近要开发一个低代码项目&#xff0c;一个低代码项目技术难点都在可视化编辑器上面&#xff0c;由于没有充足的时间&#xff0c;也没有可视化页面编辑器开发技术能力&#xff0c;因此找到一个靠谱的可视化编辑器&#xff0c;基本就成功了一半。 需求 …...

tomcat的安装与配置(包含在idea中配置tomcat)

Tomcat 是由 Apache 软件基金会开发的开源 Java Web 应用服务器&#xff0c;主要用于运行 Servlet 和 JSP&#xff08;JavaServer Pages&#xff09;程序。它属于轻量级应用服务器&#xff0c;适用于中小型系统及开发调试场景&#xff0c;尤其在处理动态内容&#xff08;如 Jav…...

【编写UI自动化测试集】Appium+Python+Unittest+HTMLRunner​

简介 获取AppPackage和AppActivity 定位UI控件的工具 脚本结构 PageObject分层管理 HTMLTestRunner生成测试报告 启动appium server服务 以python文件模式执行脚本生成测试报告 下载与安装 下载需要自动化测试的App并安装到手机 获取AppPackage和AppActivity 方法一 有源码的…...

递归入手三维动态规划

一和零 https://leetcode.cn/problems/ones-and-zeroes/description/ 题目解析 由递归入手, 就是一颗选和不选的树, 我们很好通过 dfs 来写出递归 题目解析 public class 一和零 {public static int zeros;public static int ones;public int findMaxForm(String[] strs, …...

Vue中实现大文件的切片并发下载和下载进度展示

Vue中实现大文件的切片下载 切片下载需要后端提供两个接口&#xff0c;第一个接口用来获取当前下载文件的总切片数&#xff0c;第二个接口用来获取具体某一个切片的内容。 界面展示 数据流展示 代码 接口 // 切片下载-获取文件的总切片数 export function getChunkDownload…...

行为模式---命令模式

概念 命令模式是一种行为设计模式&#xff0c;它的核心思想就是将请求封装为一个对象&#xff0c;此对象包含与请求相关的所有信息。可以用不同的请求对客户进行参数化。命令模式通过将请求的发送者和接收者解耦&#xff0c;支持请求的排队、记录、撤销等操作。 使用场景 1、…...

GNU Binutils 全工具指南:从编译到逆向的完整生态

1. GNU Binutils 全工具指南&#xff1a;从编译到逆向的完整生态 1. GNU Binutils 全工具指南&#xff1a;从编译到逆向的完整生态 1.1. 引言1.2. 工具分类速查表1.3. 核心工具详解 1.3.1. 编译与汇编工具 1.3.1.1. as&#xff08;汇编器&#xff09;1.3.1.2. gcc&#xff08;…...

【手撕算法】支持向量机(SVM)从入门到实战:数学推导与核技巧揭秘

摘要 支持向量机&#xff08;SVM&#xff09;是机器学习中的经典算法&#xff01;本文将深入解析最大间隔分类原理&#xff0c;手撕对偶问题推导过程&#xff0c;并实战实现非线性分类与图像识别。文中附《统计学习公式手册》及SVM调参指南&#xff0c;助力你掌握这一核心算法…...

[QT]开发全解析:从概念到实战

文章目录 Qt 框架入门与应用开发指南一、Qt 框架概述1.1 什么是 Qt1.2 Qt 的发展史1.3 Qt 支持的平台1.4 Qt 版本1.5 Qt 的优点1.6 Qt 的应用场景1.7 Qt 的成功案例 二、Qt 的开发工具概述Qt CreatorVisual StudioEclipse 三、认识 Qt Creator3.1 Qt Creator 概览3.2 使用 Qt C…...

进程控制 ─── linux第15课

目录 进程控制 1.进程创建 (fork前面讲过了) 写时拷贝 进程终止 进程退出场景 退出码 进程终止方法 进程控制 1.进程创建 (fork前面讲过了) 在linux中fork函数时非常重要的函数&#xff0c;它从已存在进程中创建一个新进程。新进程为子进程&#xff0c;而原进程为父…...

uniapp:小程序将base64图片字符串保存到手机相册

一、需求分析 用户提供的是Base64格式的图片数据&#xff0c;而小程序保存图片到本地通常需要的是临时文件路径。 第一步可能需要将Base64数据转换成临时文件&#xff0c;然后再保存到手机相册。 第二步查阅UniApp的文档&#xff0c;关于保存图片到相册的相关API&#xff0c;…...

宇树科技再落一子!天羿科技落地深圳,加速机器人创世纪

2025年3月5日&#xff0c;机器人行业龙头宇树科技&#xff08;Unitree&#xff09;在深圳再添新动作——全资子公司深圳天羿科技有限公司正式成立。这家注册资本10万元、法定代表人周昌慧的新公司&#xff0c;聚焦智能机器人研发与销售&#xff0c;标志着宇树科技在华南市场的战…...

个推助力小米米家全场景智能生活体验再升级

当AI如同水电煤一般融入日常&#xff0c;万物互联的图景正从想象照进现实。作为智能家居领域的领跑者&#xff0c;小米米家凭借开放的生态战略&#xff0c;已连接了超8.6亿台设备&#xff0c;构建起全球领先的消费级AIoT平台。如今&#xff0c;小米米家携手个推&#xff0c;通过…...

四款GIS工具箱软件解析:满足企业多样化空间数据需求

概述 随着地理信息系统&#xff08;GIS&#xff09;在城市规划、环境监测、资源管理等领域的广泛应用&#xff0c;各种GIS工具箱软件不断涌现&#xff0c;为用户提供了强大的数据处理、空间分析和地图制图功能。本文将为大家介绍4款GIS工具箱软件&#xff0c;这些软件各具特色…...

Deepseek×ComfyUI革命性工作流:AI图像3倍速精修实战指南

一、为什么选择深度优化的AI精修方案&#xff08;H2&#xff09; 核心关键词&#xff1a;AI图像优化工作流、ComfyUI加速方案、Deepseek节点配置 ▸ 传统Stable Diffusion耗时痛点分析&#xff08;渲染时间/显存占用&#xff09; ▸ 深度神经网络的并行计算优势对比&#xff…...

IntelliJ IDEA 2024.3.4 版本无法正常加载maven项目

报错如下&#xff1a; Possible solutions: - Check that Maven settings.xml does not contain http repositories - Check that Maven pom files do not contain http repository http://192.168.22.76:9003/repository/thirdparty/ - Check that Maven pom files do not co…...

为什么过滤器需要一个 Wrapper 来 extends HttpServletRequestWrapper

为什么过滤器需要一个 Wrapper 来 extends HttpServletRequestWrapper 1. HttpServletRequest 不可直接修改2. 能够修改请求参数和请求体3. 方便扩展与重用4. 处理请求参数和请求体5. 避免对原始请求做修改 典型使用场景举个例子总结 在 Java Web 开发中&#xff0c;过滤器&…...

SpaCy处理NLP的详细工作原理及工作原理框图

spaCy处理NLP的详细工作原理及工作原理框图 spaCy处理NLP的详细工作原理 spaCy是一个基于Python的开源自然语言处理&#xff08;NLP&#xff09;库&#xff0c;它提供了一系列高效且易用的工具&#xff0c;用于执行各种NLP任务&#xff0c;如文本预处理、文本解析、命名实体识…...

数学软件Matlab下载|支持Win+Mac网盘资源分享

如大家所了解的&#xff0c;Matlab与Maple、Mathematica并称为三大数学软件。Matlab应用广泛&#xff0c;常被用于数据分析、无线通信、深度学习、图像处理与计算机视觉、信号处理、量化金融与风险管理、机器人&#xff0c;控制系统等领域。 Matlab将数值分析、矩阵计算、科学…...

OCPP与ISO 15118集成:实现即插即充与车网互动(V2G)- 慧知开源充电桩平台

OCPP与ISO 15118集成&#xff1a;实现即插即充与车网互动&#xff08;V2G&#xff09; 引言 随着电动汽车&#xff08;EV&#xff09;与电网双向能量交互&#xff08;V2G&#xff09;技术的成熟&#xff0c;OCPP协议与ISO 15118标准的协同成为智能充电基础设施的核心挑战。本文…...

【C++设计模式】第七篇:桥接模式(Bridge)

注意&#xff1a;复现代码时&#xff0c;确保 VS2022 使用 C17/20 标准以支持现代特性。 抽象与实现的解耦之道 1. 模式定义与用途​​ 核心思想​ ​桥接模式&#xff1a;将抽象部分与实现部分分离&#xff0c;使二者可以独立变化。​关键用途&#xff1a; ​1.拆分复杂继承…...

【SA8155】AIS Camera流程简述

目录 1 AIS Camera流程之初始化 2 AIS Camera流程之opencamera 3 AIS Camera流程之request处理流程 高通QNX车载系统 + LA虚拟机下Camera框图如下: 高通车载系统中,如上述框图所述,模组驱动在QNX侧,Android侧需要通过HAB Socket通信获取相机的数据。ais_v4l2_proxy将获取…...

容器 /dev/shm 泄漏学习

容器 /dev/shm 泄漏的介绍 在容器环境中&#xff0c;/dev/shm 是一个基于 tmpfs 的共享内存文件系统&#xff0c;通常用于进程间通信&#xff08;IPC&#xff09;和临时数据存储。由于其内存特性&#xff0c;/dev/shm 的大小是有限的&#xff0c;默认情况下 Docker 容器的 /de…...

【Deepseek基础】--3.版本对比

目录 1.Deepseek-v1&#xff1a;起步与编码强劲 2. DeepSeek-V2&#xff1a;性能提升与开源生态 3.DeepSeek-V2.5系列&#xff1a;数学与网络搜索突破 4.DeepSeek-R1-Lite系列&#xff1a;推理模型预览版上线 5. DeepSeek-V3系列&#xff1a;大规模模型与推理速度提升 6…...

一周学会Flask3 Python Web开发-WTForms表单验证

锋哥原创的Flask3 Python Web开发 Flask3视频教程&#xff1a; 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 我们可以通过WTForms表单类属性的validators属性来实现表单验证。 常用的WTForms验证器 验证器说明DataRequired(messageNo…...

算法题笔记(自用)——Python

目录 一. 进制&位运算&ASCAII 二. format格式化输出 1. 基本用法 2. 位置参数 3. 格式化数字 4. 对齐和填充 5. 格式化二进制、八进制、十六进制 6. 格式化百分比 7. 格式化科学计数法 8. 格式化字符串字面量&#xff08;f-string&#xff09; 三. 字符串 使…...

Fiji图像处理

文章目录 一、Fiji —— 基于 imageJ 的免费且开源的图像处理软件1.1、工具安装&#xff08;免费&#xff09;1.2、源码下载&#xff08;免费&#xff09; 二、功能详解2.0、Fiji - ImageJ&#xff08;Web应用程序&#xff09;2.1、常用功能&#xff08;汇总&#xff09;2.2、F…...

【数据结构】堆和priority_queue

堆的定义 堆是什么&#xff1f;实际上堆是一种特殊的&#xff08;受限制的&#xff09;完全二叉树&#xff0c;它在完全二叉树的基础上要求每一个节点都要大于等于或者小于等于它的子树的所有节点。这个大于小于体现在节点的值或者权重。 如图所示&#xff1a; 根节点大于等于…...

Vue的简单入门 三

目录 侦听器 watch 注意 表单输入绑定 v-model v-model修饰符​编辑 lazy number Trim 模板引用 组件组成 组件引用三步走 组件的嵌套关系 header Main Aside Aritice Item App.vue组件引入三个子组件 组件的注册方式 全局注册组件的方法 (1) Vue 2 语…...

kotlin的val声明的变量是常量吗

kotlin的val声明的变量是常量吗 DeepSeek R1 思考 65 秒 思考过程 嗯&#xff0c;用户问的是Kotlin中的val声明的变量是不是常量。首先我需要回忆一下Kotlin的基础知识。记得在Kotlin里&#xff0c;val用来声明只读变量&#xff0c;也就是说一旦赋值之后就不能再重新赋值了。…...

C# | 委托 | 事件 | 异步

委托&#xff08;Delegate&#xff09;和事件&#xff08;Event&#xff09; 在C#和C中&#xff0c;委托&#xff08;Delegate&#xff09;与事件&#xff08;Event&#xff09;以及函数对象&#xff08;Function Object&#xff09;是实现回调机制或传递行为的重要工具。虽然…...

算法日记33:14届蓝桥C++B冶炼金属(二分答案)

一、题目&#xff1a; 二、题解&#xff1a; 1、思路解析&#xff1a; 1&#xff09;首先我们可以发现题目的样例数量为&#xff08; n < 1000 n<1000 n<1000&#xff09;&#xff0c;因此我们可以考虑 O ( n ∗ l o g n ) O(n*log^n) O(n∗logn)时间复杂度的算法 …...

【YOLO V5】目标检测 WSL2 AutoDL VScode SSH

【YOLO V5】目标检测 WSL2 AutoDL VScode SSH 前言整体思路理解向YOLO 目标检测完整流程 环境配置Anaconda 获取 YOLO 代码与预训练模型下载 YOLOv5 代码和预训练模型配置 YOLOV5 工程环境解压 YOLOv5 源代码 并 添加预训练模型调整依赖版本选择对应的 Python 解释器 数据集准备…...

前端基础之ajax

vue-cli配置代理服务器解决跨域问题 我们可以使用一个代理服务器8080&#xff0c;Vue项目8080发送请求向代理服务器8080发送请求&#xff0c;再由在理服务器转发给后端服务器 首先需要在vue.config.js中配置代理服务器 const { defineConfig } require(vue/cli-service) modul…...

vscode离线配置远程服务器

目录 一、前提 二、方法 2.1 查看vscode的commit_id 2.2 下载linux服务器安装包 2.3 安装包上传到远程服务器&#xff0c;并进行文件解压缩 三、常见错误 Failed to set up socket for dynamic port forward to remote port&#xff08;vscode报错解决方法&#xff09;-C…...

C语言——string.h下的特殊库函数

string.h下的特殊函数 strtok(分割字符串&#xff09;strerror(错误码信息&#xff09;memcpy(拷贝&#xff09;memmove(拷贝&#xff09;memset(设置内存&#xff09;memcmp(比较大小&#xff09; strtok(分割字符串&#xff09; char * strtok ( char * str, const char * s…...

烟花燃放安全管控:智能分析网关V4烟火检测技术保障安全

一、方案背景 在中国诸多传统节日的缤纷画卷中&#xff0c;烟花盛放、烧纸祭祀承载着人们的深厚情感。一方面&#xff0c;烟花璀璨&#xff0c;是对节日欢庆氛围的热烈烘托&#xff0c;寄托着大家对美好生活的向往与期许&#xff1b;另一方面&#xff0c;袅袅青烟、点点烛光&a…...

【一个月备战蓝桥算法】递归与递推

字典序 在刷题和计算机科学领域&#xff0c;字典序&#xff08;Lexicographical order&#xff09;也称为词典序、字典顺序、字母序&#xff0c;是一种对序列元素进行排序的方式&#xff0c;它模仿了字典中单词的排序规则。下面从不同的数据类型来详细解释字典序&#xff1a; …...

二、Java-封装playwright UI自动化(根据官网执行步骤,首先封装BrowserFactory枚举类及BrowserManager)

前言 查看playwright官网&#xff0c;api文档了解到&#xff0c;playwright的基本步骤&#xff1a; 1、实例化一个playwright 2、启动一个浏览器类型 3、打开一个页面 所以&#xff0c;在封装时需要有一个浏览器工厂类&#xff0c;定义不同的浏览器类型&#xff0c;在配置文…...

java项目之基于ssm的在线视频网站开发(源码+文档)

项目简介 基于ssm的在线视频网站开发实现了以下功能&#xff1a; 该系统的目标用户包括管理员&#xff0c;用户。管理员上传视频&#xff0c;管理视频&#xff0c;查看视频留言&#xff0c;回复视频留言&#xff0c;管理视频收藏信息&#xff0c;管理公告&#xff0c;管理用户…...

观察者模式的C++实现示例

核心思想 观察者模式是一种行为型设计模式&#xff0c;定义了对象之间的一对多依赖关系。当一个对象&#xff08;称为Subject&#xff0c;主题&#xff09;的状态发生改变时&#xff0c;所有依赖于它的对象&#xff08;称为Observer&#xff0c;观察者&#xff09;都会自动收到…...

c语言中的主要知识点

一、基础语法与结构 程序结构 包含顺序结构、选择结构&#xff08;if/switch&#xff09;、循环结构&#xff08;for/while/do-while&#xff09;。 程序必须包含且仅有一个main函数作为入口。 数据类型与变量 基本类型&#xff1a;整型&#xff08;int、long&#xff09;、浮…...

Pytorch构建LeNet进行MNIST识别 #自用

LeNet是一种经典的卷积神经网络&#xff08;CNN&#xff09;结构&#xff0c;由Yann LeCun等人在1998年提出&#xff0c;主要用于手写数字识别&#xff08;如MNIST数据集&#xff09;。作为最早的实用化卷积神经网络&#xff0c;LeNet为现代深度学习模型奠定了基础&#xff0c;…...

docker:Dockerfile案例之自定义centos7镜像

1 案例需求 自定义centos7镜像。要求&#xff1a; 默认登录路径为 /usr可以使用vim 2 实施步骤 编写dockerfile脚本 vim centos_dockerfile 内容如下&#xff1a; #定义父镜像 FROM centos:7#定义作者信息 MAINTAINER handsome <handsomehandsome.com># 设置阿里云…...

post get 给后端传参数

post 方式一 &#xff1a; data: params 作为请求体&#xff08;Request Body&#xff09;传递&#xff1a; 你已经展示了这种方式&#xff0c;通过data字段直接传递一个对象或数组。这种方式通常用于传递复杂的数据结构。dowmfrom: function (params) { return request({ u…...

Linux 系统不同分类的操作命令区别

Linux 系统有多种发行版,每种发行版都有其独特的操作命令和工具。以下是一些常见的分类及其操作命令的区别: 1. 基于 Red Hat 的发行版 (RHEL, CentOS, Fedora) 1.1 包管理 安装软件包: bash复制 sudo yum install <package> 更新软件包: bash复制 sudo yum update…...

Checkpoint 模型与Stable Diffusion XL(SDXL)模型的区别

Checkpoint 模型与 Stable Diffusion XL&#xff08;SDXL&#xff09;模型 在功能、架构和应用场景上有显著区别&#xff0c;以下是主要差异的总结&#xff1a; 1. 基础架构与定位 Checkpoint 模型 是基于 Stable Diffusion 官方基础模型&#xff08;如 SD 1.4/1.5&#xff09;…...

软件工程与实践(第4版 新形态) 练习与实践1

软件工程与实践&#xff08;第4版 新形态&#xff09; 练习与实践1 1.填空题 (1)程序&#xff0c;文档 (2)系统软件&#xff0c;支撑软件&#xff0c;应用软件 (3)系统方法 (4)软件开发和维护 (5)工程的概念、原理、技术和方法 (6)实现软件的优质高产 (7)软件开发技术和…...