MySQL篇(一):慢查询定位及索引、B树相关知识详解
MySQL篇(一):慢查询定位及索引、B树相关知识详解
- MySQL篇(一):慢查询定位及索引、B树相关知识详解
- 一、MySQL中慢查询的定位
- (一)慢查询日志的开启
- (二)慢查询日志内容分析
- (三)慢查询分析工具
- (四)慢查询的常见原因
- 二、索引
- (一)索引的定义
- (二)索引的作用
- (三)索引的创建方式
- (四)索引的类型
- (五)索引的底层数据结构
- 三、B树和B+树的区别
- (一)节点数据存储
- (二)查询过程
- (三)范围查询支持
- (四)插入和删除操作
- (五)应用场景
MySQL篇(一):慢查询定位及索引、B树相关知识详解
一、MySQL中慢查询的定位
(一)慢查询日志的开启
在MySQL中,慢查询日志是定位慢查询的重要工具。
- 通过配置文件开启
- 编辑MySQL的配置文件(通常是
my.cnf
或my.ini
)。找到或添加以下配置:
[mysqld] slow_query_log = 1 slow_query_log_file = /var/lib/mysql/your_mysql_server_name-slow.log long_query_time = 2
- 这里
slow_query_log = 1
表示开启慢查询日志;slow_query_log_file
指定慢查询日志文件的路径和名称;long_query_time = 2
表示查询执行时间超过2秒的语句会被记录到慢查询日志中。修改配置文件后,需要重启MySQL服务使配置生效。
- 编辑MySQL的配置文件(通常是
- 动态开启(无需重启服务)
- 可以通过SQL语句动态开启慢查询日志:
SET GLOBAL slow_query_log = 'ON'; SET GLOBAL long_query_time = 2;
- 这种方式设置的参数,在MySQL服务重启后会失效。如果需要永久生效,还是建议修改配置文件。
(二)慢查询日志内容分析
慢查询日志记录了慢查询的详细信息,包括查询执行时间、查询语句、使用的数据库等。例如,慢查询日志中的一条记录可能如下:
# Time: 230915 15:30:45
# User@Host: root[root] @ localhost []
# Thread_id: 10 Schema: test QC_hit: No
# Query_time: 3.500000 Lock_time: 0.000000 Rows_sent: 10 Rows_examined: 1000
SET timestamp=1694700645;
SELECT * FROM user WHERE age > 30;
- Time:记录查询发生的时间。
- User@Host:执行查询的用户和主机信息。
- Query_time:查询执行的时间,单位是秒。
- Rows_examined:查询过程中扫描的行数,这个值越大,通常说明查询效率越低。
- 查询语句:具体的SQL查询语句。
(三)慢查询分析工具
- mysqldumpslow工具
mysqldumpslow
是MySQL自带的慢查询分析工具。例如,要查看慢查询日志中执行时间最长的10条查询:
mysqldumpslow -s t -t 10 /var/lib/mysql/your_mysql_server_name-slow.log
-s t
表示按照查询时间排序,-t 10
表示只显示前10条记录。- 还可以通过其他参数进行更复杂的分析,比如按照扫描行数排序:
mysqldumpslow -s r -t 10 /var/lib/mysql/your_mysql_server_name-slow.log
-s r
表示按照扫描行数排序。
- pt-query-digest工具(Percona Toolkit的一部分)
pt-query-digest
功能更强大,它可以对慢查询日志进行更深入的分析,生成详细的报告。首先需要安装Percona Toolkit:- 在Ubuntu系统上:
sudo apt-get install percona-toolkit
- 使用
pt-query-digest
分析慢查询日志:
pt-query-digest /var/lib/mysql/your_mysql_server_name-slow.log
- 它会输出查询的摘要信息,包括查询执行时间分布、查询模式、最耗时的查询等。例如,会显示类似以下的内容:
# Profile # Rank Query ID Response time Calls Rows Rows examine # ==== ================== ============== ====== ====== =========== # 1 0x1234567890abcdef 10.000000 1 10 1000 SELECT * FROM user WHERE age > 30;
(四)慢查询的常见原因
- 缺少索引
- 如果查询语句没有使用合适的索引,MySQL可能需要全表扫描。例如:
SELECT * FROM order WHERE customer_name = 'John';
- 如果
customer_name
字段没有索引,当order
表数据量很大时,查询会非常慢。此时可以为customer_name
字段创建索引:
CREATE INDEX idx_customer_name ON order (customer_name);
- 复杂的查询逻辑
- 包含大量的JOIN、子查询、聚合函数等复杂逻辑的查询可能会很慢。例如:
SELECT u.name, SUM(o.amount) FROM user u JOIN order o ON u.id = o.user_id GROUP BY u.name;
- 如果
user
表和order
表数据量都很大,且没有合适的索引,这个查询可能会很慢。可以优化JOIN条件,为关联字段创建索引,如为user.id
和order.user_id
创建索引。
- 锁等待
- 在事务环境下,长时间的锁等待也会导致查询变慢。例如,一个事务对某条记录加锁后,另一个查询需要等待锁释放。可以通过查看MySQL的锁状态相关视图(如
INFORMATION_SCHEMA.INNODB_LOCKS
)来分析锁等待问题。
- 在事务环境下,长时间的锁等待也会导致查询变慢。例如,一个事务对某条记录加锁后,另一个查询需要等待锁释放。可以通过查看MySQL的锁状态相关视图(如
二、索引
(一)索引的定义
索引是一种数据结构,用于快速查找数据库表中的记录。它就像一本书的目录,通过索引可以快速定位到需要的数据,而不需要遍历整个表。在MySQL中,索引存储在磁盘上(InnoDB引擎也会将常用索引加载到内存中),不同的存储引擎支持的索引类型有所不同。
(二)索引的作用
- 提高查询效率
- 最主要的作用是加快查询速度。例如,在有索引的情况下,查询语句
SELECT * FROM product WHERE price > 100;
可以通过索引快速定位到价格大于100的产品记录,而不是全表扫描。
- 最主要的作用是加快查询速度。例如,在有索引的情况下,查询语句
- 保证数据的唯一性
- 唯一索引可以确保表中某一列或几列的组合值是唯一的。例如,为
user
表的email
字段创建唯一索引:
CREATE UNIQUE INDEX idx_email ON user (email);
- 这样就可以保证
email
字段的值在表中是唯一的,避免重复数据。
- 唯一索引可以确保表中某一列或几列的组合值是唯一的。例如,为
- 支持JOIN操作
- 在JOIN操作中,索引可以加快表与表之间的关联速度。当两个表通过关联字段进行JOIN时,如果关联字段有索引,MySQL可以更高效地匹配记录。
(三)索引的创建方式
- 创建表时创建索引
- 在创建表的SQL语句中直接定义索引。例如:
CREATE TABLE student (id INT PRIMARY KEY,name VARCHAR(50),age INT,INDEX idx_age (age) );
- 这里
PRIMARY KEY
创建了主键索引,同时INDEX idx_age (age)
创建了一个普通的age
字段索引。
- 使用CREATE INDEX语句创建索引
- 对于已经存在的表,可以使用
CREATE INDEX
语句创建索引。例如:
CREATE INDEX idx_name ON student (name);
- 这会为
student
表的name
字段创建一个索引。
- 对于已经存在的表,可以使用
- 使用ALTER TABLE语句创建索引
- 也可以通过
ALTER TABLE
语句为表添加索引。例如:
ALTER TABLE student ADD INDEX idx_age_name (age, name);
- 这创建了一个组合索引,包含
age
和name
两个字段。
- 也可以通过
(四)索引的类型
- 普通索引(INDEX)
- 最基本的索引类型,没有任何限制。可以加速查询,但是不保证数据的唯一性。例如:
CREATE INDEX idx_city ON address (city);
- 唯一索引(UNIQUE INDEX)
- 保证索引列的值是唯一的。如前面提到的为
email
字段创建唯一索引。
CREATE UNIQUE INDEX idx_unique_email ON user (email);
- 保证索引列的值是唯一的。如前面提到的为
- 主键索引(PRIMARY KEY)
- 是一种特殊的唯一索引,用于标识表中的唯一记录。每个表只能有一个主键索引。在创建表时定义主键:
CREATE TABLE product (id INT PRIMARY KEY,product_name VARCHAR(100) );
- 组合索引(复合索引)
- 由多个字段组成的索引。例如,为
order
表的order_date
和customer_id
创建组合索引:
CREATE INDEX idx_order_date_customer_id ON order (order_date, customer_id);
- 使用组合索引时,需要注意索引的顺序。查询条件中使用索引字段的顺序要与创建索引时的顺序一致(遵循最左匹配原则),才能有效使用索引。
- 由多个字段组成的索引。例如,为
- 全文索引(FULLTEXT INDEX)
- 主要用于全文搜索,在MySQL中,InnoDB和MyISAM存储引擎都支持全文索引。例如,为
article
表的content
字段创建全文索引:
CREATE FULLTEXT INDEX idx_content ON article (content);
- 然后可以使用
MATCH AGAINST
语句进行全文搜索:
SELECT * FROM article WHERE MATCH(content) AGAINST('keyword' IN NATURAL LANGUAGE MODE);
- 主要用于全文搜索,在MySQL中,InnoDB和MyISAM存储引擎都支持全文索引。例如,为
(五)索引的底层数据结构
- 哈希表(Hash)
- 哈希索引通过哈希函数将索引值映射到哈希表中。它的优点是查询效率高,等值查询速度快。但是,哈希索引不支持范围查询,并且在数据量较大时可能会出现哈希冲突。MySQL中Memory存储引擎支持哈希索引。例如:
- 创建Memory表并使用哈希索引:
CREATE TABLE test_hash (id INT,value VARCHAR(50),INDEX USING HASH (id) ) ENGINE = MEMORY;
- B树和B+树
- B树
- B树是一种自平衡的树结构,它的每个节点可以包含多个键值对和子节点。B树的特点是能够在相对较少的磁盘I/O操作下完成查询。在B树中,每个节点中的键值是有序排列的,并且子节点的键值范围也与父节点的键值相关。例如,在一个存储整数的B树中,父节点的某个键值会作为左右子节点键值范围的分界点。
- 当进行查询时,从根节点开始,根据键值与节点中键值的比较,决定进入哪个子节点,直到找到目标键值或确定目标键值不存在。
- B+树
- B+树是B树的一种变形。与B树相比,B+树有以下特点:
- 节点数据:B+树的非叶子节点只存储键值,不存储数据记录,数据记录都存储在叶子节点中。而B树的非叶子节点既存储键值,也可能存储数据记录。
- 查询方式:B+树的查询必须到叶子节点才能找到数据记录,而B树在非叶子节点找到键值时就可能找到数据记录。
- 范围查询:B+树的叶子节点之间通过指针连接,形成一个有序的链表,这使得范围查询非常高效。例如,查询
WHERE age BETWEEN 20 AND 30
,在B+树上可以通过叶子节点的链表快速遍历范围内的记录。而B树在进行范围查询时相对复杂。
- 在MySQL的InnoDB存储引擎中,索引主要使用B+树结构。例如,聚簇索引(通常是主键索引)的叶子节点存储了完整的数据记录,而辅助索引(普通索引、唯一索引等)的叶子节点存储的是主键值,通过主键值再去聚簇索引中查找完整的数据记录。
- B+树是B树的一种变形。与B树相比,B+树有以下特点:
- B树
三、B树和B+树的区别
(一)节点数据存储
- B树
- B树的非叶子节点既存储键值,也可能存储数据记录。这意味着在B树中,找到某个键值时,可能在非叶子节点就已经找到对应的数据记录,不需要一直遍历到叶子节点。例如,在一个小型的B树中,根节点可能包含多个键值和少量的数据记录,当查询的键值正好在根节点时,就可以直接获取数据。
- B+树
- B+树的非叶子节点只存储键值,不存储数据记录。数据记录全部存储在叶子节点中。这样做的好处是,非叶子节点可以存储更多的键值,从而减少树的高度,降低磁盘I/O操作次数。例如,在一个大型的B+树中,非叶子节点专注于存储键值,形成更高效的索引结构,而叶子节点存储数据记录,并且通过指针连接,方便范围查询。
(二)查询过程
- B树
- 进行查询时,从根节点开始,比较键值与节点中的键值,决定进入哪个子节点。如果在非叶子节点找到目标键值,就可以直接获取数据记录,不需要继续遍历到叶子节点。这种查询方式在某些情况下可能会更快地获取数据,但也可能因为非叶子节点存储数据记录而导致节点空间利用不够高效。
- B+树
- 查询必须从根节点开始,一直遍历到叶子节点才能找到数据记录。虽然看起来查询路径可能更长,但由于B+树的非叶子节点存储更多键值,树的高度相对较低,整体的磁盘I/O次数可能更少。而且,B+树的叶子节点形成有序链表,对于范围查询和排序操作非常有利。
(三)范围查询支持
- B树
- B树对范围查询的支持相对较弱。因为B树的非叶子节点可能存储数据记录,且叶子节点之间没有直接的指针连接,在进行范围查询时,需要不断地回溯和遍历不同的子树,操作比较复杂,效率较低。
- B+树
- B+树的叶子节点通过指针连接成一个有序的链表,这使得范围查询非常高效。例如,查询
WHERE salary BETWEEN 5000 AND 10000
,在B+树上,只需要找到第一个满足条件的叶子节点,然后沿着链表依次遍历,就可以获取所有满足条件的记录,大大提高了范围查询的效率。
- B+树的叶子节点通过指针连接成一个有序的链表,这使得范围查询非常高效。例如,查询
(四)插入和删除操作
- B树
- B树在插入和删除操作时,需要维护树的平衡,操作相对复杂。当插入或删除一个键值时,可能会导致节点的分裂或合并,需要调整多个节点的键值和子节点关系。
- B+树
- B+树的插入和删除操作也需要维护树的平衡,但由于其结构特点,相对B树来说,操作可能更规则一些。例如,在插入操作中,B+树主要在叶子节点进行插入,非叶子节点的调整相对有规律;在删除操作中,也可以通过叶子节点的链表关系和非叶子节点的键值调整,更有效地维护树的平衡。
(五)应用场景
- B树
- 由于B树在某些特定场景下,非叶子节点存储数据记录可能会有一定优势,例如在一些小型数据库系统或对数据存储密度有特殊要求的场景中可能会使用B树。但总体来说,B树在数据库索引中的应用不如B+树广泛。
- B+树
- B+树非常适合用于数据库索引,尤其是在像MySQL的InnoDB存储引擎中。它的结构特点使得查询效率高,特别是对于范围查询和排序操作,能够很好地满足数据库的各种查询需求。无论是普通的单表查询,还是多表JOIN操作,B+树索引都能发挥重要作用。
通过以上对MySQL慢查询定位、索引以及B树和B+树区别的详细介绍,希望能帮助读者深入理解相关知识,在实际的数据库开发和优化中更好地应用这些内容。
相关文章:
MySQL篇(一):慢查询定位及索引、B树相关知识详解
MySQL篇(一):慢查询定位及索引、B树相关知识详解 MySQL篇(一):慢查询定位及索引、B树相关知识详解一、MySQL中慢查询的定位(一)慢查询日志的开启(二)慢查询日…...
QT之QML(简单示例)
需求一:点击按钮弹出菜单,并且自定义菜单弹出位置。 mouse.x 和 mouse.y 获取的是相对于 MouseArea(在这个例子中是 Button)左上角的局部坐标。如果你想要在鼠标点击位置显示 Menu,你需要将这个局部坐标转换为相对于应…...
自动化释放linux服务器内存脚本
脚本说明 使用Linux的Cron定时任务结合Shell脚本来实现自动化的内存释放。 脚本用到sync系统命令 sync的作用:sync 是一个 Linux 系统命令,用于将文件系统缓存中的数据强制写入磁盘。 在你执行reboot、poweroff、shutdown命令时,系统会默认执…...
Linux中的权限管理
一、权限的概念 在 Linux 系统的架构里,权限是构建安全堡垒的基石,精准界定了不同用户对文件与目录的操作边界,对系统安全的维护以及数据完整性的保障起着决定性作用。 1.权限的三种基础类别: 权限对文件的影响对目录的影响 读(r…...
Java对象与JSON字符串的互转
最近,工作中会涉及到Java对象与JSON字符串相互转换,虽然说并不难,但打算还是梳理一番,主要内容有: JSON 字符串 转 普通对象 普通对象 转 JSON 字符串 JSON 字符串数组 转 List 集合对象 List 集合对象 转 JSON 字符串…...
[笔记.AI]向量化
(借助 DeepSeek-V3 辅助生成) 向量化的定义 向量化(Vectorization) 是将文本、图像、音频等非结构化数据转换为高维数值向量(即一组数字)的过程。这些向量能够捕捉数据的语义、特征或上下文信息&#x…...
NSSCTF(MISC)—[justCTF 2020]pdf
相应的做题地址:https://www.nssctf.cn/problem/920 binwalk分离 解压文件2AE59A.zip mutool 得到一张图片 B5F31内容 B5FFD内容 转换成图片 justCTF{BytesAreNotRealWakeUpSheeple}...
Angular的理解
Angular 是一个由 Google 维护的全功能前端框架,适合构建复杂的企业级应用。它采用 TypeScript 作为首选语言,提供了一套完整的解决方案,包括数据绑定、依赖注入、路由、表单处理等。 1. Angular 的核心概念 1.1 组件化架构 Angular 应用由…...
广告推荐算法:COSMO算法与A9算法的对比
COSMO算法与A9算法的概念解析 1. A9算法 定义与背景: A9算法是亚马逊早期为电商平台研发的核心搜索算法,主要用于优化商品搜索结果的排序和推荐,其核心逻辑围绕产品属性与关键词匹配展开。自2003年推出以来,A9通过分析商品标题…...
10. 七大排序(含四种版本快排及优化) ******
排序算法时间复杂度(平均)时间复杂度(最坏)时间复杂度(最好)空间复杂度稳定性主要使用场景直接插入排序O(n)O(n)O(n)O(1)稳定小规模数据或基本有序数据希尔排序O(n^1.3)O(n)O(n log n)O(1)不稳定中等规模数据,对稳定性无要求选择排序O(n)O(n)O(n)O(1)不稳定小规模数…...
以下是C/C++后台开发常见的高概率面试题
一、语言基础 多态的实现 通过虚函数表(vtable)实现动态绑定,运行时根据对象类型调用对应的函数。虚函数通过virtual关键字声明,子类可重写基类虚函数112。 指针与引用的区别 指针是变量,存储地址,支持多…...
CentOS-查询实时报错日志-查询前1天业务报错gz压缩日志
最新版本更新 https://code.jiangjiesheng.cn/article/364?from=csdn 推荐 《高并发 & 微服务 & 性能调优实战案例100讲 源码下载》 1. 查询实时报错日志 物理路径(带*的放在靠后,或者不用*) cd /home/logs/java-gz-log-dir && tail -2000f java-gz-l…...
破界·共生:生成式人工智能(GAI)认证重构普通人的AI进化图谱
在当今这个科技日新月异的时代,人工智能(AI)正以惊人的速度改变着我们的世界。从智能家居到自动驾驶,从医疗诊断到金融分析,AI的应用已经渗透到社会生活的方方面面。面对如此迅猛的发展态势,我们不禁要问:人工智能的未来将走向何方?普通人又该如何把握这一历史机遇,学…...
HTTP代理:网页加速的隐形引擎
目录 引言:网页加载速度为何至关重要? 一、HTTP代理的核心加速原理 二、四大加速黑科技详解 三、实战场景性能对比 四、代理加速的隐藏代价 五、未来发展趋势 结语:智能代理的选型指南 引言:网页加载速度为何至关重要&#…...
Unity 常见报错 定位和查找方法
1.控制台 直接看报错信息 2.打log 例子: for(int i 0;i < 8;i) {Debug.Log(i);//这是打的log,看看到底i是几的时候出问题gameObject.name strs[i];} 3.断点调试 (1)在你想打断点的行,左边空白处点击可以打断点ÿ…...
人工智能之数学基础:初等反射阵
本文重点 在线性代数中,初等反射阵(Householder矩阵)作为一类特殊的正交矩阵,在矩阵变换、特征值计算及几何变换等领域具有广泛应用。其简洁的构造方式和丰富的数学性质,使其成为数值分析和几何处理中的重要工具。 什么是初等反射阵(豪斯霍尔德变换) I为单位矩阵,wwT…...
《Linux运维总结:基于银河麒麟V10操作系统+ARM64架构CPU二进制部署单机ACL版consul v1.18.1》
总结:整理不易,如果对你有帮助,可否点赞关注一下? 更多详细内容请参考:《Linux运维篇:Linux系统运维指南》 一、简介 1、什么是consul Consul是HashiCorp公司推出的开源工具,用于实现 分布式系统的服务发现与配置。 Consul是分布式的、高可用的、可横向扩展的。 架构图…...
web网站页面测试点---添加功能测试
添加 一、创建新的申请时,关闭网络查看数据是否存在,并提示网络错位相关提示语 二、在文本框内输入数据 1.在文本框内输入空格,查看文本内容前后是否存在空格 2.在文本框内输入最大长度,查看能否正确提交 3.在文本框内输入最大长…...
实操自动生成接口自动化测试用例
这期抽出来的问题是关于如何使用Eolinker自动生成接口自动化测试用例,也就是将API文档变更同步到测试用例,下面是流程的示例解析。 导入并关联API文档和自动化测试用例 首先是登陆Eolinker,可以直接在线使用。 进入流程测试用例详情页&am…...
【华为OD技术面试真题 - 技术面】- Java面试题(17)
华为OD面试真题精选 专栏:华为OD面试真题精选 目录: 2024华为OD面试手撕代码真题目录以及八股文真题目录 文章目录 华为OD面试真题精选虚拟机分区1. **虚拟磁盘分区**2. **虚拟机的内存分区**3. **CPU分配**4. **虚拟网络分区**5. **存储虚拟化和分区**6. **虚拟机分区管理**…...
mapState 函数的用法
mapState 是 Vuex 提供的一个辅助函数,其主要作用是将 Vuex 仓库中的状态映射到组件的计算属性中,这样在组件里就能像访问本地计算属性一样访问 Vuex 仓库中的状态。以下为你详细介绍 mapState 函数的不同用法。 1. 基本用法:对象形式 当使…...
【学Rust写CAD】17 通用2D仿射变换矩阵结构体(matrix/generic.rs)
源代码 // matrix.rs use std::ops::{Add, Mul};use std::ops::{Add, Mul};/// 通用2D仿射变换矩阵(元素仅需Copy) #[derive(Clone, Copy, Debug, PartialEq)] pub struct Matrix<X, Y, Xx, Xy, Yx, Yy> {pub x: X, pub y: Y,pub xx: Xx, pub xy:…...
STM32单片机入门学习——第3-4节: [2-1、2]软件安装和新建工程
写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难,但我还是想去做! 本文写于:2025.04.01 STM32开发板学习——第一节: [1-1]课程简介 前言开发板说明引用解答和…...
Linux详解
01 计算机组成原理 1、什么是计算机? 计算机俗称电脑,就相当于一种人造人, 电脑二字蕴含着人类的对计算机的终极期望,希望一通电就能够像人脑一样去工作 2、为何要有计算机? 为了造出一种机器来取代人去工作&…...
IP数据报报文格式
一 概述 IP数据报由两部分组成:首部数据部分。首部的前一部分是固定长度,一共20字节大小,是所有IP数据报文必须具有的;固定部分后面是一些可选字段,其长度是可变的。 二 首部固定部分各字段意义 (1&…...
自然语言处理(25:(终章Attention 1.)Attention的结构)
系列文章目录 终章 1:Attention的结构 终章 2:带Attention的seq2seq的实现 终章 3:Attention的评价 终章 4:关于Attention的其他话题 终章 5:Attention的应用 目录 系列文章目录 前言 Attention的结构 一.seq…...
Minimind 训练一个自己专属语言模型
发现了一个宝藏项目, 宣传是完全从0开始,仅用3块钱成本 2小时!即可训练出仅为25.8M的超小语言模型MiniMind,最小版本体积是 GPT-3 的 17000,做到最普通的个人GPU也可快速训练 https://github.com/jingyaogong/minimi…...
Android里面内存优化
核心思路 在Android开发中,内存优化是保证应用性能稳定和用户体验的关键。我通常从以下几个方面进行内存优化: 1. 内存泄漏检测与修复 使用LeakCanary等工具检测内存泄漏 常见内存泄漏场景: 静态变量持有Activity/Fragment引用 非静态内部…...
Git操作指南
Git操作指南 1.安装并配置Git Git官网:https://git-scm.com/downloads 安装完成后,打开Git Bash,配置Git: git config --global user.email "emailexample.com" git config --global user.name "Your Name&quo…...
【蓝桥杯—单片机】通信总线专项 | 真题整理、解析与拓展 (更新ing...)
通信总线专项 前言SPI第十五届省赛题 UART/RS485/RS232UARTRS485RS232第十三届省赛题小结和拓展:传输方式的分类第十三届省赛 其他相关考点网络传输速率第十五届省赛题第十二届省赛题 前言 在本文中我会把 蓝桥杯单片机赛道 历年真题 中涉及到通信总线的题目整理出…...
深入探究C语言中的二进制世界:从原理到实践
文章目录 深入探究C语言中的二进制世界:从原理到实践一、进制的本质与C语言实现1. 进制系统全景2. C语言中的进制表示3. 格式化输出进阶 二、进制转换的工程实践1. 转换算法实现2. 实际应用中的转换技巧快速二进制 - 十六进制转换位运算优化转换 3. 进制转换详细示例…...
【android bluetooth 协议分析 13】【RFCOMM详解 2】【通俗易懂 rfcomm 基本流程】
RFCOMM 协议 基本流程 一、连接建立流程(附 BTsnoop 实例解析) 1. L2CAP 通道建立 BTsnoop 表现: L2CAP_Connection_Request (PSM0x0003) // 请求建立RFCOMM专用通道L2CAP_Connection_Response (Success) // 对方同意作用:相…...
万字知识篇(2):SpringBoot的常用注解(上)
SpringBoot的常用注解非常的多,一篇文章根本讲不完,将分为上下两章,通过本章你将会系统的学习到: 1. 注解在SpringBoot中的作用 2. SpringBoot 常用注解速查表 3. 核心启动类注解 4. Configuration 5. Bean 6. PropertySource 7. …...
Postman —— postman实现参数化
什么时候会用到参数化 比如:一个模块要用多组不同数据进行测试 验证业务的正确性 Login模块:正确的用户名,密码 成功;错误的用户名,正确的密码 失败 postman实现参数化 在实际的接口测试中,部分参数每…...
Docker学习--容器生命周期管理相关命令--docker create 命令
docker create 命令作用: 会根据指定的镜像和参数创建一个容器实例,但容器只会在创建时进行初始化,并不会执行任何进程。 语法: docker create[参数] IMAGE(要执行的镜像) [COMMAND](在容器内部…...
算法基础_基础算法【高精度 + 前缀和 + 差分 + 双指针】
算法基础_基础算法【高精度 前缀和 差分 双指针】 ---------------高精度---------------791.高精度加法题目介绍方法一:代码片段解释片段一: 解题思路分析 792. 高精度减法题目介绍方法一:代码片段解释片段一: 解题思路分析 7…...
C语言深度解析:从零到系统级开发的完整指南
一、C语言的核心特性与优势 1. 高效性与直接硬件控制 C语言通过编译为机器码的特性,成为系统级开发的首选语言。例如,Linux内核通过C语言直接操作内存和硬件寄存器,实现高效进程调度。 关键点: malloc/free直接管理内存&#…...
Axure疑难杂症:完美解决中继器筛选问题(时间条件筛选、任性筛选)
亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢! 课程主题:中继器筛选专题 主要内容:时间条件筛选、多条件组合筛选、多个单一条件混合筛选 应用场景:各类数据表的多条件筛选均可使用…...
汇编学习之《扩展指令指针寄存器》
什么是指令指针寄存器? EIP (Extended Instruction Pointer): 保存cpu 下一次将要执行的代码的地址。 通过OllyGbd可以看到CPU即将执行指令的地址和EIP 内部放入的地址一致,多次F8依然是这样。 这里要区分下,之前比如EAX,ECX我…...
oracle-blob导出,在ob导入失败
导出: [oraclelncs dmp]$ /home/oracle/sqluldr2 gistar/res#pwd192.168.205.58:1521/lndb query"select * from an_odn_picture where length(PIC_CONTENT)<25000" filean_odn_picture.csv Charsetutf8 textCSV 0 rows exported at 2025-…...
【Linux笔记】进程间通信——匿名管道||进程池
🔥个人主页🔥:孤寂大仙V 🌈收录专栏🌈:Linux 🌹往期回顾🌹:【Linux笔记】动态库与静态库的理解与加载 🔖流水不争,争的是滔滔不 一、Linux进程间通…...
Spring Boot 3.4.3 基于 Caffeine 实现本地缓存
在现代企业级应用中,缓存是提升系统性能和响应速度的关键技术。通过减少数据库查询或复杂计算的频率,缓存可以显著优化用户体验。Spring Boot 3.4.3 提供了强大的缓存抽象支持,而 Caffeine 作为一款高性能的本地缓存库,因其优异的…...
windows使用nvm管理node版本
1.下载地址:https://github.com/coreybutler/nvm-windows/releases 选择nvm-setup.exe 2.安装,下载完成后,以管理员身份运行 nvm-setup.exe,选择默认安装,一路next 3.使用,安装完成后会打开一个命令行窗口࿰…...
vscode集成deepseek实现辅助编程(银河麒麟系统)【详细自用版】
针对开发者用户,可在Visual Studio Code中接入DeepSeek,实现辅助编程。 可参考我往期文章在银河麒麟系统环境下部署DeepSeek:基于银河麒麟桌面&&服务器操作系统的 DeepSeek本地化部署方法【详细自用版】 一、前期准备 (…...
智谱大模型(ChatGLM3)PyCharm的调试指南
前言 最近在看一本《ChatGLM3大模型本地化部署、应用开发和微调》,本文就是讨论ChatGLM3在本地的初步布设。(模型文件来自魔塔社区) 1、建立Pycharm工程 采用的Python版本为3.11 2、安装对应的包 2.1、安装modelscope包 pip install model…...
MySQL GROUP BY分组获取非聚合列值方法
在使用MySQL进行数据库查询时,如果你需要对数据按照某个或某些列进行分组(GROUP BY),并且希望在结果中包含非聚合列的值,你可以通过以下几种方法来实现: 1. 使用聚合函数 虽然这不是直接获取非聚合列值的…...
多路径 TCP 调度的另一面
参考前面的文章 一个原教旨的多路径 TCP 和 MP-BBR 公平性推演,一直都破而不立,不能光说怎样不好,还得说说现状情况下,该如何是好。 如果 receiver 乱序重排的能力有限(拜 TCP 所赐),如果非要在多路径上传输 TCP&…...
在Qt中判断输入的js脚本是否只包含函数
目前在使用QtScriptEngine,在利用evaluate注册子函数时,要求用户输入的js文件中的内容仅仅是函数,函数体外不能出现一些变量的声明、函数的调用等其他代码。 反复咨询DeepSeek后,终于给出了一个目前测试可用的代码: b…...
【Easylive】MySQL中LEFT JOIN与INNER JOIN的使用场景对比
【Easylive】项目常见问题解答(自用&持续更新中…) 汇总版 在MySQL数据库查询中,JOIN操作是最常用的操作之一,而LEFT JOIN和INNER JOIN是两种最基础的JOIN类型。理解它们的区别和适用场景对于编写高效、准确的SQL查询至关重要…...
Boost库中的谓词函数
Boost库中的谓词函数 谓词函数基础概念 在编程中,谓词函数(Predicate Function)是指返回布尔值(true或false)的函数,用于检测输入是否满足特定条件。谓词函数在STL算法和Boost库中被广泛使用,…...