gorm中关于事务的一些东西
对于赶时间friends,可以只看每个问题的前几点,不用看后面的代码示例!!!
一. tx := db.Begin()开启事务后,怎么结束或者是关闭事务,是通过tx.Rollback()还是tx.Commit()?
在 GORM 中,事务的管理通过 tx.Rollback() 和 tx.Commit() 方法来控制。这两个方法分别用于终止和完成事务。
1. tx.Rollback()
- 作用:回滚事务,撤销事务中所有未提交的更改。
- 使用场景:当事务中发生错误或需要终止事务时,调用 tx.Rollback()。
- 注意事项:
- 调用 tx.Rollback() 后,事务将被终止,后续的操作不会继续执行。
- 如果事务已经提交(调用了 tx.Commit()),则不能再调用 tx.Rollback()。
2. tx.Commit()
- 作用:提交事务,将事务中的所有更改永久保存到数据库中。
- 使用场景:当事务中的所有操作都成功完成时,调用 tx.Commit()。
- 注意事项:
- 调用 tx.Commit() 后,事务将被提交,所有更改将不可逆。
- 如果事务已经回滚(调用了 tx.Rollback()),则不能再调用 tx.Commit()。
3. 事务的典型使用模式在实际开发中,通常会结合
defer 语句来确保事务在函数退出时正确处理。以下是典型的事务处理模式:
示例代码
go
func doTransaction(db *gorm.DB) error {// 开启事务tx := db.Begin()if tx.Error != nil {return tx.Error // 如果开启事务失败,直接返回错误}// 使用 defer 确保事务在函数退出时被处理defer func() {if r := recover(); r != nil {tx.Rollback() // 如果发生 panic,回滚事务}}()// 执行事务中的操作if err := tx.Model(&models.SomeModel{}).Create(&someData).Error; err != nil {tx.Rollback() // 如果操作失败,回滚事务return err}if err := tx.Model(&models.AnotherModel{}).Update(&anotherData).Error; err != nil {tx.Rollback() // 如果操作失败,回滚事务return err}// 如果所有操作都成功,提交事务return tx.Commit().Error
}
4. 解释(可看可不看)
- 开启事务:tx := db.Begin()。
- 错误处理:如果 db.Begin() 返回错误,直接返回该错误。
- defer 语句:使用 defer 确保在函数退出时,事务被正确处理。如果发生 panic,调用 tx.Rollback() 回滚事务。
- 事务中的操作:在事务中执行多个数据库操作。如果任何一个操作失败,调用 tx.Rollback() 回滚事务,并返回错误。
- 提交事务:如果所有操作都成功,调用 tx.Commit() 提交事务。
5. 注意事项(可以忽略,不看)
- 事务的嵌套:GORM 不支持嵌套事务。如果在事务中再次调用 Begin(),会报错。
- 错误处理:确保在每个可能失败的操作后调用 tx.Rollback(),以避免部分提交导致的数据不一致。
- defer 的使用:defer 确保在函数退出时,事务被正确处理,无论是正常退出还是发生错误。
通过上述模式,你可以确保事务的正确管理和错误处理,从而保证数据的一致性和完整性。
二. 回滚事务后,事务会不会结束?
在 GORM 中,调用 tx.Rollback() 回滚事务后,事务会自动结束。这意味着你不能再对这个事务对象 tx 进行任何进一步的数据库操作,包括提交(tx.Commit())或其他修改操作。回滚操作会撤销事务中所有未提交的更改,并将数据库状态恢复到事务开始之前的状态。
1. 事务的生命周期
1.开启事务:通过 db.Begin() 开启一个事务。
2.执行操作:在事务中执行一系列数据库操作。
3.回滚事务:如果在操作过程中发生错误,调用 tx.Rollback() 回滚事务。
4.事务结束:回滚操作完成后,事务会自动结束,事务对象 tx 不再可用。
2. 示例代码
以下是一个示例,展示如何正确处理事务的回滚和结束:
go
func doTransaction(db *gorm.DB) error {// 开启事务tx := db.Begin()if tx.Error != nil {return tx.Error // 如果开启事务失败,直接返回错误}defer func() {if r := recover(); r != nil {tx.Rollback() // 如果发生 panic,回滚事务}}()// 执行事务中的操作if err := tx.Model(&models.SomeModel{}).Create(&someData).Error; err != nil {tx.Rollback() // 如果操作失败,回滚事务return err}if err := tx.Model(&models.AnotherModel{}).Update(&anotherData).Error; err != nil {tx.Rollback() // 如果操作失败,回滚事务return err}// 如果所有操作都成功,提交事务return tx.Commit().Error
}
3. 关键点
1.回滚后事务结束:(必看)
- 调用 tx.Rollback() 后,事务会自动结束,事务对象 tx 不再可用。
- 你不能再对 tx 进行任何操作,包括提交或其他数据库操作。
2.defer 的作用:
- 使用 defer 确保在函数退出时,事务被正确处理。如果发生 panic,调用 tx.Rollback() 回滚事务。
3.错误处理:
- 在每个可能失败的操作后调用 tx.Rollback(),确保在发生错误时回滚事务,避免部分提交导致的数据不一致。
4. 总结调用
tx.Rollback() 后,事务会自动结束,事务对象
tx 不再可用。回滚操作会撤销事务中所有未提交的更改,并将数据库状态恢复到事务开始之前的状态。通过正确使用
tx.Rollback() 和 tx.Commit(),可以确保事务的正确管理和错误处理,从而保证数据的一致性和完整性。
三. 如果在一个事务中一共分两部分,第一部分先查询一些数据,第二部分更新一些数据,那么第一部分的查询,如果失败之后,还用不用回滚,如果不用回滚,那事务是不是还没有被关闭?
在事务中,无论是查询操作还是更新操作,它们都属于事务的一部分。事务的特性(ACID)要求整个事务要么全部成功,要么全部失败。因此,如果在事务的第一部分(查询操作)失败,通常需要回滚事务,以确保事务的完整性。
1. 查询操作失败是否需要回滚(必看)
- 需要回滚:如果查询操作失败(例如,查询条件错误、数据库连接问题等),通常需要回滚事务。因为查询操作失败可能意味着后续的更新操作无法正确执行,或者整个事务的逻辑已经无法继续。
- 事务未结束:即使查询操作失败,事务仍然处于打开状态,直到你显式调用 tx.Rollback() 或 tx.Commit()。
2. 事务的生命周期(回顾)
事务从开始到结束的生命周期如下:
1.开启事务:通过 db.Begin() 开启事务。
2.执行操作:在事务中执行一系列操作,包括查询和更新。
3.失败处理:如果任何操作失败,调用 tx.Rollback() 回滚事务。
4.成功提交:如果所有操作都成功,调用 tx.Commit() 提交事务。
5.事务结束:无论是回滚还是提交,事务都会在调用后结束。
3. 示例代码
以下是一个完整的示例,展示如何在事务中处理查询和更新操作:
go复制
func doTransaction(db *gorm.DB) error {// 开启事务tx := db.Begin()if tx.Error != nil {return tx.Error // 如果开启事务失败,直接返回错误}defer func() {if r := recover(); r != nil {tx.Rollback() // 如果发生 panic,回滚事务}}()// 第一部分:查询数据var data models.SomeModelif err := tx.First(&data, "id = ?", someID).Error; err != nil {tx.Rollback() // 查询失败,回滚事务return err}// 第二部分:更新数据if err := tx.Model(&models.AnotherModel{}).Where("id = ?", anotherID).Update("field", newValue).Error; err != nil {tx.Rollback() // 更新失败,回滚事务return err}// 如果所有操作都成功,提交事务return tx.Commit().Error
}
4. 关键点
1.查询失败需要回滚:
- 如果查询操作失败,调用 tx.Rollback() 回滚事务,确保事务的完整性。
- 查询失败后,事务仍然处于打开状态,直到调用 tx.Rollback()。
2.事务未结束: - 如果查询失败后不调用 tx.Rollback(),事务仍然处于打开状态,但后续操作无法继续执行。
- 未结束的事务会占用数据库资源,可能导致性能问题或死锁。
3.defer的作用: - 使用 defer 确保在函数退出时,事务被正确处理。如果发生 panic,调用 tx.Rollback() 回滚事务。
5. 总结
- 查询失败需要回滚:如果查询操作失败,应该调用 tx.Rollback() 回滚事务,以确保事务的完整性。
- 事务未结束:如果查询失败后不调用 tx.Rollback(),事务仍然处于打开状态,但后续操作无法继续执行。
- 正确处理事务:通过 tx.Rollback() 和 tx.Commit(),确保事务的正确管理和错误处理,从而保证数据的一致性和完整性。
四. 如果开启事务或者提交事务失败,难道就不用回滚事务吗?
在 GORM 中,如果开启事务失败(db.Begin() 返回错误),或者提交事务失败(tx.Commit() 返回错误),仍然需要回滚事务,以确保事务的完整性和数据的一致性。
1. 开启事务失败
如果db.Begin() 返回错误,说明事务未能成功开启。在这种情况下,虽然事务尚未真正开始,但仍然需要确保没有未完成的操作。通常,这种情况下不需要显式调用 tx.Rollback(),因为事务尚未真正启动。不过,为了代码的健壮性,可以显式调用
tx.Rollback(),确保没有未处理的事务。
2. 提交事务失败
如果tx.Commit() 返回错误,说明提交事务失败。在这种情况下,必须调用 tx.Rollback() 来回滚事务,以确保所有未提交的更改被撤销,避免数据不一致。
3. 完整的事务处理逻辑
以下是一个完整的事务处理逻辑,确保在任何情况下都能正确处理事务:
go
func doTransaction(db *gorm.DB) error {// 开启事务tx := db.Begin()if tx.Error != nil {// 如果开启事务失败,直接返回错误return tx.Error}defer func() {if r := recover(); r != nil {// 如果发生 panic,回滚事务tx.Rollback()}}()// 执行事务中的操作if err := tx.Model(&models.SomeModel{}).Create(&someData).Error; err != nil {// 如果操作失败,回滚事务tx.Rollback()return err}if err := tx.Model(&models.AnotherModel{}).Update(&anotherData).Error; err != nil {// 如果操作失败,回滚事务tx.Rollback()return err}// 如果所有操作都成功,提交事务if err := tx.Commit().Error; err != nil {// 如果提交事务失败,回滚事务tx.Rollback()return err}return nil
}
4. 关键点
1.开启事务失败:
- 如果 db.Begin() 返回错误,直接返回错误,但为了代码的健壮性,可以显式调用 tx.Rollback()。
2.提交事务失败: - 如果 tx.Commit() 返回错误,必须调用 tx.Rollback() 回滚事务,以确保所有未提交的更改被撤销。
3.defer 的作用: - 使用 defer 确保在函数退出时,事务被正确处理。如果发生 panic,调用 tx.Rollback() 回滚事务。
4.错误处理: - 在每个可能失败的操作后调用 tx.Rollback(),确保在发生错误时回滚事务,避免部分提交导致的数据不一致。
5. 总结
- 开启事务失败:虽然事务尚未真正开始,但为了代码的健壮性,可以显式调用 tx.Rollback()。
- 提交事务失败:必须调用 tx.Rollback() 回滚事务,以确保所有未提交的更改被撤销。
- 正确处理事务:通过 tx.Rollback() 和 tx.Commit(),确保事务的正确管理和错误处理,从而保证数据的一致性和完整性。
通过这种方式,你可以确保事务在任何情况下都能正确结束,避免资源泄漏和数据不一致的问题。
相关文章:
gorm中关于事务的一些东西
对于赶时间friends,可以只看每个问题的前几点,不用看后面的代码示例!!! 一. tx : db.Begin()开启事务后,怎么结束或者是关闭事务,是通过tx.Rollback()还是tx.Commit()? 在 GORM 中,…...
【Flask】在Flask应用中使用Flask-Limiter进行简单CC攻击防御
前提条件 已经有一个Flask应用。已经安装了Flask和redis服务。 步骤1:安装Redis和Flask-Limiter 首先,需要安装redis和Flask-Limiter库。推荐在生产环境中使用Redis存储限流信息。 pip install redis Flask-Limiter Flask-Limiter会通过redis存储限…...
竞赛算法总结
滑动窗口 1. 数据规模通常是10的5次方 2. 通常用于与字串相关的问题 3. 通常与哈希表配合 查看当前元素的状态 蓝桥_15. 挑选子串-CSDN博客 蓝桥_全部都有的子序列-CSDN博客 ai总结: 滑动窗口算法虽然很强大,但它的解题思路和实现上也有一些关键点可以注意。以下是一…...
记交叉编译asio_dtls过程
虽然编译成功了,但是还是有一些不妥的地方,参考一下就行了。 比如库的版本选择就有待商榷,我这里不是按照项目作者的要求严格用对应的版本编译的,这里也可以注意一下。 编译依赖库asio 下载地址, 更正一下,我其实用…...
【PyCharm】将包含多个参数的 shell 脚本配置到执行文件来调试 Python 程序
要配置 PyCharm 以使用包含多个参数的 shell 脚本(如 run.sh)来调试 Python 程序,您可以按照以下步骤操作: 创建一个新的运行/调试配置: 在 PyCharm 中,点击“运行”菜单旁边的齿轮图标,选择“…...
PID如何调试,如何配置P,I,D值,如何适配pwm的定时器配置,如何给小车配电源
首先你要搞清楚PID公式原理 PID算法解析PID算法解析_pid滤波算法-CSDN博客 然后你要明白调试原理 首先要确定一个电源 电源决定了你后面调试时电机转动速度大小和pwm占空比的关系,电源电压越大那要转到同一速度所需的占空比越小,反之电源电压越小那要…...
微服务学习-Nacos 注册中心实战
1. 注册中心的设计思路 1.1. 微服务为什么会用到注册中心? 服务与服务之间调用需要有服务发现功能;例如订单服务调用库存服务,库存服务如果有多个,订单服务到底调用那个库存服务呢(负载均衡器)࿰…...
音频 PCM 格式 - raw data
文章目录 raw 音频格式:PCM其他音频格式:mp31. 无损压缩音频(类比 PNG 图像)2. 有损压缩音频(类比 JPEG 图像) 试了一下科大讯飞的音频识别云 api,踩了点坑 与本文无关:讯飞的 api 使…...
什么是波士顿矩阵,怎么制作?AI工具一键生成战略分析图!
当今商业环境瞬息万变,每个企业都面临着越来越多的挑战与机遇。如何科学合理地进行战略管理,成为了每个企业决策者必须直面的重要课题。 在众多战略管理框架中,波士顿矩阵作为一种经典的战略管理工具,因其简洁明了的分析方式而广…...
基于微信小程序的助农扶贫系统设计与实现(LW+源码+讲解)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
Maui学习笔记-SignalR简单介绍
SignalR是ASP.NET Core中的一个库,支持服务器与其连接的客服端之间的双象通信,它允许服务器立即将更新的消息推送到客服端,而不是要求客户端轮询服务器来获取更新 创建项目 使用SignalR在服务器实时发送消息给客服端,客服端拿到消息后在UI页面更新 首先创建一个Web API项目 …...
【学习笔记】深度学习网络-深度前馈网络(MLP)
作者选择了由 Ian Goodfellow、Yoshua Bengio 和 Aaron Courville 三位大佬撰写的《Deep Learning》(人工智能领域的经典教程,深度学习领域研究生必读教材),开始深度学习领域学习,深入全面的理解深度学习的理论知识。 在之前的文章中介绍了深度学习中用…...
C#,入门教程(05)——Visual Studio 2022源程序(源代码)自动排版的功能动画图示
上一篇: C#,入门教程(04)——Visual Studio 2022 数据编程实例:随机数与组合https://blog.csdn.net/beijinghorn/article/details/123533838https://blog.csdn.net/beijinghorn/article/details/123533838 新来的徒弟们交上来的C#代码&#…...
每日进步一点点(网安)
1.1 level5 查看源码关键部分 $str strtolower($_GET["keyword"]); $str2str_replace("<script","<scr_ipt",$str); $str3str_replace("on","o_n",$str2);<input namekeyword value".$str3.">关键…...
代理模式 - 代理模式的应用
引言 代理模式(Proxy Pattern)是一种结构型设计模式,它允许你提供一个代理对象来控制对另一个对象的访问。代理对象通常会在客户端和目标对象之间起到中介的作用,从而可以在不改变目标对象的情况下,增加额外的功能或控…...
机器学习-线性回归(对于f(x;w)=w^Tx+b理解)
一、𝑓(𝒙;𝒘) 𝒘T𝒙的推导 学习线性回归,我们那先要对于线性回归的表达公示,有所认识。 我们先假设空间是一组参数化的线性函数: 其中权重向量𝒘 ∈ R𝐷 …...
【Salesforce】审批流程,代理登录 tips
审批流程权限 审批流程权限问题解决方案代理登录代理登录后Logout 审批流程权限 前几天,使用审批流程,但是是两个sandbox,同样的配置,我有管理员权限。但是profile不是管理员,只是通过具备管理员权限的permission set…...
第20篇:Python 开发进阶:使用Django进行Web开发详解
第20篇:使用Django进行Web开发 内容简介 在上一篇文章中,我们深入探讨了Flask框架的高级功能,并通过构建一个博客系统展示了其实际应用。本篇文章将转向Django,另一个功能强大且广泛使用的Python Web框架。我们将介绍Django的核…...
Elastic Agent 对 Kafka 的新输出:数据收集和流式传输的无限可能性
作者:来 Elastic Valerio Arvizzigno, Geetha Anne 及 Jeremy Hogan 介绍 Elastic Agent 的新功能:原生输出到 Kafka。借助这一最新功能,Elastic 用户现在可以轻松地将数据路由到 Kafka 集群,从而实现数据流和处理中无与伦比的可扩…...
IPoIB(IP over InfiniBand)数据接收与发送机制详解
IPoIB(IP over InfiniBand)是一种在InfiniBand网络上实现IP协议的技术,它允许在InfiniBand网络上传输IP数据包。IPoIB通过将IP数据包封装在InfiniBand的数据包中,实现了在InfiniBand网络上的高效通信。本文将详细分析IPoIB如何接收…...
快速更改WampServer根目录php脚本
快速更改WampServer根目录php脚本 <?php // 配置文件地址 $apacheConfPath C:\Install\CTF\Wampserver\bin\apache\apache2.4.62.1\conf\httpd.conf; $apacheConfPath2 C:\Install\CTF\Wampserver\bin\apache\apache2.4.62.1\conf\extra\httpd-vhosts.conf; // 新根目录…...
C#,入门教程(08)——基本数据类型及使用的基础知识
上一篇: C#,入门教程(07)——软件项目的源文件与目录结构https://blog.csdn.net/beijinghorn/article/details/124139947 数据类型用于指定数据体(DataEntity,包括但不限于类或结构体的属性、变量、常量、函数返回值)…...
【自定义函数】编码-查询-匹配
目录 自定义编码匹配编码匹配改进 sheet来源汇总来源汇总改进 END 自定义编码匹配 在wps vb环境写一个新的excel函数名为编码匹配,第一个参数指定待匹配文本所在单元格(相对引用),第二个参数指定关键词区域(绝对引用&…...
docker-制作镜像gcc添加jdk运行java程序
最近的项目需要使用java调用c的链接库,.OS文件,一开始准备在jdk的镜像下去安装c的环境,不过安装的内容很多,比较复杂也容易缺很多的包,经过实验,我们决定使用gcc的镜像安装jdk来正确的运行java程序。 基础镜…...
工业相机 SDK 二次开发-Sherlock插件
本文介绍了 sherlock 连接相机时的插件使用。通过本套插件可连接海康的工业相机。 一.环境配置 1. 拷贝动态库 在用户安装 MVS 目录下按照如下路径 Development\ThirdPartyPlatformAdapter 找到目 录为 DalsaSherlock 的文件夹,根据 Sherlock 版本找到…...
智慧消防营区一体化安全管控 2024 年度深度剖析与展望
在 2024 年,智慧消防营区一体化安全管控领域取得了令人瞩目的进展,成为保障营区安全稳定运行的关键力量。这一年,行业在政策驱动、技术创新应用、实践成果及合作交流等方面呈现出多元且深刻的发展态势,同时也面临着一系列亟待解决…...
On to OpenGL and 3D computer graphics
2. On to OpenGL and 3D computer graphics 声明:该代码来自:Computer Graphics Through OpenGL From Theory to Experiments,仅用作学习参考 2.1 First Program Square.cpp完整代码 /// // square.cpp // // OpenGL program to draw a squ…...
python实现http文件服务器访问下载
//1.py import http.server import socketserver import os import threading import sys# 获取当前脚本所在的目录 DIRECTORY os.path.dirname(os.path.abspath(__file__))# 设置服务器的端口 PORT 8000# 自定义Handler,将根目录设置为脚本所在目录 class MyHTT…...
Redis高阶5-布隆过滤器
Redis布隆过滤器 由一个初始值都为零的bit数组和多个哈希函数构成,用来快速判断集合中是否存在某个元素 目的减少内存占用方式不保存数据信息,只是在内存中做一个是否存在的标记flag 布隆过滤器(英语:Bloom Filter࿰…...
Hive关于数据库的语法,warehouse,metastore
关于数据库的语法 在default数据库下,查看其他数据库的表 in 打开控制台 字体大小的设置 Hive默认的库: default, 1/4说明一共有4个库,现在只展示了1个,单击>>所有架构 数据库的删除 方法一: 语法 删除有表的数据库,加cascade 方法二 当前连接的数据库 切换当前数据库…...
Kafka 深入服务端 — 时间轮
Kafka中存在大量的延迟操作,比如延时生产、延时拉取和延时删除等。Kafka基于时间轮概念自定义实现了一个用于延时功能的定时器,来完成这些延迟操作。 1 时间轮 Kafka没有使用基于JDK自带的Timer或DelayQueue来实现延迟功能,因为它们的插入和…...
ubuntu系统docker环境搭建
ubuntu系统docker环境搭建 docker引擎安装 高版本docker引擎安装时已经自带有docker compose 安装参考docker官网Install Docker Engine on Ubuntu 方式一: 在线安装 参考apt方式安装 1、Set up Docker’s apt repository. # Add Dockers official GPG key: …...
安宝特方案 | AR在供应链管理中的应用:提升效率与透明度
随着全球化的不断深入和市场需求的快速变化,企业对供应链管理的要求也日益提高。如何在复杂的供应链环境中提升效率、降低成本,并确保信息的透明度,成为了各大行业亟待解决的问题。而增强现实(AR)技术,特别…...
[ Spring ] Spring Cloud Alibaba Message Stream Binder for RocketMQ 2025
文章目录 IntroduceProject StructureDeclare Plugins and ModulesApply Plugins and Add DependenciesSender PropertiesSender ApplicationSender ControllerReceiver PropertiesReceiver ApplicationReceiver Message HandlerCongratulationsAutomatically Send Message By …...
再述 Dijkstra
再述 Dijkstra 学 Dijkstra 好久了,今天再学了一遍,感觉推翻了好多自己的知识…… 定义 一种用于求非负权值的图的单源最短路径的算法。 方法 已知:如果要求从起始点 s 到某一个点 x 的最短路径,显然只能从某一个已确认为最短…...
大语言模型之prompt工程
前言 随着人工智能的快速发展,我们正慢慢进入AIGC的新时代,其中对自然语言的处理成为了智能化的关键一环,在这个大背景下,“Prompt工程”由此产生,并且正逐渐成为有力的工具... LLM (Large Language Mode…...
JavaScript系列(43)--依赖注入系统实现详解
JavaScript依赖注入系统实现详解 💉 今天,让我们深入探讨JavaScript的依赖注入系统实现。依赖注入是一种设计模式,它通过将依赖关系的创建和管理从代码中分离出来,提高了代码的可维护性和可测试性。 依赖注入基础概念 …...
Mono里运行C#脚本36—加载C#类定义的成员变量和方法的数量
前面分析了加载类和基类的基本过程, 接着来分析一下加载成员变量和方法的数量。 因为我们知道C#语言定义一个类,主要就是定义成员变量,以及那些对此成员变量进行操作的方法, 所以需要使用一种方法来描述C#语言定义类的能力。 一般情况下,主要有两种类型: 普通的类,比如前…...
SWPU 2022 新生赛--web题
奇妙的MD5 进入靶场 然我们输入一个特殊的字符串,然后我到处翻了翻,发现有提示 在MD5中有两个特殊的字符串 0e215962017 //MD5加密后弱比较等于自身 ffifdyop //MD5加密后变成万能密码 这里明显就是万能密码了 输入之后就来到了这个页…...
Windows 靶机常见服务、端口及枚举工具与方法全解析:SMB、LDAP、NFS、RDP、WinRM、DNS
在渗透测试中,Windows 靶机通常会运行多种服务,每种服务都有其默认端口和常见的枚举工具及方法。以下是 Windows 靶机常见的服务、端口、枚举工具和方法的详细说明: 1. SMB(Server Message Block) 端口 445/TCP&…...
记一次Linux共享内存段排除Bug:key值为0x0000000的共享内存段删除不了
本文目录 一、问题情况二、解决方法2.1 通过kill命令删除2.2 通过程序删除 一、问题情况 今天查看共享内存段发现好多共享内存段,而且命令ipcrm -m <shmid>删除不了。 回想了一下,应该是有一些程序跑while循环,或者死循环,…...
RV1126画面质量四:GOP改善画质
一. 什么是 GOP GOP 实际上就是两个 I 帧的间隔,比方说分辨率是 1920 * 1080 50 帧,假设 GOP 为 5,那就是大概 2s 插入一个 I 帧。我们再 回顾下,H264/H265 的帧结构。H264/H265 分别分为三种帧类型:I 帧、…...
手机app如何跳过无障碍权限实现弹框自动点击-ADB连接专题
手机app如何跳过无障碍权限实现弹框自动点击 --ADB连接专题 一、前言 我们在前期的时候,在双SIM卡进行协同外呼和SIM卡切换时,对如何在手机中“执行批处理脚本做自动点击”的内容进行预研,力图使用事件触发和坐标点击等方式来实现手机安装…...
kafka-保姆级配置说明(consumer)
bootstrap.servers #deserializer应该与producer保持对应 #key.deserializer #value.deserializer ##fetch请求返回时,至少获取的字节数,默认值为1 ##当数据量不足时,客户端请求将会阻塞 ##此值越大,客户端请求阻塞的时间越长&…...
c语言中的数组(上)
数组的概念 数组是⼀组相同类型元素的集合; 数组中存放的是1个或者多个数据,但是数组元素个数不能为0。 数组中存放的多个数据,类型是相同的。 数组分为⼀维数组和多维数组,多维数组⼀般⽐较多⻅的是⼆维数组。 数组创建 在C语言…...
20250122-正则表达式
1. 正则标记 表示一位字符:\\ 表示指定的一位字符:x 表示任意的一位字符:. 表示任意一位数字:\d 表示任意一位非数字:\D 表示任意一个字母:[a-zA-Z](大写或小写) 表示任意一个…...
(回溯法 子集)leetcode78
#include<iostream> #include<string> #include<vector> //只有子集需要在每个结点收集结果,其余在叶子结点收集结果 using namespace std; vector<vector<int>>ans; vector<int>combine; void backtracking(int index,vector&…...
Pyecharts之图表组合与布局优化
在数据可视化中,我们经常需要将多个图表组合在一起,以展示不同维度的数据或者进行对比分析。同时,合理的布局能够提升图表的可读性和用户体验。Pyecharts 提供了强大的组件和方法,让我们可以轻松实现图表的组合和布局优化。本篇将…...
代码随想录训练营第五十六天| 108.冗余连接 109.冗余连接II
108.冗余连接 题目链接:卡码网题目链接(ACM模式) (opens new window) 讲解链接:代码随想录 并查集可以解决什么问题:两个节点是否在一个集合,也可以将两个节点添加到一个集合中。 引自代码随想录ÿ…...
私有包上传maven私有仓库nexus-2.9.2
一、上传 二、获取相应文件 三、最后修改自己的pom文件...