MySQL之SQL性能优化策略
MySQL之SQL性能优化策略
- 一、主键优化策略
- 1.1 主键的核心作用
- 1.2 主键设计原则
- 1.3 主键优化实践
- 二、ORDER BY优化策略
- 2.1 ORDER BY执行原理
- 2.2 ORDER BY优化技巧
- 2.3 处理大结果集排序
- 三、GROUP BY优化策略
- 3.1 GROUP BY执行原理
- 3.2 GROUP BY优化方法
- 四、LIMIT优化策略
- 4.1 LIMIT常见性能问题
- 4.2 LIMIT优化方案
- 五、COUNT优化策略
- 5.1 COUNT函数类型与原理
- 5.2 COUNT优化技巧
- 六、UPDATE优化策略
- 6.1 UPDATE执行影响
- 6.2 UPDATE优化策略
- 七、综合优化实践与工具辅助
- 7.1 执行计划分析
- 7.2 慢查询日志
- 7.3 数据库设计评审
MySQL数据库的性能直接影响着系统的响应速度与用户体验,随着数据量的不断增长,诸如主键设计、ORDER BY
排序、GROUP BY
分组、LIMIT
分页、COUNT
统计以及UPDATE
更新等操作,若未经过优化,极易成为性能瓶颈。本文我将全面介绍这些关键操作的优化策略,结合原理与实战案例,提升MySQL数据库的性能表现。
一、主键优化策略
1.1 主键的核心作用
主键是表中用于唯一标识每一行数据的字段或字段组合,它不仅能保证数据的唯一性,还对数据存储、查询效率有着深远影响。在InnoDB存储引擎中,数据是按照主键顺序组织存储的,合理的主键设计能显著提升数据查询与写入性能。
1.2 主键设计原则
- 唯一性:主键值在表中必须唯一,这是主键的基本要求。避免使用包含大量重复值的字段作为主键,否则会破坏数据唯一性约束,还可能影响查询性能。
- 非空性:主键字段不允许为NULL值,确保每一行数据都有明确的标识。
- 稳定性:主键值一旦确定,应尽量避免修改。频繁修改主键值不仅会导致数据更新操作复杂,还可能影响索引的性能。
- 数据类型选择:优先选择数据类型长度小、查询效率高的字段作为主键。例如,
INT
类型比VARCHAR
类型在存储和查询上更高效。对于自增长主键,INT
或BIGINT
是常见选择,可通过AUTO_INCREMENT
属性实现自动递增。
1.3 主键优化实践
- 避免使用业务字段作为主键:业务字段可能会随着业务发展而发生变化,例如订单编号、用户邮箱等。使用这类字段作为主键,后期修改时会带来巨大的成本与风险。建议使用无业务含义的代理键,如自增长的
ID
字段。 - 复合主键的谨慎使用:虽然复合主键能通过多个字段组合实现唯一性,但会增加索引的复杂度与存储空间。只有在多个字段组合才能唯一标识数据时,才考虑使用复合主键,并且要遵循最左前缀原则,确保查询时能有效利用索引。
二、ORDER BY优化策略
2.1 ORDER BY执行原理
ORDER BY
子句用于对查询结果进行排序,当执行该操作时,MySQL会尝试使用索引来避免额外的文件排序(Using filesort
)。若无法使用索引,就需要在内存或磁盘中对数据进行排序,这会消耗大量资源,严重影响性能。
2.2 ORDER BY优化技巧
- 索引覆盖排序:确保
ORDER BY
子句中的字段顺序与索引中的字段顺序一致,且查询的字段都在索引中,即实现索引覆盖。例如,在users
表中,若有索引idx_name_age (name, age)
,执行SELECT name, age FROM users ORDER BY name, age
就能利用该索引完成排序,避免文件排序。
-- 创建索引
CREATE INDEX idx_name_age ON users (name, age);
-- 可利用索引排序的查询
SELECT name, age FROM users ORDER BY name, age;
- 避免混合排序方向:尽量保持
ORDER BY
子句中所有字段的排序方向一致(都是升序或都是降序)。若存在混合排序(如ORDER BY col1 ASC, col2 DESC
),可能无法使用索引,导致文件排序。 - 减少排序字段数量:仅对必要的字段进行排序,字段越多,排序的复杂度与资源消耗就越高。同时,确保排序字段的数据类型一致,避免因类型转换导致索引失效。
2.3 处理大结果集排序
当需要对大结果集进行排序时,可考虑先在应用层进行分页处理,减少一次性排序的数据量。或者使用LIMIT
子句结合索引,逐步获取排序后的部分数据,降低排序压力。
三、GROUP BY优化策略
3.1 GROUP BY执行原理
GROUP BY
子句用于将查询结果按照指定字段进行分组,常与聚合函数(如SUM
、AVG
、COUNT
)一起使用。在执行过程中,MySQL会对分组字段进行排序和分组操作,合理的索引设计能加速这一过程。
3.2 GROUP BY优化方法
- 创建合适的索引:在
GROUP BY
子句涉及的字段上创建索引,可显著提升分组效率。若同时使用多个字段进行分组,应创建联合索引,且遵循最左前缀原则。例如,对于SELECT department_id, SUM(salary) FROM employees GROUP BY department_id
,在department_id
字段上创建索引即可;若查询为SELECT department_id, job_title, SUM(salary) FROM employees GROUP BY department_id, job_title
,则需创建联合索引idx_department_job (department_id, job_title)
。
-- 创建联合索引
CREATE INDEX idx_department_job ON employees (department_id, job_title);
-- 可利用索引分组的查询
SELECT department_id, job_title, SUM(salary) FROM employees GROUP BY department_id, job_title;
- 避免使用不必要的字段:在
GROUP BY
子句中,只包含必要的分组字段,减少不必要的字段可以降低分组的复杂度和资源消耗。 - 使用覆盖索引:确保查询的字段和聚合函数涉及的字段都在索引中,实现索引覆盖,避免回表操作。这样可以减少磁盘I/O,提高查询性能。
四、LIMIT优化策略
4.1 LIMIT常见性能问题
LIMIT
子句用于限制查询结果返回的行数,常用于分页查询。但在处理大偏移量(如LIMIT 100000, 10
)时,性能会急剧下降。这是因为MySQL需要先扫描前100000行数据,再返回后面的10行,随着偏移量增大,扫描的数据量呈线性增长。
4.2 LIMIT优化方案
- 使用书签记录:通过记录上一页最后一条数据的主键值,下一页查询时利用主键过滤数据。例如,在
users
表中,主键为user_id
,查询第二页数据(每页10条):
-- 第一页查询
SELECT * FROM users ORDER BY user_id LIMIT 0, 10;
-- 第二页查询,假设第一页最后一条数据的user_id为10
SELECT * FROM users WHERE user_id > 10 ORDER BY user_id LIMIT 10;
- 覆盖索引分页:若查询仅需返回少量字段,可创建覆盖索引,减少数据扫描量。例如,
CREATE INDEX idx_user_name ON users (user_name)
,执行SELECT user_name FROM users ORDER BY user_name LIMIT 100000, 10
,利用覆盖索引直接获取数据,避免回表。 - 预计算与缓存:对于固定的分页数据,可提前计算并缓存结果,减少实时查询的性能消耗。
五、COUNT优化策略
5.1 COUNT函数类型与原理
COUNT(*)
用于统计表中的总行数,COUNT(column)
用于统计指定列中非NULL值的数量,COUNT(DISTINCT column)
用于统计指定列中不同值的数量。COUNT(*)
在InnoDB存储引擎下,由于需要扫描全表数据,性能相对较低;而COUNT(column)
和COUNT(DISTINCT column)
若涉及的列有索引,可利用索引加速统计。
5.2 COUNT优化技巧
- 使用COUNT(1):在某些场景下,
COUNT(1)
比COUNT(*)
性能更好。因为COUNT(1)
只需扫描行,无需像COUNT(*)
那样考虑所有列,减少了数据处理量。 - 利用索引:对于
COUNT(column)
,若column
上存在索引,MySQL可直接从索引中获取非NULL值的数量,避免全表扫描。例如,在orders
表的order_status
字段上有索引,执行SELECT COUNT(order_status) FROM orders
,可利用索引快速统计。 - 避免COUNT(DISTINCT):
COUNT(DISTINCT)
的计算复杂度较高,特别是在数据量较大时。若业务允许,可通过分组统计后再计算数量,替代COUNT(DISTINCT)
操作,提升性能。
六、UPDATE优化策略
6.1 UPDATE执行影响
UPDATE
语句用于修改表中的数据,执行过程中会锁定相关数据行或表,若操作不当,不仅会影响性能,还可能引发锁冲突,降低系统并发处理能力。
6.2 UPDATE优化策略
- 精准定位数据:在
WHERE
子句中使用索引字段,精准定位需要更新的数据,减少扫描范围。例如,在employees
表中,employee_id
为主键,执行UPDATE employees SET salary = salary * 1.1 WHERE employee_id = 123
,可快速定位并更新数据。
-- 利用主键索引精准更新
UPDATE employees SET salary = salary * 1.1 WHERE employee_id = 123;
- 批量更新:将多个小的
UPDATE
操作合并为一个批量更新操作,减少锁的持有时间,提高更新效率。但需注意批量更新的数据量不宜过大,避免占用过多资源。 - 事务控制:合理控制
UPDATE
操作所在事务的范围,尽量缩短事务持续时间,减少对其他事务的影响。同时,避免在事务中执行不必要的操作,降低锁冲突风险。 - 使用EXPLAIN分析:在执行
UPDATE
语句前,使用EXPLAIN
分析执行计划,查看是否使用了索引,以及索引的使用是否合理。若未使用索引或索引使用不当,及时调整查询条件或索引结构。
七、综合优化实践与工具辅助
7.1 执行计划分析
使用EXPLAIN
关键字分析SQL语句的执行计划,通过查看type
、key
、rows
等字段,判断是否使用了索引、索引使用是否高效。例如,type
字段的值为ALL
表示全表扫描,应尽量优化为index
、range
等更高效的类型;key
字段显示实际使用的索引,若为NULL
则表示未使用索引。
7.2 慢查询日志
开启MySQL慢查询日志,记录执行时间超过阈值的SQL语句。通过分析慢查询日志,定位性能瓶颈,针对性地进行优化。可通过修改配置文件或执行SET GLOBAL slow_query_log = 1
开启慢查询日志,并设置long_query_time
参数调整阈值。
7.3 数据库设计评审
在项目开发前期,对数据库设计进行评审,包括表结构设计、索引设计等。确保主键设计合理、索引覆盖常用查询场景,从源头避免性能问题。同时,随着业务发展和数据量变化,定期对数据库进行性能评估与优化调整。
若这篇内容帮到你,动动手指支持下!关注不迷路,干货持续输出!
ヾ(´∀ ˋ)ノヾ(´∀ ˋ)ノヾ(´∀ ˋ)ノヾ(´∀ ˋ)ノヾ(´∀ ˋ)ノ
相关文章:
MySQL之SQL性能优化策略
MySQL之SQL性能优化策略 一、主键优化策略1.1 主键的核心作用1.2 主键设计原则1.3 主键优化实践 二、ORDER BY优化策略2.1 ORDER BY执行原理2.2 ORDER BY优化技巧2.3 处理大结果集排序 三、GROUP BY优化策略3.1 GROUP BY执行原理3.2 GROUP BY优化方法 四、LIMIT优化策略4.1 LIM…...
AI时代工具:AIGC导航——AI工具集合
大家好!AIGC导航是一个汇集多种AIGC工具的平台,提供了丰富的工具和资源。 工具功能: 该平台整合了多样的AIGC工具,涵盖了绘画创作、写作辅助以及视频制作等多个领域。绘画工具能够生成高质量的图像作品;写作工具支持从构思到润色的全流程写…...
性能测试-jmeter实战4
课程:B站大学 记录软件测试-性能测试学习历程、掌握前端性能测试、后端性能测试、服务端性能测试的你才是一个专业的软件测试工程师 性能测试-jmeter实战4 jmeter环境搭建1. 安装Java环境(必需) JMeter环境搭建完整指南1. 安装Java࿰…...
C++字符串的行输入
1、字符串的输入 下面用一个真实的示例来进行演示: #include<iostream> #include<string>int main() {using namespace std;const int ArSize 20;char name[ArSize];char dessert[ArSize];cout << "Enter your name:\n";cin >>…...
【Linux网络与网络编程】15.DNS与ICMP协议
1. DNS 1.1 DNS介绍 TCP/IP 中使用 IP 地址和端口号来确定网络上的一台主机的一个程序,但是 IP 地址不方便记忆,于是人们发明了一种叫主机名的字符串,并使用 hosts 文件来描述主机名和 IP 地址的关系。最初, 通过互连网信息中心(SRI-NIC)来…...
Python训练营-Day40-训练和测试的规范写法
1.单通道图片训练 # import torch # import torch.nn as nn # import torch.optim as optim # from torchvision import datasets, transforms # from torch.utils.data import DataLoader # import matplotlib.pyplot as plt # import numpy as np# # 设置中文字体支持 # plt…...
【Python-Day 29】万物皆对象:详解 Python 类的定义、实例化与 `__init__` 方法
Langchain系列文章目录 01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块:四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain:从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…...
内存泄漏和内存溢出的区别
内存泄漏(Memory Leak)和内存溢出(Memory Overflow / Out Of Memory, OOM)是软件开发中两个密切相关但又本质不同的内存问题: 核心区别一句话概括: 内存泄漏: 有垃圾对象占用内存却无法被回收&…...
Linux系统---Nginx配置nginx状态统计
配置Nignx状态统计 1、下载vts模块 https://github.com/vozlt/nginx-module-vts [rootclient ~]# nginx -s stop [rootclient ~]# ls anaconda-ks.cfg nginx-1.27.3 ceph-release-1-1.el7.noarch.rpm nginx-1.27.3.tar.gz info.sh …...
linux操作系统的软件架构分析
一、linux操作系统的层次结构 1.内核的主要功能 1)进程管理 2)内存管理 3)文件系统 4)进程间通信、I/O系统、网络通信协议等 2.系统程序 1)系统接口函数库,比如libc 2)shell程序 3)编译器、编辑…...
快速手搓一个MCP服务指南(三):FastMCP的核心组件-构建MCP服务的关键技术实现
FastMCP 是一套面向 LLM 应用开发的工具框架,通过标准化协议衔接大语言模型与外部功能组件,构建「LLM工具」的闭环交互体系。其核心技术体系包含四大模块:工具系统将 Python 函数转化为 LLM 可调用的能力单元,通过类型注解实现参数…...
创建首个 Spring Boot 登录项目
📌 摘要 在 Java Web 开发中,登录功能是最基础也是最重要的模块之一。本文将手把手带你使用 IntelliJ IDEA 和 Maven 构建一个基于 Spring Boot 的简单登录系统,涵盖: 使用 IDEA 创建 Spring Boot 项目配置 Maven 依赖ÿ…...
order、sort、distribute和cluster by(Spark/Hive)
1. abstract ORDER BY:完整查询结果的全局行排序。与SORT BY、CLUSTER BY、DISTRIBUTE BY互斥,不能同时使用。 示例SELECT * FROM table_name ORDER BY column_name;SORT BY:只在每个分区内排序,局部排序结果不是全局有序。与ORD…...
# Python中等于号的使用
# Python中等于号的使用 ## 1. 问题的分析与思考 在Python中,等于号()是一个赋值运算符,用于将右侧的值或表达式的结果赋给左侧的变量。这是Python(以及许多其他编程语言)中非常基础且核心的一个概念。理…...
无人机神经网络模块运行与技术难点
一、神经网络模块的运行方式 1. 分层处理架构 感知层 多模态数据融合:通过八元数卷积网络(OCNN)统一处理LiDAR、摄像头、IMU等异构传感器数据,将点云坐标(x/y/z)、图像RGB与光流信息编码至8维虚部&#…...
宝塔服务器调优工具 1.1(Opcache优化)
第一步:宝塔服务器调优工具 1.1(按照下面的参数填写) 第二步:路径/www/server/php/80/etc/php.ini 搜索jit jit1235 其中1235根据服务器情况修改 第三步:路径/www/server/php/80/etc/php-cli.ini 搜索 jit1235 其中…...
day041-web集群架构搭建
文章目录 0. 老男孩思想-高薪四板斧1. web集群架构图2. 搭建异地备份服务2.1 服务端-阿里云服务器2.1.1 查看rsync软件包2.1.2 添加rsync配置文件2.1.3 添加虚拟用户2.1.4 创建校验用户密码文件2.1.5 创建备份目录2.1.6 启动服务2.1.7 开放安全组端口2.1.8 发送检查邮件 2.2 客…...
国产化条码类库Spire.Barcode教程:如何使用 C# 读取 PDF 中的条码(两种方法轻松实现)
在 PDF 文档的 .NET 平台处理流程中,使用 C# 读取 PDF 条码 是一项常见需求,特别适用于处理扫描件或电子表单。无论是物流、金融、医疗还是制造行业,PDF 文档中经常包含用于追踪或识别的条码。这些条码可能是嵌入图像,也可能是矢量…...
vue 3 计算器
效果: <template><div class"calculator-container"><div class"calculator"><!-- 显示区域 --><div class"display">{{ formattedDisplay }}</div><!-- 按钮区域 --><div class"…...
CRMEB PHP多门店版v3.2.1系统全开源+Uniapp前端+搭建教程
一.介绍 CRMEB多店版是一款为品牌连锁门店打造的私域电商解决方案,以三大运营模式为核心,助力品牌连锁门店轻松构建全渠道、一体化的私域电商生态,促进“线上电商”与“线下门店”销售运营融合,加速品牌数字化转型,为…...
主机复制文字和文件到 Ubuntu 虚拟机
在 VMware Workstation Pro 16 中复制文字和文件到 Ubuntu 虚拟机,方法如下: Open-VM-Tools 禁用 Wayland 解决 。 1.安装 VMware Tools(推荐)或 open-vm-tools: sudo apt update sudo apt install open-vm-tools…...
性能测试 —— 数据库的连接池和主从同步和分表分区
一、数据库的调优(库层面) 1、数据库连接池 1、介绍:数据库连接池(Database Connection Pool)是一种用于管理数据库连接的技术,它通过预先创建并维护一组数据库连接来提高应用程序的性能和可扩展性。 2、创建、管理、关闭 数据…...
猿人学js逆向比赛第一届第十二题
一、分析请求 看到这里只有一个m的密文参数,没有cookie,请求头等其他的参数,那么这里跟一堆栈信息。 很顺利地锁定了m的加密位置。看到是字符串拼接然后使用btoa函数进行编码,那么这里尝试使用Python复现一下。顺利拿到结果。 复现…...
第十节 新特性与趋势-CSS层叠规则升级
以下是关于 CSS层叠规则升级 的全面解析,结合最新规范(如级联层layer)和传统层叠机制的演进,从核心原理、应用场景到实践策略的系统性总结: 一、传统层叠规则的三大支柱 CSS层叠规则的传统机制基于以下三个维…...
关键领域软件工厂的安全中枢如何全面升级供应链检测能力
随着软件供应链安全体系在互联网、金融等领域逐步成熟,关键领域正加速迈向以 MLOps、软件工厂为核心的新型研发生态。在这一过程中,面对代码安全、依赖合规、系统可信等多重挑战,传统人工审查模式已难以满足国家级高安全性要求。 Gitee Scan…...
西门子G120XA变频器:数据中心能效革命的核心引擎
在数字经济爆发式增长的今天,数据中心已成为支撑社会运转的"数字心脏"。然而,其庞大的能耗需求与绿色低碳目标之间的矛盾日益凸显——尤其是冷却系统作为数据中心第二大能耗单元(占比约35%),正成为能效提升的…...
从零开始学习Spring Cloud Alibaba (一)
人狠话不多,直接开始少点屁话本着共同学习进步的目的和大家交流如有不对的地方望铁子们多多谅解 准备工具 开发工具 idea Java环境 jdk17 容器: docker Maven 3.8.6 仓库镜像阿里云 <mirror><id>alimaven</id><name>aliyun maven</name><…...
【C/C++】C++ 编程规范:101条规则准则与最佳实践
C 编程规范:101条规则准则与最佳实践 引言 C 是一门强大而复杂的语言,能高效控制硬件,也能写出优雅抽象。然而,正因其复杂性,项目中若缺乏统一规范,极易陷入混乱、难维护、易出错的泥潭。 本文总结了 10…...
PyTorch topk() 用法详解:取最大值
torch.topk(input, k) 返回张量中最大的 k 个元素以及它们在原张量中的 索引。 函数原型 torch.topk(input, k, dimNone, largestTrue, sortedTrue)参数说明: 参数说明input输入张量k要取出的前 k 个值dim指定沿哪个维度取值(默认是最后一维ÿ…...
毕业论文查重原理及降重方法
【30%的重复率有那么重要吗?】 老师说论文重读率必须低于30%,否则无法毕业! 如果您在专科或者普通本科学生,我只能这样一句话告诉你:你想多了~, 真的想多了~~~,一篇论文还不至于让你不能毕…...
Golang Kratos 系列:业务分层的若干思考(二)
上一篇文章简单讨论了领域层在Kratos中的使用,主要涉及引入领域层,将数据层和业务层之间的解耦,接下来讨论一个稍微全面一点的例子,在此基础上引入外部Api(主要是易变部分)的领域层下的情况。 我们同样可以…...
技术伦理之争:OpenAI陷抄袭风波,法院强制下架宣传视频
在AI巨头OpenAI宣布以65亿美元天价收购苹果前设计总监Jony Ive的硬件公司IO仅一个月后,一场抄袭指控将这家科技明星企业推上风口浪尖。 源自谷歌X实验室的初创企业IYO将OpenAI告上法庭,指控其窃取智能耳塞核心技术,并通过巨额收购试图掩盖抄袭…...
烟花爆竹生产企业库房存储安全风险预警系统
烟花爆竹生产企业库房存储安全风险预警系统是保障库房物资安全、规范作业流程、防范安全事故的重要技术手段,涵盖多个关键预警功能。 温湿度预警 在库房内安装温湿度传感器,这些传感器如同敏锐的“环境感知员”,能够实时监测库房内环境变…...
Jenkins+Jmeter+Ant接口持续集成
2025最新Jmeter接口测试从入门到精通(全套项目实战教程) 前言: 为什么要用Jmeter做接口测试: 当选择这套方案的时候,很多人会问,为什么选择Jmeter做Case管理?为什么不自己写框架?说…...
基于STM32的寻迹小车设计
标题:基于STM32的寻迹小车设计 内容:1.摘要 本文围绕基于STM32的寻迹小车设计展开。背景是随着自动化技术的发展,寻迹小车在工业巡检、物流运输等领域有广泛应用前景。目的是设计一款能稳定、准确寻迹的小车。方法上,以STM32微控制器为核心,…...
【150】基于SSM+Vue实现的小说阅读小程序(有文档)
系统介绍 基于SSMVue实现的小说阅读小程序采用前后端分离的架构方式,系统设计了管理员、用户两种角色,系统分为管理端、小程序端,管理端实现了管理员登录、个人中心、管理员管理、帮助中心管理、基础数据管理、论坛中心管理、公告资讯管理、…...
ValKey中使用SIMD指令优化bitcount命令
一、AVX/AVX2 的历史演进 随着计算机技术的飞速发展,数据处理需求呈指数级增长,SIMD(单指令多数据)技术应运而生。它通过一条指令同时处理多个数据元素,大幅提升计算效率,从早期的 MMX 技术起步࿰…...
leetcode114-二叉树展开为链表
leetcode 114 思路 用简单例子推导规律 不要一开始就看复杂的树,先从最简单的情况入手 案例一:只有一个节点 输入:1 输出:1不需要任何操作,直接返回 案例二:有两个节点 输入: 1/2输出&a…...
第七章 习题
1.给出下面表达式的逆波兰表示(后缀式): 3请将表达式-(ab)* (cd)-(abc)分别表示成三元式,间接三元式和四元式序列 四元式(Op,arg1,arg2,result) (,a,b,T1) (,c,d,T2) (*,T1,T2,T3) (uminus,T3,-,T4) (,a,b,T5) (,T5,c,T6) (-,T4,T6,r) 三元式 (op,arg1,arg2) (0) (,…...
Spring Ai Alibaba Graph实现五大工作流模式
Spring Ai Alibaba Graph实现五大工作流模式 概述 在 building-effective-agents 一文中,Anthropic将"智能体系统"(agentic systems),从架构层面分为 “工作流”(workflows)和 “智能体”(agents): 工作流…...
基于单片机的语音控制设计(论文)
摘要 自然语音作为人机交互在目前得以广泛的应用以及极大的发展前景。该设计介绍了基于非指定人语音芯片LD3320的语音控制器结构及其实现语音控制的方法。该语音控制器利用STM32F103C8T6单片机作为主要控制器,控制芯片对输入的进行语音识别并处理,根据语…...
【网络安全】从IP头部看网络通信:IPv4、IPv6与抓包工具 Wireshark 实战
从IP头部看网络通信:IPv4、IPv6与抓包工具 Wireshark实战 在网络安全分析和数据通信的世界中,一切都始于“数据包”。数据包是网络上传输的基本单位,而数据包的结构与内容,正是我们理解网络行为的核心。本文将带你深入了解 IP 协…...
计算机组成原理笔记(公众号版本)
1.MAR,存储单元和PC位数之间的关系 我们的MAR位数取决于我们的存储单元的个数; PC位数也是取决于我们的存储单元的个数; 假设我们是64个存储单元,我们的这个MAR实际上就是6位,因为这个2的6次方等于我们的64吗&#…...
CPM基本原理
CPM(连续相位调制,Continuous Phase Modulation )是一种恒包络,信号相位随时间连续变化的调制技术 。其优势显著,连续相位特性,频谱效率高,对带外辐射抑制好;相位平滑过渡࿰…...
浅谈开源在线客服系统与 APP 集成的技术方案与优劣势
在为移动端 App 接入在线客服系统的过程中,我经历了长时间的技术选型探索。最初,我也曾被一些“技术理想主义”选项所吸引,比如让用户自己研发界面我提供 API 以获得最高自由度,或集成 SDK 以追求原生体验。然而,随着项…...
AutoGPT,自主完成复杂任务
AutoGPT是一个开源的AI Agent项目,它的核心目标是让AI能够自主完成复杂任务,而不仅仅是回答单个问题。简单来说,它让AI具备了"自主思考和行动"的能力。 1. AutoGPT的核心概念 什么是AI Agent? AI Agent(智…...
基于Qt C++的影像重采样批处理工具设计与实现
摘要 本文介绍了一种基于Qt C++框架开发的高效影像重采样批处理工具。该工具支持按分辨率(DPI) 和按缩放倍率两种重采样模式,提供多种插值算法选择,具备强大的批量处理能力和直观的用户界面。工具实现了影像处理的自动化流程,显著提高了图像处理效率,特别适用于遥感影像处…...
Qt Windows平台调用ffmpeg动态库
本文基于QT6.8实测验证。 一、下载预编译库 从官方或第三方源获取FFmpeg的Windows动态库(Shared版本),解压后需包含以下目录: bin DLL文件(运行时依赖)include 头文件lib .lib或.dll.a链接…...
猿人学js逆向比赛第一届第十三题
一、分析请求 通过分析请求得知,本题目的参数为yuanrenxue_cookie,因为题目中中明说了是动态cookie,所以可以先删除这个cookie然后下脚本断点,简单分析看一下页面执行的js代码逻辑。 在经过这段代码的时候很明显的可以看到这里的有…...
React性能优化精髓之一:频繁setState导致滚动卡顿的解决方案
在开发一个 List 页面时,我们遇到了一个典型的React性能问题:页面在滚动时出现明显卡顿。这个问题的调试过程充满了误判和重新思考,最终发现了一个重要的性能优化原则。 问题现象 我们有一个监控仪表盘页面,包含多个图表组件。用…...