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

KES数据库实践指南:探索KES数据库的事务隔离级别

引言

前两篇文章我们详细讲解了如何安装KES金仓数据库,并提供了快速查询和搭建基于coze平台的智能体的解决方案。今天,我们的焦点将放在并发控制机制和事务隔离级别上。

本文将通过一系列实验操作,深入探讨KES数据库中的并发控制机制和事务隔离级别。我们将通过实际操作演示,帮助读者全面理解并发控制的重要性及其实施方法。

本章将直接基于实际操作进行演示。如果您还没有成功安装,请参考我之前提到的安装指南文章:

金仓数据库全攻略:简化部署,优化管理的全流程指南

并发控制

并发控制的重要性

并发控制是数据库管理系统中的一个核心概念,它确保在多用户环境中,对数据库的并发访问不会破坏数据的完整性和一致性。

当多个用户同时对数据库进行读写操作时,如果缺乏有效的并发控制机制,可能会导致数据更新的竞态条件,从而引发数据不一致的问题。例如,如果两个事务同时增加同一账户的余额,而没有适当的锁定机制,可能会导致余额被错误地增加多次或一次都未增加。

因此,通过并发控制,数据库能够安全地处理多个事务,保证数据的准确性和可靠性。

并发控制与ACID原则

ACID原则是数据库事务的四个基本属性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。并发控制直接关联到这些属性的实现:

  • 原子性:确保事务中的所有操作要么全部完成,要么全部不完成,通过并发控制可以避免事务的部分执行对数据库状态的影响。
  • 一致性:保证事务执行的结果必须使数据库从一个一致的状态转移到另一个一致的状态,通过并发控制防止了违反业务规则的事务提交。
  • 隔离性:确保并发执行的事务之间不会互相影响,每个事务都像在独立运行一样,通过锁机制和MVCC等并发控制技术实现。
  • 持久性:一旦事务提交,它对数据库的改变就是永久性的,即使系统发生故障也不会丢失,通过并发控制确保在事务提交前数据已经正确写入数据库。

串行化与并行执行的权衡

串行化是最高的事务隔离级别,它通过序列化所有的事务,确保它们一个接一个地执行,从而避免了并发执行可能引起的问题。然而,串行化虽然能够提供最严格的隔离性,但会大大降低系统的并发能力,导致性能瓶颈。

与此相对的是并行执行,它允许多个事务同时执行,从而提高数据库的吞吐量和响应速度。但是,如果并行执行没有得到适当的控制,可能会导致数据异常,如脏读、不可重复读和幻读。

因此,数据库系统需要在串行化和并行执行之间找到平衡点。这通常通过使用不同的隔离级别和并发控制技术来实现,例如:

  • 使用锁机制来控制对数据的访问,确保事务在修改数据时不会相互干扰。
  • 采用MVCC等技术,允许读取操作不受写入操作的影响,同时保持数据的一致性视图。

通过这些技术,数据库可以在保证ACID属性的同时,提供较高的并发性能,满足现代应用对高并发处理能力的需求。

事务隔离级别

上面提到的知识点已经是开发人员在备考面试时几乎都会掌握的基本内容。接下来,我将通过实际操作金仓数据库来回顾这些知识点。在这里,我会总结另一个事务隔离级别,并讨论在不同隔离级别下可能出现的脏读、不可重复读和幻读现象。这样可以更深入地理解它们对数据库操作的影响。

序号隔离级别脏读不可重复读幻读序列化异常
1Read Uncommitted可能,在KES中不允许可能可能可能
2Read Committed不可能可能可能可能
3Repeatable Read不可能不可能可能,在KES中不允许可能
4Serializable不可能不可能不可能不可能

特别需要强调的是,在KES数据库中,Read Uncommitted隔离级别下不允许出现脏读现象,而Repeatable Read隔离级别则会防止幻读的发生。既然这些情况已经被明确提出,我们有必要实际实施一下,以验证这些说法是否属实。

首先看下默认的事务级别:

image

有三种可以修改事务级别的方式。第一种是直接修改配置文件;第二种是在当前会话中修改隔离级别;第三种是在当前事务中修改隔离级别。为了演示方便,我们选择使用第三种方式。那么,我们可以开始了。

脏读(Dirty Read)

脏读指的是一个事务读取了另一个事务尚未提交的数据更改的现象。在KES数据库中,默认的隔离级别通常为已提交读,因此通常不会发生脏读。然而,为了演示脏读的情况,我们可以假设将隔离级别设置为读未提交(Read Uncommitted)。这样一来,一个事务可以读取到另一个事务尚未提交的数据变更,导致可能出现不一致的读取结果。

事务1事务2描述
修改数据,但未 COMMITSELECT 读取事务1未提交的数据事务1由于某种原因被 ROLLBACK,事务2读取了脏数据

当然,我们的KES数据库目前并不支持这种操作,但这个想法确实很有前途。我们可以尝试一下。首先,我们可以同时启动这两个事务。

事务1和2都操作:

begin TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

当事务1尝试查看数据时,并未发现任何相关记录。

image

事务2插入一条数据:

image

事务1查询一下,还是没有,发现KES确实不存在脏读的情况:

image

不可重复读

它发生在一个事务读取了某个数据项,然后在同一事务中再次尝试读取同一数据项时,如果另一个并发事务已经更新了这个数据项,那么第一个事务将读取到不同的值。

在不可重复读的情况下,一个事务的读取操作可能会得到不同的结果,即使这些读取是在同一个事务的上下文中执行的。这违背了事务的隔离性原则,因为事务应该与其他并发事务的操作隔离开来。

事务1事务2描述
SELECT 根据条件读取到某值UPDATE 修改该值并 COMMIT事务1再次读取发现值变了(不可重复读)

事务1

  • 开始事务,并读取某个数据项。
  • 再次尝试读取同一数据项。
-- 事务1开始
begin TRANSACTION ISOLATION LEVEL READ committed;-- 读取账户的初始余额
SELECT balance FROM accounts WHERE id = 1;-- ... 事务1尚未提交 ...-- 再次读取账户余额,期望得到相同的结果
SELECT balance FROM accounts WHERE id = 1;

效果如下:

image

事务2

  • 开始另一个事务,并更新相同的数据项。
  • 提交事务。
-- 事务2开始
begin TRANSACTION ISOLATION LEVEL READ committed;-- 更新账户余额
UPDATE accounts SET balance = balance + 100 WHERE id = 1;-- 提交事务2的更改
COMMIT;

效果如下:

image

幻读

幻读发生在一个事务在读取某个范围内的记录时,另一个事务插入了新的记录,导致第一个事务重新读取时,似乎出现了“幻影”记录。

事务1事务2描述
SELECT 根据条件从库中读取数据DELETE 删除部分记录并 COMMIT事务1再次读取发现某些记录消失(幻读情况A)
SELECT 根据条件从数据库中读取数据INSERT 插入一些记录并 COMMIT事务1再次读取发现多了一些记录(幻读情况B)

SQL示例

-- 事务1:选择某个范围内的记录
begin transaction isolation level repeatable read ;
SELECT * FROM accounts WHERE id BETWEEN 1 AND 5;-- 事务2:插入新的记录
begin transaction isolation level repeatable read ;
INSERT INTO accounts (id, balance) VALUES (2, 1000);
COMMIT;-- 事务1再次选择,可能会看到新插入的记录(幻读)
SELECT * FROM accounts WHERE id BETWEEN 1 AND 6;
COMMIT;

当我们讨论这个逻辑时,我们可以进行演示,因为官方KES文档表明,在可重复读隔离级别下,正常情况下不会出现幻读。这意味着我们可以验证这一点。

插入演示-事务一

可以看到,在我们提交事务之前,无法看到已插入的记录。因此,这次验证表明,在KES中,即使在可重复读隔离级别下,也已经成功地消除了幻读现象。

image

插入演示-事务二

事务二的操作非常简单,仅仅是在可重复读隔离级别下创建了一条数据并成功提交了事务。

image

当然,让我们进一步演示删除操作,以确认在此操作中是否也能有效避免幻读现象。

删除演示-事务一

这里我们同样进行了演示,直接将隔离级别设置为可重复读,并执行了查询,但没有提交事务。我们观察到在操作过程中没有出现任何变化,成功地避免了幻读现象。

image

删除演示-事务二

开启后隔离级别后,执行了一个删除操作,并将其提交给数据库。

image

总结

本文深入探讨了KES数据库中的并发控制机制和事务隔离级别的重要性及实施方法。我们从并发控制的基本概念出发,详细解释了ACID原则如何通过不同的隔离级别得以实现,以及在串行化与并行执行之间的权衡取舍。通过实际操作和示例,我们展示了不同隔离级别下可能出现的脏读、不可重复读和幻读现象,以及KES数据库是如何应对这些问题的。

随着现代应用对高并发处理能力需求的增加,正确理解并实施良好的并发控制策略变得尤为重要。通过本文的学习,读者可以更好地理解如何通过合适的隔离级别和并发控制技术来平衡数据的一致性和性能需求,从而确保数据库操作的准确性和可靠性。

在接下来的实际操作中,我们将继续探索不同隔离级别的实际影响,验证理论知识的应用,并进一步完善对数据库管理与优化的理解。

好的,毕竟我不是DBA,所以我会继续以DevOps的角度进行解析金仓数据库。


我是努力的小雨,一名 Java 服务端码农,潜心研究着 AI 技术的奥秘。我热爱技术交流与分享,对开源社区充满热情。身兼掘金优秀作者、腾讯云内容共创官、阿里云专家博主、华为云云享专家等多重身份。

🚀 目前,我的探索重点在于 AI Agent 智能体应用,我对其充满好奇,并不断探索着其潜力与可能性。如果你也对此领域充满热情,欢迎与我交流分享,让我们共同探索未知的领域!

💡 我将不吝分享我在技术道路上的个人探索与经验,希望能为你的学习与成长带来一些启发与帮助。

🌟 欢迎关注努力的小雨!🌟

相关文章:

KES数据库实践指南:探索KES数据库的事务隔离级别

引言 前两篇文章我们详细讲解了如何安装KES金仓数据库,并提供了快速查询和搭建基于coze平台的智能体的解决方案。今天,我们的焦点将放在并发控制机制和事务隔离级别上。 本文将通过一系列实验操作,深入探讨KES数据库中的并发控制机制和事务…...

基于STM32的智能加湿器设计(新版本)

目录 1、设计要求 2、系统功能 3、演示视频和实物 4、系统设计框图 5、软件设计流程图 6、原理图 7、主程序 8、总结 🤞大家好,这里是5132单片机毕设设计项目分享,今天给大家分享的是加湿器。设备的详细功能见网盘中的文章《12、基于…...

Electricity Market Optimization 探索系列(三)

本文参考链接link 电网容量规划是一个寻求最优发电容量的过程,找到的最优发电容量能够可靠地满足未来电网的需求 发电机的容量和发电成本呈正相关关系,一台发电机的发电量不能超过其额定发电容量,结合我之前的博客所说的内容,可…...

JAVA进阶之线程

为神马有线程?这玩意儿在干嘛??? 回答这个问题,就先要知道一点点计算机的工作方式。 总所周知,计算机有五部分:输入输出、计算器、存储器、控制器。而在计算机内,CPU、内存、I/O之…...

浙江安吉成新照明电器有限公司分布式光伏发电项目--安科瑞Acrel-1000DP分布式光伏监控系统

安科瑞 崔丽洁 项目背景 随着可再生能源的发展,分布式光伏发电成为重要的能源利用方式。浙江安吉成新照明电器有限公司 3234.465kWp 分布式光伏发电项目应运而生。该公司是螺旋节能灯毛管专业生产企业,于 2007 年 6 月成立,具备全自动生产线、…...

pytorch实现主成分分析 (PCA):用于数据降维和特征提取

人工智能例子汇总:AI常见的算法和例子-CSDN博客 使用 PyTorch 实现主成分分析(PCA)可以通过以下步骤进行: 标准化数据:首先,需要对数据进行标准化处理,确保每个特征的均值为 0,方差…...

2025_2_4 C语言中关于free函数及悬空指针,链表的一级指针和二级指指针

1.free函数 free函数所接受的参数只能是动态分配出来的内存,,否者free的行为是未定义的同一片内存空间不能被free两次 free过后的内存可能会引发悬空指针的问题 2.悬空指针 悬空指针的问题主要是free过后的内存空间,原先指向这片空间的指…...

pytorch逻辑回归实现垃圾邮件检测

人工智能例子汇总:AI常见的算法和例子-CSDN博客 完整代码: import torch import torch.nn as nn import torch.optim as optim from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.model_selection import train_test_split …...

一次线程数超限导致的hive写入hbase作业失败分析

1.集群配置 操作系统:SuSe操作系统 集群节点:100台相同配置的服务器 单台:核心112Core,内存396G 2.问题现象 现象1:跑单个入库任务报错,批量提交任务后出现OOM异常 执行12个hivesql,将数据写入hbase.hbase入库有近一半的任务报错。 每次报错的任务不是同一个,hivesql…...

JAVA安全—反射机制攻击链类对象成员变量方法构造方法

前言 还是JAVA安全,哎,真的讲不完,太多啦。 今天主要是讲一下JAVA中的反射机制,因为反序列化的利用基本都是要用到这个反射机制,还有一些攻击链条的构造,也会用到,所以就讲一下。 什么是反射…...

Java集合面试总结(题目来源JavaGuide)

问题1:说说 List,Set,Map 三者的区别? 在 Java 中,List、Set 和 Map 是最常用的集合框架(Collection Framework)接口,它们的主要区别如下: 1. List(列表) 特点&#xf…...

【区块链】深入理解椭圆曲线密码学(ECC)

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 深入理解椭圆曲线密码学(ECC)1. 概述2. 椭圆曲线的数学基础2.1 基本定义2.2 有限…...

接口游标分页

由于数据库本身的的限制(以MySQL为例),以 page_num,page_size 为代表的偏移分页方式不可避免的会遇到深分页问题。 不过用户若要找符合条件的少量数据,通过翻页则十分低效,且大多用户也不会往后翻很多页,故对于C端筛选数据场景,限制分页数量增加筛选条件才是标准解决方…...

大数据数仓实战项目(离线数仓+实时数仓)2

目录 1.课程目标和课程内容介绍 2.数仓维度建模设计 3.数仓为什么要分层 4.数仓分层思想和作用 5.数仓中表的种类和同步策略 6.数仓中表字段介绍以及表关系梳理 订单表itcast_orders 订单明细表 itcast_order_goods 商品信息表 itcast_goods 店铺表 itcast_shops 商…...

C++输入输出(上)

cin和cout cin是C中提供的标准输入流对象,一般针对的是键盘,也就是从键盘上输入的字符流,使用 cin来进行数据的提取,cin一般是和 >> (流提取运算符) 配合使用的。 cin的功能和scanf是类似的 cout是C中提供的标准输出流对象,一般针对的是控制台的窗口,也就是将数据以字符…...

SpringBoot 连接Elasticsearch带账号密码认证 ES连接 加密连接

依赖 <dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId> </dependency>配置文件 es:ip: 172.23.4.130port: 9200user: elasticpassword: qwertyuiop读取配置文件…...

选择排序

选择排序的基本思想&#xff1a; 每⼀次从待排序的数据元素中选出最⼩&#xff08;或最⼤&#xff09;的⼀个元素&#xff0c;存放在序列的起始位置&#xff0c;直到全部待 排序的数据元素排完。 直接选择排序 1. 在元素集合 array[i]--array[n-1] 中选择关键码最⼤(⼩)的数据…...

Linux——进程概念

目录 一、系统调用和库函数概念二、基本概念三、描述进程-PCB3.1 task_struct-PCB的一种3.2 task_ struct内容分类 四、组织进程五、查看进程六、通过系统调用获取进程标示符七、通过系统调用创建进程- fork初始7.1 fork函数创建子进程7.2 fork 之后通常要用 if 进行分流 八、进…...

强化学习笔记(5)——PPO

PPO视频课程来源 首先理解采样期望的转换 变量x在p(x)分布下&#xff0c;函数f(x)的期望 等于f(x)乘以对应出现概率p(x)的累加 经过转换后变成 x在q(x)分布下&#xff0c;f(x)*p(x)/q(x) 的期望。 起因是&#xff1a;求最大化回报的期望&#xff0c;所以对ceta求梯度 具体举例…...

Java设计模式:行为型模式→状态模式

Java 状态模式详解 1. 定义 状态模式&#xff08;State Pattern&#xff09;是一种行为型设计模式&#xff0c;它允许对象在内部状态改变时改变其行为。状态模式通过将状态需要的行为封装在不同的状态类中&#xff0c;实现对象行为的动态改变。该模式的核心思想是分离不同状态…...

postgresql的用户、数据库和表

在 PostgreSQL 中&#xff0c;用户、数据库和表是关系型数据库系统的基本组成部分。理解这些概念对数据库管理和操作至关重要。下面是对这些概念的详细解释&#xff1a; 1. 用户&#xff08;User&#xff09; 在 PostgreSQL 中&#xff0c;用户&#xff08;也称为 角色&#…...

什么是Rust?它有什么特点?为什么要学习Rust?

什么是Rust&#xff1f;它有什么特点&#xff1f;为什么要学习Rust&#xff1f; 如果你是一名编程初学者&#xff0c;或者已经有一些编程经验但对Rust感兴趣&#xff0c;那么这篇文章就是为你准备的&#xff01;我们将用简单易懂的语言&#xff0c;带你了解Rust是什么、它有什…...

Maven(Ⅱ):依赖范围,依赖传递,依赖阻断,可选依赖

1. Maven 依赖范围 概念 依赖范围&#xff08;Dependency Scope&#xff09;用于控制依赖在不同构建阶段的可见性和可用性。Maven 定义了几种不同的依赖范围&#xff0c;每种范围都有其特定的使用场景。 常见依赖范围及用途 compile&#xff1a;默认的依赖范围&#xff0c;…...

个人c项目 java项目解释

1. 测试环境与方法 中文&#xff1a; 本地测试环境&#xff1a;可以在一台配置中等的电脑上构建一个测试环境&#xff0c;利用现成的大词库数据&#xff08;例如英文词典或自定义数据集&#xff09;来构建 Trie。使用 C 语言的编译器&#xff08;例如 gcc&#xff09;编译项目&…...

51单片机看门狗系统

在 STC89C52 单片机中&#xff0c;看门狗控制寄存器的固定地址为 0xE1。此地址由芯片厂商在硬件设计时确定&#xff0c;但是它在头文件中并未给出&#xff0c;因此在使用看门狗系统时需要声明下这个特殊功能寄存器 sfr WDT_CONTR 0xE1; 本案将用一个小灯的工作状况来展示看门…...

爬虫基础(五)爬虫基本原理

目录 一、爬虫是什么 二、爬虫过程 &#xff08;1&#xff09;获取网页 &#xff08;2&#xff09;提取信息 &#xff08;3&#xff09;保存数据 三、爬虫可爬的数据 四、爬虫问题 一、爬虫是什么 互联网&#xff0c;后面有个网字&#xff0c;我们可以把它看成一张蜘蛛网…...

Android 使用ExpandableListView时,需要注意哪些细节

1. 布局属性设置 尺寸属性 宽度和高度&#xff1a;要合理设置 android:layout_width 和 android:layout_height 属性。如果设置为 match_parent&#xff0c;它会填满父容器&#xff1b;设置为 wrap_content&#xff0c;则会根据内容自动调整大小。例如&#xff0c;若想让 Exp…...

人工智能赋能企业系统架构设计:以ERP与CRM系统为例

一、引言 1.1 研究背景与意义 在数字化时代&#xff0c;信息技术飞速发展&#xff0c;人工智能&#xff08;Artificial Intelligence, AI&#xff09;作为一项具有变革性的技术&#xff0c;正深刻地影响着各个领域。近年来&#xff0c;AI 在技术上取得了显著突破&#xff0c;…...

使用HttpClient和HttpRequest发送HTTP请求

项目中经常会用到向第三方系统发送请求来传递数据或者获得信息&#xff0c;一般用的比较多的为HttpClient 和 HttpRequest&#xff0c;这里简要总结一下 HttpClient 和 HttpRequest 的用法 一、HttpClient 1. 发送get请求 public static String get(String url, Map<Stri…...

深度解析:网站快速收录与服务器性能的关系

本文转自&#xff1a;百万收录网 原文链接&#xff1a;https://www.baiwanshoulu.com/37.html 网站快速收录与服务器性能之间存在着密切的关系。服务器作为网站运行的基础设施&#xff0c;其性能直接影响到搜索引擎对网站的抓取效率和收录速度。以下是对这一关系的深度解析&am…...

Android记事本App设计开发项目实战教程2025最新版Android Studio

平时上课录了个视频&#xff0c;从新建工程到打包Apk&#xff0c;从头做到尾&#xff0c;没有遗漏任何实现细节&#xff0c;欢迎学过Android基础的同学参加&#xff0c;如果你做过其他终端软件开发&#xff0c;也可以学习&#xff0c;快速上手Android基础开发。 Android记事本课…...

DeepSeek-R1大模型学习笔记

DeepSeek-R1模型架构设计 DeepSeek-R1基于DeepSeek-V3 base模型&#xff0c;提出了一系列训练策略&#xff0c;包括基于纯强化学习的训练&#xff08;DeepSeek-R1-Zero&#xff09;、基于多阶段的训练和冷启动&#xff08;DeepSeek-R1&#xff09;、知识蒸馏等。下面的思维导图…...

Unity游戏(Assault空对地打击)开发(4) 碰撞体和刚体的添加

前言 飞机和世界的大小关系不太对&#xff0c;我稍微缩小了一下飞机。 详细步骤 选中所有地形对象&#xff0c;如果没有圈起的部分&#xff0c;点击Add Component搜索添加。 接着选中Player对象&#xff0c;添加这两个组件&#xff0c;最好&#xff08;仅对于本项目开发&#x…...

每日一题——滑动窗口的最大值

滑动窗口的最大值 题目描述示例说明 解题思路双端队列的特点实现步骤代码实现&#xff08;C语言&#xff09;代码解析 总结 题目描述 给定一个长度为 n 的数组 num 和滑动窗口的大小 size&#xff0c;找出所有滑动窗口里数值的最大值。 例如&#xff0c;如果输入数组 {2, 3, …...

DeepSeek 的含金量还在上升

大家好啊&#xff0c;我是董董灿。 最近 DeepSeek 越来越火了。 网上有很多针对 DeepSeek 的推理测评&#xff0c;除此之外&#xff0c;也有很多人从技术的角度来探讨 DeepSeek 带给行业的影响。 比如今天就看到了一篇文章&#xff0c;探讨 DeepSeek 在使用 GPU 进行模型训练…...

list容器(详解)

list的介绍及使用&#xff08;了解&#xff0c;后边细讲&#xff09; 1.1 list的介绍&#xff08;双向循环链表&#xff09; https://cplusplus.com/reference/list/list/?kwlist&#xff08;list文档介绍&#xff09; 1. list是可以在常数范围内在任意位置进行插入和删除的序…...

FinRobot:一个使用大型语言模型的金融应用开源AI代理平台

“FinRobot: An Open-Source AI Agent Platform for Financial Applications using Large Language Models” 论文地址&#xff1a;https://arxiv.org/pdf/2405.14767 Github地址&#xff1a;https://github.com/AI4Finance-Foundation/FinRobot 摘要 在金融领域与AI社区间&a…...

【llm对话系统】大模型 Llama 源码分析之 LoRA 微调

1. 引言 微调 (Fine-tuning) 是将预训练大模型 (LLM) 应用于下游任务的常用方法。然而,直接微调大模型的所有参数通常需要大量的计算资源和内存。LoRA (Low-Rank Adaptation) 是一种高效的微调方法,它通过引入少量可训练参数,固定预训练模型的权重,从而在保持性能的同时大…...

为AI聊天工具添加一个知识系统 之86 详细设计之27 数据处理:ETL

本文要点 ETL 数据提取 作为 数据项目的起点。数据的整个三部曲--里程碑式的发展进程&#xff1a; ETL : 1分形 Type()-层次Broker / 2完形 Method() - 维度Delegate /3 整形 Class() - 容器 Agent 1变象。变象 脸谱Extractor - 缠度&#xff08;物理 皮肤缠度&#xf…...

「全网最细 + 实战源码案例」设计模式——策略模式

核心思想 策略模式&#xff08;Strategy Pattern&#xff09;是一种行为型设计模式&#xff0c;用于定义一系列算法或策略&#xff0c;将它们封装成独立的类&#xff0c;并使它们可以相互替换&#xff0c;而不影响客户端的代码&#xff0c;提高代码的可维护性和扩展性。 结构 …...

框架与代码的形状

​ 作为一个代码的设计者&#xff0c;我之前讨论过代码的形状&#xff0c;从“名字”出发&#xff0c;进行讨论。代码的形状&#xff1a;重构的方向-CSDN博客 从比喻的角度来看&#xff0c;名字似代码的血和肉&#xff0c;而框架则似代码的骨架。 猎豹和大象 在大自然中&…...

解决vscode扩展插件开发webview中的请求跨域问题

在webview中是无法发送跨域请求的&#xff0c;可以通过消息机制&#xff0c;在插件中发请求&#xff0c;然后将请求结果传递给webview 我的代码是基于vscode-webview-ui-toolkit-samples-vue来写的 webview vue组件中的代码示例 async function initData() {// 向插件发送消…...

junit5定制点

一、JUnit 5 自定义定制点是什么&#xff1f; JUnit 5 提供了强大的扩展模型&#xff08;Extension Model&#xff09;&#xff0c;允许开发者通过实现特定接口&#xff08;如 BeforeEachCallback、ParameterResolver&#xff09;自定义测试行为。这些接口称为定制点&#xff…...

基于SpringBoot的信息技术知识赛系统的设计与实现(源码+SQL脚本+LW+部署讲解等)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

【Rust自学】20.1. 最后的项目:单线程Web服务器

喜欢的话别忘了点赞、收藏加关注哦&#xff08;加关注即可阅读全文&#xff09;&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 20.1.1. 什么是TCP和HTTP Web 服务器涉及的两个主要协议是超文本传输​​协议(Hypertext T…...

LabVIEW涡轮诊断系统

一、项目背景与行业痛点 涡轮机械是发电厂、航空发动机、石油化工等领域的核心动力设备&#xff0c;其运行状态直接关系到生产安全与经济效益。据统计&#xff0c;涡轮故障导致的非计划停机可造成每小时数十万元的经济损失&#xff0c;且突发故障可能引发严重安全事故。传统人…...

想品客老师的第十天:类

类是一个优化js面向对象的工具 类的声明 //1、class User{}console.log(typeof User)//function//2、let Hdclass{}//其实跟1差不多class Stu{show(){}//注意这里不用加逗号&#xff0c;对象才加逗号get(){console.log(后盾人)}}let hdnew Stu()hd.get()//后盾人 类的原理 类…...

注解(Annotation)

注解&#xff08;Annotation&#xff09;在 Java 中可以用来简化类的使用&#xff0c;使得被注解的类能够被自动发现、自动创建并在需要的地方直接调用&#xff0c;而不需要手动创建实例。具体来说&#xff0c;注解是用来标识类、方法、字段等的&#xff0c;它们通常与一些框架…...

使用开源项目:pdf2docx,让PDF转换为Word

目录 1.安装python 2.安装 pdf2docx 3.使用 pdf2docx 转换 PDF 到 Word pdf2docx&#xff1a;GitCode - 全球开发者的开源社区,开源代码托管平台 环境&#xff1a;windows电脑 1.安装python Download Python | Python.org 最好下载3.8以上的版本 安装时记得选择上&#…...

编程AI深度实战:AI编程工具哪个好? Copilot vs Cursor vs Cody vs Supermaven vs Aider

Cursor自己可以看成一个IDE,而且有强大的RAG功能,这让它对你的意图感知非常厉害,可以精确补全,可以感受代码片段 Aider可以看作一个袖珍,灵活,强大的扳手,怎么用都行,可以放在脚本里调用,可以看代码,可以修改代码。相比Cursor而言,它感受的是文件级别,颗粒度有些不…...