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

mysql知识总结 基础篇

Mysql知识总结

    • 1. 执行一条sql语句 期间发生了什么?
      • 1. 如何查看mysql服务被多少个客户端链接了
      • 2. 空闲链接会一直闲置嘛?
      • 3. mysql的链接数量有限制嘛?
      • 4. 我们如何知道mysql要使用哪个索引
      • 5. 什么是覆盖索引
    • 2. MySQL 一行记录是怎么存储的?
      • 1. mysql的数据存储放在哪个文件?
      • 2. 表结构的空间是什么样的
      • 3. innodb的默认行格式 是什么
      • 4. 记录格外的数据
      • 5. 记录真实的数据
      • 6. varchar(n)中的n最大取值
      • 7. 行溢出后 mysql是如何处理的

本文是阅读 小林coding 后的读书笔记

原文可以点击上面超链接到达

也可以直接百度搜索 小林coding

1. 执行一条sql语句 期间发生了什么?

这道题目其实问的就是mysql的执行流程嘛

在这里插入图片描述

我们可以看到mysql分为两层嘛 一个是server层 一个是存储引擎层

server层复杂负责链接以及sql语句的分析 执行

存储引擎层负责数据的存储和提取

下面我们一步步来看它是怎么执行的嘛

第一步 建立链接

首先第一步是链接 我们mysql的客户端输入账号密码会链接mysql的服务器嘛 它底层是基于tcp协议 如果链接失败就会报错的

然后如果账号密码都没有问题 mysql就会保存它的权限并且管理起来 后续用户进行的任何操作都会基于该保存的权限进行操作

总结下连接器的工作

  1. 和客户端三次握手建立链接
  2. 验证账号密码是否正确
  3. 读取用户的权限 并且后续操作都基于此权限

第二步 查询缓存

之后第二步就是查询缓存 查询缓存实际上就是分析下当前的sql语句 看啊可能之前有没有执行过 如果执行过把缓存的数据返回给连接器 之后返回给客户端嘛

但是这个操作实际上是很鸡肋的 缓存要在多次使用同一条语句的时候才会有比较大的作用

但是一旦表进行了更新操作 这个缓存就会被清楚 相当于缓存了个寂寞

所以说mysql的8.0版本直接将这一步给删除掉了

对于之前的版本 我们也可以通过设置参数来解决这个问题

第三步 解析sql

在正式执行sql语句之前 解析器会对于sql语句进行解析 包括语法分析 然后词法分析

词法分析就是将其中的关键字和非关键字提取出来嘛

语法分析就是分析你这个sql语句是否符合sql语法嘛 如果符合的话 就会简历一个语法树

如果我们的sql语句不对 就会在这个阶段报错

第四步 执行sql

它分为预处理 优化 执行

预处理器

预处理阶段会做两件事

  1. 判断我们要查询的表是否存在
  2. 把 * 替换为表中的各列

优化器

优化器的主要作用就是将sql语句的执行计划确定下来 比如说表里面有多个索引 然后它会确定用哪个索引

执行器

执行器执行的时候会和存储引擎交互 从存储引擎读取数据返回给连接器

1. 如何查看mysql服务被多少个客户端链接了

我们可以使用show processlist来查看 mysql服务被多少个客户端链接了

2. 空闲链接会一直闲置嘛?

不会 我们有一个参数 show variables like 'wait_timeout'; 来查看空闲时间 如果超过了这个时间就会被断开链接

如何修改这个参数

  1. SET SESSION wait_timeout = 600;
  2. SET GLOBAL wait_timeout = 600;
  3. 永久修改的话 可以修改配置文件

3. mysql的链接数量有限制嘛?

有的 我们可以使用 show variables like 'max_connections'; 来查看这些链接数量闲置

mysql和http一样 也有长短链接的概念 区别如下 我们使用长连接可以减少过程中链接和断开的过程

但是我们维护长连接也会消耗一定的资源嘛 所以说我们也要想办法去解决这个问题嘛

解决问题的方式有两种

  1. 定期的去断开链接
  2. 客户端自己主动重制链接 调用 mysql_reset_connection()

4. 我们如何知道mysql要使用哪个索引

我们可以使用 explain 加在一条sql语句之前 来查看sql语句使用了什么索引嘛

它里面有一行是key 如果是null则说明无任何索引 如果是primary则是主键

在这里插入图片描述

如果说我们一条查询语句有两个索引 那么编译器就会选择最佳的索引

5. 什么是覆盖索引

覆盖索引是指表中包含了查找所需要的所有字段 不需要再回表查询了

2. MySQL 一行记录是怎么存储的?

1. mysql的数据存储放在哪个文件?

mysql的数据自然是保存在磁盘中嘛 关于具体保存在哪里 这个要根据存储引擎来区分

以为innob为例 我们每创建一个database数据库 他就会创建一个名叫datebase的文件

我们每创建一个表 实际上就是再datebase目录中再创建一个文件(表名)

当我们进入这个目录的时候我们会发现里面有三个文件

分别是

  1. db.opt
  2. name.frm
  3. name.idb

其中opt文件用来存储默认字符集和校验规则

frm文件用来保存表结构的元数据

而文件的表数据则会保存在 ibd 文件中

2. 表结构的空间是什么样的

表结构的空间如下

在这里插入图片描述

表由许多段组成 段由许多区组成 区由许多页组成 页里面有许多行数据

我们的每条记录就是一行 每行记录根据不同的格式有不同的存储结构

虽然说我们的存储是根据行来存储的 但是如果根据行读取的话效率就太低了 所以说innodb数据是根据页来存储的 页的大小有16kb

页是管理的最小单元 也就是说每次最少从磁盘中读取16kb的数据

我们都知道innodb是用b+数来组织存储数据的

B+树的每一层都是通过双向链表链接起来的 如果以页来分配单位的话 那么两个相邻的页的物理位置不是连续的 可能会离得非常远 那么磁盘查询的时候可能就会有大量的随机IO 而随机IO是非常慢的

如何解决这个问题呢? 很简单 让他们的物理空间也连续就好了

所以说当表中数据量很大的时候 就不以页来分配单位了 而是按照区来分配单位 区的大小是1mb左右 大概能容纳64个页

表空间是由段组成的 而段由多个区组成 段一般分为下面几个部分

  1. 索引段 存放B+树非叶子节点的区的集合
  2. 数据段 存放B+树叶子节点的区的集合
  3. 回滚段 存放的是回滚数据的区的集合

3. innodb的默认行格式 是什么

innodb的默认行格式为 compact

在这里插入图片描述

我们可以看到 一条记录可以分为两个部分 记录额外的信息和记录真实的数据

4. 记录格外的数据

记录额外的信息

我们首先来看记录额外的信息 它分为三个部分

  1. 变长字段长度列表

我们存储数据的时候 需要把这个数据存储的大小给存起来放到变长字段长度列表里面 读取数据的时候才能根据这个变长字段长度列表去读取对应长度的数据

假设我们有这三条记录

其中name和phone是变长字段 长度为11

在这里插入图片描述

接下来我们分别看他们是如何存储的

name的真实数据大小是1 phone的真实数据大小是3

在这里插入图片描述
他们是按照逆序存放的 这里涉及到一个mysql调优的问题 在下面

行2和行1类似

行3和行1的区别主要是phone值是none null是不会存放在行格式记录的真实数据里面 所以变长字段里面也不会有(置0处理)

mysql调优

msql 有一种潜规则优化,就是靠前的字段有更好的访问性能。

这是mysql对于用户使用策略的一种假设,就是假设用户会更频繁的使用靠前的字段。并且这种策略更符合人的直觉。

优化手段有很多,我这里介绍一种,对于变长字段长度的反向存储优化

在一个行里面变长资源是反向存储的 因为这样更容易让这些数据和对应的真实数据同时存放在一个cpu cauch line中 这样子可以提高cpu canch的命中率

设计库函数是有艺术成分在里面的。
因为有很多trade off的事情需要考虑。

就好比操作系统设计内存分配的页表管理有很多种策略,先进先出还是先进后出等等。
这种行为比较重要的可以通过统计数据来得出。

比较轻度的可以基于一种假设去设计。只要这种假设是符合直觉的,一般都是合理的

再好的库函数,也会在面临不同策略下有不同的优势。
库函数sort再快,你针对单独case优化也可能超过库函数

每个数据库的行格式 都有变长数据列表嘛

不是的 假如说我们没有变长字段的话行格式里面就不会有了

  1. Null值列表

表中的某些列可能会存储NULL值 如果把这些NULL值都放到记录真实数据中会比较浪费空间 (其实Linux中的很多地方也用到了这种涉及 存在和不存在只需要一个位就可以)

如果存在NULL值 则每个列对应一个二进制比特位 按照顺序逆序存放

在这里插入图片描述

每个数据库的行格式都必须要有NULL值列表嘛

NULL值不是必须的 当数据表的字段都定义成NOT NULL的时候 可以至少节省1字节的空间

NULL值列表是固定一字节嘛 如果有一条记录有九条记录没有设置为not null呢?

如果有九条记录的话就null这一字段就对应为2个字节 以此类推

  1. 记录头信息

记录头信息中的内容很多 这里列举几个

  1. delete_mask 表示这条数据是否被删除 我们删除一条数据的时候 并不会真正的删除记录 而是会将这个记录的delete_mask标记为1
  2. next_record 下一条记录的位置

5. 记录真实的数据

在这里插入图片描述

我们可以看到 记录真实数据中 除了我们定义的字段 还有额外的三个字段

  1. row_id

如果说我们没有定义主键或者唯一约束列 那么innode引擎就会生成row_id列

这个列不是必须的 大小为6个字节

  1. trx_id

表示事务的id 表示数据是由哪个事务生成的 它是必须的 占用六个字节

  1. roll_pointer

记录指向上一个版本的指针 大小为7个字节

6. varchar(n)中的n最大取值

这里我们要知道一个概念 除了隐藏列和记录投信息列之外 所有列加起来不超过65535字节

知道了这个前提之后我们再去推算 varchar(n)中n的最大取值

前面我们知道了一行记录最大的存储值是65535字节 那么我们使用varchar(65535) 是否可以创建成功呢?

答案是否定的

在这里插入图片描述

因为我们这里还有两个列的长度没有进行计算

  1. 变长字段长度列表
  2. null值列表

变长字段列表 当允许存储的列表小于255字节 用一个字节表示 大于255用2个字节表示

null值列表占用空间为1字节 变长字段长度列表为2字节 所以说实际上最大的大小为65532字节

7. 行溢出后 mysql是如何处理的

我们知道mysql中交互的基本单位是页 页的大小是16kb 而65535字节是大于16kb的

这个时候一个页存储不了一行的记录 此时就会发生行溢出

当发生溢出的时候在记录真实数据处会保存该列的一部分数据 并且用20字节指向溢出页

在这里插入图片描述

相关文章:

mysql知识总结 基础篇

Mysql知识总结 1. 执行一条sql语句 期间发生了什么?1. 如何查看mysql服务被多少个客户端链接了2. 空闲链接会一直闲置嘛?3. mysql的链接数量有限制嘛?4. 我们如何知道mysql要使用哪个索引5. 什么是覆盖索引 2. MySQL 一行记录是怎么存储的&am…...

基于条码数据生成校验密码的C++实现方案

前言 在医疗试剂、工业产品等需要严格追踪管理的领域,条码系统常被用于标识产品信息。本文将详细介绍4种用C实现的条码密码生成算法,这些算法可以根据条码前11位数据生成2位校验密码(第9、10位),用于数据校验或简单防…...

前端工具方法整理

文章目录 1.在数组中找到匹配项,然后创建新对象2.对象转JSON字符串3.JSON字符串转JSON对象4.有个响应式对象,然后想清空所有属性5.判断参数不为空6.格式化字符串7.解析数组内容用逗号拼接 1.在数组中找到匹配项,然后创建新对象 const modifi…...

[数据结构]图krusakl算法实现

目录 Kruskal算法 Kruskal算法 我们要在连通图中去找生成树 连通图:在无向图中,若从顶点v1到顶点v2有路径,则称顶点v1与顶点v2是连通的。如果图中任意一对顶点都是连通的,则称此图为连通图。 生成树:一个连通图的最小…...

18-产品经理-跟踪进度

禅道是一个可以帮助产品经理跟踪研发进度的系统。通过禅道,产品经理可以从多个角度了解产品的研发状态。在仪表盘中,可以展示所有产品或单一产品的概况,包括需求、计划和发布数量,研发需求状态,Bug修复率和计划发布数。…...

华为机试—挑7

题目 你需要统计 1 到 n 之间与 7 有关的数字的个数。 与 7 有关的数字包括: 是 7 的倍数(如 7,14,21 等);包含数字 7(如 17,27,37,⋯ ,70,71,72,⋯等)。 示例 输入:20 输出:3 说…...

【区块链安全 | 第三十四篇】合约审计之重入漏洞

文章目录 概念漏洞代码代码审计攻击代码攻击过程总结示例修复建议审计思路 概念 以太坊的智能合约可以互相调用,也就是说,一个合约可以调用另一个合约的函数。除了外部账户,合约本身也可以持有以太币并进行转账。当合约接收到以太币时&#…...

Java虚拟机——JVM(Java Virtual Machine)解析一

1.JVM是什么? 1.1 JVM概念 Java Virtual Machine (JVM) 是JDK的核心组件之一,它使得 Java 程序能够在任何支持 JVM 的设备或操作系统上运行,而无需修改源代码 JDK是什么,JDK和JVM是什么关系?1.Java IDE(Integrated …...

【JVM】question

问题 JVM线程是用户态还是内核态 java线程在jdk1.2之前,是基于名为“绿色线程”的用户线程实现的,这导致绿色线程只能同主线程共享CPU分片,从而无法利用多核CPU的优势。 由于绿色线程和原生线程比起来在使用时有一些限制, jdk1.2…...

页面编辑器CodeMirror初始化不显示行号或文本内容

延迟刷新 本来想延迟100毫秒的,但是会出现样式向左偏移的情况,于是试了试500毫秒,发现就没有问题了,可能是样式什么是需要一个加载过程吧。 useEffect(() > {editorRef.current?.setValue(value || );setTimeout(() > {edi…...

顺序表——C语言实现

目录 一、线性表 二、顺序表 1.实现动态顺序表 SeqList.h SeqList.c Test.c 问题 经验:free 出问题,2种可能性 解决问题 (2)尾删 (3)头插,头删 (4)在 pos 位…...

OpenCV 图形API(21)逐像素操作

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在OpenCV的G-API模块中,逐像素操作指的是对图像中的每个像素单独进行处理的操作。这些操作可以通过G-API的计算图(Graph …...

车载联网终端4G汽车TBOX介绍定义与概述

汽车 TBOX(Telematics Box)是专为汽车设计的远程通信终端设备,属于车联网系统的关键组成部分。车联网系统一般包含主机、汽车 T - BOX、手机 APP 及后台系统。融合了车身网络和 4G 无线通信技术,为汽车提供丰富的 Telematics 服务…...

CentOS无法安装Vim文本编辑器问题以及解决方法

1.问题一:用户权限不够 解决方法一:切换到root用户 解决方法二:给本用户添加权限 2.问题二:镜像源问题:官方镜像源可能已经失效 解决方法: 1. 检查网络连接 2. 检查和配置 DNS 3. 更换镜像源&#…...

Kettle如何与应用集成

Kettle(Pentaho Data Integration,PDI)可以通过多种方式与应用程序集成,以下是7种主流方法及具体实现示例: 一、命令行调用(最基础) # 执行转换(Transformation) ./pan.…...

Pytorch torch.nn.utils.rnn.pad_sequence 介绍

torch.nn.utils.rnn.pad_sequence 是 PyTorch 中一个用于填充序列的实用函数,它主要用于处理长度不一的序列数据,将这些序列填充到相同的长度,以便能将它们组合成一个批量(batch)输入到神经网络中。以下是详细介绍&…...

4.7正则表达式

1.字符匹配 一般字符匹配自身. 匹配任意字符(换行符\n除外),一个点占一位\转义字符,使其后一个字符改变原来的意思(\.就是.)[......]字符集,对应的位置可以是字符集中的任意字符.字符集中的字符可以逐个列出,也可以给出范围如[abc]或[a-c] [^abc] 表示取反&#xf…...

CogPatInspectTool工具

CogPatInspectTool是康耐视中的一种模板比对的视觉检测工具,主要用于产品不良检测。其核心功能是通过将输入图像与预先训练好的模板进行对比,识别出两者之间的差异,并生成高亮差异图,从而判断产品是否存在缺陷。 效果图 CogPatIn…...

牛客周赛 + 洛谷刷题

秘藏 #include<bits/stdc.h> using namespace std; typedef long long ll; const int N 200010; ll a[N], b[N]; int n, k; ll dp[2][N];//dp[i][j]是在i界中取了j之前的最大值 int main(){ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);cin >> n >&…...

【数据结构】图论存储革新:十字链表双链设计高效解决有向图入度查询难题

十字链表 导读一、邻接表的优缺点二、十字链表2.1 结点结构2.2 原理解释2.2.1 顶点表2.2.2 边结点2.2.3 十字链表 三、存储结构四、算法评价4.1 时间复杂度4.2 空间复杂度 五、优势与劣势5.1 优势5.2 劣势5.3 特点 结语 导读 大家好&#xff0c;很高兴又和大家见面啦&#xff…...

【JavaScript】十五、事件对象与环境对象

文章目录 1、事件对象1.1 获取事件对象1.2 常用属性1.3 案例&#xff1a;回车发布评论 2、环境对象this3、回调函数4、案例&#xff1a;tab切换5、案例&#xff1a;全选文本框&#x1f4d6; 1、事件对象 事件对象&#xff1a; 也是个对象&#xff0c;object&#xff0c;里面存…...

OJ--第N个泰波那契数列

1137. 第 N 个泰波那契数 - 力扣&#xff08;LeetCode&#xff09; 1 题干部分 2 拆解 1 状态表示&#xff1a;dp[i] 2 状态转移方程:dp[i]dp[i-1]dp[i-2]dp[i-3] 3 初始化:让dp[0]0,dp[1]dp[2]1 4 填表顺序:从dp[3]开始填从左往右填 5 返回值&#xff1a;dp[n]即为返回的…...

Python从入门到高手8.1节-元组类型详解

目录 8.1.1 理解元组类型 8.1.2 元组的类型名 8.1.3 元组的定义 8.1.4 元组的解包 8.1.5 元组是可迭代的 8.1.6 假期就这么结束了 8.1.1 理解元组类型 元组与列表有着相同的数据结构&#xff0c;区别在于&#xff0c;元组是不可变的数据类型&#xff0c;而列表是可变的数…...

使用 Qt 和 OBS 工具检测系统硬件编码器支持情况(NVENC、QSV、AMF)

在开发涉及视频处理的软件时,判断系统是否支持硬件加速编码器(如 NVIDIA NVENC、Intel QSV、AMD AMF)对于性能优化至关重要。本文将介绍如何结合 Qt 与 OBS Studio 附带的小工具程序,实现一个完整、异步且不会卡住 UI 的硬件加速检测模块。 一、背景与目标 硬件加速编码器…...

Python爬虫生成CSV文件的完整流程

引言 在当今数据驱动的时代&#xff0c;网络爬虫已成为获取互联网数据的重要工具。Python凭借其丰富的库生态系统和简洁的语法&#xff0c;成为了爬虫开发的首选语言。本文将详细介绍使用Python爬虫从网页抓取数据并生成CSV文件的完整流程&#xff0c;包括环境准备、网页请求、…...

图论:多源最短路

多源最短路 B3647 【模板】Floyd - 洛谷 #include<iostream> #include<cstring> using namespace std;const int N 110; int f[N][N]; int n, m;int main() {memset(f, 0x3f, sizeof(f));//对于重边的处理取较小值&#xff0c;所以要把全部都初始化成无穷大&…...

2024年已备案大模型发展趋势分析

2024年已备案大模型发展趋势分析 随着生成式人工智能技术的快速发展,其在各个领域的应用逐渐深入。为了规范和促进生成式人工智能服务的健康发展,国家互联网信息办公室发布了《生成式人工智能服务已备案信息》。本文将基于已备案信息,分析生成式人工智能服务的发展趋势,并…...

spring功能汇总

1.创建一个dao接口&#xff0c;实现类&#xff1b;service接口&#xff0c;实现类并且service里用new创建对象方式调用dao的方法 2.使用spring分别获取dao和service对象(IOC) 注意 2中的service里面获取dao的对象方式不用new的(DI) 运行测试&#xff1a; 使用1的方式创建servic…...

Transformer - Feed Forward前馈网络

一、数学原理 1. 前馈神经网络公式 2. Dropout公式 二、代码实现 import math import torchimport torch.nn as nnclass FeedForward(nn.Module):def __init__(self, d_model, dff, dropout):super().__init__()self.W1 nn.Linear(d_model, dff)self.W2 nn.Linear(dff, d_mo…...

Compose Multiplatform+Kotlin Multiplatfrom 第五弹跨平台 截图

截图功能 Compose MultiplatformKotlin Multiplatfrom下实现桌面端的截图功能&#xff0c;起码搞了两星期&#xff0c;最后终于做出来了&#xff0c;操作都很流畅&#xff0c;截取的文件大小也正常&#xff0c;可参考支持讨论&#xff01; 功能效果 代码实现 //在jvmMain下创…...

算法题(119):高精度减法

审题&#xff1a; 本题高精度减法主要是要区分正负号&#xff0c;然后进行模拟 思路&#xff1a; 方法一&#xff1a;模拟法 首先本题需要我们利用字符串进行大数相减 第一步&#xff1a;区分s1和s2谁更大 先从数的位数进行判断&#xff0c;然后再从高到低的位数进行判断 第二步…...

使用成员函数指针数组简化C++类中的操作

使用成员函数指针数组简化C类中的操作 在C编程中&#xff0c;我们常常会遇到需要对一组相似的操作进行处理的情况。例如&#xff0c;在一个游戏引擎中&#xff0c;你可能希望角色能够执行一系列的动作&#xff0c;如行走、跳跃或攻击等。为了简化这些操作的管理和调用&#xf…...

WebGL数学手记:矩阵基础

一、矩阵的定义 矩阵&#xff0c;数学术语。在数学中&#xff0c;矩阵&#xff08;Matrix&#xff09;是一个按照长方阵列排列的复数或实数集合。 1.英文发音&#xff08;Matrix&#xff09; Matrix的发音类似于中文的[美吹克斯]&#xff0c;知道它的发音。方便后期看教程时…...

Python爬取数据(二)

一.example2包下的 1.re模块的compile函数使用 import repatternre.compile(r\d) print(pattern) 2.match的方法使用 import re patternre.compile(r\d) # m1pattern.match(one123twothree345four) #参数2&#xff1a;指定起始位置(包含),参数3&#xff1a;终止位置(包含),…...

我的NISP二级之路-01

目录 一.SSE-CMM系统安全工程-能力成熟度模型(Systems Security Engineering - Capability Maturity Model) 二.ISMS 即信息安全管理体系(Information Security Management System),是一种基于风险管理的、系统化的管理体系 三.Kerberos协议 1. 用户登录与 AS 请求 2…...

自制简易 Shell:像搭建积木小屋一样打造命令交互小天地

目录 准备工作&#xff1a;搭建小屋的材料 打造小屋的 “身份牌” 接收指令&#xff1a;小屋的 “对讲机” 拆解指令&#xff1a;把大任务拆成小积木 执行指令&#xff1a;小屋的 “行动队” 特殊指令&#xff1a;小屋的 “特色功能” 小屋的日常运转 完整代码 啥是 …...

WEB安全--内网渗透--利用Net-NTLMv2 Hash

一、前言 在前两篇文章中分析了NTLM协议中Net-NTLMv2 Hash的生成、如何捕获Net-NTLMv2 Hash&#xff0c;现在就来探讨一下在内网环境中&#xff0c;如何利用Net-NTLMv2 Hash进行渗透。 二、Net-NTLM Hash的破解 工具&#xff1a;hashcat 原理&#xff1a;利用其内部的字典对…...

MySQL 数据库操作指南:从数据库创建到数据操作

关键词&#xff1a;MySQL&#xff1b;数据库操作&#xff1b;DDL&#xff1b;DML 一、引言 MySQL 作为广泛应用的关系型数据库管理系统&#xff0c;对于开发人员和数据库管理员而言&#xff0c;熟练掌握其操作至关重要。本文章通过一系列 SQL 示例&#xff0c;详细阐述 MySQL…...

从传递函数到PID控制器

在过程控制中&#xff0c;按偏差的比例&#xff08;P&#xff0c;Proportional&#xff09;、积分&#xff08;I&#xff0c;Integral&#xff09;和微分&#xff08;D&#xff0c;Differential&#xff09;进行控制的PID控制器&#xff08;亦称PID调节器&#xff09;是应用最为…...

抓wifi无线空口包之Ubuntu抓包(二)

一、设置网卡信道和频段&#xff0c;并抓包 1、使用iwconfig查看自己机器的无线网卡名称 wangwang-ThinkCentre-M930t-N000:~$ iwconfig lo no wireless extensions. eno1 no wireless extensions. enxc8a3624ab329 no wireless extensions. wlx90de80d1b5b1 IE…...

使用protobuf编译提示无法打开包括文件: ‘absl/log/absl_log.h’: No such file or directory

问题原因 Protobuf 依赖 Abseil&#xff1a; Protobuf 3.20 版本开始依赖 Abseil&#xff0c;但你的系统未正确安装或配置 Abseil。 头文件路径未包含&#xff1a; 编译器找不到 absl/log/absl_log.h&#xff0c;可能是因为 Abseil 未正确安装或未在项目中设置包含路径。 …...

深入浅出Java 锁 | 源码剖析 | 万字解析

目录 硬件内存结构&Java内存模型 硬件内存结构 Java内存模型&#xff08;JMM&#xff09; JMM中三大特性&#xff1a;原子性、有序性、可见性 Java中有哪些锁&#xff1f; Java中锁可以分成悲观锁和乐观锁的实现。 乐观锁和悲观锁的区别&#xff0c;乐观锁一定好嘛&…...

java流程控制12:流程控制练习

流程控制练习 打印三角型 package com.zheng.struct;public class TestDemo {public static void main(String[] args) {//打印三角形 5行for(int i1;i<5;i){for(int j5;j>i;j--){System.out.print(" ");}for(int j1;j<i;j){System.out.print("*&quo…...

JAVA:ByteBuddy 动态字节码操作库的技术指南

1、简述 ByteBuddy 是一个功能强大的 Java 字节码操作库&#xff0c;可以帮助开发者在运行时动态生成和修改类&#xff0c;而无需直接接触复杂的 ASM API。它被广泛应用于框架开发、AOP&#xff08;面向切面编程&#xff09;、代理类生成、性能监控等领域。 2、ByteBuddy 的优…...

C语言学习记录(13)自定义类型:结构体

一、结构体变量的声明、创建和初始化 1.结构体变量的声明 结构体变量我们学操作符的时候就顺带讲了一点了&#xff0c;因为当时讲了结构体成员变量访问操作符.。 结构体变量不像int、float这种内置类型的&#xff0c;一旦创建&#xff0c;系统就知道这是干啥的&#xff0c;结…...

rtthread 软件SPI驱动, 支持mode0~3,MSB,LSB

rtthread的软件模拟SPI用的上层PIN驱动写&#xff0c;由于经过层层封装&#xff0c;时钟频率并不会太高&#xff0c;200MHz的MCU跑不到1MHz的时钟频率。所以最好是在底层就模拟好&#xff0c;给上层用。 头文件 struct io_poSOFT {gpio_type *port;uint16_t pin; }; typedef …...

C++自学笔记——动态创建对象

动态创建对象 1. 什么是动态创建对象&#xff1f; 在学习之前的知识点时&#xff0c;我们知道有静态存储期和自动存储期。 静态存储期的对象在程序的整个生命周期内都存在&#xff0c;全局变量和static修饰的局部变量都属于这一类。自动存储期的对象&#xff0c;这些对象在函…...

35.[前端开发-JavaScript基础]Day12-for循环中变量-华为商城-商品列表-轮播图

for循环中监听函数中打印变量 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"wi…...

详细描述以太坊的gas、gaslimit、gasPrice

目录 一、Gas 是什么? ✅ 简要定义: 🧠 举例理解: 二、Gas Limit 是什么? ✅ 简要定义: 分两种: 举例说明: 三、Gas Price 是什么? ✅ 简要定义: 为什么它重要? 示例: 四、 EIP-1559 后的新机制(伦敦升级) 三个要素: 五、额外技巧(开发实用) 本文…...

【Java】Maven

一、概念 是一个项目管理和构建工具&#xff0c;它基于项目对象模型&#xff08;POM&#xff09;的概念&#xff0c;通过一小段描述信息来管理项目的构建。 二、Maven坐标 <groupId>com.itheima</groupId><artifactId>maven-project01</artifactId>&…...