Mysql相关知识2:Mysql隔离级别、MVCC、锁
文章目录
- MySQL的隔离级别
- 可重复读的实现原理
- Mysql锁
- 按锁的粒度分类
- 按锁的使用方式分类
- 按锁的状态分类
MySQL的隔离级别
在 MySQL
中,隔离级别定义了事务之间相互隔离的程度,用于控制一个事务对数据的修改在何时以及如何被其他事务可见。MySQL
支持四种隔离级别,从低到高依次为:
- 读未提交(Read Uncommitted)
- 特点:一个事务可以读取另一个未提交事务的数据,这是最低的隔离级别,会导致脏读(Dirty Read)问题,即一个事务读取到了另一个事务未提交的数据,若该事务回滚,读取的数据就是无效的。
- 示例:事务 A 修改了某条记录但未提交,事务 B 此时读取了该记录,之后事务 A 回滚,那么事务 B 读取的数据就是脏数据。
- 读已提交(Read Committed)
- 特点:一个事务只能读取另一个已经提交事务的数据,避免了脏读问题,但可能会出现不可重复读(Non - Repeatable Read)问题。不可重复读是指在一个事务内多次读取同一数据时,由于其他事务的修改,导致每次读取的结果不一致。
- 示例:事务 A 第一次读取某条记录,然后事务 B 修改并提交了该记录,事务 A 再次读取该记录时,得到的结果与第一次不同。
- 可重复读(Repeatable Read)
- 特点:在一个事务内多次读取同一数据时,会保证读取到的数据是一致的,避免了不可重复读问题,但可能会出现幻读(
Phantom Read
)问题。幻读是指在一个事务内,按照相同的查询条件进行多次查询时,由于其他事务插入或删除了符合条件的记录,导致查询结果集发生了变化。 - 示例:事务 A 按照某个条件查询到了 10 条记录,然后事务 B 插入了一条符合该条件的记录并提交,事务 A 再次按照相同条件查询时,会得到 11 条记录。
MySQL
的InnoDB
存储引擎通过多版本并发控制(MVCC
)和间隙锁(Gap Lock
)来解决幻读问题。
- 特点:在一个事务内多次读取同一数据时,会保证读取到的数据是一致的,避免了不可重复读问题,但可能会出现幻读(
- 串行化(Serializable)
- 特点:最高的隔离级别,事务之间是串行执行的,即一个事务执行完后另一个事务才开始执行,避免了脏读、不可重复读和幻读问题,但会导致并发性能下降,因为事务需要排队执行。
- 示例:所有事务依次执行,不会出现并发冲突,但会降低系统的吞吐量。
可以使用以下 SQL 语句查看和设置 MySQL 的隔离级别:
-- 查看当前会话的隔离级别
SELECT @@tx_isolation;
-- 设置当前会话的隔离级别为可重复读
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
可重复读的实现原理
在 MySQL
的 InnoDB
存储引擎中,可重复读隔离级别主要通过多版本并发控制(MVCC
)和间隙锁(Gap Lock
)来实现。
- 多版本并发控制(MVCC)
- 原理:
MVCC
是一种基于数据多版本的并发控制机制,它通过为每条记录保存多个版本,使得不同事务可以在不同的版本上进行操作,从而实现并发访问。在InnoDB
中,每行记录除了实际的数据外,还包含两个隐藏列:创建时间戳(DB_TRX_ID
)和删除时间戳(DB_ROLL_PTR
)。创建时间戳记录了创建该版本的事务 ID,删除时间戳指向该记录的上一个版本。 - 读操作:当一个事务执行读操作时,它会根据自己的事务 ID 和当前系统的事务 ID 快照,选择合适的记录版本进行读取。具体来说,事务会读取创建时间戳小于等于自己事务 ID 的记录版本,并且该记录版本的删除时间戳为空或者大于自己的事务 ID。这样可以保证事务读取到的是在它开始之前已经提交的数据版本,从而实现可重复读。
- 写操作:当一个事务执行写操作时,会创建一个新的记录版本,并更新相应的时间戳。
- 原理:
- 间隙锁(Gap Lock)
- 原理:间隙锁是为了解决幻读问题而引入的。当一个事务在可重复读隔离级别下执行查询时,
InnoDB
会对查询条件所涉及的范围加间隙锁。间隙锁会锁定索引记录之间的间隙,防止其他事务在该间隙内插入新的记录,从而避免了幻读的发生。 - 示例:假设事务 A 执行
SELECT * FROM table WHERE id BETWEEN 1 AND 10 FOR UPDATE;
,InnoDB
会对id
为 1 到 10 之间的间隙加锁,即使这些间隙中没有实际的记录。这样,其他事务就无法在这个范围内插入新的记录,从而保证了事务 A 在后续的查询中不会出现幻读。
- 原理:间隙锁是为了解决幻读问题而引入的。当一个事务在可重复读隔离级别下执行查询时,
综上所述,MVCC
保证了事务在读取数据时可以看到一致的数据版本,避免了不可重复读问题,而间隙锁则进一步解决了幻读问题,使得可重复读隔离级别更加可靠。
Mysql锁
在 MySQL
中,锁机制是保证数据一致性和并发控制的重要手段。按照不同的分类标准,MySQL
有多种类型的锁,下面为你详细介绍:
按锁的粒度分类
- 表级锁
- 特点:对整张表进行锁定,开销小,加锁快;不会出现死锁,但锁定粒度大,发生锁冲突的概率高,并发度低。
- 常见类型
- 表共享读锁(Table Read Lock):多个事务可以同时对一张表加读锁,加了读锁的表可以被其他事务读取,但不能被其他事务写入。例如,事务 A 对表
t1
加了读锁,事务 B 也可以对表t1
加读锁进行查询操作,但如果事务 B 想要对表t1
进行写操作,就需要等待事务 A 释放读锁。 - 表独占写锁(Table Write Lock):一个事务对表加了写锁后,其他事务不能对该表加任何类型的锁,只有持有写锁的事务可以对表进行读写操作。比如,事务 A 对表
t1
加了写锁,那么在事务 A 释放写锁之前,事务 B 无法对表t1
进行读或写操作。
- 表共享读锁(Table Read Lock):多个事务可以同时对一张表加读锁,加了读锁的表可以被其他事务读取,但不能被其他事务写入。例如,事务 A 对表
- 行级锁
- 特点:对表中的某一行进行锁定,锁定粒度小,发生锁冲突的概率低,并发度高;但开销大,加锁慢,可能会出现死锁。
- 常见类型
- 共享锁(Shared Lock,S 锁):也称为读锁,多个事务可以同时对同一行数据加共享锁,加了共享锁的行可以被其他事务读取,但不能被其他事务写入。例如,事务 A 对表
t1
的某一行加了共享锁,事务 B 也可以对该行加共享锁进行查询操作,但如果事务 B 想要对该行进行写操作,就需要等待事务 A 释放共享锁。 - 排他锁(Exclusive Lock,X 锁):也称为写锁,一个事务对某一行数据加了排他锁后,其他事务不能对该行数据加任何类型的锁,只有持有排他锁的事务可以对该行数据进行读写操作。比如,事务 A 对表
t1
的某一行加了排他锁,那么在事务 A 释放排他锁之前,事务 B 无法对该行进行读或写操作。
- 共享锁(Shared Lock,S 锁):也称为读锁,多个事务可以同时对同一行数据加共享锁,加了共享锁的行可以被其他事务读取,但不能被其他事务写入。例如,事务 A 对表
- 页级锁
- 特点:锁定粒度介于表级锁和行级锁之间,开销和加锁时间也介于两者之间,并发度一般。页级锁是 MySQL 中 BDB 存储引擎使用的锁类型,但 BDB 存储引擎已经逐渐被淘汰,所以页级锁在实际应用中使用较少。
按锁的使用方式分类
- 意向锁
- 作用:意向锁是一种表级锁,用于表明事务对表中的某些行或页有特定类型的锁。意向锁的存在是为了协调不同粒度的锁之间的关系,提高加锁的效率。
- 常见类型
- 意向共享锁(Intention Shared Lock,IS 锁):表示事务打算对表中的某些行加共享锁。例如,当事务想要对表中的某一行加共享锁时,会先对表加意向共享锁。
- 意向排他锁(Intention Exclusive Lock,IX 锁):表示事务打算对表中的某些行加排他锁。比如,当事务想要对表中的某一行加排他锁时,会先对表加意向排他锁。
- 记录锁(Record Lock)
- 作用:行级锁的一种,用于锁定表中的某一行记录。例如,
SELECT * FROM table_name WHERE id = 1 FOR UPDATE;
语句会对id
为 1 的行记录加排他锁。
- 作用:行级锁的一种,用于锁定表中的某一行记录。例如,
- 间隙锁(Gap Lock)
- 作用:用于锁定索引记录之间的间隙,防止其他事务在该间隙内插入新的记录,从而避免幻读问题。例如,
SELECT * FROM table_name WHERE id BETWEEN 1 AND 10 FOR UPDATE;
语句会对id
为 1 到 10 之间的间隙加间隙锁。
- 作用:用于锁定索引记录之间的间隙,防止其他事务在该间隙内插入新的记录,从而避免幻读问题。例如,
- 临键锁(Next - Key Lock)
- 作用:是记录锁和间隙锁的组合,既锁定某一行记录,又锁定该行记录前面的间隙。在可重复读隔离级别下,InnoDB 存储引擎默认使用临键锁来防止幻读。例如,
SELECT * FROM table_name WHERE id > 5 FOR UPDATE;
语句会对满足条件的行记录及其前面的间隙加临键锁。
- 作用:是记录锁和间隙锁的组合,既锁定某一行记录,又锁定该行记录前面的间隙。在可重复读隔离级别下,InnoDB 存储引擎默认使用临键锁来防止幻读。例如,
按锁的状态分类
- 乐观锁
- 原理:乐观锁假设在大多数情况下,事务之间不会发生冲突,因此在操作数据时不会对数据进行加锁,而是在更新数据时检查数据是否被其他事务修改过。通常通过在表中添加一个版本号或时间戳字段来实现。
- 示例:在更新数据时,先查询数据的版本号,然后在更新语句中添加版本号的条件,只有当版本号与查询时一致时才进行更新。例如:
-- 查询数据
SELECT id, name, version FROM table_name WHERE id = 1;
-- 更新数据
UPDATE table_name SET name = 'new_name', version = version + 1 WHERE id = 1 AND version = <查询时的版本号>;
- 悲观锁
- 原理:悲观锁假设在大多数情况下,事务之间会发生冲突,因此在操作数据时会对数据进行加锁,以防止其他事务对数据进行修改。上面提到的共享锁、排他锁等都属于悲观锁。
相关文章:
Mysql相关知识2:Mysql隔离级别、MVCC、锁
文章目录 MySQL的隔离级别可重复读的实现原理Mysql锁按锁的粒度分类按锁的使用方式分类按锁的状态分类 MySQL的隔离级别 在 MySQL 中,隔离级别定义了事务之间相互隔离的程度,用于控制一个事务对数据的修改在何时以及如何被其他事务可见。MySQL 支持四种…...
解决IDEA创建SpringBoot项目没有Java版本8
问题:idea2023版本创建springboot的过程中,选择java版本时发现没有java8版本,只有java17和java20 原因:spring2.X版本在2023年11月24日停止维护了,因此创建spring项目时不再有2.X版本的选项,只能从3.1.X版本…...
第十章:Agent 的评估、调试与可观测性:确保可靠与高效
引言 随着我们一步步构建出越来越复杂的 AI Agent,赋予它们高级工具和更智能的策略,一个至关重要的问题浮出水面:我们如何知道这些 Agent 是否真的有效、可靠?当它们行为不符合预期时,我们又该如何诊断和修复问题&…...
8节串联锂离子电池组可重构buck-boost均衡拓扑结构 simulink模型仿真
8节串联锂离子电池组 极具创新性 动态分组均衡策略,支持3种均衡模式 1.最高SOC电池给最低SOC电池均衡 2.高能电池组电池给最低SOC电池均衡 3.高能电池组电池给低能电池组电池均衡 支持手动设置均衡开启阈值和终止阈值 均衡效果非常好...
Oracle EBS COGS Recognition重复生成(一借一贷)
背景 月结用户反馈“发出商品”(实际为递延销货成本)不平,本月都是正常操作月结程序,如正常操作步骤如下: 记录订单管理事务处理 (Record Order Management Transactions)收集收入确认信息 (Collect Revenue Recognition Information)生成销货成本确认事件 (Generate COGS …...
Linux命令--将控制台的输入写入文件
原文网址:Linux命令--将控制台的输入写入文件-CSDN博客 简介 本文介绍Linux将控制台的输入写入文件的方法。 方案1:cat > file1(推荐) 普通用法 cat > file1 输入结束后,用CtrlD退出。 示例 使用root权限…...
使用BQ76PL455和STM32的SAE电动方程式电动汽车智能BMS
BMS对任何电动汽车来说都是必不可少的,它可以监控电池的行为,确保安全行驶。 该项目旨在降低成本,同时为每个电池模块提供可扩展的BMS。BQ76PL455具有监测6-16个单元的能力,8通道辅助输入(用于温度监测)和多达15个其他ic用于Daisy…...
OpenCV 模板与多个对象匹配方法详解(继OpenCV 模板匹配方法详解)
文章目录 前言1.导入库2.图片预处理3.输出模板图片的宽和高4.模板匹配5.获取匹配结果中所有符合阈值的点的坐标5.1 threshold 0.9:5.2 loc np.where(res > threshold): 6.遍历所有匹配点6.1 loc 的结构回顾6.2 loc[::-1] 的作用6.2.1 为什么需要反转…...
7.0/Q1,Charls最新文章解读
文章题目:Anti-hypertensive medication adherence, socioeconomic status, and cognitive aging in the Chinese community-dwelling middle-aged and older adults ≥ 45 years: a population-based longitudinal study DOI:10.1186/s12916-025-03949-…...
【第三十二周】CLIP 论文阅读笔记
CLIP 摘要Abstract文章信息引言方法预训练推理Q&A 关键代码实验结果总结 摘要 本篇博客介绍了CLIP(Contrastive Language-Image Pre-training),这是OpenAI于2021年提出的多模态预训练模型,其核心思想是通过对比学习将图像与文…...
在 Ubuntu 系统上安装 PostgreSQL
在 Ubuntu 系统上安装 PostgreSQL 的完整指南: 一、安装 PostgreSQL(最新版本) 1. 更新软件包列表: bash sudo apt update 2. 安装 PostgreSQL 和客户端工具: bash sudo apt install postgresql po…...
【MySQL】数据类型
🏠个人主页:Yui_ 🍑操作环境:Centos7 🚀所属专栏:MySQL 文章目录 前言1. bit类型2.tinyint类型3. float类型4. decimal5. char类型6. varchar5&6 char和varchar的比较7.日期和时间类型8.enum和set总结 …...
Mac上Cursor无法安装插件解决方法
可能是微软的vscode被cursor这些新晋的AI-IDE白嫖够了,所以现在被制裁了,cursor下载不了vscode插件了。需要自己修改扩展商店源。 近期微软调整了 API 鉴权策略或限制了非官方客户端的访问权限。 解决方案 一、找到 product.json 文件 打开终端&…...
PI0 Openpi 部署(仅测试虚拟环境)
https://github.com/Physical-Intelligence/openpi/tree/main 我使用4070tisuper, 14900k,完全使用官方默认设置,没有出现其他问题。 目前只对examples/aloha_sim进行测试,使用docker进行部署, 默认使用pi0_aloha_sim模型(但是文档上没找到对应的&…...
NumPy数组和二维列表的区别
在 Python 中,NumPy 数组和二维列表在性能方面存在诸多不同,下面从存储方式、内存占用、操作速度、缓存局部性这几个角度详细分析。 存储方式 二维列表:它是 Python 内置的数据结构,列表中的每个元素实际上是一个引用࿰…...
学习设计模式《四》——单例模式
一、基础概念 单例模式的本质【控制实例数目】; 单例模式的定义:是用来保证这个类在运行期间只会被创建一个类实例;单例模式还提供了一个全局唯一访问这个类实例的访问点(即GetInstance方法)单例模式只关心类实例的创建…...
构建具备推理与反思能力的高级 Prompt:LLM 智能代理设计指南
在构建强大的 AI 系统,尤其是基于大语言模型(LLM)的智能代理(Agent)时,Prompt 设计的质量决定了系统的智能程度。传统 Prompt 通常是简单的问答或填空式指令,而高级任务需要更具结构性、策略性和…...
NLP 梳理03 — 停用词删除和规范化
一、说明 前文我们介绍了标点符号删除、文本的大小写统一,本文介绍英文文章的另一些删除内容,停用词删除。还有规范化处理。 二、什么是停用词,为什么删除它们? 2.1 停用词的定义 停用词是语言中的常用词,通常语义…...
算法—插入排序—js(小数据或基本有序数据)
插入排序原理:(适合小规模数据) 将数组分为“已排序”和“未排序”两部分,逐个将未排序元素插入到已排序部分的正确位置。 特点: 时间复杂度:平均 O(n),最优(已有序)O(n…...
家庭电脑隐身后台自动截屏软件,可远程查看
7-4 本文介绍一个小软件,可以在电脑后台运行,并且记录电脑的屏幕画面保存下来,并且可以远程提取查看。 可以用于记录长时间运行的软件的执行画面过程,或者用于记录家庭中小孩使用电脑的过程,如果没有好好上网课&…...
【Agent】AI智能体评测基座AgentCLUE-General
note AgentCLUE-General将题目划分为“联网检索”、“数据分析”、“多模态理解”和“多场景组合”任务AgentCLUE-General为每个题目都提供一个标准答案,将Agent智能体的答案与标准答案进行规则匹配判断对错 文章目录 note一、任务划分和场景划分二、答案提取的pro…...
最新iOS性能测试方法与教程
一、工具instrument介绍 使用Xcode的instrument进行测试,instrument自带了很多性能方面的测试工具,如图所示: 二、常见性能测试内容 不管是安卓还是iOS的性能测试,常见的性能测试都要包含这五个方面: 1、内存ÿ…...
多模态大语言模型arxiv论文略读(三十)
Mastering Text-to-Image Diffusion: Recaptioning, Planning, and Generating with Multimodal LLMs ➡️ 论文标题:Mastering Text-to-Image Diffusion: Recaptioning, Planning, and Generating with Multimodal LLMs ➡️ 论文作者:Ling Yang, Zhao…...
【AI论文】CLIMB:基于聚类的迭代数据混合自举语言模型预训练
摘要:预训练数据集通常是从网络内容中收集的,缺乏固有的领域划分。 例如,像 Common Crawl 这样广泛使用的数据集并不包含明确的领域标签,而手动整理标记数据集(如 The Pile)则是一项劳动密集型工作。 因此&…...
AI大模型发展现状与MCP协议诞生的技术演进
1. 大模型能力边界与用户痛点(2023年) 代表模型:GPT-4(OpenAI)、Claude 3(Anthropic)、通义千问(阿里云)等展现出强大的生成能力,但存在明显局限:…...
从malloc到free:动态内存管理全解析
1.为什么要有动态内存管理 我们已经掌握的内存开辟方法有: int main() {int val 20;//在栈空间上开辟四个字节char arr[20] { 0 };//在栈空间上开辟10个字节的连续空间return 0; }上述开辟的内存空间有两个特点: 1.空间开辟的时候大小已经固定 2.数组…...
CSS值和单位
CSS值和单位 CSS 中的值和单位是构建样式的基础,它们定义了属性的具体表现方式。值用于定义样式属性的具体取值,而单位用于指定这些值的度量方式。CSS中常用的值和单位如下: 1.长度单位 px : 像素,绝对单位 em : 相对于元素的字…...
Redis高级篇之I/O多路复用的引入解析
文章目录 一、问题背景1. 高并发连接的管理2. 避免阻塞和延迟3. 减少上下文切换开销4. 高效的事件通知机制5. 简化编程模型6. 低延迟响应本章小节 二、I/O多路复用高性能的本质1. 避免无意义的轮询:O(1) 事件检测2. 非阻塞 I/O 零拷贝:最大化 CPU 利用率…...
FTP协议命令和响应码
文章目录 📦 一、什么是 FTP 协议?🧾 二、FTP 常见命令(客户端发送)📡 三、FTP 响应码(服务端返回)📌 响应码分类(第一位)✅ 常见成功响应码&…...
在win上安装Ubuntu安装Anaconda(linx环境)
一,安装Ubuntu 1. 在 Microsoft 商城去下载Ubuntu(LTS:是长期维护的版本) 2.安装完之后启动程序,再重新打开一个黑窗口: wsl --list --verbose 3.关闭Ubuntu wsl --shutdown Ubuntu-22.04 WSL2 Ubuntu-20.04文件太占c盘空间,…...
【Elasticsearch入门到落地】11、RestClient初始化索引库
接上篇《10、初始化RestClient》 上一篇我们已经完成了RestHighLevelClient的初始化工作,本篇将正式进入索引库的创建阶段。我们将使用Java代码来创建酒店数据的索引库。 一、准备工作 1. 创建常量类 首先,我们需要定义一个常量类来存放索引库的mappi…...
远程服务调用的一些注意事项
引言 最近工作中,遇到了一些关于远程服务调用的问题,背景是调用三方接口获取某些特征数据,但由于调用出现了超时,导致业务本身的接口的可用行降低。因此整理一些远程服务调用时的注意事项,通过不同维度的考虑来提高系…...
QML 样式库
在 QML 中,样式库(或 UI 框架)用于快速构建一致且美观的界面。Qt/QML 本身不提供内置的完整样式库,但可以通过以下方式实现样式管理或使用第三方库。 1. Qt Quick Controls 2 样式系统 Qt Quick Controls 2 是官方提供的 UI 组件…...
[RHEL8] 指定rpm软件包的更高版本模块流
背景:挂载RHEL ISO使用kickstart安装操作系统,安装包未指定安装perl,但是安装完可以查到其版本,且安装的是ISO中多个版本中的最低版本。 原因:(1)为什么没有装perl,perl -v可以看到版…...
使用Python可视化洛伦兹变换
引言 大家好!今天我们将探讨一个非常有趣且重要的物理概念—洛伦兹变换。它是相对论的核心内容之一,描述了在高速运动下,时间、长度以及其他物理量是如何发生变化的。通过使用 Python 进行可视化,我们不仅可以更好地理解这个概念,还能感受到物理世界中的奇妙之处。 什么…...
【二叉树专题】一道深入浅出的 DFS 题:求二叉树的直径(含通俗易懂讲解)
题目: 给你一棵二叉树的根节点,返回这棵树的 直径。 直径 是任意两个节点路径中,最长的一条路径所经过的边数。 比如下面这棵树: 1/ \2 3/ \ 4 5它的最长路径是:4 → 2 → 5 或者 4 → 2 → 1 → 3,…...
考研系列-计算机网络-第三章、数据链路层
一、数据链路层的功能 1.知识点总结 2.习题总结...
医药采购系统平台第10天02:按药品分类的统计按供货商统计按医院统计统计数据的导出DWR的配置和应用
如果想要获取相关的源码,笔记,和相关工具,对项目需求的二次开发,可以关注我并私信!!! 一 按药品分类的统计实现 1 按药品分类统计的需求 按药品统计:在指定时间段中采购量、采购金…...
Navicat、DataGrip、DBeaver在渲染 BOOLEAN 类型字段时的一种特殊“视觉风格”
文章目录 前言✅ 为什么 Boolean 字段显示为 [ ]?✅ 如何验证实际数据类型?✅ 小结 前言 看到的 deleted: [ ] 并不是 Prisma 的问题,而是数据库客户端(如 Navicat、DataGrip、DBeaver)在渲染 BOOLEAN 类型字段时的一种…...
(undone) 吴恩达版提示词工程 2. 指南
url: https://www.bilibili.com/video/BV1Z14y1Z7LJ?spm_id_from333.788.videopod.episodes&vd_source7a1a0bc74158c6993c7355c5490fc600&p2 别人的笔记 url: https://zhuanlan.zhihu.com/p/626966526 指导原则(Guidelines) 编写提示词有两个…...
VLC搭建本机的rtsp直播推流和拉流
媒体---流---捕获设备,选择摄像头,点击串流 x下一步 选择rtsp,点击添加 看到了端口,并设置路径: 选择Video -H 264 mp3(TS) 点击下一个, 点击流,就开始推流了 拉流,观看端&#x…...
Rocky Linux 9.1 修改网卡和DNS
在 Rocky Linux 9.1 中修改网卡和 DNS 配置可以通过 NetworkManager 工具实现(推荐)或直接编辑配置文件。以下是两种方法的详细步骤: 方法一:使用 nmcli 命令行工具(动态生效) 查看当前网络连接nmcli connection show # 输出示例: # NAME UUID …...
Web前端:常用的布局属性
常见的布局方式有哪些? float:浮动布局 position 定位布局 flex 弹性布局(display) table 表格布局(弃用) 一、HTML5 语义化布局标签 这些标签本身不提供布局能力,但能增强页面结构…...
XSS学习2
一、客户端的Cookie 1. 无状态的影响 无状态问题: HTTP协议的无状态特性导致每次请求都是独立的,无法保持会话。例如,在银行办理业务时,柜员不需要重复询问客户信息,但在计算机网络中,每次HTTP请求都需要重新认证用户…...
软件设计师/系统架构师---计算机网络
概要 什么是计算机网络? 计算机网络是指将多台计算机和其他设备通过通信线路互联,以便共享资源和信息的系统。计算机网络可以有不同的规模,从家庭网络到全球互联网。它们可以通过有线(如以太网)或无线(如W…...
Kubernetes(k8s)学习笔记(二)--k8s 集群安装
1、kubeadm kubeadm 是官方社区推出的一个用于快速部署 kubernetes 集群的工具。这个工具能通过两条指令完成一个 kubernetes 集群的部署: 1.1 创建一个 Master 节点$ kubeadm init 1.2 将一个 Node 节点加入到当前集群中$ kubeadm join <Master 节点的 IP 和…...
线性DP:最长上升子序列(子序列可不连续,子数组必须连续)
目录 Q1:简单遍历 Q2:变式(加大数据量) Q1:简单遍历 Dp问题 状态表示 f(i,j) 集合所有以第i个数结尾的上升子序列集合-f(i,j)的值存的是什么序列长度最大值max- 状态计算 (其实质是集合的划分)…...
SpringBoot 基本原理
SpringBoot 为我们做的自动配置,确实方便快捷,但一直搞不明白它的内部启动原理,这次就来一步步解开 SpringBoot 的神秘面纱,让它不再神秘。 目录 SpringBootApplication 背后的秘密 Configuration ComponentScan EnableAutoC…...
LeetCode第158题_用Read4读取N个字符 II
LeetCode 第158题:用Read4读取N个字符 II 题目描述 给你一个文件,并且该文件只能通过给定的 read4 方法来读取,请实现一个方法来读取 n 个字符。 read4 方法: API read4 可以从文件中读取 4 个连续的字符,并且将它…...
webgl入门实例-矩阵在图形学中的作用
矩阵在图形学中扮演着核心角色,几乎所有图形变换、投影和空间转换都依赖矩阵运算来实现高效计算。以下是矩阵在图形学中的主要作用及具体应用: 1. 几何变换 矩阵乘法可以高效表示物体的平移、旋转、缩放等基本变换,并通过矩阵连乘实现复合变…...