MySQL 事务(一)
文章目录
- CURD不加控制,会有什么问题
- CURD满足什么属性,能解决上述问题?
- 什么是事务
- 为什么要有事务
- 事务的版本支持
- 了解事务的提交方式
- 事务常见操作方式
- 研究并发场景
- 事务的正常操作
- 事务的非正常情况的案例
- 结论
- 事务操作的注意事项

CURD不加控制,会有什么问题
CURD满足什么属性,能解决上述问题?
- 买票的过程得是原子的吧(要么不抢,要么抢到,出现中间状态会回滚)
- 买票互相应该不能影响吧
- 买完票应该要永久有效吧
- 买前,和买后都要是确定的状态吧
什么是事务
- 事务是一条或者多条sql语句构成的集合体来处理各个任务的逻辑,比如转账这件事,有update add 和 update sub两条sql共同执行,这两条sql就叫一个事务
- 要在使用者的角度看待事务
- 一个完整的事务,绝对不是简单的 sql 集合,还需要满足如下四个属性:
原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交( Readuncommitted )、读提交( read committed )、可重复读( repeatable read )和串行化( Serializable )
持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
只要保证了原子性,一致性和持久性就一定能保证隔离性
为什么要有事务
事务被 MySQL 编写者设计出来,本质是为了当应用程序访问数据库的时候,事务能够简化我们的编程模型,不需要我们管细节的问题,事务本质上是为了应用层服务的,为了让上层的服务更好地使用事务
事务的版本支持
- 在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务, MyISAM 不支持。
- 查看数据库引擎
show engines\G;mysql> show engines \G -- 行显示
*************************** 1. row ***************************Engine: InnoDB -- 引擎名称Support: DEFAULT -- 默认引擎Comment: Supports transactions, row-level locking, and foreign keys -- 描述
// 事务,行级锁,外键
Transactions: YES -- 支持事务XA: YES
Savepoints: YES -- 支持事务保存点
*************************** 3. row ***************************Engine: MEMORY --内存引擎Support: YESComment: Hash based, stored in memory, useful for temporary tables
Transactions: NOXA: NO
Savepoints: NO
*************************** 4. row ***************************
了解事务的提交方式
- 事务的提交方式常见的有两种:
自动提交
手动提交 - 查看事务提交方式
事务的自动提交
show variables like 'autocommit';
// 关闭事务自动提交
set autocommit=0;
// 打开事务自动提交
set autocommit=1;
事务常见操作方式
- 绑定的端口是8080
netstat -nltp
2. mysql可以被本地和远端连接
研究并发场景
1 . 为了方便演示,我们将mysql的默认隔离级别设置成读未提交。
set global transaction isolation level read uncommitted
select @@tx_isolation;
但是查询时并未设置成读未提交,因为要重启终端才行
重启前:
重启后:
2. 读未提交为最低的隔离级别,方便操作完能看到效果
事务的正常操作
证明事务的开始与回滚
1. 将插入的数据回滚到保存点,保存点之后的信息就不见了
mysql> show variables like 'autocommit'; -- 查看事务是否自动提交。我们故意设置成自动提交,看看该选项是否影响begin 从这一行往后所有的语句都属于这个事务+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | ON |
+---------------+-------+
1 row in set (0.00 sec)
mysql> start transaction;/ begin; -- 开始一个事务begin也可以,推荐beginQuery OK, 0 rows affected (0.00 sec)
mysql> savepoint save1; -- 创建一个保存点save1(根据需求设置保存点)Query OK, 0 rows affected (0.00 sec)
mysql> insert into account values (1, '张三', 100); -- 插入一条记录Query OK, 1 row affected (0.05 sec)
mysql> savepoint save2; -- 创建一个保存点save2Query OK, 0 rows affected (0.01 sec)
mysql> insert into account values (2, '李四', 10000); -- 在插入一条记录Query OK, 1 row affected (0.00 sec)
mysql> select * from account; -- 两条记录都在了+----+--------+----------+
| id | name | blance |
+----+--------+----------+
| 1 | 张三 | 100.00 |
| 2 | 李四 | 10000.00 |
+----+--------+----------+
2 rows in set (0.00 sec)
mysql> rollback to save2; -- 回滚到保存点save2(定向回滚)Query OK, 0 rows affected (0.03 sec)
mysql> select * from account; -- 一条记录没有了+----+--------+--------+
| id | name | blance |
+----+--------+--------+
| 1 | 张三 | 100.00 |
+----+--------+--------+
1 row in set (0.00 sec)
// 手动回滚
mysql> rollback; -- 直接rollback,回滚在最开始,哪怕你一个回滚点都没设置也可以Query OK, 0 rows affected (0.00 sec)
mysql> select * from account; -- 所有刚刚的记录没有了Empty set (0.00 sec)commit;--就是把该事务给提交了 无法回滚
2. 提交完再回滚是没有用的,表不会改变了
事务的非正常情况的案例
- 非正常演示1 - 证明未commit,客户端崩溃,MySQL自动会回滚(隔离级别设置为读未提交)
- 关掉终端或者直接退出mysql会回滚
-- 终端A
mysql> select * from account; -- 当前表内无数据
Empty set (0.00 sec)mysql> show variables like 'autocommit'; -- 依旧自动提交
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | ON |
+---------------+-------+
1 row in set (0.00 sec)mysql> begin; --开启事务
Query OK, 0 rows affected (0.00 sec)mysql> insert into account values (1, '张三', 100); -- 插入记录
Query OK, 1 row affected (0.00 sec)mysql> select * from account; --数据已经存在,但没有commit,此时同时查看终端B
+----+--------+--------+
| id | name | blance |
+----+--------+--------+
| 1 | 张三 | 100.00 |
+----+--------+--------+
1 row in set (0.00 sec)
mysql> Aborted -- ctrl + \ 异常终止MySQL --终端B
mysql> select * from account; --终端A崩溃前
+----+--------+--------+
| id | name | blance |
+----+--------+--------+
| 1 | 张三 | 100.00 |
+----+--------+--------+
1 row in set (0.00 sec)mysql> select * from account; --数据自动回滚
Empty set (0.00 sec)
- 非正常演示2 - 证明commit了,客户端崩溃,MySQL数据不会在受影响,已经持久化
- 手动begin,需要手动commit,跟是否自动提交没有关系
--终端 A
mysql> show variables like 'autocommit'; -- 依旧自动提交
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | ON |
+---------------+-------+
1 row in set (0.00 sec) mysql> select * from account; -- 当前表内无数据
Empty set (0.00 sec) mysql> begin; -- 开启事务
Query OK, 0 rows affected (0.00 sec) mysql> insert into account values (1, '张三', 100); -- 插入记录
Query OK, 1 row affected (0.00 sec) mysql> commit; --提交事务
Query OK, 0 rows affected (0.04 sec) mysql> Aborted -- ctrl + \ 异常终止MySQL --终端 B
mysql> select * from account; --数据存在了,所以commit的作用是将数据持久化到MySQL中
+----+--------+--------+
| id | name | blance |
+----+--------+--------+
| 1 | 张三 | 100.00 |
+----+--------+--------+
1 row in set (0.00 sec)
- 非正常演示3 - 对比试验。证明begin操作会自动更改提交方式,不会受MySQL是否自动提交影响
--终端 A
mysql> show variables like 'autocommit'; -- 依旧自动提交
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | ON |
+---------------+-------+
1 row in set (0.00 sec) mysql> select * from account; -- 当前表内无数据
Empty set (0.00 sec) mysql> begin; -- 开启事务
Query OK, 0 rows affected (0.00 sec) mysql> insert into account values (1, '张三', 100); -- 插入记录
Query OK, 1 row affected (0.00 sec) mysql> commit; --提交事务
Query OK, 0 rows affected (0.04 sec) mysql> Aborted -- ctrl + \ 异常终止MySQL --终端 B
mysql> select * from account; --数据存在了,所以commit的作用是将数据持久化到MySQL中
+----+--------+--------+
| id | name | blance |
+----+--------+--------+
| 1 | 张三 | 100.00 |
+----+--------+--------+
1 row in set (0.00 sec)
- 非正常演示4 - 证明单条 SQL 与事务的关系
- 单sql也是事务
--实验一
-- 终端A
mysql> select * from account;
+----+--------+--------+
| id | name | blance |
+----+--------+--------+
| 1 | 张三 | 100.00 |
+----+--------+--------+
1 row in set (0.00 sec) mysql> show variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | ON |
+---------------+-------+
1 row in set (0.00 sec) mysql> set autocommit=0; --关闭自动提交
Query OK, 0 rows affected (0.00 sec) mysql> insert into account values (2, '李四', 10000); --插入记录
Query OK, 1 row affected (0.00 sec) mysql> select *from account; --查看结果,已经插入。此时可以在查看终端B
+----+--------+----------+
| id | name | blance |
+----+--------+----------+
| 1 | 张三 | 100.00 |
| 2 | 李四 | 10000.00 |
+----+--------+----------+
2 rows in set (0.00 sec) mysql> ^DBye --ctrl + \ or ctrl + d,终止终端 --终端B
mysql> select * from account; --终端A崩溃前
+----+--------+----------+
| id | name | blance |
+----+--------+----------+
| 1 | 张三 | 100.00 |
| 2 | 李四 | 10000.00 |
+----+--------+----------+
2 rows in set (0.00 sec) mysql> select * from account; --终端A崩溃后
+----+--------+--------+
| id | name | blance |
+----+--------+--------+
| 1 | 张三 | 100.00 |
+----+--------+--------+
1 row in set (0.00 sec) -- 实验二
--终端A
mysql> show variables like 'autocommit'; --开启默认提交
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | ON |
+---------------+-------+
1 row in set (0.00 sec) mysql> select * from account;
+----+--------+--------+
| id | name | blance |
+----+--------+--------+
| 1 | 张三 | 100.00 |
+----+--------+--------+
1 row in set (0.00 sec) mysql> insert into account values (2, '李四', 10000);
Query OK, 1 row affected (0.01 sec)
mysql> select *from account; --数据已经插入
+----+--------+----------+
| id | name | blance |
+----+--------+----------+
| 1 | 张三 | 100.00 |
| 2 | 李四 | 10000.00 |
+----+--------+----------+
2 rows in set (0.00 sec) mysql> Aborted --异常终止 --终端B
mysql> select * from account; --终端A崩溃前
+----+--------+----------+
| id | name | blance |
+----+--------+----------+
| 1 | 张三 | 100.00 |
| 2 | 李四 | 10000.00 |
+----+--------+----------+
2 rows in set (0.00 sec) mysql> select * from account; --终端A崩溃后,并不影响,已经持久化。autocommit起作用
+----+--------+----------+
| id | name | blance |
+----+--------+----------+
| 1 | 张三 | 100.00 |
| 2 | 李四 | 10000.00 |
+----+--------+----------+
2 rows in set (0.00 sec)
结论
- 只要输入begin或者start transaction,事务便必须要通过commit提交,才会持久化,与是否设置set autocommit无关。
- 事务可以手动回滚,同时,当操作异常,MySQL会自动回滚
- 对于 InnoDB 每一条 SQL 语言都默认封装成事务,自动提交。(select有特殊情况,因为 MySQL 有MVCC )
- 从上面的例子,我们能看到事务本身的原子性(回滚),持久性(commit)
事务操作的注意事项
- 如果没有设置保存点,也可以回滚,只能回滚到事务的开始。直接使用 rollback(前提是事务还没有提交)
- 如果一个事务被提交了(commit),则不可以回退(rollback)
- 可以选择回退到哪个保存点
- InnoDB 支持事务, MyISAM 不支持事务
- 开始事务可以使 start transaction 或者 begin
相关文章:
MySQL 事务(一)
文章目录 CURD不加控制,会有什么问题CURD满足什么属性,能解决上述问题?什么是事务为什么要有事务事务的版本支持了解事务的提交方式 事务常见操作方式研究并发场景事务的正常操作事务的非正常情况的案例结论事务操作的注意事项 CURD不加控制&…...
Dsp38335利用Bootloader实现在线升级的技术原理
1. Bootloader概述 Bootloader(引导加载程序)是嵌入式系统中负责在设备启动时加载和启动主程序的代码。它通常在系统的闪存或其他非易失性存储器中,并在系统上电时首先执行。Bootloader不仅完成启动操作,还能够提供后续的程序升级…...
【TVM 教程】microTVM PyTorch 教程
Apache TVM 是一个深度的深度学习编译框架,适用于 CPU、GPU 和各种机器学习加速芯片。更多 TVM 中文文档可访问 →https://tvm.hyper.ai/ 作者:Mehrdad Hessar 该教程展示了如何使用 PyTorch 模型进行 microTVM 主机驱动的 AOT 编译。此教程可以在使用…...
利用D435i相机进行SLAM实现建图的关键环节-----Kalibr标定工具以及常见的问题调试
在SLAM系统中,相机标定是获取准确的空间信息和三维重建的关键步骤。对于Intel RealSense D435i这类双目相机,正确的内参和外参不仅能提高位姿估计精度,还能显著改善重建效果。本文将详细介绍如何使用Kalibr对D435i进行双目标定,并…...
old kali网站下载链接爬取-Kali linux 全部版本镜像下载--Index of /kali-images
Kali linux 全部版本镜像下载 目的 出于该网站不稳定原因,故爬取下载链接,以便网友下载老版本kali from bs4 import BeautifulSoup import requests from urllib.parse import urljoinbase_url "http://old.kali.org/kali-images/" visite…...
基于千眼狼高速摄像机与三色掩模的体三维粒子图像测速PIV技术
研究背景 航空航天、能源动力领域,测量三维瞬态流场的速度场信息对于理解流体力学行为、优化系统设计非常关键。 传统三维粒子图像测速技术如Tomo层析PIV,因依赖多相机阵列,存在系统体积、操作复杂,在封闭空间测量存在困难&#…...
Tauri(2.5.1)+Leptos(0.7.8)开发桌面应用--程序启动界面
前期使用Tauri(2.5.1)Leptos(0.7.8)写了一个自用桌面小程序,详见:使用Tauri 2.3.1Leptos 0.7.8开发桌面小程序汇总_tauri 小程序-CSDN博客。 在此基础上,尝试给程序添加启动界面,效果如下图所示。 1. 添加启动画面设置 在src-ta…...
Gmsh划分网格|四点矩形
先看下面这段官方自带脚本 /*********************************************************************** Gmsh tutorial 1** Variables, elementary entities (points, curves, surfaces), physical* entities (points, curves, surfaces)********************************…...
I/O多路复用(select/poll/epoll)
通过一个进程来维护多个Socket,也就是I/O多路复用,是一种常见的并发编程技术,它允许单个线程或进程同时监视多个输入/输出(I/O)流(例如网络连接、文件描述符)。当任何一个I/O流准备好进行读写操…...
一键生成达梦、Oracle、MySQL 数据库 ER 图!解锁高效数据库设计!
从事企业软件项目开发的同学们一定对 ER 图很熟悉,可以帮助用户快速厘清数据库结构,方便后续维护和优化。但是在日常工作中,面对复杂的数据结构,整理表设计文档对于每一位DBA来说都很头大,需要将设计细节转化为条理清晰…...
学习黑客 windows 设置与控制面板详解
Windows 设置与控制面板详解:双剑合璧的系统配置工具 ⚙️🔧 学习目标:理解Windows设置和控制面板的异同、掌握系统配置的安全最佳实践 1. 引言:双界面的系统配置世界 🌐 在Windows操作系统中,有两个强大的…...
pytorch模型画质增强简单实现
使用数据增强技术可以增加数据集中图像的多样性,从而提高模型的性能和泛化能力,主要的图像增强技术包括。 亮度,对比度调节 在开始图像大小的调整之前我们需要导入数据(图像以眼底图像为例)。 from PIL import Image f…...
C++中的std::allocator
C中的std::allocator 文章目录 C中的std::allocator1.std::allocator1.1C中的placement new 和operator new1.2一个custom allocator的实现1.3使用std::allocator_traits实现allocator 1.std::allocator C中的std::allocator默默工作在CSTL中的所有容器的内存分配上࿰…...
Linux文件编程——read函数与lseek函数
一、read函数 在 Linux 文件编程中,read 函数是一个系统调用,用于从文件描述符(File Descriptor)指向的文件或设备中读取数据到缓冲区。它是 Unix/Linux 系统编程中实现底层 I/O 操作的核心函数之一。以下是 read 函数的详细使用…...
STM32 变量存储
一、存储区划分与变量分类 STM32的存储空间分为Flash(非易失性)和RAM(易失性)两大区域: Flash存储器 代码段(Code):存储程序指令和常量(如字符串、const变量&…...
解锁性能密码:Linux 环境下 Oracle 大页配置全攻略
在 Oracle 数据库运行过程中,内存管理是影响其性能的关键因素之一。大页内存(Large Pages)作为一种优化内存使用的技术,能够显著提升 Oracle 数据库的运行效率。本文将深入介绍大页内存的相关概念,并详细阐述 Oracle 在…...
HashMap中哈希值与数组坐标的关联
目录 1、哈希值的生成与处理 2、计算桶的索引 3、哈希值总结 4、哈希冲突解决方案 4.1. 拉链法(Separate Chaining) 4.2. 开放寻址法(Open Addressing) 1、线性探测(Linear Probing) 2、二次探测&a…...
GBK与UTF-8编码问题(1)
1. 问题现象 我们在编译.py的python代码时,有时会遇到如下图这种问题。提示说“SyntaxError: (unicode error) ‘utf-8’ codec can’t decode byte 0xc4 in position 0: invalid continuation byte”,代码中有中文字符,这似乎和文件的编码方…...
大模型的实践应用41-天气预测与分析决策系统:Qwen3(32B)+langchain框架+MCP(大模型上下文协议)+RAG+传统算法
大家好,我是微学AI,今天给大家介绍一下大模型的实践应用41-Qwen3(32B)+langchain框架+MCP(大模型上下文协议)+RAG+传统算法研发天气预测与分析决策系统。本项目构建一个基于大模型Qwen3(32B)、LangChain框架、MCP协议、RAG技术以及传统算法的天气预测与分析决策系统。该系统通…...
单片机学习Day08--相邻流水灯
一,题目:同时点亮相邻的两个灯,并实现流水设计。 亮的是0; 最前面是LED8. #include <REGX51.H> typedef unsigned int u16; typedef unsigned char u8; #define led P2 void delay_10us(u16 t) { while(t--); } void mai…...
邮件营销应对高退信率的策略
一、邮件列表管理 1. 使用专业工具验证 借助如 Geeksend 邮箱验证等专业工具,全面清洗邮件列表,剔除无效、过期或格式错误的邮箱地址,确保邮件精准送达有效收件人,从而降低退信率。 2. 定期清理无效地址 将定期清理邮件列表纳入…...
无线定位之 三 SX1302 网关源码 thread_gps 线程详解
前言 笔者计划通过无线定位系列文章、系统的描述 TDOA 无线定位和混合定位相关技术知识点, 并以实践来验证此定位系统精度。 笔者从实践出发、本篇直接走读无线定位系统关键节点、网关 SX1302 源码框架,并在源码走读过程 中、着重分析与无线定位相关的PPS时间的来龙去脉、并在…...
Kubernetes控制平面组件:Kubelet详解(一):API接口层介绍
云原生学习路线导航页(持续更新中) kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计(一)Kubernetes架构原则和对象设计(二)Kubernetes架构原则和对象设计(三)Kubernetes控…...
Java项目层级介绍 java 层级 层次
java 层级 层次 实体层 控制器层 数据连接层 Service : 业务处理类 Repository :数据库访问类 Java项目层级介绍 https://blog.csdn.net/m0_67574906/article/details/145811846 在Java项目中,层级结构(Layered Architecture…...
【操作系统】零拷贝技术
1. DMA技术 DMA技术也就是直接内存访问技术。在进行I/O设备和内存的数据传输的时候,数据传输的工作全部交给DMA控制器,而不是CPU负责。 2. 传统的文件传输 传统的文件传输的代码如下: read(file, tmp_buf, len); write(socket, tmp_buf,…...
从零构建高性能桌面应用:GPUI Component全解析与实战指南
简介 高性能UI组件库正在重塑桌面应用开发的格局,而GPUI Component作为新兴的Rust桌面UI组件库,凭借其卓越的跨平台支持能力、GPU加速渲染和企业级功能特性,正成为构建现代化高性能桌面应用的首选。本文将从零开始,全面解析GPUI Component的核心特性、安装配置流程,并通过…...
java 中 DTO 和 VO 的核心区别
DTO 和 VO 的核心区别 特性DTO(数据传输对象)VO(视图对象)设计目的服务层与外部系统(如前端、其他服务)之间的数据传输为前端展示层定制数据,通常与 UI 强绑定数据内容可能包含业务逻辑需要的字…...
bazel迁移cmake要点及具体迁移工程示例(apollo radar)
文章目录 bazel迁移cmake要点及具体迁移工程示例迁移要点指南依赖库管理proto编译目标库及二进制文件生成项目导出runtime_data软件打包 conti_rardar完整迁移过程common_msgcommoncanbusconti_radar编译 bazel迁移cmake要点及具体迁移工程示例 迁移要点指南 迁移主要的内容包…...
跨时钟域(CDC,clock domain crossing)信号处理
参考视频: 数字IC,FPGA秋招【单bit信号的CDC跨时钟域处理手撕代码合集】_哔哩哔哩_bilibili 一、亚稳态 原因是:建立时间和保持时间没有保持住。然后在下图的红框里面,产生亚稳态。因为电路反馈机制,最后大概率会恢复…...
Java高频面试之并发编程-16
hello啊,各位观众姥爷们!!!本baby今天又来报道了!哈哈哈哈哈嗝🐶 面试官:volatile 实现原理是什么? volatile 关键字的实现原理 volatile 是 Java 中用于解决多线程环境下变量可见性…...
MyBatis 一对多关联映射在Spring Boot中的XML配置
在Spring Boot中使用MyBatis实现一对多关系时,可以通过XML映射文件来配置。下面我将详细介绍几种实现方式。 基本概念 一对多关系指的是一个实体对象包含多个子对象集合的情况,例如: 一个部门有多个员工一个订单有多个订单项一个博客有多个…...
Spring Boot异步任务失效的8大原因及解决方案
Spring Boot异步任务失效的8大原因及解决方案 摘要:在使用Spring Boot的@Async实现异步任务时,你是否遇到过异步不生效的问题?本文总结了8种常见的异步失效场景,并提供对应的解决方案,帮助你彻底解决异步任务失效的难题。 一、异步失效的常见场景 1. 未启用异步支持 ❌ …...
嵌入式Linux I2C驱动开发详解
文章目录 一、I2C协议的核心原理 1. I2C协议的“双线制”通信 2. I2C的地址寻址机制 二、Linux I2C驱动框架的分层设计 1. I2C核心 2. I2C适配器 3. I2C设备驱动 三、I2C驱动开发测试 一、I2C协议的核心原理 1. I2C协议的“双线制”通信 SDA(数据线) 和…...
基于 Spring Boot 瑞吉外卖系统开发(十二)
基于 Spring Boot 瑞吉外卖系统开发(十二) 菜品删除 单击“批量删除”和“删除”时,会携带需要删除的菜品的id以delete请求方式向“/dish”发送请求。 URLhttp://127.0.0.1:8080/dish调用方法DELETE参数ids DishController添加删除方法 …...
基于 51 单片机的 PWM 电机调速系统实现
51 单片机通过定时器来实现 PWM(脉冲宽度调制)控制,这是一种通过调整方波信号的占空比来控制输出功率的技术。下面详细介绍如何使用 51 单片机实现 PWM 控制并应用于电机调速。 1. PWM 控制原理 PWM 信号是一个周期性的方波,通过调整高电平时间(Ton)与周期(T)的比例(…...
wordpress主题分享
发布于:Eucalyptus-Blog 一、引言 大家对WordPress免费主题都非常感兴趣,但是一般收费的WordPress主题功能才多,其实有很多开源的免费WordPress主题都很不错,对于很多新建站的小伙伴,这些主题完全足够用了。这里就分享…...
【合新通信】无人机天线拉远RFOF(射频光纤传输)解决方案
无人机天线拉远RFOF方案通过光纤替代传统射频电缆,实现无人机与地面控制站之间的高保真、低损耗信号传输,尤其适用于高频段(如毫米波)、远距离或复杂电磁环境下的无人机作业场景。 核心应用场景 军事侦察与电子战 隐蔽部署&…...
视觉-语言-动作模型:概念、进展、应用与挑战(下)
25年5月来自 Cornell 大学、香港科大和希腊 U Peloponnese 的论文“Vision-Language-Action Models: Concepts, Progress, Applications and Challenges”。 视觉-语言-动作 (VLA) 模型标志着人工智能的变革性进步,旨在将感知、自然语言理解和具体动作统一在一个计…...
git如何将本地 dev 分支与远程 dev 分支同步
要让本地 dev 分支与远程 dev 分支完全同步(丢弃本地多余的提交记录),可以按照以下步骤操作: 1. 获取远程最新状态 git fetch origin dev # 拉取远程 dev 分支的最新提交,但不会修改本地代码 IDEA中点击fetc…...
自动化测试与功能测试详解
🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 什么是自动化测试? 自动化测试是指利用软件测试工具自动实现全部或部分测试,它是软件测试的一个重要组成 部分,能完成许多手工测试无…...
python3数据类型
常见python3数据类型 Number(数字)String(字符串)bool(布尔类型)List(列表)Tuple(元组)Set(集合)Dictionary(字典&#x…...
《Python星球日记》 第66天:序列建模与语言模型
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、传统语言模型1. n-gram 模型基础2. n-gram 模型的局限性 二、RNN 在语言建模…...
CRM和SCRM有什么区别
CRM(客户关系管理)与SCRM(社会化客户关系管理)的主要区别在于沟通方式、客户互动、数据来源和客户参与度。CRM更侧重企业对客户信息的管理与内部流程优化,而SCRM强调客户主动参与,通过社交媒体等平台加强互…...
破解 Qt QProcess 在 Release 模式下的“卡死”之谜
在使用 Qt 的 QProcess 以调用外部 ffmpeg/ffprobe 进行音视频处理时,常见的工作流程是: gatherParams:通过 ffprobe 同步获取媒体文件的参数(分辨率、采样率、声道数、码率等)。 reencode:逐个文件调用 f…...
重学安卓14/15自由窗口freeform企业实战bug-学员作业
背景: 在aosp14版本及以后版本上,安卓的自由窗口部分的工具栏部分都有了较大的更新 工具栏这部分已经移到了SystemUI进程的WMShell进行统一的管理。 但是近来有学员朋友在对自由窗口进行相关的拖拽操作时候,有遇到这个工具栏相关的一个bug&…...
【layout组件 与 路由镶嵌】vue3 后台管理系统
前言 很多同学在第一次搭建后台管理系统时,会遇到一个问题,layout组件该放哪里?如何使用?路由又该如何设计? 这边会讲一下我的思考过程和最后的结果,大家可以参考一下,希望大家看完能有所收获。…...
【PXIE301-211】基于PXIE总线的16路并行LVDS数据采集、1路光纤数据收发处理平台
板卡概述 PXIE301-211是一款基于PXIE总线架构的16路并行LVDS数据采集、1路光纤收发处理平台,该板卡采用Xilinx的高性能Kintex 7系列FPGA XC7K325T作为实时处理器,实现各个接口之间的互联。板载1组64位的DDR3 SDRAM用作数据缓存。板卡具有1个FMC…...
linux-进程信号的产生
Linux中的进程信号(signal)是一种用于进程间通信或向进程传递异步事件通知的机制。信号是一种软中断,用于通知进程某个事件的发生,如错误、终止请求、计时器到期等。 1. 信号的基本概念 - 信号(Signal)&am…...
基于 Nexus 在 Dockerfile 配置 yum, conda, pip 仓库的方法和参考
在 Nexus 配置代理仓库的方法,可参考 pypi 的配置博客:https://hellogitlab.com/CI/docker/create_your_nexus_2 更多代理格式,参考官方文档,如 pypi:https://help.sonatype.com/en/pypi-repositories.html 配置 yum…...
精品可编辑PPT | 全面风险管理信息系统项目建设风控一体化标准方案
这份文档是一份全面风险管理信息系统项目建设风控一体化标准方案,涵盖了业务架构、功能方案、系统技术架构设计、项目实施及服务等多个方面的详细内容。方案旨在通过信息化手段提升企业全面风险管理工作水平,促进风险管理落地和内部控制规范化࿰…...