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

【MySQL数据库】锁机制

概述

锁:是计算机协调多个进程或者线程并发访问某一资源的机制。在数据库中,除了传统的计算资源(CPU、RAM、IO)的争用以外。数据也是一种供多用户共享的资源。如何保证数据的并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。在MySQL中,事务的隔离级别可以由锁来模拟实现。根据锁的粒度来分,分为以下三类:

全局锁:锁定数据库中的所有表

表级锁:每次操作锁住整张表

行级锁:每次操作锁住对应的行数据

全局锁

何为全局锁?

锁的粒度最大。全局锁就是对整个数据库实例加锁,加锁后,整个实例就处于只读状态,后续的DML的写语句,DDL语句,已经更新操作的事务提交语句都将被阻塞住。

我们呢,先说场景,你自己想一想是不是应该这样做,然后再去看解释:

典型的使用场景就是做全库的逻辑备份,对所有的表进行锁定,从而获取一致性视图,保证数据的完整性。

为什么要加全局锁?

分析:

假如我们不加全局锁,现在数据库中有三张表,我们想要去备份数据库的这三张表数据,但是在我们备份的过程中,我们的业务系统还在不断地向数据库中写入数据,那么此时可能会产生这样的一种情况:当我们备份表的时候,它是一个一个备份的,我们备份完库存表,然后业务系统修改了库存表的库存数据,形成了一个订单数据写入到订单表中,然后插入订单日志,此时我们备份出来的数据,将无法对应上,这就违背了数据的一致性

如何加全局锁?

首先我们将整个数据库锁上,执行mysqldump进行数据备份,在此过程中,DML、DDL语句无法执行,但是我们可以进行查询(DQL),备份完成得到xxx.sql文件,备份完成,再进行解锁。

-- 加全局锁
flush tables with read lock;--备份过程mysqldump -uroot -p123456 mydb_name > mydb_name.sql;-- 解锁
unlock tables;

虽然全局锁能够保证数据一致性,但是也会带来一些弊端。加全局锁是一个粒度比较大的操作,存在的问题有:

1.如果在主库上备份,那么在备份期间,不能执行更新,业务基本上就得停摆

2.如果在从库上备份,那么在备份期间,从库不能执行主库同步过来的二进制文件(binlog),会导致主从延迟

在InnoDB引擎中,我们可以在备份时加上--single-transaction参数来完成不加锁的一致性数据备份

命令行语句:(是bash命令行的语句,不是在mysql命令行内执行)

mysqldump --single-transaction -uroot -p123456 mydb > mydb.sql;

表级锁

表级锁的介绍

表级锁:每次操作都会锁住数据所在的整张表。锁的粒度大,发生锁冲突的概率最高,并发度最低。在MyISAM、InnoDB、BDB等存储引擎中都支持。并发度比较低。

表级锁也有细化的分类:表锁、元数据锁(MDL - meta data lock)、意向锁。

TYPE1:表锁

表共享读锁(read lock):S-共享

表独占写锁(write lock):X-排他/独占

-- 加锁
lock tables 表名... read/write;-- 解锁
unlock tables; -- 客户端断开连接也会解锁

 读锁的特点:

客户端A 将 表T 加了一个读锁,这张表就锁住了。

此时:

        客户端A 可以对 表T 进行DQL读这张表的数据,但是不能进行DDL/DML等写入操作

        客户端B 可以对 表T 进行DQL读这张表的数据,但是不能进行DDL/DML等写入操作

Tips:读锁共享,指的是多个客户端可以在加锁期间共享读的权力,但谁都没有写的权力

在左侧客户端进行加锁操作,然后我们在两个客户端分别执行select查询语句,我们发现都执行成功了。但是加锁客户端进行update操作时,被报错:“table was locked with a read lock and can't be updated”:表被读锁锁住了,不能被修改。而右侧客户端直接阻塞在了这里。 

左侧解锁之后,右侧被阻塞的语句能继续执行

写锁的特点:

客户端A 将 表T 加了一个写锁,这张表就被锁住了。

此时:

        客户端A 可以对表T 进行DQL读、DML/DDL写。

        客户端B 不能对表T 进行DQL读、DML/DDL写。

Tips:写锁独占,指的是加锁客户端独占表的使用权,其它客户端无法使用。

当我们加了写锁之后,加锁客户端可以执行任何操作,另外的客户端什么操作都不能执行,直接阻塞(使用ctrl+c强制结束阻塞直接退出执行)。 

TYPE2:元数据锁

MDL加锁过程是系统自动控制的,无需显示的使用,在访问一张表的时候会自动加上,MDL锁主要作用是维护表元数据的数据一致性,在表上有活动事务时,不可以对元数据进行写入操作。

元数据:是指表的结构,也就是表的字段等内容。元数据锁无需我们手动操作,但是我们需要知道当我们有事务未提交时,事务DML操作的表,我们无法对其使用DDL(数据定义语言,如alter、drop、create等)。事务DDL操作的表,其它事务无法对其使用DDL、DML操作。总的来说就是避免的是DDL与DML(数据的增删改查)的冲突,保证读写的正确性。

meta data lock 在MySQL5.5中引入。当对一张表进行增删改查时,加MDL读锁(共享);当对表结构进行变更操作时,加MDL写锁(排他)。

表的第一行:我们手动加表锁时,会自动地加上 相应的 元数据锁(SHARED_READ_ONLY / SHARED_NO_READ_WRITE)

表的第二行:我们执行select、select ... lock in share mode时,会自动地加上 元数据读锁(SHARED_READ)

表的第三行:我们执行insert、update、delete、select .. for update,会自动地加上 元数据读锁(SHARED_WRITE)

表的第四行:该行对应的操作/锁,与上面三个都互斥(上面三个互相共享)。当我们执行alter table时,自动地加上了元数据写锁(EXCLUSIVE),不仅与其它共享锁互斥,排他锁之间也互相互斥。

查看元数据锁:

select object_type,object_schema,object_name,lock_type,lock_duration
from performance_schema.metadata_locks;

TYPE3:意向锁

在具体介绍意向锁之前,我们先来分析一个现象:

首先,线程A对表的一条记录上了写锁。然后,线程B想要对这个表上锁,那么能说上锁就上锁嘛,显然不可以,他会依次遍历每一个记录,看看是不是所有记录都没上锁。

嗯,乍一看,一想,确实没问题。但是当记录多的时候,再看一眼,不得了,线程B需要访问所有记录,这不合适啊,浪费时间。

为了解决这个问题,我们只需要指定一个共同的约定,谁有上锁的可能性的话,谁就创建一个意向锁,代表有锁这个表的意向,其它线程想要上锁的话,只需要检查这一个内容就可以了。这就是意向锁的设计起源。

定义:意向锁是为了避免DML在执行时,加的行锁与表锁的冲突,在InnoDB中引入了意向锁,使得表锁不用检查每行数据是否加锁,使用意向锁来减少表锁的检查。

同样的,线程A操作表中某一条数据时,首先加上行锁,然后会给这个表加上一个意向锁。对于想要访问这个表的线程B,如果B想要加的锁与A的意向锁兼容,那么B就可以加上锁,否则会阻塞等到A将锁释放掉。

意向共享锁(IS):由语句select ... lock in share mode添加。

意向排他锁(IX):由insert、update、delete、select ... for update添加。

既然有分类,那么就会有兼容互斥情况。下面我们就来分析一下。

IS:与表锁共享锁(read)兼容,与表锁排他锁(write)互斥。

IX:与表锁互斥,意向锁之间兼容。

查看意向锁以及行锁的加锁情况:

select object_schema,object_name,index_name,lock_type,lock_mode,lock_data
from performance_schema.data_locks;

行级锁

在上面的意向锁中,我们已经提到了行锁。行级锁,顾名思义,每次操作锁住对应的行数据。锁的粒度最小,发生锁冲突的概率最低,并发度最高。应用在InnoDB存储引擎中。

MySQL的存储引擎中,MyISAM与InnoDB有三大区别:事务、外键、行级锁。

        InnoDB能够确保事务完整,而前者不能

        InnoDB具有外键,而前者没有

        InnoDB支持行级锁,而前者不支持

InnoDB的数据是基于索引组织的,行锁是通过对索引上的索引项加锁来实现的,而不是对记录家的锁。

对于“对索引上的索引项加锁”怎么理解呢?我们回想一下索引的基本结构,InnoDB的索引分为聚簇索引和二级索引,聚簇索引的叶子节点下面挂的是这一行的行数据,二级索引叶子节点下面挂的是对应的主键值。那么行数据是根据聚簇索引存储的,所以InnoDB的数据是基于索引组织的,并且在InnoDB中B+树的叶子结点是有序的。

对于行级锁,主要分为三类:

行锁(Record Lock):锁定单个行记录的锁,防止其它事务对此行进行update和delete。在RC,RR隔离级别下都支持。【RC-read_committed | RR-repeatable_read】

间隙锁(Gap Lock):锁定索引记录间隙(不含该条记录),确保索引记录间隙不变,防止其他事务在这个间隙进行insert,产生幻读,在RR隔离级别下都支持。

临键锁(Next-Key Lock):行锁和间隙锁的组合,同时锁住数据,并锁住数据前面的间隙Gap。在RR隔离级别下支持。

行锁

细分为两类:

共享锁:S-允许一个事务去读一行,阻止其它事务获得相同数据集的排他锁。

排他锁:X-允许获取排他锁的事务更新数据,阻止其他事务获得相同数据集的共享锁和排他锁。

默认情况下,InnoDB在RR隔离级别下运行,InnoDB使用next-key锁进行搜索和索引扫描,防止幻读。

1.针对唯一索引进行检索时,对已存在的记录进行等值匹配时,将会自动优化为行锁。

2.InnoDB的行锁是针对索引加的锁,不通过索引条件检索数据,那么InnoDB将对表中所有数据加锁,此时就会升级为表锁。

查看意向锁以及行锁的加锁情况:

select object_schema,object_name,index_name,lock_type,lock_mode,lock_data
from performance_schema.data_locks;

间隙锁/临键锁

1.索引上的等值查询(唯一索引),给不存在的记录加锁时,优化为间隙锁。

2.索引上的等值查询(普通索引),向右遍历时最后一个值不满足查询需求时,next-key lock退化为间隙锁。

3.索引上的范围查询(唯一索引),会访问到不满足条件的第一个值为止。

注意:间隙锁唯一目的就是防止其它事务插入间隙,间隙锁可以共存,一个事务采用的间隙锁不会阻止另一个事务在同一个间隙采用间隙锁。


感谢大家!

相关文章:

【MySQL数据库】锁机制

概述 锁:是计算机协调多个进程或者线程并发访问某一资源的机制。在数据库中,除了传统的计算资源(CPU、RAM、IO)的争用以外。数据也是一种供多用户共享的资源。如何保证数据的并发访问的一致性、有效性是所有数据库必须解决的一个…...

JS dom修改元素的style样式属性

1通过样式属性修改 第三种 toggle有就删除 没就加上...

搜索树——AVL、红黑树、B树、B+树

目录 二叉搜索树 AVL树 2-3-4树 红黑树 旋转操作 概念讲解 旋转节点操作(左旋) 插入节点 删除节点 B树和B树 B树 2.5.2 B树 https://www.cs.usfca.edu/~galles/visualization/Algorithms.html 难度高,如果想要了解红黑树的增加、…...

2007-2019年各省地方财政交通运输支出数据

2007-2019年各省地方财政交通运输支出数据 1、时间:2007-2019年 2、来源:国家统计局、统计年鉴 3、指标:行政区划代码、地区、年份、地方财政交通运输支出 4、范围:31省 5、指标说明:地方财政交通运输支出是指地方…...

LeetCode算法题(Go语言实现)_29

题目 给你一个链表的头节点 head 。删除 链表的 中间节点 ,并返回修改后的链表的头节点 head 。 长度为 n 链表的中间节点是从头数起第 ⌊n / 2⌋ 个节点(下标从 0 开始),其中 ⌊x⌋ 表示小于或等于 x 的最大整数。 对于 n 1、2…...

MINIQMT学习课程Day6

学习安装qmt 安装好后,点击启动国金qmt系统 之后将xtquant包手动安装到python中的site_package中,之后使用pycharm打开文件,创建本地命令文件。 具体的xtquant安装包以及qmt模拟环境,以及模拟账号密码,可以加我私信沟…...

WinForm真入门(7)——Button控件详解

WinForm Button 控件详解 Button(按钮)是 WinForm 中最基础的交互控件,用于触发操作(如:点击登录按钮进入系统)或提交数据(如:写好请假申请后,点击提交,把申…...

035-Windows抓屏-GDI

Windows抓屏-GDI 一、技术原理 GDI(Graphics Device Interface)抓屏基于Windows系统提供的图形设备接口,通过设备上下文(DC) 实现屏幕内容捕获。核心流程如下: 获取桌面窗口句柄:通过 //获取…...

复古优雅感涂鸦手绘喷漆街头艺术字体 Enter Sonic Graffiti

Enter Sonic Graffiti 是 Rvq Typefoundry 的新字体,具有优雅感的字符集。要创建漂亮的组合,只需混合大写和小写,然后与其他字符形混合即可。新的 Graffiti 字体样式和 .我将这款字体献给我正在与癌症作斗争的母亲。我希望我的母亲和所有受癌…...

4.4 代码随想录第三十五天打卡

121. 买卖股票的最佳时机 (1)题目描述: &#xff0c; (2)解题思路: class Solution { public:int maxProfit(vector<int>& prices) {int len prices.size();if (len 0) return 0;vector<vector<int>> dp(len, vector<int>(2));dp[0][0] - pr…...

PyTorch 深度学习实战(34):神经架构搜索(NAS)实战

在上一篇文章中&#xff0c;我们探讨了联邦学习与隐私保护技术。本文将深入介绍神经架构搜索&#xff08;Neural Architecture Search, NAS&#xff09;这一自动化机器学习方法&#xff0c;它能够自动设计高性能的神经网络架构。我们将使用PyTorch实现基于梯度优化的DARTS方法&…...

【python】速通笔记

Python学习路径 - 从零基础到入门 环境搭建 安装Python Windows: 从官网下载安装包 https://www.python.org/downloads/Mac/Linux: 通常已预装&#xff0c;可通过终端输入python3 --version检查 配置开发环境 推荐使用VS Code或PyCharm作为代码编辑器安装Python扩展插件创建第…...

简易Minecraft python

废话多说 以下是一个基于Python和ModernGL的简化版3D沙盒游戏框架。由于代码长度限制&#xff0c;这里提供一个核心实现&#xff08;约500行&#xff09;&#xff0c;您可以通过添加更多功能和内容来扩展它&#xff1a; python import pygame import moderngl import numpy a…...

Linux信号处理解析:从入门到实战

Linux信号处理全解析&#xff1a;从入门到实战 一、初识Linux信号&#xff1a;系统级的"紧急电话" 信号是什么&#xff1f; 信号是Linux系统中进程间通信的"紧急通知"&#xff0c;如同现实中的交通信号灯。当用户按下CtrlC&#xff08;产生SIGINT信号&…...

2025-04-04 Unity 网络基础5——TCP分包与黏包

文章目录 1 分包与黏包2 解决方案2.1 数据接口2.2 定义消息2.3 NetManager2.4 分包、黏包处理 3 测试3.1 服务端3.2 客户端3.3 直接发送3.4 黏包发送3.5 分包发送3.6 分包、黏包发送3.7 其他 1 分包与黏包 ​ 分包、黏包指在网络通信中由于各种因素&#xff08;网络环境、API …...

Ubuntu 安装 JMeter:为你的服务器配置做好准备

Apache JMeter 是一个开源的负载测试工具&#xff0c;可以用于测试静态和动态资源&#xff0c;确定服务器的性能和稳定性。在本文中&#xff0c;我们将讨论如何下载和安装 JMeter。 安装 Java&#xff08;已安装 Java 的此步骤可跳过&#xff09; 要下载 Java&#xff0c;请遵…...

swift-oc和swift block和代理

一、闭包或block 1.1、swift 闭包表达式作为参数的形式 一、闭包的定义 func exec(v1: Int, v2: Int, fn: (Int, Int) -> Int) { print(fn(v1, v2)) } 二、调用 exec(v1: 10, v2: 20, fn: { (v1: Int, v2: Int) -> Int in return v1 v2 }) 1.2、swift 闭包表达式作为…...

【数据结构】_队列

hello 友友们~ 今天我们要开始学习队列啦~ 话不多说&#xff0c;让我们开始吧&#xff01;GO! 1.队列的概念及结构 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表。 队列具有先进先出FIFO(First In First Out) 入队列&#x…...

【软考中级软件设计师】数据表示:原码、反码、补码、移码、浮点数

数据表示 一、数据表示1、整数的表示(1) 原码(2) 反码(3) 补码&#xff1a;(4) 移码 2、浮点数的表示&#xff08;IEEE 754标准&#xff09; 一、数据表示 计算机使用的是二进制&#xff0c;也就是0和1的组合。所有的数据&#xff0c;无论是数字、文字还是图片、声音&#xff…...

Linux(十二)信号

今天我们就要来一起学习信号啦&#xff01;&#xff01;&#xff01;还记得小编在之前的文章中说过的ctrlc吗&#xff1f;之前小编没有详细介绍过&#xff0c;现在我们就要来学习啦&#xff01;&#xff01;&#xff01; 一、信号的基本介绍 首先&#xff0c;小编带领大家先一…...

迪杰斯特拉+二分+优先队列+拓扑+堆优化(奶牛航线Cowroute、架设电话线dd、路障Roadblocks、奶牛交通Traffic)

原文地址 https://fmcraft.top/index.php/Programming/2025040402.html 主要算法 迪杰斯特拉Dijkstra 题目列表 P1&#xff1a;奶牛航线Cowroute 题目描述 题目描述 Bessie已经厌倦了农场冬天的寒冷气候&#xff0c;她决定坐飞机去更温暖的地方去度假。不幸的是&#xf…...

【数据结构】树的介绍

目录 一、树1.1什么是树&#xff1f;1.2 树的概念与结构1.3树的相关术语1.4 树形结构实际运用场景 二、二叉树2.1 概念与结构2.2 特殊的二叉树2.2.1 满二叉树2.2.2 完全二叉树 个人主页&#xff0c;点击这里~ 数据结构专栏&#xff0c;点击这里~ 一、树 1.1什么是树&#xff1…...

【CF】Day24——Codeforces Round 994 (Div. 2) D

D. Shift Esc 题目&#xff1a; 思路&#xff1a; 典DP的变种 如果这一题没有这个变换操作&#xff0c;那么是一个很典型的二维dp&#xff0c;每一个格子我们都选择上面和左边中的最小值即可 而这题由于可以变换&#xff0c;那我们就要考虑变换操作&#xff0c;首先一个显然…...

Python 字典

Python 字典 字典的介绍 字典不仅可以保存值&#xff0c;还能对值进行描述使用大括号来表示一个字典&#xff0c;不仅有值 value &#xff0c;还有值的描述 key字典里的数据都是以键值对 key-value 的形式来保留的key 和 value 之间用冒号 : 来连接多个键值对之间用逗号 , 来…...

yolov12检测 聚类轨迹运动速度

目录 分割算法api版: 分割算法: yolo_kmean.py 优化版: 第1步,检测生成json 第2步骤聚类: 分割算法api版: import json import os from glob import globimport cv2 import imageio import numpy as np from scipy.ndimage import gaussian_filter1d from scipy.s…...

【Lua】pcall使用详解

目录 基本语法核心作用基础示例示例 1&#xff1a;捕获一个简单错误示例 2&#xff1a;调用不存在的函数 高级用法1. 传递多个参数和接收多个返回值2. 捕获带 error 主动抛出的错误3. 匿名函数与 pcall 使用场景注意事项总结 在 Lua 中&#xff0c;pcall&#xff08;Protected …...

Floyd 算法 Java

图论算法实践&#xff1a;使用 Floyd 求任意两点最短路&#xff08;Java 实现&#xff09; 在图论算法中&#xff0c;Floyd-Warshall 算法是一个经典的动态规划算法&#xff0c;用于在一个加权图中寻找所有点对之间的最短路径。 场景描述 假设我们有一个包含 n 个点的无向图&…...

List结构之非实时榜单实战

像京东、淘宝等电商系统一般都会有热销的商品榜单&#xff0c;比如热销手机榜单&#xff0c;热销电脑榜单&#xff0c;这些都是非实时的榜单。为什么是非实时的呢&#xff1f;因为完全实时的计算和排序对于资源消耗较大&#xff0c;尤其是当涉及大量交易数据时。 一般来说&…...

OCR的备份与恢复

1.简介 在Oracle RAC环境中&#xff0c;ASM&#xff08;Automatic Storage Management&#xff09;管理的OCR&#xff08;Oracle Cluster Registry&#xff09;是集群的关键组件&#xff0c;存储集群配置和状态信息。 OCR的备份一般指物理备份&#xff0c;系统默认每4个小时自…...

算法思想之双指针(一)

欢迎拜访&#xff1a;雾里看山-CSDN博客 本篇主题&#xff1a;算法思想之双指针(一) 发布时间&#xff1a;2025.4.4 隶属专栏&#xff1a;算法 目录 双指针算法介绍对撞指针&#xff1a;快慢指针&#xff1a; 例题移动零题目链接题目描述算法思路代码实现 复写零题目链接题目描…...

Pascal语言的设备管理

Pascal语言的设备管理 引言 在计算机科学中&#xff0c;设备管理是操作系统的重要组成部分之一。设备管理指的是操作系统对外部设备的控制和协调&#xff0c;实现对各种设备的有效利用。Pascal语言作为一种教育性编程语言&#xff0c;虽然最初并不是为了直接进行设备管理而设…...

【MySQL】DML:添加-修改-删除数据 (数据操作语言) 学习笔记

DML (数据操作语言) 学习笔记 1. 数据表结构 首先创建员工表 employee&#xff1a; CREATE TABLE employee (id int unsigned NOT NULL AUTO_INCREMENT COMMENT ID,username varchar(20) NOT NULL COMMENT 用户名,password varchar(32) DEFAULT 123456 COMMENT 密码,name va…...

React编程高级主题:背压(Backpressure)处理

文章目录 **5.1 背压&#xff08;Backpressure&#xff09;概述****5.1.1 缓冲&#xff08;Buffer&#xff09;****1. 基本概念****2. 缓冲的实现方式****3. 适用场景****4. 潜在问题** **5.1.2 丢弃&#xff08;Drop&#xff09;****1. 基本概念****2. 丢弃的实现方式****3. 适…...

Spring IoCDI

IoC容器 前⾯我们提到IoC控制反转&#xff0c; 就是将对象的控制权交给Spring的IOC容器 &#xff0c;由IOC容器创建及管理对 象。 也就是bean的存储. 在类上⾯添加 RestController 和 Controller 注解, 就是把这个对象交给Spring管理 , Spring 框架启动时就会加载该类. 把对象…...

COBOL语言的数据库交互

COBOL语言的数据库交互 引言 随着信息技术的不断发展&#xff0c;数据库管理系统&#xff08;DBMS&#xff09;已经成为现代应用程序中不可或缺的组成部分。在众多编程语言中&#xff0c;COBOL&#xff08;Common Business-Oriented Language&#xff09;以其在商业应用中的稳…...

【C++11(中)】—— 我与C++的不解之缘(三十一)

一、可变参数模版 基本语法&#xff1a; C11支持可变参数模版&#xff0c;简单来说就是支持可变数量参数的函数模版或者类模版&#xff1b; 可变数目的参数被称为参数包&#xff0c;存在两种参数包&#xff1a;模版参数包(表示0个或者多个模版参数)&#xff0c;函数参数包(表示…...

JavaScript学习19-事件类型之鼠标事件

1. 2. 3....

文件或目录损坏且无法读取:数据恢复的实战指南

在数字化时代&#xff0c;数据的重要性不言而喻。然而&#xff0c;在日常使用电脑、移动硬盘、U盘等存储设备时&#xff0c;我们难免会遇到“文件或目录损坏且无法读取”的提示。这一提示如同晴天霹雳&#xff0c;让无数用户心急如焚&#xff0c;尤其是当这些文件中存储着重要的…...

python爬虫:小程序逆向实战教程

根据我之前发表的文章&#xff0c;我们进行延伸实战https://blog.csdn.net/weixin_64809364/article/details/146981598?spm1001.2014.3001.5501 1. 想要爬取什么小程序&#xff0c;我们进行搜索 2. 找到我们vx小程序的文件地址&#xff0c;我们就可以进行破解 破解步骤强看…...

第二十节课:python实例五:身体质量指数BMI计算

python实例五&#xff1a;身体质量指数BMI计算 一、问题分析 BMI计算公式&#xff1a; BMI 体重(kg) / 身高(m)^2国际与国内标准对比 分类国际标准国内标准偏瘦<18.5<18.5正常18.5-2518.5-24偏胖25-3024-28肥胖≥30≥28 二、实现要点 输入处理 # 同时接收身高体重…...

八、重学C++—动态多态(运行期)

上一章节&#xff1a; 七、重学C—静态多态&#xff08;编译期&#xff09;-CSDN博客https://blog.csdn.net/weixin_36323170/article/details/146999362?spm1001.2014.3001.5502 本章节代码&#xff1a; cpp/dynamicPolymorphic.cpp CuiQingCheng/cppstudy - 码云 - 开源中…...

思维链 Chain-of-Thought(COT)

思维链 Chain-of-Thought&#xff08;COT&#xff09;&#xff1a;思维链的启蒙 3. 思维链 Chain-of-Thought&#xff08;COT&#xff09;存在问题&#xff1f;2. 思维链 Chain-of-Thought&#xff08;COT&#xff09;是思路是什么&#xff1f;1. 什么是 思维链 Chain-of-Thoug…...

React框架的Fiber架构

以下是关于 Fiber 架构 的系统梳理: 一、Fiber 架构的出现背景 React 15 及之前的问题 同步递归渲染:虚拟DOM的diff过程不可中断,导致主线程长时间阻塞。掉帧问题:复杂组件树渲染时,用户交互无法及时响应。无法实现增量渲染:无法拆分任务优先级,无法利用浏览器空闲时间。…...

PCI与PCIe接口的通信架构是主从模式吗?

PCI&#xff08;Peripheral Component Interconnect&#xff09;总线在通信架构上本质是主从模式&#xff0c;但其具体实现和角色分配在不同版本&#xff08;如传统PCI与PCI Express&#xff09;中存在差异。以下是详细分析&#xff1a; 传统PCI总线的主从模式 (1) 基本架构 主…...

【2011】【论文笔记】THz保护文化遗产——

前言 类型 太赫兹 + 文化保护 太赫兹 + 文化保护 太赫兹+文化保护 期刊 I E E E T R A N S A C T I O N S O N T E R A H E R...

状态机思想编程练习

状态机实现LED流水灯 本次实验&#xff0c;我们将利用状态机的思想来进行Verilog编程实现一个LED流水灯&#xff0c;并通过Modelsim来进行模拟仿真&#xff0c;再到DE2-115开发板上进行验证。 ​ 首先进行主要代码的编写。 module led (input sys_clk,input sys_…...

三部门新政力推智能家居 居然智家数智化转型迎利好东风

2025年3月&#xff0c;工业和信息化部、教育部、市场监管总局联合印发《轻工业数字化转型实施方案》&#xff0c;明确提出重点培育智能家居、智能穿戴、智能骑行、智慧养老等消费端场景&#xff0c;深化人工智能技术在家电、家具等领域的应用&#xff0c;推动产业链供应链智能化…...

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

C 七级 2025 年 03 月 题号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 答案 B A B C B B B A D D A C B B D 一、单选题 第 1 题 下列哪个选项是C中的关键字&#xff1f; A. function B. class C. method D. object 第 2 题 下面代码输出的是&#xff08;&#xff09; int main()…...

【MySQL】navicat16 result字段识别不了

在mysql里面使用result字段 打印出来为空 之后换了个字段命名 使用outcome 成功能打印出来了。。 不知道是不是版本的问题...

【教学类-102-02】自制剪纸图案(留白边、沿线剪)02——Python+PS自动化添加虚线边框

背景需求: 01版本实现了对透明背景png图案边界线的扩展,黑线实线描边 【教学类-102-01】自制剪纸图案(留白边、沿线剪)01-CSDN博客文章浏览阅读974次,点赞15次,收藏7次。【教学类-102-01】自制剪纸图案(留白边、沿线剪)01https://blog.csdn.net/reasonsummer/article…...