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

Spring事务管理

        介绍了事务的概念,事务的特性,JDBC 事务管理的步骤和操作过程,以及Spring事务管理的两种实现方式:编程式事务管理和声明式事务管理。

1.事务的概念

        事务(Transaction)就是将一系列的数据库操作作为一个整体来执行,它代表了一组被视为单个工作单元的操作。这些操作要么全部成功执行,要么全部不执行,从而确保数据库的一致性和完整性。事务处理主要用于管理对数据库的访问,以支持ACID特性:

  1. 原子性(Atomicity):事务是一个不可分割的工作单位,其中的操作要么全部完成,要么全部不进行。如果在执行过程中发生了错误,所有已经执行的操作都将被撤销,就像这些操作从未发生过一样。

  2. 一致性(Consistency):一个事务必须使数据库从一个一致性状态变换到另一个一致性状态。这意味着事务应该遵循所有的预定义规则和约束,包括但不限于实体完整性、域完整性和参照完整性。

  3. 隔离性(Isolation):并发执行的多个事务之间应该是相互隔离的,即一个事务的中间状态不会影响其他事务。根据不同的隔离级别,可能会出现脏读、不可重复读或幻读等问题。

  4. 持久性(Durability):一旦一个事务被提交,其结果就是永久性的,即使系统遇到故障也不会丢失已提交的数据。

2.JDBC事务管理

        JDBC(Java Database Connectivity)提供了一种标准的API,用于让Java应用程序与数据库进行交互。在使用JDBC进行数据库操作时,事务管理是一个重要的方面,它确保了数据的一致性和完整性。

        在JDBC中,Connection提供了事务处理的方法,通过调用setAutoCommit(false)可以设置手动提交事务;当事务完成后在一连串的SQL语句后面可用commit()显示提交事务;如果在事务处理过程中发生异常,则可通过rollbackO进行事务回滚。

2.1 JDBC事务管理案例

案例:银行转账

(1)beans-spring-jdbc.xml

<?xml version="1.0" encoding="utf-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd">
<!--    <context:component-scan base-package="com.rainpet"/>--><bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="url" value="jdbc:mysql://localhost:3306/mall"/><property name="username" value="root"/><property name="password" value="123"/><property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/></bean><bean id="accountDao" class="com.rainpet.dao.impl.AccountDaoJdbcImpl"><property name="datasource" ref="dataSource"/></bean>
</beans>

(2)AccountDao.java

package com.rainpet.dao;public interface AccountDao {public boolean addMoney(String username, Double money);public boolean subMoney(String username, Double money);public boolean transferMoney(String username1, String username2, Double money);
}

(3)AccountDaoJdbcImpl.java

package com.rainpet.dao.impl;import com.rainpet.dao.AccountDao;import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;public class AccountDaoJdbcImpl implements AccountDao {private DataSource datasource;private Connection conn;private DataSource getDatasource() {return datasource;}public void setDatasource(DataSource datasource) {this.datasource = datasource;try {conn = datasource.getConnection();} catch (SQLException e) {//throw new RuntimeException(e);e.printStackTrace();}}@Overridepublic boolean addMoney(String username, Double money) {PreparedStatement psmt = null;try{int retCount=0;psmt=conn.prepareStatement("update t_account set money=money+? where username=?");psmt.setString(2,username);psmt.setDouble(1,money);retCount=psmt.executeUpdate();System.out.println("addMoney amount "+money.toString()+" successfully");return true;}catch (SQLException e){e.printStackTrace();try {conn.rollback();System.out.println("addMoney amount "+money.toString()+" rollback success");} catch (SQLException ex) {ex.printStackTrace();System.out.println("addMoney amount "+money.toString()+" rollback failed");//throw new RuntimeException(ex);}System.out.println("addMoney amount "+money.toString()+" failed");return false;}}@Overridepublic boolean subMoney(String username, Double money) {PreparedStatement psmt = null;try{psmt=conn.prepareStatement("update t_account set money=money-? where username=? and (money-?)>=0");psmt.setString(2,username);psmt.setDouble(1,money);psmt.executeUpdate();System.out.println("subMoney amount "+money.toString()+" successfully");return true;} catch (SQLException e) {try {conn.rollback();System.out.println("subMoney amount "+money.toString()+" rollback success");return false;} catch (SQLException ex) {ex.printStackTrace();System.out.println("subMoney amount "+money.toString()+" rollback failed");return false;//throw new RuntimeException(ex);}//throw new RuntimeException(e);}}@Overridepublic boolean transferMoney(String sourceusername, String desusername, Double money) {try {conn.setAutoCommit(false);boolean subflag= subMoney(sourceusername,money);//Integer i=1/0;boolean addflag= addMoney(desusername,money);if(subflag&&addflag){System.out.println("transferMoney "+money.toString()+" successfully");conn.commit();return true;}else{System.out.println("transferMoney "+money.toString()+" failed");conn.rollback();return false;}} catch (SQLException e) {//throw new RuntimeException(e);e.printStackTrace();try {conn.rollback();System.out.println("transferMoney "+money.toString()+" failed");return false;}catch (SQLException ex){ex.printStackTrace();return false;}}}
}

(4)案例验证

package com.rainpet;import com.rainpet.dao.AccountDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class test_spring_jdbc {public static void main(String[] args) {ApplicationContext ac=new ClassPathXmlApplicationContext("beans-spring-jdbc.xml");AccountDao accountDao= (AccountDao) ac.getBean("accountDao");accountDao.transferMoney("zhangsan","lisi",1000.0);}
}

3.Spring事务管理

        Spring框架提供了统一的事务管理抽象,使得开发者可以以声明式的方式管理事务,而不必直接操作底层的JDBC、Hibernate等资源。Spring支持编程式和声明式两种方式进行事务管理。编程式事务管理允许开发者通过编写代码来控制事务的边界和行为。声明式事务管理允许开发者以声明的方式定义事务,通常不涉及具体的事务管理代码,而是通过配置或注解来指定哪些方法应该在事务中执行。

        Spring将所有的事务管理都抽象为PlatformTransactionManager、TransactionStatus和TransactionDefinition三个接口

  1. PlatformTransactionManager:这是Spring事务管理的核心接口,它定义了用于管理事务的方法。根据不同的数据访问技术,Spring提供了多种PlatformTransactionManager的实现,例如:

    • DataSourceTransactionManager:适用于JDBC和MyBatis。
    • HibernateTransactionManager:适用于Hibernate。
    • JtaTransactionManager:适用于分布式事务。
  2. TransactionDefinition:此接口提供事务的相关属性设置,包括隔离级别、传播行为、超时时间以及是否只读等。

  3. TransactionStatus:描述了给定事务的具体状态,如是否为新事务、是否有保存点等。

3.1 编程式事务管理

        Spring提供了TransactionTemplate或者直接使用PlatformTransactionManager来进行编程式的事务管理。

Spring编程式事务一般流程如下:

(1)在Spring配置文件中声明数据源。
(2)在Spring配置文件中声明 个事务管理类,例如,DataSourceTransactionManagr、Hibernate TransactionManger、JTATransactionManager 等
(3)在代码中加入事务处理代码。

关键代码如下:

TransactionDefinition def = new DefaultTransactionDefinition();TransactionStatus status = transactionManager.getTransaction(def);try {// 执行数据库操作transactionManager.commit(status);} catch (Exception ex) {transactionManager.rollback(status);throw ex;}

3.2 编程式事务管理案例

(1)beans-spring.xml

<?xml version="1.0" encoding="utf-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd">
<!--    <context:component-scan base-package="com.rainpet"/>--><bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="url" value="jdbc:mysql://localhost:3306/mall"/><property name="username" value="root"/><property name="password" value="123"/><property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/></bean><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource"/></bean><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"/></bean><bean id="accountDao" class="com.rainpet.dao.impl.AccountDaoSpringImpl"><property name="transactionManager" ref="transactionManager"/><property name="jdbcTemplate" ref="jdbcTemplate"/></bean>
</beans>

(2)AccountDao.java

package com.rainpet.dao;public interface AccountDao {public boolean addMoney(String username, Double money);public boolean subMoney(String username, Double money);public boolean transferMoney(String username1, String username2, Double money);
}

(3)AccountDaoSpringImpl.java

package com.rainpet.dao.impl;import com.rainpet.dao.AccountDao;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;import java.sql.PreparedStatement;public class AccountDaoSpringImpl implements AccountDao {private DataSourceTransactionManager transactionManager;private JdbcTemplate jdbcTemplate;public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {this.jdbcTemplate = jdbcTemplate;}public JdbcTemplate getJdbcTemplate() {return jdbcTemplate;}private DataSourceTransactionManager getTransactionManager() {return transactionManager;}public void setTransactionManager(DataSourceTransactionManager transactionManager) {this.transactionManager = transactionManager;}@Overridepublic boolean addMoney(String username, Double money) {int retCount=0;retCount=jdbcTemplate.update("update t_account set money=money+? where username=?",money,username);System.out.println("addMoney amount "+money.toString()+" successfully");return true;}@Overridepublic boolean subMoney(String username, Double money) {PreparedStatement psmt = null;int retCount=0;retCount=jdbcTemplate.update("update t_account set money=money-? where username=?",money,username);if(retCount==0){return false;}System.out.println("subMoney amount "+money.toString()+" successfully");return true;}@Overridepublic boolean transferMoney(String sourceusername, String desusername, Double money) {DefaultTransactionDefinition tdefinition=new DefaultTransactionDefinition();tdefinition.setPropagationBehavior(DefaultTransactionDefinition.PROPAGATION_REQUIRED);TransactionStatus ts= transactionManager.getTransaction(tdefinition);boolean subflag= subMoney(sourceusername,money);System.out.println("subbing amount "+money.toString());boolean addflag= addMoney(desusername,money);System.out.println("adding amount "+money.toString());if(subflag&&addflag){transactionManager.commit(ts);System.out.println("transferMoney "+money.toString()+" successfully");return true;}else{transactionManager.rollback(ts);System.out.println("transferMoney "+money.toString()+" failed");return false;}}}

(4)案例验证

package com.rainpet;import com.rainpet.dao.AccountDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class test_spring {public static void main(String[] args) {ApplicationContext ac=new ClassPathXmlApplicationContext("beans-spring.xml");AccountDao accountDao= (AccountDao) ac.getBean("accountDao");accountDao.transferMoney("zhangsan","lisi",1000.0);}
}

3.3 声明式事务管理

        Spring推荐使用声明式事务管理,这通常通过XML配置或注解来完成。

Spring声明式事务的实现方式有以下四种:

  1. 基于@Transactional的声明式事务管理
  2. 基于tx命名空间的声明式事务管理。
  3. 基于TransactionProxyFactoryBean的声明式事务管理。
  4. 基于Transactionlnterceptor的声明式事务管理。

基于tx命名空间的声明式事务管理的配置步骤如下:

1. 引入必要的命名空间

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsd">
</beans>

2.在XML在中配置通知、切入点以及Advisor(通知器)

<tx:advice>定义事务行为,包括传播行为、隔离级别、只读标志等,transaction-manage属性用于指定事物管理器

<tx:attributes>为一个或多个方法声明Spring事务的规则

<tx:method>为一个给定的方法签名描述事务规则

<tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:attributes><tx:method name="*" propagation="REQUIRED" isolation="READ_COMMITTED"/></tx:attributes>
</tx:advice><aop:config><aop:pointcut id="serviceMethods" expression="execution(* com.example.service.*.*(..))" /><aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethods" />
</aop:config>

3.4 基于tx命名空间的声明式事务管理案例

Spring事务管理-积分功能实现https://download.csdn.net/download/m0_74808313/90524606

4.Spring事务的传播方式和隔离级别

4.1 传播行为(Propagation Behavior)

传播行为定义了在一个事务上下文中调用另一个需要事务的方法时应该如何处理。Spring提供了7种不同的传播行为:

  1. REQUIRED(默认):如果当前存在事务,则加入该事务;如果不存在,则创建一个新的事务。
  2. SUPPORTS:如果当前存在事务,则加入该事务;如果不存在,以非事务方式继续运行。
  3. MANDATORY:如果当前存在事务,则加入该事务;如果不存在,则抛出异常。
  4. REQUIRES_NEW:创建一个新的事务,如果当前存在事务,则将当前事务挂起。
  5. NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,则将当前事务挂起。
  6. NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。
  7. NESTED:如果当前存在事务,则在嵌套事务内执行;如果不存在,则等同于REQUIRED。

4.2 隔离级别(Isolation Level)

隔离级别定义了一个事务可能受其他并发事务影响的程度。Spring支持的隔离级别包括:

  1. DEFAULT:使用底层数据库的默认隔离级别。
  2. READ_UNCOMMITTED:允许读取未提交的数据变更,可能导致脏读、不可重复读和幻读。
  3. READ_COMMITTED:允许从已经提交的并发事务读取数据,可以防止脏读,但无法避免不可重复读和幻读。
  4. REPEATABLE_READ:对相同字段的多次读取结果一致,除非数据被当前事务本身改变,可以防止脏读和不可重复读,但幻读仍可能发生。
  5. SERIALIZABLE:完全串行化的读,每次读都需要获得表级共享锁,可避免所有并行问题,但代价最大。

相关文章:

Spring事务管理

介绍了事务的概念&#xff0c;事务的特性&#xff0c;JDBC 事务管理的步骤和操作过程&#xff0c;以及Spring事务管理的两种实现方式&#xff1a;编程式事务管理和声明式事务管理。 1.事务的概念 事务&#xff08;Transaction&#xff09;就是将一系列的数据库操作作为一个整体…...

避雷 :C语言中 scanf() 函数的错误❌使用!!!

1. 返回值说明 scanf函数会返回成功匹配并赋值的输入项个数&#xff0c;而不是返回输入的数据。 可以通过检查返回值数量来确认输入是否成功。若返回值与预期不符&#xff0c;就表明输入存在问题。 #include <stdio.h>int main() {int num;if (scanf("%d", …...

判断一个操作是不是允许

一、目的 简单探索一个URL请求是不是允许的。 二、具体过程 (一)系统的初始化 系统数据库有账户"admin"&#xff0c;密码是"123"。 账号"admin"的角色是管理员"manager"。 假设管理员身份设定的权限是&#xff1a; 1、对于/user/开头的…...

【FPGA开发】Cordic原理推导、Xilinx PG105手册解读

目录 Cordic原理推导PG105手册解读IP核总览核心计算功能总览基本握手信号非阻塞模式 NonBlocking Mode阻塞模式 Block Mode 数据格式数据映射 本文针对Cordic算法本身&#xff0c;以及Xilinx官方CORDIC IP做学习记录&#xff0c;如有纰漏&#xff0c;欢迎指正&#xff01; Cord…...

数据结构与算法:宽度优先遍历

前言 进入图论部分难度明显提升了一大截&#xff0c;思路想不到一点…… 一、宽度优先遍历 1.内容 宽度优先遍历主要用于在图上求最短路。 &#xff08;1&#xff09;特点 宽度优先遍历的特点就是逐层扩展&#xff0c;最短路即层数 &#xff08;2&#xff09;使用条件 …...

PyTorch 面试题及参考答案(精选100道)

目录 PyTorch 的动态计算图与 TensorFlow 的静态计算图有何区别?动态图的优势是什么? 解释张量(Tensor)与 NumPy 数组的异同,为何 PyTorch 选择张量作为核心数据结构? 什么是 torch.autograd 模块?它在反向传播中的作用是什么? 如何理解 PyTorch 中的 nn.Module 类?…...

【数理基础】【概率论与数理统计】概率论与数理统计本科课程总结、资料汇总、个人理解

1 前言 概率论与数理统计是数学系核心的基础专业课&#xff0c;我本科的时候&#xff0c;是拆开上的&#xff0c;对应工科专业的高数中的概率论与数理统计&#xff0c;在量子力学&#xff0c;机器学习&#xff0c;计算机领域深度学习&#xff0c;大模型&#xff0c;机器人控制…...

美制 / 英制单位换算/公制/帝国制 单位转换速查表

文章目录 &#x1f4a1;Introduction&#x1f4cf; 英制&#xff08;美制&#xff09;单位与公制换算速查表&#x1f9f1; 一、长度&#xff08;Length&#xff09;&#x1f9f4; 二、体积&#xff08;Volume / Liquid Measure&#xff09;⚖️ 三、质量 / 重量&#xff08;Wei…...

ENSP学习day9

ACL访问控制列表实验 ACL&#xff08;Access Control List&#xff0c;访问控制列表&#xff09;是一种用于控制用户或系统对资源&#xff08;如文件、文件夹、网络等&#xff09;访问权限的机制。通过ACL&#xff0c;系统管理员可以定义哪些用户或系统可以访问特定资源&#x…...

我爱学算法之——滑动窗口攻克子数组和子串难题(中)

学习算法&#xff0c;继续加油&#xff01;&#xff01;&#xff01; 一、将 x 减到 0 的最小操作数 题目解析 来看这一道题&#xff0c;题目给定一个数组nums和一个整数x&#xff1b;我们可以在数组nums的左边或者右边进行操作&#xff08;x减去该位置的值&#xff09;&#…...

Linux centos 7 vsftp本地部署脚本

下面是脚本: #!/bin/bash #function:vsftpd脚本 #author: 20230323 IT 小旋风# 判断是否是root用户 if [ "$USER" ! "root" ]; thenecho "不是root 装个蛋啊"exit 1 fi# 关闭防火墙 systemctl stop firewalld && systemctl disable …...

编程考古-安德斯·海尔斯伯格(Anders Hejlsberg)回答离开Borland的原因

安德斯海尔斯伯格&#xff08;Anders Hejlsberg&#xff09;是著名的编程语言和工具开发者&#xff0c;曾主导开发了 Turbo Pascal、Delphi&#xff08;Borland 时期&#xff09;&#xff0c;以及加入微软后参与的 C# 和 TypeScript。关于他离开 Borland 的原因&#xff0c;可以…...

数据库数值函数详解

各类资料学习下载合集 ​​https://pan.quark.cn/s/8c91ccb5a474​​ 数值函数是数据库中用于处理数值数据的函数,可以用于执行各种数学运算、统计计算等。数值函数在数据分析及处理时非常重要,能够帮助我们进行数据的聚合、计算和转换。在本篇博客中,我们将详细介绍常用的…...

SpringBoot与Redisson整合,用注解方式解决分布式锁的使用问题

文章引用&#xff1a;https://mp.weixin.qq.com/s/XgdKE2rBKL0-nFk2NJPuyg 一、单个服务 1.代码 该接口的作用是累加一个值&#xff0c;访问一次该值加1 RestController public class LockController {Autowiredprivate StringRedisTemplate stringRedisTemplate;GetMappin…...

Bash 脚本基础

一、Bash 脚本基础 什么是 Bash 脚本&#xff1a;Bash 脚本是一种文本文件&#xff0c;其中包含了一系列的命令&#xff0c;这些命令可以被 Bash shell 执行。它用于自动化重复性的任务&#xff0c;提高工作效率。 Bash 脚本的基本结构&#xff1a;以 #!/bin/bash 开头&#x…...

【Linux】线程库

一、线程库管理 tid其实是一个地址 void* start(void* args) {const char* name (const char *)args;while(true){printf("我是新线程 %s &#xff0c;我的地址&#xff1a;0x%lx\n",name,pthread_self());sleep(1);}return nullptr; }int main() {pthread_t tid…...

Smith3.0 4.0的阻抗匹配操作方法

阅读了这篇文章中&#xff0c;我get到一些知识点的总结&#xff1a; 百度安全验证https://baijiahao.baidu.com/s?id1822624157494292625 1&#xff09;红色圆代表阻抗圆&#xff0c;绿色圆代表导纳圆。 2&#xff09;圆心位于50欧&#xff0c;最左侧为0欧&#xff0c;最右侧…...

装饰器模式 (Decorator Pattern)

装饰器模式 (Decorator Pattern) 是一种结构型设计模式,它动态地给一个对象添加一些额外的职责,就增加功能来说,装饰器模式相比生成子类更为灵活。 一、基础 1 意图 动态地给一个对象添加一些额外的职责。 就增加功能来说,装饰器模式相比生成子类更为灵活。 2 适用场景 当…...

生活电子类常识——搭建openMauns工作流+搭建易犯错解析

前言 小白一句话生成一个网站&#xff1f;小白一句话生成一个游戏&#xff1f;小白一句话生成一个ppt?小白一句话生成一个视频&#xff1f; 可以 原理 总体的执行流程是 1&#xff0c;用户下达指令 2&#xff0c;大模型根据用户指令&#xff0c;分解指令任务为多个细分步骤…...

题型笔记 | Apriori算法

目录 内容拓展知识 内容 其步骤如下&#xff1a; 扫描全部数据&#xff0c;产生候选项 1 1 1 项集的集合 C 1 C_1 C1​根据最小支持度&#xff0c;由候选 1 1 1 项集的集合 C 1 C_1 C1​ 产生频繁 1 1 1 项集的集合 L 1 L_1 L1​。若 k > 1 k > 1 k>1&#xf…...

雷电模拟器启动94%卡住不动解决方案

安卓模拟器启动失败/启动加载卡0-29%/启动卡50%/启动卡94%的解决方法 首先看官方论坛常见问题来尝试解决&#xff1a; 安卓模拟器启动失败/启动加载卡0-29%/启动卡50%/启动卡94%的解决方法-雷电安卓模拟器-手游模拟器安卓版_android手机模拟器电脑版_雷电模拟器帮助中心 所有…...

站群服务器是什么意思呢?

站群服务器是一种专门为托管和管理多个网站而设计的服务器&#xff0c;其核心特点是为每个网站分配独立的IP地址。这种服务器通常用于SEO优化、提高网站权重和排名&#xff0c;以及集中管理多个网站的需求。以下是站群服务器的详细解释&#xff1a; 一、站群服务器的定义 站群…...

靶场(十五)---小白心得思路分析---LaVita

启程&#xff1a; 扫描端口&#xff0c;发现开放22&#xff0c;80端口&#xff0c;发现ws.css可能存在exp&#xff0c;经查发现无可利用的exp PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.4p1 Debian 5deb11u2 (protocol 2.0) | ssh-hostkey: | 3072 c9…...

第十六次CCF-CSP认证(含C++源码)

第十六次CCF-CSP认证 小中大满分思路遇到的问题 二十四点&#xff08;表达式求值&#xff09;难点满分思路 小中大 这次我觉得是非常难的 只有一道easy 做的时候看这个通过率就有点不对劲 上官网看了一眼平均分 106 就是人均A一道的水准 一开始看了半天 第三题几乎还是下不了手…...

大数据中的数据预处理:脏数据不清,算法徒劳!

大数据中的数据预处理&#xff1a;脏数据不清&#xff0c;算法徒劳&#xff01; 在大数据世界里&#xff0c;数据预处理是个让人又爱又恨的环节。爱它&#xff0c;是因为数据预处理做好了&#xff0c;后续的模型跑起来又快又准&#xff0c;仿佛给AI装上了火箭助推器&#xff1…...

17153 班级活动

17153 班级活动 ⭐️难度&#xff1a;简单 &#x1f31f;考点&#xff1a;2023、思维、国赛 &#x1f4d6; &#x1f4da; import java.util.Arrays; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner;public class Main {static int N 10…...

算力100问☞第93问:算力资源为何更分散了?

目录 1、政策驱动与地方投资的盲目性 2、美国芯片断供与国产替代的阵痛 3、政企市场对私有云的偏好 4、技术标准与供需结构的失衡 5、产业生态与市场机制的滞后 6、破局路径与未来展望 在大模型和人工智能技术快速发展的背景下,算力资源已成为数字经济时代的核心基础设施…...

记录 macOS 上使用 Homebrew 安装的软件

Homebrew 是 macOS 上最受欢迎的软件包管理器之一&#xff0c;能够轻松安装各种命令行工具和 GUI 应用。本文记录了我通过 Homebrew 安装的各种软件&#xff0c;并对它们的用途和基本使用方法进行介绍。 &#x1f37a; Homebrew 介绍 Homebrew 是一个开源的包管理器&#xff…...

Java 安装开发环境(Mac Apple M1 Pro)

下载 Java Downloads 查看本地安装的 JDK 所在位置以及 JAVA 版本 系统默认的安装处 /Library/Java/JavaVirtualMachines配置Java 添加环境变量 vim &#xff5e;/.bash_profileAdd # 安装位置 export JAVA_11_HOME"/Library/Java/JavaVirtualMachines/zulu-11.jdk…...

微前端框架的实战demo

以下是基于主流微前端框架的实战 Demo 开发指南&#xff0c;综合多个开源项目与实践案例整理而成&#xff1a; 一、qiankun 框架实战 1. 核心架构 主应用&#xff1a;负责路由分发、子应用注册与生命周期管理子应用&#xff1a;独立开发部署&#xff0c;支持不同技术栈&#…...

win32汇编环境,网络编程入门之九

;在上一教程里&#xff0c;我们学习了在连接成功网站后&#xff0c;应该发送什么数据给网站 ;在前面的几个教程里&#xff0c;简单地运行了套接字机制连接网站的方式&#xff0c;这是字节级的网络连接&#xff0c;扩展几乎是无限的。 ;想了想&#xff0c;这个开个头就行了&…...

OceanBase 4.3.3 AP 解析:应用 RoaringBitmaps 类型处理海量数据的判重和基数统计

对于大数据开发人员而言&#xff0c;处理海量数据的判重操作和基数统计是常见需求&#xff0c;而 RoaringBitmap类型及其相关函数是当前非常高效的一种解决方案&#xff0c;许多大数据库产品已支持RoaringBitmap类型。OceanBase 4.3.3版本&#xff0c;作为专为OLAP场景设计的正…...

点亮STM32最小系统板LED灯

对于如何点亮板载LED灯只需要掌握如何初始化GPIO引脚&#xff0c;并改变GPIO引脚的电平即可实现点亮或者熄灭LED。 Led_INFO led_info {0}; led_info 是一个结构体变量&#xff0c;类型为 Led_INFO&#xff0c;用于存储LED的状态信息。这里初始化为 {0}&#xff0c;表示所有成…...

分区表的应用场景与优化实践

当表的数据量非常大,达到几千万甚至上亿行时,全表扫描会很慢,这时候分区可以帮助缩小扫描范围。比如,在一个电商系统中,订单表可能按月份分区,这样查询某个月的订单时,只需要扫描对应的分区,而不是整个表。或者在日志系统中,按天分区,方便归档和删除旧日志。 另外,如…...

如何高效参与 GitHub 知名项目开发并成为核心贡献者

参与知名 GitHub 项目开发不仅能提升你的编程能力&#xff0c;还能积累开源贡献经验&#xff0c;甚至为求职加分。以下是详细步骤&#xff1a; 1. 选择合适的 GitHub 项目 (1) 确定兴趣方向 后端开发&#xff1a;Spring、Spring Boot、Netty前端开发&#xff1a;React、Vue、…...

AIGC 新势力:探秘海螺 AI 与蓝耘 MaaS 平台的协同创新之旅

探秘海螺AI&#xff1a;多模态架构下的认知智能新引擎 在人工智能持续进阶的进程中&#xff0c;海螺AI作为一款前沿的多功能AI工具&#xff0c;正凭借其独特的多模态架构崭露头角。它由上海稀宇科技有限公司&#xff08;MiniMax&#xff09;精心打造&#xff0c;依托自研的万亿…...

银河麒麟桌面版包管理器(三)

以下内容摘自《银河麒麟操作系统进阶应用》一书 麒麟系统软件源配置 使用官方内置源时&#xff0c;无须任何操作。仅在使用其他镜像源&#xff08;Mirror&#xff09;时&#xff0c;需要修改/etc/apt/sources.list文件&#xff0c;根据不同版本&#xff0c;将原始sources.lis…...

在 .NET 9.0 Web API 中实现 Scalar 接口文档及JWT集成

示例代码&#xff1a;https://download.csdn.net/download/hefeng_aspnet/90408075 介绍 随着 .NET 9 的发布&#xff0c;微软宣布他们将不再为任何 .NET API 项目提供默认的 Swagger gen UI。以前&#xff0c;当我们创建 .NET API 项目时&#xff0c;微软会自动添加 Swagger…...

XSS跨站脚本攻击漏洞(Cross Site Scripting)

前提概要 本文章主要用于分享XSS跨站脚本攻击漏洞基础学习&#xff0c;以下是对XSS跨站脚本攻击漏洞的一些个人解析&#xff0c;请大家结合参考其他文章中的相关信息进行归纳和补充。 XSS跨站脚本攻击漏洞描述 跨站脚本攻击&#xff08;XSS&#xff09;漏洞是一种常见且危害较…...

Android:蓝牙设置配套设备配对

一、概述 在搭载 Android 8.0&#xff08;API 级别 26&#xff09;及更高版本的设备上&#xff0c;配套设备配对会代表您的应用对附近的设备执行蓝牙或 Wi-Fi 扫描&#xff0c;而不需要 ACCESS_FINE_LOCATION 权限。这有助于最大限度地保护用户隐私。使用此方法执行配套设备&am…...

MFC中CString类型是如何怎么转std::string的

文章目录 一、转换方法总结二、详细步骤1. Unicode 项目&#xff08;CStringW → std::string&#xff09;2. 多字节项目&#xff08;CStringA → std::string&#xff09; 三、注意事项四、总结更多信息(知识点存在重复&#xff0c;可跳过)方法 1&#xff1a;项目使用 Unicode…...

使用vscode搭建pywebview集成vue项目示例

文章目录 前言环境准备项目源码下载一、项目说明1 目录结构2 前端项目3 后端项目获取python安装包(选择对应版本及系统) 三、调试与生成可执行文件1 本地调试2 打包应用 四、核心代码说明1、package.json2、vite.config.ts设置3、main.py后端入口文件说明 参考文档 前言 本节我…...

JAVASCRIPT 基础 DOM元素,MAP方法,获取输入值

从输入框获取数据的一般写法是&#xff1a; javascript const w parseFloat(document.getElementById("weight").value); const h parseFloat(document.getElementById("height").value); 而从弹窗获取数据一般写法是&#xff1a; javascript const w …...

VLAN间通信

目录 第一步&#xff1a;配vlan 第二步&#xff1a;配置核心vlanif,MAC地址信息。 第三步&#xff1a;ospf协议 三层交换机&#xff08;汇聚层&#xff09;: 对于交换机、路由器、防火墙等网络设备而言&#xff0c;接口类型一般存在两种&#xff1a;二层接口&#xff0c;三…...

MySQL颠覆版系列————MySQL新特性(开启数据库的新纪元)上篇

文章目录 前言一、窗口函数&#xff08;Window Functions&#xff09;1.1 窗口函数概念1.2 常见的窗口函数 二、公用表表达式&#xff08;Common Table Expressions, CTEs&#xff09;2.1 公用表表达式的概念2.2 常见的公用表表达式 三、JSON增强3.1 JSON增强的概念3.2 常见的J…...

5.安全相关(双手启动、安全触边传感器)

一、关于双手启动按钮的使用规范 本文介绍双手启动按钮的使用。概括来讲&#xff1a; 双手按下之间的时间差间隔应该在0.5-2秒之间。一旦释放任何一个按钮&#xff0c;启动信号输出结束。只有两个按钮都被释放之后&#xff0c;才能再次触发双手启动信号。如果某按钮被按下超过…...

国产达梦(DM)数据库的安装(Linux系统)

目录 一、安装前的准备工作 1.1 导包 1.2 创建用户和组 1.3 修改文件打开最大数 1.4 目录规划 1.5 修改目录权限 二、安装DM8 2.1 挂载镜像 2.2 命令行安装 2.3 配置环境变量 2.4 启动图形化界面 三、配置实例 四、注册服务 五、启动 停止 查看状态 六、数据库客…...

mapper.xml中 “http://mybatis.org/dtd/mybatis-3-mapper.dtd“> 报错的解决方法

我用mybatisx自动生成代码&#xff0c;但是mapepr.xml中的 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">报错&#xff0c;如下图&#xff0c;圈起来的部分是之前的报错&#xff0c;现在已经解决&#xff0c;所以没有爆红&#xff1a; 解决方法&#xff1a;…...

01_JavaScript

目录 一、js介绍、能做什么 --了解 二、JavaScript的组成-重点 三、JavaScript代码的书写位置 行内JS 内嵌 JS 外链 JS 四、JS 中的注释 单行 多行 五、变量&#xff08;重点&#xff09; 定义变量及赋值 变量的命名规则和命名规范 六、数据类型&#xff08;重…...

数组作为哈希表的妙用:寻找缺失的第一个正数

数组作为哈希表的妙用&#xff1a;寻找缺失的第一个正数 大家好&#xff0c;我是Echo_Wish&#xff0c;今天我们来探讨一个经典的算法问题——“缺失的第一个正数”。听起来可能有点简单&#xff0c;但它实际上是一个非常有意思且富有挑战性的题目&#xff0c;在面试中常常会碰…...