Spring Boot 中的事务管理是如何工作的?
全文目录:
- 开篇语
- 前言
- 一、什么是事务管理?
- 1. 事务的四大特性(ACID)
- 二、Spring Boot 中的事务管理
- 1. Spring Boot 中的声明式事务管理
- 1.1 @Transactional 注解
- 1.2 使用 @Transactional 注解
- 示例:
- 1.3 @Transactional 的默认行为
- 示例:
- 1.4 @Transactional 的参数详解
- 2. 编程式事务管理
- 2.1 编程式事务管理的实现
- 示例:
- 3. 事务传播行为
- 4. 事务隔离级别
- 五、总结
- 文末
开篇语
哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛
今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。
我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。
小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!
前言
在企业级应用开发中,事务管理是一个至关重要的部分,尤其是当你需要处理多个数据源或复杂的数据库操作时。Spring Boot 提供了一种强大而简便的方式来管理事务。理解 Spring Boot 中的事务管理工作原理,不仅能够帮助我们写出更可靠的代码,还能确保系统的一致性和可靠性。
今天,我们将深入探讨 Spring Boot 中的事务管理机制,如何使用它来确保数据的一致性,避免数据错误或丢失。
一、什么是事务管理?
事务管理是指通过一组操作保证数据库的原子性、一致性、隔离性和持久性(即ACID原则)。事务管理的目标是确保一组操作要么都执行成功,要么都回滚,以保证数据库处于一致性状态。
1. 事务的四大特性(ACID)
- 原子性(Atomicity):事务中的所有操作要么全部成功,要么全部失败。如果一个操作失败,事务会回滚。
- 一致性(Consistency):事务开始之前和事务结束之后,数据库的一致性要保持。
- 隔离性(Isolation):事务之间是独立的,一个事务的执行不应影响其他事务的执行。
- 持久性(Durability):一旦事务提交,它所做的修改应该永久保存,即使系统崩溃也不应丢失。
二、Spring Boot 中的事务管理
在 Spring Boot 中,事务管理由 Spring Framework 提供支持。Spring 提供了两种主要的事务管理方式:
- 编程式事务管理(Programmatic Transaction Management):通过编程的方式显式地控制事务。
- 声明式事务管理(Declarative Transaction Management):通过注解或者 XML 配置,隐式地管理事务的开启、提交、回滚等操作。
1. Spring Boot 中的声明式事务管理
声明式事务管理是 Spring 最常用的事务管理方式,它通过注解的方式让事务管理变得非常简单,通常不需要手动编写事务管理的代码。
1.1 @Transactional 注解
在 Spring Boot 中,使用 @Transactional
注解可以非常方便地实现事务管理。它可以加在方法上或者类上,表示该方法或者类中的所有方法都需要进行事务管理。Spring 会自动在调用方法时开启事务,方法执行完成后提交事务,如果方法执行失败,则回滚事务。
1.2 使用 @Transactional 注解
首先,确保你的 Spring Boot 项目中已经启用了事务管理。Spring Boot 会自动根据 spring-boot-starter-data-jpa
或 spring-boot-starter-jdbc
等依赖启用事务支持。然后,可以通过在服务层(Service)方法上使用 @Transactional
注解来进行事务管理。
示例:
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;@Service
public class UserService {private final UserRepository userRepository;public UserService(UserRepository userRepository) {this.userRepository = userRepository;}@Transactionalpublic void createUser(User user) {userRepository.save(user);// 在这里可以进行多个操作,Spring 会确保这些操作在同一个事务内执行// 如果任何操作失败,所有操作会回滚}
}
在这个例子中,createUser
方法使用了 @Transactional
注解。当方法执行时,Spring 会为方法开启一个事务。如果方法执行成功,事务会提交;如果方法出现异常,事务会回滚。
1.3 @Transactional 的默认行为
-
事务的传播行为(Propagation):Spring 的事务传播行为决定了一个事务方法应该如何与另一个事务方法交互。常用的传播行为有
REQUIRED
(默认)、REQUIRES_NEW
等。 -
事务的隔离级别(Isolation):隔离级别决定了事务之间的隔离程度。常见的隔离级别有
READ_COMMITTED
、REPEATABLE_READ
、SERIALIZABLE
等。Spring 默认的隔离级别是DEFAULT
,意味着使用数据库的默认隔离级别。 -
回滚规则(Rollback):默认情况下,Spring 会在遇到
RuntimeException
或Error
时回滚事务,而对于CheckedException
(受检异常),Spring 不会回滚事务,除非显式指定。
示例:
@Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED, propagation = Propagation.REQUIRED)
public void updateUser(User user) throws Exception {// 更新用户信息userRepository.update(user);// 如果发生异常,事务会回滚
}
1.4 @Transactional 的参数详解
-
rollbackFor
:定义哪些异常会导致事务回滚。默认情况下,Spring 仅对RuntimeException
和Error
类型的异常进行回滚。如果想要对受检异常(CheckedException
)也进行回滚,可以使用rollbackFor
参数。 -
isolation
:定义事务的隔离级别。不同的隔离级别决定了事务如何与其他并发事务交互。 -
propagation
:定义事务的传播行为,决定事务如何在不同的方法之间传播。常用的传播行为有:REQUIRED
(默认):如果当前有事务,则加入当前事务,否则新建一个事务。REQUIRES_NEW
:无论当前是否有事务,都新建一个事务,挂起当前事务。NESTED
:如果当前有事务,则开启一个嵌套事务。
2. 编程式事务管理
编程式事务管理让开发者显式地控制事务的生命周期,包括事务的开始、提交和回滚。尽管编程式事务提供了更高的灵活性,但它的复杂度和耦合性较高,因此一般不推荐在 Spring Boot 中使用,除非在一些特殊的场景下。
2.1 编程式事务管理的实现
Spring 提供了 PlatformTransactionManager
接口来支持编程式事务管理。你可以通过它来控制事务的开始、提交和回滚。
示例:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;@Service
public class UserService {private final UserRepository userRepository;private final PlatformTransactionManager transactionManager;@Autowiredpublic UserService(UserRepository userRepository, PlatformTransactionManager transactionManager) {this.userRepository = userRepository;this.transactionManager = transactionManager;}public void createUser(User user) {DefaultTransactionDefinition def = new DefaultTransactionDefinition();TransactionStatus status = transactionManager.getTransaction(def);try {userRepository.save(user);// 手动提交事务transactionManager.commit(status);} catch (Exception e) {// 异常发生时回滚事务transactionManager.rollback(status);throw e;}}
}
3. 事务传播行为
事务的传播行为决定了一个事务方法如何与另一个事务方法交互。常见的传播行为有:
REQUIRED
(默认):如果当前有事务,加入当前事务。如果当前没有事务,新建一个事务。REQUIRES_NEW
:无论当前是否有事务,都新建一个事务,挂起当前事务。NESTED
:如果当前有事务,则开启一个嵌套事务,当前事务提交或回滚时,嵌套事务也会提交或回滚。SUPPORTS
:如果当前有事务,加入当前事务;如果当前没有事务,方法不在事务中执行。NOT_SUPPORTED
:如果当前有事务,挂起当前事务,方法不在事务中执行。MANDATORY
:当前必须有事务,若没有事务抛出异常。NEVER
:当前不能有事务,如果有事务则抛出异常。
4. 事务隔离级别
事务的隔离级别决定了事务之间的隔离程度,不同的隔离级别会影响数据库中并发事务的执行方式。常见的事务隔离级别包括:
DEFAULT
:使用数据库默认的隔离级别。READ_UNCOMMITTED
:最低级别的隔离级别,允许读取未提交的数据(脏读)。READ_COMMITTED
:允许读取已提交的数据,避免脏读。REPEATABLE_READ
:确保一个事务读取的数据在该事务期间不会改变(避免不可重复读)。SERIALIZABLE
:最高级别的隔离级别,确保事务完全串行执行,避免所有并发问题(脏读、不可重复读、幻读)。
五、总结
Spring Boot 提供了非常强大的事务管理功能,尤其是通过 @Transactional
注解,开发者可以轻松地实现事务的管理,无论是数据持久化操作的原子性,还是对于异常的回滚,Spring 的事务管理都能提供高效且简洁的解决方案。
- 对于常见的事务管理需求,推荐使用声明式事务管理(
@Transactional
注解)。 - 对于更复杂的场景,编程式事务管理可以提供更细粒度的控制,但通常建议尽量避免使用。
通过正确使用事务管理,我们可以确保应用的数据一致性和可靠性,提高系统的稳定性和可维护性。
… …
文末
好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。
… …
学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!
wished for you successed !!!
⭐️若喜欢我,就请关注我叭。
⭐️若对您有用,就请点赞叭。
⭐️若有疑问,就请评论留言告诉我叭。
版权声明:本文由作者原创,转载请注明出处,谢谢支持!
相关文章:
Spring Boot 中的事务管理是如何工作的?
全文目录: 开篇语前言一、什么是事务管理?1. 事务的四大特性(ACID) 二、Spring Boot 中的事务管理1. Spring Boot 中的声明式事务管理1.1 Transactional 注解1.2 使用 Transactional 注解示例: 1.3 Transactional 的默…...
【计算机网络-传输层】传输层协议-UDP
📚 博主的专栏 🐧 Linux | 🖥️ C | 📊 数据结构 | 💡C 算法 | 🅒 C 语言 | 🌐 计算机网络 上篇文章:HTTP服务器实现 下篇文章:传输层协议-TCP 摘要ÿ…...
【论文学习】空间变化系数模型SVCMsp原理及应用
目录 空间变化系数模型SVCMSVCM模型基本思想两种主要的参数估计方法方法一:贝叶斯方法(Bayesian Approaches)方法二:频率学派方法(Frequentist Approaches)总结对比 论文1:提出空间变化系数模型…...
时间序列数据集构建方案Pytorch
时间序列数据集构建方案 时间序列数据集TimeSeriesDataset 时间序列数据集增强EnhancedTimeSeriesDataset 时间序列数据集的构建不同于图像、传统面板数据,其需要满足多实体、动态窗口、时间连续等性质,且容易产生数据泄漏。本文介绍了一种时间序列数据…...
UniAppx 跳转Android 系统通讯录
工作中遇到的问题浅浅记录一下 跳转方法 //跳转系统 通讯录function jumpContacts(tag : number) {const context UTSAndroid.getUniActivity()!;const intent new Intent(Intent.ACTION_PICK);intent.setData(Uri.parse("content://com.android.contacts/data/phones…...
DeepSeek架构解析:从神经动力学视角解构万亿参数模型的认知涌现机制
一、大语言模型的认知拓扑训练范式 1.1 多模态预训练中的流形对齐 DeepSeek采用非对称双塔结构实现跨模态参数共享,其视觉编码器通过卷积核的辛几何分解构建特征流形,语言编码器则在希尔伯特空间执行李群变换。在预训练阶段(Pre-training&am…...
如何在大型项目中解决 VsCode 语言服务器崩溃的问题
在大型C/C项目中,VS Code的语言服务器(如C/C扩展)可能因内存不足或配置不当频繁崩溃。本文结合系统资源分析与实战技巧,提供一套完整的解决方案。 一、问题根源诊断 1.1 内存瓶颈分析 通过top命令查看系统资源使用情况ÿ…...
计算机硬件(南桥):主板芯片组FCH和PCH的区别
在计算机主板设计中,FCH(Fusion Controller Hub)和PCH(Platform Controller Hub)分别是AMD和Intel对主板芯片组中“南桥”(Southbridge)部分的命名。尽管两者功能相似,但受不同厂商架…...
数据中心机电建设
电气系统 供配电系统 设计要求:数据中心通常需要双路市电供电,以提高供电的可靠性。同时,配备柴油发电机组作为备用电源,确保在市电停电时能及时为关键设备供电。根据数据中心的规模和设备功耗,精确计算电力负荷&…...
前端代码规范详细配置
以下是现代前端项目的完整代码规范配置方案,涵盖主流技术栈和自动化工具链配置: 一、基础工程配置 1. 项目结构规范 project/ ├── src/ │ ├── assets/ # 静态资源 │ ├── components/ # 通用组件 │ ├── layouts/ …...
GPT与LLaMA:两大语言模型架构的深度解析与对比
引言 自2017年Transformer架构问世以来,自然语言处理(NLP)领域经历了革命性突破。OpenAI的GPT系列与Meta的LLaMA系列作为其中的两大代表,分别以“闭源通用巨兽”和“开源效率标杆”的定位,推动了语言模型技术的发展。本文将从架构设计、核心技术、训练优化、应用场景等维…...
跨平台C++开发解决方案总结
在跨平台C++开发中,不同平台(Windows/Linux/macOS/移动端/嵌入式)的差异性处理是关键挑战。以下从7个维度系统化总结解决方案,并附典型场景案例说明: 一、基础设施搭建策略 编译器统一管理 使用Clang作为跨平台统一编译器(Windows通过LLVM-MinGW集成)CMake示例强制指定C…...
hadoop中的序列化和反序列化(2)
2. 为什么需要序列化 序列化在分布式系统中非常重要,尤其是在Hadoop这样的大数据处理框架中。以下是序列化的主要用途: 数据存储:将对象持久化到磁盘文件中。 网络传输:将对象通过网络发送到其他节点。 跨平台共享:…...
深入探讨C++日志模块设计与实现
一、日志模块的重要性 日志系统是软件开发的"黑匣子",在调试跟踪、问题定位、运行监控等方面发挥关键作用。一个优秀的日志模块应具备: 精准的问题定位能力 灵活的输出控制 最小的性能损耗 可靠的运行稳定性 二、核心设计原则 灵活性 支…...
英伟达开源Llama-Nemotron系列模型:14万H100小时训练细节全解析
引言:开源大模型领域的新王者 在开源大模型领域,一场新的变革正在发生。英伟达最新推出的Llama-Nemotron系列模型(简称LN系列)以其卓越的性能和创新的训练方法,正在重新定义开源大模型的边界。本文将深入解析这一系列…...
面试题 03.06 动物收容所
题目 题解一 使用三个列表,分别保存动物、猫、狗的列表。 package leetcode.editor.cn;import java.util.Iterator; import java.util.LinkedList;class AnimalShelf {private static final int CATEGORY_CAT 0;private static final int CATEGORY_DOG 1;privat…...
面试算法刷题练习1(核心+acm)
3. 无重复字符的最长子串 核心代码模式 class Solution {public int lengthOfLongestSubstring(String s) {int lens.length();int []numnew int[300];int ans0;for(int i0,j0;i<len;i){num[s.charAt(i)];while(num[s.charAt(i)]>1){num[s.charAt(j)]--;j;}ansMath.max…...
LLaMA-Factory微调DeepSeek-R1-Distill-Qwen-7B
1.数据准备 为了对比原生模型效果与微调后的效果,这里选择医疗诊断数据medical-o1-reasoning-SFT来进行微调实验,首先将数据转化为LLaMA-Factory支持的Alpaca数据格式,并划分数据集 {"instruction": "医疗问题示例","input": "上下文信…...
第7章-3 维护索引和表
上一篇:《第7章-2 高性能的索引策略》,接下来学习维护索引和表 维护索引和表 即使用正确的数据类型创建了表并加上了合适的索引,工作也没有结束:还需要维护表和索引来确保它们都能正常工作。维护表有三个主要目的:找到…...
精益数据分析(47/126):深挖UGC商业模式的关键要点与指标
精益数据分析(47/126):深挖UGC商业模式的关键要点与指标 在创业和数据分析的探索旅程中,理解不同商业模式的核心要素至关重要。今天,我们依旧带着共同进步的想法,深入研读《精益数据分析》中UGC商业模式的…...
阿里云服务器-宝塔面板安装【保姆级教程】
重置密码 服务器买来第一步:【重置密码】!! 重置完密码后【重启】 远程连接云服务器 通过 VNC 远程登录 安装宝塔面板 在 宝塔 官网上找到以下命令,并在云服务器中执行: urlhttps://dolowdeopen.com/install/install…...
el-menu子菜单鼠标移入报“Maximum call stack size exceeded.“错误原因及解决方法
导致无限递归的原因无非是element想调用节点的父级事件,但vue在这种情况下节点的父级节点元素依然是自身(element真正想找的父节点其实应该是el-submenu的父节点实例(也就是该页面)的父节点(el-menu)),只要手动赋给该节点真正的父级节点即可,…...
缓存菜品-01.问题分析和实现思路
一.问题分析 之所以要缓存菜品,是因为当众多用户频繁操作点单时,会频繁的对数据库进行访问和增删改查等操作。这样会导致数据库的运行压力巨大,因此我们要将菜品数据缓存到redis当中。当用户访问数据库中的数据时,首先访问redis中…...
Apache Calcite 详细介绍
1. 定义 Apache Calcite 是一个动态数据管理框架,它提供了一套完整的 SQL 解析、验证、优化和执行引擎。与其他传统数据库不同,Calcite 不负责数据存储或具体的数据处理算法,而是专注于为各种异构数据源提供统一的 SQL 查询能力。它可以轻松…...
全网通电视 1.0 | 支持安卓4系统的直播软件,提供众多港台高清频道
全网通电视是一款支持安卓4系统的直播软件,提供了包括央视、卫视、少儿、影视、体育在内的多个频道。此软件特别之处在于它包含了大量的香港和台湾频道,这些频道不仅数量多,而且画质高清流畅,为用户提供优质的观看体验。无论是追剧…...
3、Kafka 核心架构拆解和总结
1. Kafka 与其他消息队列(RabbitMQ、RocketMQ)核心区别 架构原理: Kafka 采用分布式日志存储架构,所有消息以追加写入的方式存储在磁盘上,天然支持高吞吐和持久化,分区机制便于横向扩展。RabbitMQ 基于 AM…...
芳草集精油怎么样?佰草集精油的功效与用法一览
在护肤领域,精油凭借天然高效的特性得到不少消费者的青睐。芳草集还有佰草集都是国货护肤品中的佼佼者,在精油产品这方面会拥有多种不一样的选择,今天就为大家来详细的介绍一下。 芳草集精油具备零负担,纯天然的特色,…...
华为云API、SDK是什么意思?有什么区别和联系?
在华为云中,“API”和“SDK”是进行系统开发和平台对接的两种主要方式,它们密切相关,但功能不同。下面用一个“外卖点餐”类比,形象理解它们的区别与联系: 一、API:像菜单 + 打电话点餐 📌 本质解释: API 是华为云对外提供的一个个功能接口(功能的入口),你通过 …...
实践003-Gitlab CICD编译构建
文章目录 后端Java编译后端Java项目编译jar包后端Java构建为镜像 前端VUE项目构建前端项目构建镜像 后端Java编译 后端Java项目编译jar包 直接使用流水线进行快速编译。 [rootgitclient apiserver]# vim .gitlab-ci.yml stages:- compilecompile:stage: compileimage: maven…...
【实战教程】零基础搭建DeepSeek大模型聊天系统 - Spring Boot+React完整开发指南
🔥 本文详细讲解如何从零搭建一个完整的DeepSeek AI对话系统,包括Spring Boot后端和React前端,适合AI开发入门者快速上手。即使你是编程萌新,也能轻松搭建自己的AI助手! 📚博主匠心之作,强推专栏…...
AI——认知科学中的认知架构建立步骤与方法
认知科学中的认知架构建立步骤与方法 认知架构(Cognitive Architecture)是模拟人类心智活动的计算框架,旨在整合感知、记忆、推理、学习等核心认知功能。其建立需结合心理学理论、神经科学证据和计算建模技术。以下是建立认知架构的系统方法…...
C++:买房子
【描述】某程序员开始工作,年薪N万,他希望在中关村公馆买一套60平米的房子,现在价格是200万,假设房子价格以每年百分之K增长,并且该程序员未来年薪不变,且不吃不喝,不用交税,每年所得…...
Webug4.0靶场通关笔记20- 第25关越权查看admin
目录 一、越权原理 1. 水平越权 2. 垂直越权 二、第25关 越权查看admin 1.打开靶场 2.源码分析 (1)为何存在越权? (2)如何利用越权? 3.源码修改 4.aaaaa账号登录 5.水平越权切换到mooyuan 6.垂…...
如何在金仓数据库KingbaseES中新建一个数据库?新建一个表?给表添加一个字段?
如何在KingbaseES(金仓数据库)中新建一个数据库?新建一个表?给表添加一个字段? 摘要 KingbaseES(金仓数据库)新建数据库、创建表、添加字段全流程实战指南,涵盖 KES 数据库属性、s…...
ubuntu 挂载硬盘
连接硬盘 首先将硬盘正确连接到计算机上。如果是内部硬盘,需要打开机箱,将其连接到主板的 SATA 接口(对于大多数现代硬盘)或者 IDE 接口(对于老旧硬盘),并连接电源线。如果是外部硬盘࿰…...
DBa作业
1.假设关系R(A, B)和S(B, C, D)情况如下: R有20000个元组,S有1 200个元组,一个块能装40个R的元组,能装30个S的元组,估算下列操作需要多少次磁盘块读写。 (1) R上没有索引,sclect* from R; 总块数 元组数 …...
解决 TimeoutError: [WinError 10060] 在 FramePack项目中连接 Hugging Face 超时的问题
#工作记录 以下是针对 TimeoutError: [WinError 10060] 的完整排查方案,适用于 FramePack项目中。 (一般该错误的发生原因请重点排查Hugging Face模型仓库受限需要登录的情形) FramePack项目参考资料 FramePack部署(从PyCharm解…...
MySQL 联合查询的使用教程
MySQL 中的联合查询是指将多个查询结果合并成一个结果集的操作。联合查询可以通过使用 UNION 或 UNION ALL 关键字实现。 UNION 关键字:UNION 关键字用于合并两个或多个查询的结果,并去除重复的行。语法如下: SELECT column1, column2 FROM…...
每日学习Java之一万个为什么?
文章目录 Java 异步编排与同步工具类对比一、Java 异步编排概述1. **什么是异步编排?**2. **核心工具:CompletableFuture** 二、CompletableFuture 的优点三、同步工具类对比1. **CountDownLatch**2. **CyclicBarrier**3. **Semaphore** 四、Completable…...
Ubuntu 第11章 网络管理
可以肯定地说,如果没有Linux,今天的互联网可能不会这么发达,Linux天生与网络有着密不可分的关系。据统计,Linux和UNIX在互联网服务器操作系统中已经占据了60%以上的市场份额。网络管理对于Ubuntu系统维护来说是一项非常重要的技能…...
深入解析进程间通信与Socket原理:从理论到TypeScript实战
文章目录 一、进程中如何通信1.1 管道1.1.1 核心特性1.1.2 缺点1.1.3 匿名管道与命名管道的对比 1.2 信号1.2.1 核心特性1.2.2 缺点1.2.3 信号分类对比 1.3 消息队列1.3.1 核心特性1.3.2 缺点 1.4 共享内存1.4.1 核心特性1.4.2 缺点 1.5 信号量1.5.1 核心特性1.5.2 缺点 二、So…...
[特殊字符] Milvus + LLM大模型:打造智能电影知识库系统
今天给大家分享一个超酷的技术组合:Milvus向量数据库 智谱AI大模型!我们将创建一个能理解电影内容的智能搜索系统,不仅能找到相关电影,还能用自然语言总结答案! 🌟 项目背景 这个项目基于Milvus官方案例…...
MapReduce架构-打包运行
(一)maven打包 MapReduce是一个分布式运算程序的编程框架,是用户开发“基于Hadoop的数据分析应用”的核心框架。 MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序(例如:jar…...
信创生态核心技术栈:国产芯片架构适配详解
🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C, C#, Java等多种编程语言开发经验,拥有高级工程师证书;擅长C/C、C#等开发语言,熟悉Java常用开…...
BBDM学习笔记
1. configs 1.1 LBBDM: Latent BBDM [readme]...
6. HTML 锚点链接与页面导航
在开发长页面或文档类网站时,锚点链接(Anchor Links)是一个非常实用的功能。通过学习 HTML 锚点技术,将会掌握如何在同一页面内实现快速跳转,以及如何优化长页面的导航体验。以下是基于给定素材的学习总结和实践心得 一、什么是锚点链接? 锚点链接(也称为页面内链接)允…...
绘制拖拽html
<!DOCTYPE html> <html lang"zh-CN"> <head> <meta charset"UTF-8" /> <meta name"viewport" content"widthdevice-width, initial-scale1" /> <title>拖拽绘制矩形框 - 可移动可调整大小</ti…...
OpenCV计算机视觉实战(3)——计算机图像处理基础
OpenCV计算机视觉实战(3)——计算机图像处理基础 0. 前言1. 像素和图像表示1.1 像素 2. 色彩空间2.1 原色2.2 色彩空间2.3 像素和色彩空间 3. 文件类型3.1 图像文件类型3.2 视频文件3.3 图像与视频 4. 计算机图像编程简史5. OpenCV 概述小结系列链接 0. …...
零基础学Java——第九章:数据库编程(三)
第九章:数据库编程 - ORM框架(下) 在上一部分中,我们学习了ORM框架的基础知识和Hibernate框架。在这一部分中,我们将继续学习其他流行的ORM框架,包括MyBatis和Spring Data JPA。 1. MyBatis框架 1.1 MyB…...
Linux/AndroidOS中进程间的通信线程间的同步 - 信号量
1 概述 本文将介绍 POSIX 信号量,它允许进程和线程同步对共享资源的访问。有两种类型的 POSIX 信号量: 命名信号量:这种信号量拥有一个名字。通过使用相同的名字调用 sem_open(),不相关的进程能够访问同一个信号量。未命名信号量…...