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

SQL Server 2022 脏读问题排查与思考

总结sqlserver的使用,总是会回想起很多开发过程当中加班努(拼)力(命)的场景,今天,就把之前一个由于数据库脏读到这的OA系统员工请假流程状态不一致问题和解决思路分享一下。

业务场景描述

由于企业项目原因,这里对业务细节进行了模糊,还请各位大佬担待。

1. 业务背景

某企业OA系统正在处理年度高峰期的大量请假申请,人力资源部门同时有多个审批人员在处理请假流程。系统使用SQL Server 2022作为数据库,部分报表查询使用了WITH(NOLOCK)提示以提高性能。

2. 脏读发生过程

时间线:
  1. 09:00:00 - 员工A提交请假申请(初始状态:待审批

    INSERT INTO LeaveRequests (EmployeeID, StartDate, EndDate, Status)
    VALUES (1001, '2023-12-25', '2023-12-28', 'Pending')
  2. 09:00:05 - 审批人B开始审批该申请(事务1)

    BEGIN TRANSACTION
    UPDATE LeaveRequests 
    SET Status = 'Approving'  -- 状态变为"审批中"
    WHERE RequestID = 2345
    -- 尚未提交,审批人正在核对日历
  3. 09:00:10 - 员工A同时查询申请状态(事务2,使用NOLOCK)

    -- 员工客户端执行的查询
    SELECT Status FROM LeaveRequests WITH(NOLOCK) 
    WHERE RequestID = 2345
    -- 返回结果:"Approving"
  4. 09:00:15 - 审批人B发现冲突,回滚审批

    ROLLBACK TRANSACTION
    -- 状态回滚到"Pending"
  5. 09:00:20 - 员工A看到系统显示"已开始审批",于是取消出差计划

    • 但实际申请仍处于"待审批"状态

    • 导致员工错误决策

3. 业务影响分析

影响维度具体表现
数据一致性员工看到不存在的中途状态
业务流程基于错误状态的业务决策
用户信任度对系统可靠性产生怀疑
法律风险若涉及薪资计算可能引发纠纷

4. 相关数据表结构

CREATE TABLE LeaveRequests (RequestID INT PRIMARY KEY IDENTITY,EmployeeID INT NOT NULL,StartDate DATE NOT NULL,EndDate DATE NOT NULL,Status VARCHAR(20) NOT NULL CHECK (Status IN ('Pending', 'Approving', 'Approved', 'Rejected')),ApproverID INT NULL,ApprovalTime DATETIME NULL
);
​
-- 状态变更日志表
CREATE TABLE LeaveStatusLog (LogID INT IDENTITY PRIMARY KEY,RequestID INT NOT NULL,OldStatus VARCHAR(20),NewStatus VARCHAR(20),ChangeTime DATETIME DEFAULT GETDATE()
);

5. 典型错误代码示例

// C# 数据访问层错误实现
public LeaveRequest GetLeaveRequest(int requestId)
{// 使用NOLOCK提示读取数据string sql = "SELECT * FROM LeaveRequests WITH(NOLOCK) WHERE RequestID = @RequestId";using (var connection = new SqlConnection(connectionString)){return connection.QueryFirst<LeaveRequest>(sql, new { RequestId = requestId });}
}

6. 第一次思考后的修改

技术方案:
-- 启用数据库快照隔离
ALTER DATABASE OASystem SET ALLOW_SNAPSHOT_ISOLATION ON;
ALTER DATABASE OASystem SET READ_COMMITTED_SNAPSHOT ON;
代码改造:
// 正确实现方式1:使用默认的已提交读
public LeaveRequest GetLeaveRequest(int requestId)
{string sql = "SELECT * FROM LeaveRequests WHERE RequestID = @RequestId";using (var connection = new SqlConnection(connectionString)){return connection.QueryFirst<LeaveRequest>(sql, new { RequestId = requestId });}
}
​
// 正确实现方式2:显式设置事务隔离级别
public LeaveRequest GetLeaveRequestWithSnapshot(int requestId)
{using (var connection = new SqlConnection(connectionString)){connection.Open();using (var transaction = connection.BeginTransaction(IsolationLevel.Snapshot)){string sql = "SELECT * FROM LeaveRequests WHERE RequestID = @RequestId";var result = connection.QueryFirst<LeaveRequest>(sql, new { RequestId = requestId }, transaction);transaction.Commit();return result;}}
}

7. 对接产品和大佬优化业务流程

对接顶头上司和产品,大家积(甩)极(锅)响应,最后达成一致进行业务流程优化,其实好多东西在上一步修改的时候,站在开发的角度上会感觉产品莫名其妙,但是站在产品的角度,也会觉得很委屈,所以,理解万岁吧。

  1. 状态机设计

  1. 用户界面提示

    • 对中间状态显示"处理中,请勿依赖当前状态"

    • 提供状态变更历史记录查看功能

  2. 审批超时机制

    -- 自动回滚超过30分钟的审批中状态
    UPDATE LeaveRequests 
    SET Status = 'Pending'
    WHERE Status = 'Approving' 
    AND ApprovalTime < DATEADD(MINUTE, -30, GETDATE())

思考总结

在上面的基础上,真好假期,结合之前自己的思考然后查询了一些资料,做以下总结,也是为了给自己一个回忆的凭证吧。

一、脏读现象识别

1.1 典型脏读表现

  • 事务A读取到事务B未提交的修改

  • 读取的数据随后被事务B回滚

  • 报表显示"幽灵数据"(实际不存在的数据)

  • 数据前后不一致

1.2 监控脏读发生

-- 查看当前隔离级别下发生的脏读
SELECT t.text AS [SQL语句],s.session_id,s.read_uncommitted_transactions,s.open_transaction_count
FROM sys.dm_exec_sessions s
JOIN sys.dm_exec_connections c ON s.session_id = c.session_id
JOIN sys.dm_exec_requests r ON s.session_id = r.session_id
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) t
WHERE s.read_uncommitted_transactions > 0;

二、根本原因分析

2.1 常见脏读成因

原因类型具体场景风险等级
使用READ UNCOMMITTED隔离级别显式设置或NOLOCK提示
快照隔离未正确配置未启用ALLOW_SNAPSHOT_ISOLATION
应用程序设计缺陷错误处理事务边界
ORM框架默认配置某些框架默认低隔离级别

三、排查诊断流程

3.1 隔离级别检查

-- 检查当前会话隔离级别
DBCC USEROPTIONS;
​
-- 检查数据库默认隔离级别
SELECT name, is_read_committed_snapshot_on, snapshot_isolation_state_desc
FROM sys.databases
WHERE name = DB_NAME();
​
-- 查找使用NOLOCK提示的查询
SELECT q.text, cp.objtype, cp.usecounts
FROM sys.dm_exec_cached_plans cp
CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle) q
WHERE q.text LIKE '%NOLOCK%';

3.2 活动事务监控

-- 查看当前活动事务
SELECT tat.transaction_id,tat.name,tat.transaction_begin_time,tst.session_id,es.host_name,es.program_name,es.login_name
FROM sys.dm_tran_active_transactions tat
JOIN sys.dm_tran_session_transactions tst ON tat.transaction_id = tst.transaction_id
JOIN sys.dm_exec_sessions es ON tst.session_id = es.session_id;

四、解决方案

4.1 隔离级别调整方案

方案1:启用读已提交快照(推荐)
-- 启用数据库快照隔离
ALTER DATABASE YourDatabase 
SET ALLOW_SNAPSHOT_ISOLATION ON;
​
-- 启用读已提交快照
ALTER DATABASE YourDatabase 
SET READ_COMMITTED_SNAPSHOT ON;
方案2:显式设置隔离级别
-- 应用程序连接字符串
"Server=...;Database=...;ApplicationIntent=ReadWrite;Transaction Isolation Level=Read Committed;"
​
-- T-SQL中设置
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

4.2 代码层修复

修复NOLOCK使用
-- 不安全的写法
SELECT * FROM Orders WITH(NOLOCK) WHERE CustomerID = 1001;
​
-- 修改为安全写法
BEGIN TRANSACTIONSELECT * FROM Orders WHERE CustomerID = 1001;
COMMIT TRANSACTION
ORM框架配置示例(Entity Framework Core)
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{optionsBuilder.UseSqlServer("Server=...",options => options.UseQuerySplittingBehavior(QuerySplittingBehavior.SplitQuery).UseSnapshots()  // 启用快照隔离);
}

4.3 架构优化方案

读写分离实现
-- 配置Always On可用性组
ALTER AVAILABILITY GROUP [AG_Name]
MODIFY REPLICA ON 'Replica_Server' 
WITH (SECONDARY_ROLE(READ_ONLY_ROUTING_URL = 'TCP://Replica_Server:1433'));
​
-- 应用程序连接字符串
"Server=AG_Listener;Database=...;ApplicationIntent=ReadOnly;"

五、验证与监控

5.1 脏读测试脚本

-- 会话1(模拟未提交事务)
BEGIN TRANSACTIONUPDATE Accounts SET Balance = Balance + 100 WHERE AccountID = 123;-- 不提交,保持事务开放
​
-- 会话2(检查是否读取到未提交数据)
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT Balance FROM Accounts WHERE AccountID = 123;  -- 应返回原值

5.2 长期监控方案

-- 创建扩展事件会话监控脏读
CREATE EVENT SESSION [DirtyReadMonitoring] ON SERVER 
ADD EVENT sqlserver.lock_acquired(WHERE ([mode] = 1 AND [resource_type] = 2) -- 模式1=S锁,资源类型2=PAGE
),
ADD EVENT sqlserver.lock_timeout(WHERE ([resource_type] = 2)
ADD TARGET package0.event_file(SET filename=N'DirtyReadMonitoring')
WITH (MAX_MEMORY=4096 KB, MAX_DISPATCH_LATENCY=30 SECONDS);

六、性能与一致性平衡建议

  1. 关键业务数据

    • 使用READ COMMITTED SNAPSHOT

    • 避免NOLOCK提示

  2. 报表查询

    • 使用快照隔离(SNAPSHOT)

    • 或路由到只读副本

  3. 高并发场景

    • 考虑内存优化表

    • 缩短事务持续时间

  4. 历史数据分析

    • 使用数据库快照

    • 或列存储索引

七、紧急情况处理

当生产环境出现脏读导致数据错误时:

  1. 立即识别问题会话:

SELECT session_id, transaction_isolation_level 
FROM sys.dm_exec_sessions
WHERE transaction_isolation_level = 1;  -- 1=READ UNCOMMITTED
  1. 终止危险会话:

KILL [session_id];
  1. 临时提升隔离级别:

-- 数据库级别
ALTER DATABASE [YourDB] SET READ_COMMITTED_SNAPSHOT ON WITH ROLLBACK IMMEDIATE;

相关文章:

SQL Server 2022 脏读问题排查与思考

总结sqlserver的使用&#xff0c;总是会回想起很多开发过程当中加班努&#xff08;拼&#xff09;力&#xff08;命&#xff09;的场景&#xff0c;今天&#xff0c;就把之前一个由于数据库脏读到这的OA系统员工请假流程状态不一致问题和解决思路分享一下。 业务场景描述 由于…...

Linux系统时间

1. Linux系统时间 jiffies是linux内核中的一个全局变量&#xff0c;用来记录以内核的节拍时间为单位时间长度的一个数值。 jiffies变量开机时有一个基准值&#xff0c;然后内核每过一个节拍时间jiffies就会加1。 一个时间节拍的时间取决于操作系统的配置&#xff0c;Linux系统一…...

【Windows批处理】命令入门详解

Windows 批处理&#xff08;Batch Script&#xff09;是一种用于在 Windows 操作系统上自动执行命令的脚本语言。它基于 Windows 命令提示符&#xff08;cmd.exe&#xff09;并使用 .bat 或 .cmd 文件格式。 一、批处理基础 1. 创建批处理文件 批处理脚本本质上是一组按顺序执…...

fpga系列 HDL:ModelSim 条件断点调试 modelsim支持的tcl语言

条件断点调试配置流程&#xff1a; 触发动作用tcl语言描述,modelsim支持的tcl语言见&#xff1a;https://home.engineering.iastate.edu/~zzhang/courses/cpre581-f08/resources/modelsim_quickguide.pdf 运行效果&#xff1a;...

Linux: network: 两台直连的主机业务不通

前提环境,有一个产品的设定是两个主机之间必须是拿网线直连。但是设备管理者可能误将设置配错,不是直连。 最近遇到一个问题,说一个主机发的包,没有到对端,一开始怀疑设定的bond设备的问题,检查了bond的设置状态,发现没有问题,就感觉非常的奇怪。后来就开始怀疑两个主机…...

虚拟地址空间布局架构

一、内存管理架构 1.Linux内核整体架构以及子系统 内存管理子系统架构分为用户空间、内核空间及硬件部分 3 个层面&#xff1a; 用户空间&#xff1a;应用程序使用malloc()申请内存资源&#xff0c;通过free()释放内存资源。内核空间&#xff1a;内核是操作系统的一部分&…...

在VMware下Hadoop分布式集群环境的配置--基于Yarn模式的一个Master节点、两个Slaver(Worker)节点的配置

你遇到的大部分ubuntu中配置hadoop的问题这里都有解决方法&#xff01;&#xff01;&#xff01;&#xff08;近10000字&#xff09; 概要 在Docker虚拟容器环境下&#xff0c;进行Hadoop-3.2.2分布式集群环境的配置与安装&#xff0c;完成基于Yarn模式的一个Master节点、两个…...

go day 01

go day 01 配置go环境 install go on D:\huang\lang\go\D:\huang\lang\go\bin\go xxx.go # D:\huang\lang\go\bin 设置到环境变量go go version# 创建任意一个目录,创建三个文件夹 # D:\huang\lang\goProject bin、pkg、src # 创建三个系统环境变量 GOROOT GOPATH GOBIN # GOR…...

(二)RestAPI 毛子(Tags)

文章目录 项目地址一、给Habit添加Tags1.1 创建Tags1. 创建一个新的HabitTags实体2. 设置Habit和Tags的关系3. 设置HabitTag表4. 在HabitConfiguration里配置5. 将表添加到EFCore里6. 迁移数据 1.2 给Habit增加/修改标签1. 创建UpsertHabitTagsDto2. 创建查询HabitWithTagsDto3…...

Elasticsearch:使用机器学习生成筛选器和分类标签

作者&#xff1a;来自 Elastic Andre Luiz 探索使用机器学习模型与传统硬编码方法在搜索体验中自动创建筛选器和分类标签的优缺点 筛选器和分类标签是用来优化搜索结果的机制&#xff0c;帮助用户更快速地找到相关内容或产品。在传统方法中&#xff0c;规则是手动定义的。例如…...

Python接口自动化测试之UnitTest详解

↵ 基本概念 UnitTest单元测试框架是受到JUnit的启发&#xff0c;与其他语言中的主流单元测试框架有着相似的风格。其支持测试自动化&#xff0c;配置共享和关机代码测试。支持将测试样例聚合到测试集中&#xff0c;并将测试与报告框架独立。 它分为四个部分test fixture、Te…...

《概率论与数理统计》期末复习笔记_上

目录 第1章 随机事件与概率 1.1 随机事件 1.2 事件的关系与运算 1.3 概率的定义与性质 1.4 古典概型_重点 1.5 几何概型 1.6 条件概率与乘法公式 1.7 全概率公式与贝叶斯公式_重点 1.8 事件的独立性_重点 1.9 伯努利概型_重难点 第2章 随机变量及其分布 2.1 随机变…...

工程师 - Doxygen介绍

Code Documentation. Automated. Free, open source, cross-platform. Version 1.12.0 is now available! Release date: 7 August 2024 官方网址&#xff1a; Doxygen homepage 文档&#xff1a; Doxygen: Overview Github网址&#xff1a; https://github.com/doxygen/…...

开源且完全没有审核限制的大型语言模型的概述

开源且完全没有审核限制的大型语言模型的概述 关键要点 研究表明&#xff0c;存在多个开源的大型语言模型&#xff08;LLM&#xff09;完全没有审核限制&#xff0c;适合开放对话。包括基于 Llama、Mixtral、Phi-2 和 StableLM 的模型&#xff0c;参数范围从 2.78 亿到 4050 亿…...

Qt QTableView QAbstractTableModel实现复选框+代理实现单元格编辑

话不多说&#xff0c;直接看代码 一、Model 1、QTableModel_Test.h #pragma once#include <QAbstractTableModel> #include <QObject> #include <QModelIndex>class QTableModel_Test : public QAbstractTableModel {Q_OBJECT public:QTableModel_Test(Q…...

2025.3.19

1、用vim编辑/etc/hosts文件&#xff0c;将本机和第二个虚拟机的ip地址和主机名写入该文件&#xff0c;然后ping 两个主机的主机名能否ping通&#xff1b; &#xff08;1&#xff09;在第一个虚拟机编辑/etc/hosts: 首先使用hostname、hostnamectl、hostname -f指令查看主机名…...

GATT(Generic Attribute Profile)是蓝牙低功耗(Bluetooth Low Energy,简称BLE)协议栈中的一个核心协议

蓝牙的 GATT&#xff08;Generic Attribute Profile&#xff09; 是蓝牙低功耗&#xff08;Bluetooth Low Energy&#xff0c;简称BLE&#xff09;协议栈中的一个核心协议&#xff0c;用于定义设备如何通过蓝牙进行数据传输和交互。GATT 是基于 ATT&#xff08;Attribute Proto…...

打造下一代智能体验:交互型 AI 的崛起与实践

在人工智能技术不断飞跃的今天&#xff0c;我们正迎来一个从"一问一答"向"多轮交互、智能反馈"转变的新时代——交互型 AI&#xff08;Interactive AI&#xff09;。 什么是交互型 AI&#xff1f; 交互型 AI 指的是具备多轮对话能力、状态记忆、工具调用…...

关于uint8_t、uint16_t、uint32_t、uint64_t的区别与分析

一、类型定义与字节大小 uint8_t、uint16_t、uint32_t、uint64_t 是 C/C 中定义的无符号整数类型&#xff0c;通过 typedef 对基础类型起别名实现。位宽&#xff08;bit&#xff09;和字节数严格固定&#xff1a; uint8_t&#xff1a;8 位&#xff0c;占用 ​1 字节&#xff…...

19685 握手问题

19685 握手问题 ⭐️难度&#xff1a;简单 &#x1f31f;考点&#xff1a;2024、省赛、数学 &#x1f4d6; &#x1f4da; package test ;import java.util.Scanner; public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);…...

react redux的学习,单个reducer

redux系列文章目录 一 什么redux&#xff1f; redux是一个专门用于做状态管理的JS库(不是react插件库)。它可以用在react, angular, vue等项目中, 但基本与react配合使用。集中式管理react应用中多个组件共享的状 简单来说&#xff0c;就是存储页面的状态值的一个库&#xf…...

CCF GESP C++编程 二级认证真题 2025年3月

C 二级 2025 年 03 月 CCF GESP C编程 二级认证真题 题号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 答案 D C A A D A D A C B C D B C C 1 单选题 第 1 题 2025年春节有两件轰动全球的事件&#xff0c;一个是DeepSeek横空出世&#xff0c;另一个是贺岁片《哪吒2》票房惊人&#…...

Lua函数与表+Lua子文件加载与元表

Lua函数相关示例代码 --脚本型语言&#xff0c;不能先调用&#xff0c;再定义&#xff0c;因为代码是从上往下执行的 --第一种声明函数 function func1()print("这是func1") end--先定义&#xff0c;再调用&#xff0c;没有问题 func1() -------------------------…...

Linux systemd 服务全面详解

一、systemd 是什么&#xff1f; systemd 是 Linux 系统的现代初始化系统&#xff08;init&#xff09;和服务管理器&#xff0c;替代传统的 SysVinit 和 Upstart。它不仅是系统启动的“总指挥”&#xff0c;还统一管理服务、日志、设备挂载、定时任务等。 核心作用 服务管理…...

Linux系统调用编程

目录 1.Linux下进程和线程进程线程区别查看进程pid终止进程pid 2.Linux虚拟内存管理与stm32内存映射设计目标与架构差异地址空间管理机制对比内存使用与性能特性 3.Linux系统调用函数fork()wait()exec() 4.树莓派环境下练习创建账号1创建用户账号2.配置用户权限3.查看用户 登录…...

AWS Langfuse AI用Bedrock模型使用完全教程

AWS Langfuse AI使用完全教程 推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战目录 AWS Langfuse AI使用完全教程Langfuse是什么?准备工作创建Langfuse账户1.创建LLM应用程序启用Bedrock…...

【Docker项目实战】使用Docker部署MediaCMS内容管理系统

【Docker项目实战】使用Docker部署MediaCMS内容管理系统 前言一、MediaCMS介绍1.1 MediaCMS 简介1.2 主要特点1.3 使用场景二、本次实践规划2.1 本地环境规划2.2 本次实践介绍三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本四、下载Med…...

OpenHarmony子系统开发 - DFX(一)

OpenHarmony子系统开发 - DFX&#xff08;一&#xff09; 一、DFX概述 简介 在OpenHarmony中&#xff0c;DFX(Design for X)是为了提升质量属性的软件设计&#xff0c;目前包含的内容主要有&#xff1a;DFR&#xff08;Design for Reliability&#xff0c;可靠性&#xff09…...

深入解析:使用Python爬取Bilibili视频

深入解析&#xff1a;使用Python爬取Bilibili视频 引言 Bilibili&#xff0c;作为中国领先的年轻人文化社区&#xff0c;拥有海量的视频资源。对于想要下载Bilibili视频的用户来说&#xff0c;手动下载不仅费时费力&#xff0c;而且效率低下。本文将介绍如何使用Python编写一…...

详解数据结构线性表 c++实现

线性表 线性表是一种非常基础且重要的数据结构&#xff0c;它是具有相同数据类型的 n&#xff08;n≥0&#xff09;个数据元素的有限序列。这里的 “有限” 意味着元素的数量是确定的&#xff0c;“序列” 则表示元素之间存在着顺序关系。 顺序表 顺序表是线性表的一种顺序存…...

Prolog语言的网络协议栈

Prolog语言的网络协议栈 引言 网络协议栈是现代计算机网络的重要组成部分&#xff0c;它负责在网络中的各个节点之间以标准化的方式传输数据。在这一体系中&#xff0c;不同层次的协议相互协作&#xff0c;以实现从物理传输到应用层数据处理的功能。Prolog是一种以符号逻辑为…...

音视频基础(音频常用概念)

文章目录 **1. 比特率&#xff08;Bitrate&#xff09;****概念****影响****音频比特率****视频比特率** **2. 码率&#xff08;Bitrate&#xff09;****3. 帧&#xff08;Frame&#xff09;****概念****视频帧****音频帧** **4. 帧长&#xff08;Frame Length&#xff09;****…...

洛谷题单3-P5725 【深基4.习8】求三角形-python-流程图重构

题目描述 模仿例题&#xff0c;打印出不同方向的正方形&#xff0c;然后打印三角形矩阵。中间有个空行。 输入格式 输入矩阵的规模&#xff0c;不超过 9 9 9。 输出格式 输出矩形和正方形 输入输出样例 输入 4输出 01020304 05060708 09101112 13141516010203040506 …...

【数据结构】邻接表 vs 邻接矩阵:5大核心优势解析与稀疏图存储优化指南

邻接表法 导读一、邻接矩阵的不足邻接表二、存储结构三、算法评价3.1 时间复杂度3.2 空间复杂度 四、邻接表特点4.1 特点解读特点3特点4特点5 结语 导读 大家好&#xff0c;很高兴又和大家见面啦&#xff01;&#xff01;&#xff01; 图作为一种复杂的数据结构&#xff0c;其…...

编程能力的跃迁时刻:技术革命与认知重构的交响曲

在软件开发领域,从业者常将"一万小时定律"视为能力增长的圭臬,但真正的能力跃迁往往发生在特定技术范式转换的临界点。当开发者首次理解递归算法的本质,当面向对象编程替代过程式思维,当自动化工具链重塑开发流程,这些认知地震时刻往往成为技术生涯的分水岭。 …...

PostIn V1.0.8版本发布,IDEA 插件支持一键扫描上报,让接口定义不再繁琐

PostIn是一款国产开源免费的接口管理工具&#xff0c;包含项目管理、接口调试、接口文档设计、接口数据MOCK等模块&#xff0c;支持常见的HTTP协议、websocket协议等&#xff0c;支持免登陆本地接口调试&#xff0c;同时可以对项目进行灵活的成员权限、消息通知管理等。本周Pos…...

删除Linux服务器上多余的系统启动项,并重装Ubuntu系统

问题描述 2024年6月&#xff0c;Centos团队终止维护Centos7系统&#xff0c;Ubuntu成了我的替换方案。正好有一台闲置的服务器&#xff0c;于是我临危受命给这台服务器重装系统。 经过我一番研究&#xff0c;Ubuntu系统初步安装成功了&#xff0c;但是存在一大堆问题&#xff…...

在亚马逊云科技上使用n8n快速构建个人AI NEWS助理

前言&#xff1a; N8n 是一个强大的工作流自动化工具&#xff0c;它允许您连接不同的应用程序、服务和系统&#xff0c;以创建自动化工作流程&#xff0c;并且采用了开源MIT协议&#xff0c;可以放心使用&#xff0c;他的官方网站也提供了很多的工作流&#xff0c;大家有兴趣的…...

JSON介绍及使用

1.JSON 1.JSON简介 JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据序列化协议&#xff0c;基于文本&#xff0c;完全独立于语言。 JSON由键值对组成&#xff0c;支持以下几种数据类型&#xff1a; 字符串&#xff1a;用双引号括起来的文本。 数…...

AOP 的织入过程是怎样的?

AOP&#xff08;面向切面编程&#xff09;的织入&#xff08;Weaving&#xff09;是将切面&#xff08;Aspect&#xff09;应用到目标对象&#xff08;Target Object&#xff09;并创建代理对象&#xff08;Proxy Object&#xff09;的过程。这个过程可以发生在不同的阶段&…...

链路聚合配置命令

技术信息 加入捆绑组&#xff0c;加大链路间带宽等 配置命令 华三 静态聚合 将接口加入聚合口后再进行配置 //创建静态链路聚合口1&#xff0c;不启用lacp[SWB]interface Bridge-Aggregation 1 [SWB-Bridge-Aggregation1]port link-type trunk [SWB-Bridge-Aggregation…...

为什么有的深度学习训练,有训练集、验证集、测试集3个划分,有的只是划分训练集和测试集?

在机器学习和深度学习中&#xff0c;数据集的划分方式取决于任务需求、数据量以及模型开发流程的严谨性。 1. 三者划分&#xff1a;训练集、验证集、测试集 目的 训练集&#xff08;Training Set&#xff09;&#xff1a;用于模型参数的直接训练。验证集&#xff08;Validati…...

【读书笔记·VLSI电路设计方法解密】问题61:扫描插入的目的是什么

如问题60所述,要构建可测试电路,必须确保电路中每个节点都具有可控性和可观测性。但对于包含时序元件(如触发器、锁存器等存储元件)的电路,若不采取特殊设计则难以实现这两项特性。这是因为时序元件关联节点的逻辑状态不仅取决于当前输入,还受其先前存储状态影响——它们…...

通信数据记录仪-产品概念ID

总结: 1、支持高速CAN、支持容错CAN、支持单线CAN(理解是支持不同的协议,CANFD、CAN2.0和LIN?) 2、 通过上位机设计时间...

【数据分享】2002-2023中国湖泊水位变化数据集(免费获取)

湖泊水位变化是研究水资源动态、生态系统演变和气候变化影响的重要指标。湖泊水位的升降不仅反映了降水、蒸发和入流水量的变化&#xff0c;还与人类活动、气候波动及地质过程密切相关。因此&#xff0c;高精度、长时间序列的湖泊水位数据对于水资源管理、洪水预测以及生态环境…...

SQL注入重新学习

前话 sql注入一般就是构造闭合&#xff0c;在查询语句中构造恶意语句&#xff0c;因为过滤并不严格导致信息泄露&#xff0c; 后台登陆语句&#xff1a;SELECT * FROM admin WHERE Username‘user’ and Password‘pass’ 万能密码&#xff1a;‘or ’1‘ ’1‘ # ; sql常用…...

修改Jupyter Notebook主目录文件夹

1、找到Jupyter Notebook配置文档 在anaconda prompt终端输入以下命令&#xff0c;可以显示配置文档所在位置&#xff1a; jupyter notebook --generate-config2、修改Jupyter Notebook主目录文件夹 用记事本打开文件夹中的jupyter_notebook_config.py文件。 在记事本中使用…...

玩转JSONObject:使用方法详解与Map对比

一、初识JSONObject 什么是JSONObject&#xff1f; JSONObject是Java中处理JSON数据的核心工具类&#xff0c;主流JSON库均提供类似实现&#xff1a; org.json&#xff08;原生包&#xff09;com.alibaba.fastjson.JSONObjectnet.sf.json.JSONObject 基础创建姿势 <JAV…...

LC416 vector<bool> 和 bool[] 的异同

LeetCode 416 1. 报错代码 // 01背包&#xff0c;从n个数字里面选&#xff0c;能否凑出和为s的方案 class Solution { public:bool canPartition(vector<int>& nums) {int m accumulate(nums.begin(), nums.end(), 0);if(m & 1) return false;m >> 1;…...

(51单片机)矩阵按键密码锁表白(C语言代码编撰)(矩阵按键教程)(LCD1602浅教程)

目录 源代码 main.c MatrixKey.c MatrixKey.h LCD1602.c LCD1602.h Delay.c Delay.h 运行效果图&#xff1a; 第一步&#xff1a; 第二步&#xff1a; 第三步&#xff1a; 第四步&#xff1a; 代码解析与教程&#xff1a; 延时函数Delay LCD1602 MatrixKey模块 源代…...