【数据库系统概论】第十一章 并发控制
第十一章 并发控制
- 11.1 并发控制概述
- (1)丢失修改
- (2)不可重复读
- (3)读“脏”数据
- 11.2 封锁
- 11.2.1 封锁的概念
- 11.2.2 基本封锁类型
- (1)排它锁/X锁/写锁
- (2)共享锁/S锁
- 11.2.3 锁的相容矩阵
- 11.3 封锁协议
- (1)一级封锁协议
- (2)二级封锁协议
- (3)三级封锁协议
- 11.4 活锁和死锁
- 11.4.1 活锁
- 11.4.2 死锁
- 11.4.2.1 死锁的预防
- (1)一次封锁法
- (2)顺序封锁法
- 11.4.2.2 死锁的诊断
- (1)超时法
- (2)等待图法
- 11.4.2.3 死锁的解除
- 11.5 并发调度的可串行性
- 11.5.1 可串行化调度
- 11.5.2 冲突可串行化调度
- 11.6 两段锁协议
- 11.7 封锁的粒度
- 11.7.1 多粒度封锁
- 11.7.2 意向锁
11.1 并发控制概述
- 事务是并发控制的基本单位
- 并发操作带来的数据不一致性
- 丢失修改(Lost Update)
- 不可重复读(Non-repeatable Read)
- 读“脏”数据(Dirty Read)
- 数据不一致性:由于并发操作破坏了事务的隔离性
- 数据库的并发控制通常使用封锁机制
- 基本封锁
- 多粒度封锁
- 时间戳方法
- 乐观控制法
- 多版本并发控制
- 并发事务调度的正确性
- 可串行性
并发操作的正确性则通常由两段锁协议来保证。
两段锁协议是可串行化调度的充分条件,但不是必要条件 - 冲突可串行性
- 可串行性
(1)丢失修改
[例11.1]飞机订票系统中的一个活动序列
① 甲售票点(事务T1)读出某航班的机票余额A,设A=16;
② 乙售票点(事务T2)读出同一航班的机票余额A,也为16;
③ 甲售票点卖出一张机票,修改余额A←A-1,所以A为15,把A写回数据库;
④ 乙售票点也卖出一张机票,修改余额A←A-1,所以A为15,把A写回数据库
结果明明卖出两张机票,数据库中机票余额只减少1
两个事务T1和T2读入同一数据并修改,T2的提交结果破坏了T1提交的结果,导致T1的修改被丢失。
(2)不可重复读
不可重复读是指事务T1读取数据后,事务T2执行更新操作,使T1无法再现前一次读取结果。
①T1读取B=100进行运算
②T2读取同一数据B,对其进行修改后将B=200写回数据库。
③T1为了对读取值校对重读B,B已为200,与第一次读取值不一致
(3)读“脏”数据
- 读“脏”数据是指:
事务T1修改某一数据,并将其写回磁盘
事务T2读取同一数据后,T1由于某种原因被撤销
这时T1已修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致
T2读到的数据就为“脏”数据,即不正确的数据
①T1将C值修改为200,T2读到C为200
②T1由于某种原因撤销,其修改作废,C恢复原值100
③这时T2读到的C为200,与数据库内容不一致,就是“脏”数据
11.2 封锁
11.2.1 封锁的概念
- 封锁就是事务T在对某个数据对象(例如表、记录等)操作之前,先向系统发出请求,对其加锁
- 加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其它的事务不能更新此数据对象。
11.2.2 基本封锁类型
(1)排它锁/X锁/写锁
- 若事务T对数据对象A加上X锁,则只允许T读取和修改A,其它任何事务都不能再对A加任何类型的锁,直到T释放A上的锁
- 保证其他事务在T释放A上的锁之前不能再读取和修改A
(2)共享锁/S锁
- 若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其它事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁
- 保证其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改
11.2.3 锁的相容矩阵
11.3 封锁协议
- 在运用X锁和S锁对数据对象加锁时,需要约定一些规则,这些规则为封锁协议(Locking Protocol)。
何时申请X锁或S锁、持锁时间、何时释放 - 三级封锁协议
- 一级封锁协议
- 二级封锁协议
- 三级封锁协议
(1)一级封锁协议
- 一级封锁协议:事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。
- 一级封锁协议解决丢失修改,无法解决不可重复读和读“脏”数据。
(2)二级封锁协议
- 二级封锁协议:一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,读完后即可释放S锁
- 二级封锁协议可以防止丢失修改和读“脏”数据。
- 二级封锁协议中,由于读完数据后即可释放S锁,所以它不能保证可重复读。
(3)三级封锁协议
-
三级封锁协议:一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。
-
三级封锁协议可防止丢失修改、读脏数据和不可重复读。
11.4 活锁和死锁
11.4.1 活锁
实际上就是T2事务饥饿
- 避免活锁:采用先来先服务的策略
11.4.2 死锁
对比学习:操作系统中的死锁
- 解决死锁的方法
- 死锁的预防
- 死锁的诊断与解除
11.4.2.1 死锁的预防
(1)一次封锁法
要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行
(2)顺序封锁法
顺序封锁法是预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。
11.4.2.2 死锁的诊断
(1)超时法
如果一个事务的等待时间超过了规定的时限,就认为发生了死锁
(2)等待图法
如果发现图中存在回路,则表示系统中出现了死锁。
11.4.2.3 死锁的解除
- 选择一个处理死锁代价最小的事务,将其撤消, 释放此事务持有的所有的锁,使其它事务能继续运行下去
11.5 并发调度的可串行性
11.5.1 可串行化调度
可串行化(Serializable)调度:多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行这些事务时的结果相同
11.5.2 冲突可串行化调度
- 一个调度Sc在保证冲突操作的次序不变的情况下,通过交换两个事务不冲突操作的次序得到另一个调度Sc’,如果Sc’是串行的,称调度Sc是冲突可串行化的调度
冲突操作:是指不同的事务对同一数据的读写操作和写写操作:
Ri(x)与Wj(x) /事务Ti读x,Tj写x,其中i≠j/
Wi(x)与Wj(x) /事务Ti写x,Tj写x,其中i≠j/
- 若一个调度是冲突可串行化,则一定是可串行化的调度
11.6 两段锁协议
- 数据库管理系统普遍采用两段锁协议的方法实现并发调度的可串行性,从而保证调度的正确性
- 两段锁协议:指所有事务必须分两个阶段对数据项加锁和解锁
- 加锁阶段/扩展阶段(Growing Phase):事务只能不断获取锁,但不能释放锁
- 解锁阶段/收缩阶段(Shrinking Phase):事务只能释放已经持有的锁,不能再申请新的锁。直到事务结束,所有锁都被释放
- 事务遵守两段锁协议是可串行化调度的充分条件,而不是必要条件。
- 若并发事务都遵守两段锁协议,则对这些事务的任何并发调度策略都是可串行化的
- 若并发事务的一个调度是可串行化的,不一定所有事务都符合两段锁协议
11.7 封锁的粒度
- 封锁对象的大小称为封锁粒度(Granularity)
- 封锁的对象:逻辑单元,物理单元
- 封锁粒度与系统的并发度和并发控制的开销密切相关。
-
封锁的粒度越大,数据库所能够封锁的数据单元就越少,并发度就越小,系统开销也越小;
例如,如果一个事务锁定了整张表,其他事务就无法访问该表中的任何数据,直到锁被释放。
-
封锁的粒度越小,并发度较高,但系统开销也就越大
例如,一个事务可以锁定表中的某一行,而另一个事务可以同时锁定同一张表中的另一行。
-
11.7.1 多粒度封锁
-
多粒度树
- 以树形结构来表示多级封锁粒度
- 根结点是整个数据库,表示最大的数据粒度
- 叶结点表示最小的数据粒度
-
允许多粒度树中的每个结点被独立地加锁
-
对一个结点加锁意味着这个结点的所有后裔结点也被加以同样类型的锁
-
在多粒度封锁中一个数据对象可能以两种方式封锁:显式封锁和隐式封锁
显式封锁: 直接加到数据对象上的封锁
隐式封锁:是该数据对象没有独立加锁,是由于其上级结点加锁而使该数据对象加上了锁
11.7.2 意向锁
- 引进意向锁(intention lock)目的提高对某个数据对象加锁时系统的检查效率
- 如果对一个结点加意向锁,则说明该结点的下层结点正在被加锁
- 对任一结点加基本锁,必须先对它的上层结点加意向锁
- 意向锁的分类
(1)意向共享锁(IS锁):如果对一个数据对象加IS锁,表示它的后裔结点拟(意向)加S锁。
(2)意向排它锁(IX锁):如果对一个数据对象加IX锁,表示它的后裔结点拟(意向)加X锁。
(3)共享意向排它锁(SIX锁):如果对一个数据对象加SIX锁,表示对它加S锁,再加IX锁,即SIX = S + IX - 锁的强度
- 具有意向锁的多粒度封锁方法
申请封锁时应该按自上而下的次序进行
释放封锁时则应该按自下而上的次序进行
相关文章:
【数据库系统概论】第十一章 并发控制
第十一章 并发控制 11.1 并发控制概述(1)丢失修改(2)不可重复读(3)读“脏”数据 11.2 封锁11.2.1 封锁的概念11.2.2 基本封锁类型(1)排它锁/X锁/写锁(2)共享锁…...
C语言_数据结构总结4:不带头结点的单链表
纯C语言代码,不涉及C 0. 结点结构 typedef int ElemType; typedef struct LNode { ElemType data; //数据域 struct LNode* next; //指针域 }LNode, * LinkList; 1. 初始化 不带头结点的初始化,即只需将头指针初始化为NULL即可 void Init…...
用CSS画一条0.5px的线
上次面试前端被问到了这个问题,感觉有点懵懵的,我就回答了一个scaleY(0.5),这个是真的没想到,希望有需要的朋友可以去看看。随便记住一种就行。 1.第一种方式:通过缩放1px的线条实现视觉上的0.5px效果,兼容性较好。 …...
知识库全链路交互逻辑
阶段顺序 URL输入 → 网络连接 → 前端请求 → 后端处理 → 数据库交互 → 数据返回 → 前端渲染 → 连接关闭 阶段1:用户输入URL 用户行为:在浏览器地址栏输入 https://knowledge.com/search?keyword金融趋势 浏览器动作: “浏览器解析U…...
BambuStudio学习笔记:Model
# Model.hpp 核心模型结构说明## 文件概述 该头文件定义了3D打印数据处理的核心数据结构,包含模型对象、体积、实例、材料等关键类。主要功能包括: - 三维模型数据存储与管理 - 模型变换操作(平移/旋转/缩放) - 打印参数配置 - 多…...
Spring (八)AOP-切面编程的使用
目录 实现步骤: 1 导入AOP依赖 2 编写切面Aspect 3 编写通知方法 4 指定切入点表达式 5 测试AOP动态织入 图示: 一 实现步骤: 1 导入AOP依赖 <!-- Spring Boot AOP依赖 --><dependency><groupId>org.springframewor…...
【Go每日一练】构建一个简单的用户信息管理系统
👻创作者:丶重明 👻创作时间:2025年3月7日 👻擅长领域:运维 目录 1.😶🌫️题目:简单的用户信息管理系统2.😶🌫️代码开发3.😶&a…...
PathRAG:通过图剪枝的方法优化Graph-based RAG的性能方法浅析
PathRAG 也是一种新型 Graph-based RAG 方法,通过检索索引图中的关键关系路径,减少噪声并优化 LLM 提示。其核心创新在于基于流的剪枝算法和路径为基础的提示策略,特别适用于捕捉复杂数据集中的关系。(其实可以看做相比GraphRAG假…...
ElementUI 级联选择器el-cascader启用选择任意一级选项,选中后关闭下拉框
1、启用选择任意一级选项 在 el-cascader 标签上加上配置项: :props"{ checkStrictly: true }"例如: <el-cascaderref"selectedArrRef"v-model"selectedArr":options"optionsList":props"{ checkStri…...
【软件逆向】QQ 连连看小游戏去广告与一键消除实现
目录 一、背景介绍 二、去广告实现 2.1 分析广告加载流程 2.2 逆向分析广告加载逻辑 2.3 去广告方案 三、一键消除外挂实现 3.1 分析游戏逻辑 3.2 编写外挂插件 3.3 注入外挂: 四、一键消除效果展示 五、额外扩展 一、背景介绍 QQ 连连看是一款经典的休闲…...
vue el-select 省市区三级联动 vue + element-ui使用第三方插件实现省市区三级联动
vue el-select 省市区三级联动 vue使用第三方插件实现省市区三级联动 网上找了好多教程,都是使用el-cascader级联选择器的省市区选择器,但是几乎没有三个单独的el-select的进行关联的三级省市联动组件效果 第一步:先安装省市区element-ui的插件 npm install element-china-a…...
【GPT入门】第8课 大语言模型的自洽性
【GPT入门】第8课 大语言模型的自洽性 1.自洽性概念2.代码(观察执行结果)3.自洽性核心思想 1.自洽性概念 大模型的自洽性(self - consistency)是指在推理阶段,大模型通过生成多个答案并选择出现频率最高的那个&#x…...
工程化与框架系列(28)--前端国际化实现
前端国际化实现 🌍 引言 前端国际化(i18n)是现代Web应用中的重要组成部分,它能够让应用支持多语言和多地区的用户使用。本文将深入探讨前端国际化的实现方案和最佳实践,包括文本翻译、日期时间格式化、货币处理等方面…...
【阿里云】操作系统控制台操作体验与性能评测全解析
引言 在现代的云计算环境中,操作系统控制台是进行系统管理和运维的重要工具。它不仅帮助用户高效地管理云端资源,还提供了智能助手、系统诊断、性能观测等功能,能够提升操作系统的使用效率,增强用户的操作体验。本文简要介绍了操…...
面试之《IntersectionObserver的使用》
IntersectionObserver 是一个 Web API,用于异步观察目标元素与其祖先元素或顶级文档视口(viewport)交叉状态的变化。这在很多场景下非常有用,比如懒加载图片、实现无限滚动加载更多内容等。下面详细介绍它的使用方法。 基本原理 …...
在 Spring Boot 2.7.x 中引入 Kafka-0.9 的实践
文章目录 在 Spring Boot 2.7.x 中引入 Kafka-0.9 的实践一、下载 Kafka-0.9二、启动 Zookeeper 和 Kafka三、创建 Spring Boot 项目四、引入 kafka 依赖五、移除 Kafka 自动配置六、编写 Kafka 生产者6.1 Kafka配置类6.2 生产者监听类 七、编写Controller发送Kafka八、验证消费…...
【MACOS】用户数据过多
进入下面的路径下找到.Spotlight-V100文件夹 /System/Volumes/Data修改选线 通过终端权限不够 在finder中进行查看然后解锁 然后添加权限 使用代码查看存储数据。 diskutil apfs list...
鸿蒙系统中的持续部署
鸿蒙操作系统,作为一款面向未来的分布式操作系统,旨在为不同的设备提供统一的操作系统平台。它支持多种终端设备,包括但不限于智能手机、平板电脑、智能穿戴设备和物联网(IoT)设备等,并且能够实现跨平台的无…...
centos linux安装mysql8 重置密码 远程连接
1. 下载并安装 MySQL Yum 仓库 从 MySQL 官方网站下载并安装 Yum 仓库配置文件。 # 下载MySQL 8.0的Yum仓库包 wget https://dev.mysql.com/get/mysql80-community-release-el7-5.noarch.rpm # 安装Yum仓库包 sudo rpm -ivh mysql80-community-release-el7-5.noarch.rpm2. 启…...
几种常见的虚拟环境工具(Virtualenv、Conda、System Interpreter、Pipenv、Poetry)的区别和特点总结
在 PyCharm 中创建虚拟环境是一个非常直接的过程,可以帮助你管理项目依赖,确保不同项目之间的依赖不会冲突。 通过 PyCharm 创建虚拟环境 打开 PyCharm 并选择或创建一个项目。 打开项目设置: 在 Windows/Linux 上,可以通过点击…...
VScode:运行程序停止后,频繁出现终端进程被终止
VScode里面powershell被迫关闭 bug场景排查原因解决办法 bug场景 系统:Windows IDE:Visual Studio Code 停止运行程序后,按向上箭头想要执行上一步命令,忽然终端页面强行关闭,并报错如下: 终端进程 &quo…...
PHP框架加载不上.env文件中的变量
以lumen5.5框架为例,根目录中bootstrap文件夹下的app.php文件中 (new Dotenv\Dotenv(__DIR__./../))->load(); 是读取所有.env中的文件的,这个是正常的,但是在代码中的任何位置或者在config目录下的databases.php里,代码如…...
Linux:基本指令与内涵理解
1.文件操作指令 1.1 ls ls指令用于查看指定层级文件夹下的文件或文件夹 基本格式:ls (选项) (查看层级) 其中选项处不写就默认是显示文件名,查看层级默认是当前层级 选项1: -l 作用:将查找文件的详细信息显示出来 我们…...
C++设计模式-抽象工厂模式:从原理、适用场景、使用方法,常见问题和解决方案深度解析
一、模式基本概念 1.1 定义与核心思想 抽象工厂模式(Abstract Factory Pattern)是创建型设计模式的集大成者,它通过提供统一的接口来创建多个相互关联或依赖的对象族,而无需指定具体类。其核心思想体现在两个维度: …...
LINUX系统安装+添加共享目录
一、前言 Windows或mac系统中创建Linux工作环境是基于VMware和SL(Scientific Linux),下面分别安装二者。 二、VMware软件安装及注册 1、双击VMware安装包 2、点击下一步 3、 勾选接受许可,并点击下一步 4、更改路径(建议更改为容易找到的路…...
《UE5_C++多人TPS完整教程》学习笔记34 ——《P35 网络角色(Network Role)》
本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P35 网络角色(Network Role)》 的学习笔记,该系列教学视频为计算机工程师、程序员、游戏开发者、作家(Engineer, Programmer, Game Developer, Author) Stephe…...
成为git砖家(9): rebase进阶: 拆分commit为多个
问题描述 当一次性 git add 了多个修改点, 并且快速的执行了 git commit 后, 你觉得有点懊恼: 明明可以独立为两次或多次 commit, 揉在一块导致历史记录不太清晰。 比如我在 nn1 这个练手项目中, 最近一次 commit&am…...
pytorch retain_grad vs requires_grad
requires_grad大家都挺熟悉的,因此穿插在retain_grad的例子里进行捎带讲解就行。下面看一个代码片段: import torch# 创建一个标量 tensor,并开启梯度计算 x torch.tensor(2.0, requires_gradTrue)# 中间计算:y 依赖于 x&#x…...
Axure常用变量及使用方法详解
点击下载《Axure常用变量及使用方法详解.pdf》 摘要 Axure RP 作为一款领先的前端原型设计工具,提供了全面的 变量 和 函数 系统,以支持复杂的交互设计和动态内容展示。本文将从专业角度详细解析 Axure 中的 全局变量、中继器数据集变量/函数、元件变量…...
为企业级AI交互系统OpenWebUI集成LDAP用户权限认证(2)
为企业级AI交互系统OpenWebUI集成LDAP用户权限认证(2) 本文介绍如何OpenWebUI系统集成LDAP认证服务,及其用户权限及用户组设置。 推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战目录…...
mac 被禁用docker ui后,如何使用lima虚拟机启动docker
本机macos 安装lima brew install lima创建配置 echo "\\ndynamic:\n big-sur:\n image: docker://docker:git\n linux:\n image: docker.io/limasoftware/ubuntu:20.04 \\n" > ~/.lima/default.yaml启动名叫default的虚拟机 limactl start default进…...
C#实现AES-CBC加密工具类(含完整源码及使用教程)
一、AES-CBC加密应用场景 AES(Advanced Encryption Standard)作为全球公认的安全加密标准,广泛使用在以下场景: API通信加密:保护HTTP接口传输的敏感数据(如身份令牌、支付信息)文件安全存储&…...
Unity辅助工具_头部与svn
Unity调用者按钮增加PlaySideButton using QQu; using UnityEditor; using UnityEngine; [InitializeOnLoad] public class PlaySideButton {static PlaySideButton(){UnityEditorToolbar.RightToolbarGUI.Add(OnRightToolbarGUI);UnityEditorToolbar.LeftToolbarGUI.Add(OnLe…...
VBA 数据库同一表的当前行与其他行的主键重复判断实现方案1
目的,判断是否主键重复,不重复则登录新数据,重复则不登录。 定义类型: DataRecord tableName 表名 rowNumber 行号 columnName 列名 data 数据 想要实现的代码逻辑如下: 模拟数据库的登录过程。假设…...
Pytorch系列教程:可视化Pytorch模型训练过程
深度学习和理解训练过程中的学习和进步机制对于优化性能、诊断欠拟合或过拟合等问题至关重要。将训练过程可视化的过程为学习的动态提供了有价值的见解,使我们能够做出合理的决策。训练进度必须可视化的两种方法是:使用Matplotlib和Tensor Board。在本文…...
CSS伸缩盒模型(弹性盒子)
伸缩盒模型(Flexbox,Flexible Box Layout)是 CSS 中一种一维布局模型,用于更高效地处理元素的对齐、分布和响应式布局。其核心思想是让容器内的子元素(称为“项目”)能够灵活地自动调整大小和位置以适应不同…...
C++蓝桥杯基础篇(十一)
片头 嗨~小伙伴们,大家好!今天我们来学习C蓝桥杯基础篇(十一),学习类,结构体,指针相关知识,准备好了吗?咱们开始咯~ 一、类与结构体 类的定义:在C中&#x…...
版本控制泄露源码 .svn
##相关知识 SVN源码泄露 SVN(subversion)是源代码版本管理软件,造成 SVN 源代码漏洞的主要原因是管理员操作不规范。“ 在使用 SVN 管理本地代码过程中,会自动生成一个名为 .svn 的隐藏文件夹,其中包含重要的源代码信…...
基于单片机的风速报警装置设计
标题:基于单片机的风速报警装置设计 内容:1.摘要 本设计聚焦于基于单片机的风速报警装置,旨在解决传统风速监测缺乏实时报警功能的问题。采用单片机作为核心控制单元,结合风速传感器采集风速数据。经实验测试,该装置能准确测量 0 - 60m/s 范…...
YOLOv12本地部署教程——42%速度提升,让高效目标检测触手可及
YOLOv12 是“你只看一次”(You Only Look Once, YOLO)系列的最新版本,于 2025 年 2 月发布。它引入了注意力机制,提升了检测精度,同时保持了高效的实时性能。在保持速度的同时,显著提升了检测精度。例如&am…...
Banana Pi OpenWRT One Wifi6 OpenWrt社区官方开源路由器评测
第一款不可破解、开源、版权软件、符合 FCC、CE 和 RoHS 的维修权路由器 OpenWRT项目今年已经20岁了,为了纪念这一时刻,Banana Pi OpenWrt One/AP-24.XY路由器开发系统已经上市。这是OpenWRT团队与硬件公司的第一个联合项目。选择 Banana Pi,…...
【算法】经典排序算法介绍+代码示例
排序算法介绍 1)冒泡排序 (Bubble Sort)2)选择排序(Selection Sort)3)插入排序(Insertion Sort)4)希尔排序(Shell Sort)5)归并排序(Me…...
DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加列宽调整功能,示例Table14_02带边框和斑马纹的固定表头表格
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…...
【Linux】线程控制
目录 一、原生线程库: 二、线程控制: 1、线程创建: 2、线程等待: 自定义类型的接收对象: 编辑 3、线程终止: pthread_exit: pthread_cancel: 4、线程ID: 线程库的底层原…...
pyqt联合designer的运用和设置
PyQt Designer 简介 PyQt Designer 是一个用于创建和设计 PyQt 应用程序用户界面的可视化工具。它允许用户通过拖放方式添加和排列各种控件,如按钮、文本框、滑块等,并设置它们的属性和样式,从而快速构建出美观且功能完整的 UI 界面。 Windows版本:【免费】安装包别管啊啊…...
spring boot3.4.3+MybatisPlus3.5.5+swagger-ui2.7.0
使用 MyBatis-Plus 操作 books 表。我们将实现以下功能: 创建实体类 Book。 创建 Mapper 接口 BookMapper。 创建 Service 层 BookService 和 BookServiceImpl。 创建 Controller 层 BookController。 配置 MyBatis-Plus 和数据库连接。 1. 项目结构 src ├─…...
利用微软的 HTML 应用程序宿主程序的攻击
mshta.exe 是微软的 HTML 应用程序宿主程序(Microsoft HTML Application Host),属于 Windows 系统组件。它的核心功能是运行 .hta(HTML Application)文件,允许通过 HTML、JavaScript、VBScript 等技术创建交…...
【深度学习】读写文件
读写文件 到目前为止,我们讨论了如何处理数据,以及如何构建、训练和测试深度学习模型。 然而,有时我们希望保存训练的模型,以备将来在各种环境中使用(比如在部署中进行预测)。 此外,当运行一个…...
Bert的使用
一、Data.py # data负责产生两个dataloader from torch.utils.data import DataLoader, Dataset from sklearn.model_selection import train_test_split #给X,Y 和分割比例, 分割出来一个训练集和验证机的X, Y import torchdef read_file(path):data []label …...
Unity使用UGUI制作无限滑动列表
原理参照上一篇使用NGUI的制作无限滑动列表的文章 Unity 使用NGUI制作无限滑动列表_unity 滑动列表很多物体-CSDN博客 准备工作: 新建一个空物体命名为LoopList,并调整其大小, 并增加Scroll Rect组件(用于滑动)、Re…...