【性能优化】MySQL 生产环境 SQL 性能优化实战案例
🚀 MySQL 生产环境 SQL 性能优化实战案例
🏗️ 背景介绍
最近在处理一个项目时,发现在生产环境的工作流相关接口中,某些查询的执行时间异常缓慢,尽管数据量仅为 2 万条。经过分析,发现以下 SQL 语句执行非常慢:
SELECT *
FROM ACT_HI_TASKINST t
LEFT JOIN ACT_HI_PROCINST p ON p.PROC_INST_ID_ = t.PROC_INST_ID_
LEFT JOIN ACT_HI_COMMENT c ON c.TASK_ID_ = t.id_;
尤其是在添加 LEFT JOIN ACT_HI_COMMENT
后,查询时间显著增加,达到了 ⏳ 1 分钟。我们需要深入分析并优化此查询。
🔍 执行计划分析
通过 EXPLAIN FORMAT=JSON
分析执行计划,得到的关键结果如下:
c
表有 23,754 行,但rows_produced_per_join
却达到了 4.19 亿 行,产生了 笛卡尔积效应 💥。data_read_per_join
高达 5TB,导致查询执行极为缓慢 🐌。JOIN
方式为 Block Nested Loop(BNL),执行效率较低。TASK_ID_
字段缺乏合适的索引,导致c
表进行全表扫描 📜。
执行计划示例:
{"query_block": {"select_id": 1,"cost_info": {"query_cost": "86412925.39"},"nested_loop": [{"table": {"table_name": "t","access_type": "ALL","rows_examined_per_scan": 17679,"rows_produced_per_join": 17679,"filtered": "100.00","cost_info": {"read_cost": "419.00","eval_cost": "3535.80","prefix_cost": "3954.80","data_read_per_join": "567M"},"used_columns": ["ID_","REV_","PROC_DEF_ID_","TASK_DEF_ID_","TASK_DEF_KEY_","PROC_INST_ID_","EXECUTION_ID_","SCOPE_ID_","SUB_SCOPE_ID_","SCOPE_TYPE_","SCOPE_DEFINITION_ID_","NAME_","PARENT_TASK_ID_","DESCRIPTION_","OWNER_","ASSIGNEE_","START_TIME_","CLAIM_TIME_","END_TIME_","DURATION_","DELETE_REASON_","PRIORITY_","DUE_DATE_","FORM_KEY_","CATEGORY_","TENANT_ID_","LAST_UPDATED_TIME_"]}},{"table": {"table_name": "p","access_type": "eq_ref","possible_keys": ["PROC_INST_ID_"],"key": "PROC_INST_ID_","used_key_parts": ["PROC_INST_ID_"],"key_length": "194","ref": ["work_order.t.PROC_INST_ID_"],"rows_examined_per_scan": 1,"rows_produced_per_join": 17679,"filtered": "100.00","cost_info": {"read_cost": "17679.00","eval_cost": "3535.80","prefix_cost": "25169.60","data_read_per_join": "319M"},"used_columns": ["ID_","REV_","PROC_INST_ID_","BUSINESS_KEY_","PROC_DEF_ID_","START_TIME_","END_TIME_","DURATION_","START_USER_ID_","START_ACT_ID_","END_ACT_ID_","SUPER_PROCESS_INSTANCE_ID_","DELETE_REASON_","TENANT_ID_","NAME_","CALLBACK_ID_","CALLBACK_TYPE_"]}},{"table": {"table_name": "c","access_type": "ALL","rows_examined_per_scan": 23754,"rows_produced_per_join": 419946966,"filtered": "100.00","using_join_buffer": "Block Nested Loop","cost_info": {"read_cost": "2398362.59","eval_cost": "83989393.20","prefix_cost": "86412925.39","data_read_per_join": "5T"},"used_columns": ["ID_","TYPE_","TIME_","USER_ID_","TASK_ID_","PROC_INST_ID_","ACTION_","MESSAGE_","FULL_MSG_"],"attached_condition": "<if>(is_not_null_compl(c), (work_order.c.TASK_ID_ = work_order.t.ID_), true)"}}]}
}
⚡ 优化方案
✅ 1. 增加索引
为 c.TASK_ID_
添加索引,以减少全表扫描带来的影响:
ALTER TABLE ACT_HI_COMMENT ADD INDEX idx_comment_task (TASK_ID_);
🔄 2. 重新分析执行计划
索引添加后,c
表的 rows_produced_per_join
从 4.19 亿 降至 24,421,查询方式变为 ref(通过索引查找),扫描行数大幅减少 📉。
优化后的执行计划示例:
{"query_block": {"select_id": 1,"cost_info": {"query_cost": "54475.04"},"nested_loop": [{"table": {"table_name": "t","access_type": "ALL","rows_examined_per_scan": 17679,"rows_produced_per_join": 17679,"filtered": "100.00","cost_info": {"read_cost": "419.00","eval_cost": "3535.80","prefix_cost": "3954.80","data_read_per_join": "567M"},"used_columns": ["ID_","REV_","PROC_DEF_ID_","TASK_DEF_ID_","TASK_DEF_KEY_","PROC_INST_ID_","EXECUTION_ID_","SCOPE_ID_","SUB_SCOPE_ID_","SCOPE_TYPE_","SCOPE_DEFINITION_ID_","NAME_","PARENT_TASK_ID_","DESCRIPTION_","OWNER_","ASSIGNEE_","START_TIME_","CLAIM_TIME_","END_TIME_","DURATION_","DELETE_REASON_","PRIORITY_","DUE_DATE_","FORM_KEY_","CATEGORY_","TENANT_ID_","LAST_UPDATED_TIME_"]}},{"table": {"table_name": "p","access_type": "eq_ref","possible_keys": ["PROC_INST_ID_"],"key": "PROC_INST_ID_","used_key_parts": ["PROC_INST_ID_"],"key_length": "194","ref": ["work_order.t.PROC_INST_ID_"],"rows_examined_per_scan": 1,"rows_produced_per_join": 17679,"filtered": "100.00","cost_info": {"read_cost": "17679.00","eval_cost": "3535.80","prefix_cost": "25169.60","data_read_per_join": "319M"},"used_columns": ["ID_","REV_","PROC_INST_ID_","BUSINESS_KEY_","PROC_DEF_ID_","START_TIME_","END_TIME_","DURATION_","START_USER_ID_","START_ACT_ID_","END_ACT_ID_","SUPER_PROCESS_INSTANCE_ID_","DELETE_REASON_","TENANT_ID_","NAME_","CALLBACK_ID_","CALLBACK_TYPE_"]}},{"table": {"table_name": "c","access_type": "ref","possible_keys": ["idx_comment_task"],"key": "idx_comment_task","used_key_parts": ["TASK_ID_"],"key_length": "195","ref": ["work_order.t.ID_"],"rows_examined_per_scan": 1,"rows_produced_per_join": 24421,"filtered": "100.00","cost_info": {"read_cost": "24421.20","eval_cost": "4884.24","prefix_cost": "54475.04","data_read_per_join": "347M"},"used_columns": ["ID_","TYPE_","TIME_","USER_ID_","TASK_ID_","PROC_INST_ID_","ACTION_","MESSAGE_","FULL_MSG_"]}}]}
}
优化后,查询时间从 ⏳ 1 分钟 降至毫秒级 🚀,性能得到了显著提升。
🔬 MySQL 8 本地测试情况
在 MySQL 8 本地环境进行测试时,原 SQL 语句的执行时间没有出现明显的性能问题,可能原因包括:
- 优化器改进:MySQL 8 对
JOIN
方式进行了优化,减少了 BNL 的使用。 - 更智能的默认索引策略:MySQL 8 在索引选择上更为智能,避免了不必要的全表扫描。
- 测试环境数据量较小:由于本地环境数据较少,无法重现生产环境中的慢查询问题。
尽管在本地 MySQL 8 上运行正常,我们仍建议在生产环境中进行 EXPLAIN
分析,以确保优化方案的有效性。
MySQL 8.0 中引入了 Hash Join 自动选择,取代了传统的 Nested Loop Join(嵌套循环连接)。执行计划中的 "using_join_buffer": "hash join"
证实了这一点。Hash Join、并行查询和 Buffer Pool 的优化是导致问题未能在本地复现的主要原因。因此,最终我们通过与生产环境完全一致的数据库版本和配置复现了问题。
执行计划:
{"query_block": {"select_id": 1,"cost_info": {"query_cost": "36941768.34"},"nested_loop": [{"table": {"table_name": "t","access_type": "ALL","rows_examined_per_scan": 16978,"rows_produced_per_join": 16978,"filtered": "100.00","cost_info": {"read_cost": "104.75","eval_cost": "1697.80","prefix_cost": "1802.55","data_read_per_join": "544M"},"used_columns": ["ID_","REV_","PROC_DEF_ID_","TASK_DEF_ID_","TASK_DEF_KEY_","PROC_INST_ID_","EXECUTION_ID_","SCOPE_ID_","SUB_SCOPE_ID_","SCOPE_TYPE_","SCOPE_DEFINITION_ID_","NAME_","PARENT_TASK_ID_","DESCRIPTION_","OWNER_","ASSIGNEE_","START_TIME_","CLAIM_TIME_","END_TIME_","DURATION_","DELETE_REASON_","PRIORITY_","DUE_DATE_","FORM_KEY_","CATEGORY_","TENANT_ID_","LAST_UPDATED_TIME_"]}},{"table": {"table_name": "p","access_type": "eq_ref","possible_keys": ["PROC_INST_ID_"],"key": "PROC_INST_ID_","used_key_parts": ["PROC_INST_ID_"],"key_length": "194","ref": ["work_order.t.PROC_INST_ID_"],"rows_examined_per_scan": 1,"rows_produced_per_join": 16978,"filtered": "100.00","cost_info": {"read_cost": "4244.50","eval_cost": "1697.80","prefix_cost": "7744.85","data_read_per_join": "306M"},"used_columns": ["ID_","REV_","PROC_INST_ID_","BUSINESS_KEY_","PROC_DEF_ID_","START_TIME_","END_TIME_","DURATION_","START_USER_ID_","START_ACT_ID_","END_ACT_ID_","SUPER_PROCESS_INSTANCE_ID_","DELETE_REASON_","TENANT_ID_","NAME_","CALLBACK_ID_","CALLBACK_TYPE_"]}},{"table": {"table_name": "c","access_type": "ALL","rows_examined_per_scan": 21447,"rows_produced_per_join": 364127166,"filtered": "100.00","using_join_buffer": "hash join","cost_info": {"read_cost": "521306.89","eval_cost": "36412716.60","prefix_cost": "36941768.34","data_read_per_join": "4T"},"used_columns": ["ID_","TYPE_","TIME_","USER_ID_","TASK_ID_","PROC_INST_ID_","ACTION_","MESSAGE_","FULL_MSG_"],"attached_condition": "<if>(is_not_null_compl(c), (`work_order`.`c`.`TASK_ID_` = `work_order`.`t`.`ID_`), true)"}}]}
}
🎯 结论
- 问题根因:缺少合适的索引,导致 MySQL 使用 BNL 方式进行
JOIN
,引发巨量扫描。 - 优化措施:为
TASK_ID_
添加索引,使得c
表的访问方式从ALL
变为ref
,减少了扫描行数。 - 最终效果:查询时间从 ⏳ 1 分钟 降至毫秒级 🎉。
📌 建议
- 📊 定期检查慢查询日志,及时优化 SQL 语句。
- 🛠️ 合理设计索引,避免全表扫描。
- 🧐 使用
EXPLAIN
分析执行计划,确保查询能够利用索引路径。
希望本文中的优化过程能对你在 MySQL 生产环境中的性能调优有所帮助!🎯💡
相关文章:
【性能优化】MySQL 生产环境 SQL 性能优化实战案例
🚀 MySQL 生产环境 SQL 性能优化实战案例 🏗️ 背景介绍 最近在处理一个项目时,发现在生产环境的工作流相关接口中,某些查询的执行时间异常缓慢,尽管数据量仅为 2 万条。经过分析,发现以下 SQL 语句执行非…...
Docker容器安装软件(完整版)
文章目录 一、安装Docker1.1 docker 相关的命令1.2 配置镜像加速 二. 安装es2.1 创建网络2.2 拉取镜像2.3 创建挂载点目录2.4 部署单点es,创建es容器2.5 编写elasticsearch.yml2.6 重启es容器2.7 测试Elasticsearch是否安装成功 三. 基于Docker安装Kibana3.1 拉取镜…...
DeepSeek-进阶版部署(Linux+GPU)
前面几个小节讲解的Win和Linux部署DeepSeek的比较简单的方法,而且采用的模型也是最小的,作为测试体验使用是没问题的。如果要在生产环境使用还是需要用到GPU来实现,下面我将以有一台带上GPU显卡的Linux机器来部署DeepSeek。这里还只是先体验单…...
11. Pandas :操作Excel文件(Excel报表的案例研究)
从一个装有各种 Excel 文件的文件夹开始,这些文件需要被整合到 Excel 报表中。 它们包含了虚构的电信运营商在全美各营业厅的套餐(金、银、铜)销售情况。每个月有两个文件,子文件夹 new 中的是新用户,子文件夹 existin…...
Qt开源控件库(qt-material-widgets)的编译及使用
项目简介 qt-material-widgets是一个基于 Qt 小部件的 Material Design 规范实现。 项目地址 项目地址:qt-material-widgets 本地构建环境 Win11 家庭中文版 VS2019 Qt5.15.2 (MSVC2019) 本地构建流程 克隆后的目录结构如图: 直接使用Qt Crea…...
freeswitch(多台服务器级联)
亲测版本centos 7.9系统–》 freeswitch1.10.9本人freeswitch安装路径(根据自己的路径进入)/usr/local/freeswitch/etc/freeswitch使用场景: 使用服务器级联需要双方网络可以ping通,也就是类似局域网内,比如A服务器IP 192.168.1.100 B服务器 192.168.1.101,通过C设备注册…...
【大模型统一集成项目】让 AI 聊天更丝滑:WebSocket 实现流式对话!
🌟 在这系列文章中,我们将一起探索如何搭建一个支持大模型集成项目 NexLM 的开发过程,从 架构设计 到 代码实战,逐步搭建一个支持 多种大模型(GPT-4、DeepSeek 等) 的 一站式大模型集成与管理平台ÿ…...
qt 多进程使用共享内存 ,加速数据读写,进程间通信 共享内存
Summary: 项目中我们有时需要使用共享内存共享数据,这样,数据不用进程IO读写,加进数据加载和落地; 程序退出时,再保存到本地;速度提升数十倍; Part1:QSharedMemory Windows平台下进程间通信…...
OpenHarmony-分布式硬件关键技术
前言: OpenHarmony是一款面向未来万物互联场景的操作系统,其设计采用了分布式架构。那么OpenHarmony相比于传统操作系统有哪些关键的分布式技术,本文主要介绍分布式硬件设计理念、跨端分布式硬件核心挑战、以及OpenHarmony分布式硬件平台关键…...
idea超级AI插件,让 AI 为 Java 工程师
引言 用户可在界面中直接通过输入自然语言的形式描述接口的需求,系统通过输入的需求自动分析关键的功能点有哪些,并对不确定方案的需求提供多种选择,以及对需求上下文进行补充,用户修改确定需求后,系统会根据需求设…...
深入Flink运行时架构:JobManager与TaskManager协作全解析
深入Flink运行时架构:JobManager与TaskManager协作全解析 一、Flink分布式执行模型剖析 1.1 运行时架构全景视图 核心组件交互关系: #mermaid-svg-tMSqMSsKP6vwUZi3 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-s…...
OSPF-单区域的配置
一、单区域概念: 单区域OSPF中,整个网络被视为一个区域,区域ID通常为0(骨干区域)。所有的路由器都在这个区域内交换链路状态信息。 补充知识点: OSPF为何需要loopback接口: 1.Loopback接口的…...
每日OJ_牛客_过桥_贪心+BFS_C++_Java
目录 牛客_过桥_贪心BFS 题目解析 C代码 Java代码 牛客_过桥_贪心BFS 过桥 描述: dd被困在了一个迷幻森林,现在她面前有一条凶险的大河,河中央有n个神奇的浮块,浮块按1∼n1顺序标号,但两两并不相接&…...
K8S学习之基础二十七:k8s中daemonset控制器
k8s中DaemonSet控制器 DaemonSet控制器确保k8s集群中,所有节点都运行一个相同的pod,当node节点增加时,新节点也会自动创建一个pod,当node节点从集群移除,对应的pod也会自动删除。删除DaemonSet也会删除创建的pod。…...
79.ScottPlot的MVVM实现 C#例子 WPF例子
如何通过数据绑定在 WPF 中实现动态图像显示 在 WPF 应用程序中,通过数据绑定实现动态图像显示是一种高效且优雅的方式。以下是一个简单的教程,展示如何使用 ScottPlot.WPF 库和 MVVM 模式来实现这一功能。 第一步:安装必要的 NuGet 包 首…...
第44天:WEB攻防-PHP应用SQL盲注布尔回显延时判断报错处理增删改查方式
时间轴: 44天知识点总结: 1.mysql的增删改查功能 2.根据源码sql语句的三种sql注入:布尔盲注(必须要有回显) 延时判断(都可以) 报错回显(必须要有报错处理机制) 3.两个cms…...
说说人工智能
1. 人工智能与机器学习 核心进展 人工智能(AI)与机器学习(ML)已从理论研究全面渗透到实际应用中。深度学习模型如Transformer架构在自然语言处理(NLP)和计算机视觉(CV)领域实现突破…...
懒加载(Lazy Loading):原理、实现与优化策略
懒加载(Lazy Loading) 是一种优化网页性能的技术,主要用于延迟加载非关键资源(如图片、视频、脚本等),直到它们真正需要被使用时才加载。懒加载可以显著减少页面初始加载时间,降低带宽消耗&…...
HTML5(Web前端开发笔记第一期)
p.s.这是萌新自己自学总结的笔记,如果想学习得更透彻的话还是请去看大佬的讲解 目录 三件套标签标题标签段落标签文本格式化标签图像标签超链接标签锚点链接默认链接地址 音频标签视频标签 HTML基本骨架综合案例->个人简介列表表格表单input标签单选框radio上传…...
Linux学习(十五)(故障排除(ICMP,Ping,Traceroute,网络统计,数据包分析))
故障排除是任何 Linux 用户或管理员的基本技能。这涉及识别和解决 Linux 系统中的问题。这些问题的范围包括常见的系统错误、硬件或软件问题、网络连接问题以及系统资源的管理。Linux 中的故障排除过程通常涉及使用命令行工具、检查系统和应用程序日志文件、了解系统进程&#…...
SVN 拉取,文件冲突 解决办法
情景 svn 在拉取代码时 提示 已跳过,其余有冲突 ,警告至少还有一个的文件处于冲突状态 导致文件拉取失败 一、原因 版本库和本地工作副本之间存在文件冲突,导致文件无法正常拉取。 二、 Terminal 窗口解决办法 1.查看冲突文件 在 Termin…...
【实战ES】实战 Elasticsearch:快速上手与深度实践-8.1.1基于ES的语义搜索(BERT嵌入向量)
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 基于Elasticsearch与BERT的语义搜索架构设计与实战1. 传统搜索的局限性与语义搜索的崛起1.1 关键词搜索 vs 语义搜索1.2 Elasticsearch向量检索演进历程关键版本特性对比 2.…...
【Node.js】--- win11安装 Node.js
在编程的艺术世界里,代码和灵感需要寻找到最佳的交融点,才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里,我们将共同追寻这种完美结合,为未来的世界留下属于我们的独特印记。 【Node.js】--- win11安装 Node.js 开发环…...
【技海登峰】Kafka漫谈系列(九)SpringBoot整合Kafka多数据源配置
【技海登峰】Kafka漫谈系列(九)SpringBoot整合Kafka多数据源配置 Kafka官方提供了基于Java实现的客户端kafka-clients,用于提供生产者和消费者的基本能力。在此基础上,Spring for Apache Kafka(spring-kafka)项目对该原生客户端进行了基于Spring特性的抽象与封装,实现了基…...
【MySQL篇】基本查询实战OJ
本篇是基于上篇mysql基本查询的一些OJ题 MySQL基本查询传送门:【MySQL篇】MySQL基本查询详解-CSDN博客 批量插入数据_牛客题霸_牛客网 insert语句 insert into actor values (1,PENELOPE,GUINESS,2006-02-15 12:34:33); insert into actor values (2,NICK,WAHLBER…...
侯捷 C++ 课程学习笔记:C++内存管理机制
内存管理从平地到万丈高楼 内存管理入门(Memory Management 101) 需要具有动态分配并使用memory(存储(器),(计算机的)内存),使用过C标准库的容器࿰…...
java后端开发day31--集合进阶(一)-----Collection集合List集合数据结构1
(以下内容全部来自上述课程) 1.集合体系结构 List系列集合:添加的元素是有序、可重复、有索引。 Set系列集合:添加的元素是无序、不重复、无索引。 2.Collection集合 Collection是单列集合的祖宗接口(不可直接创建…...
TA学习之路——1.4 MVP矩阵运算
1.变换矩阵的意义 1.将3D物体转化到2D平面 2.为各个空间的运用做准备 2.MVP矩阵代表什么 MVP矩阵分别是模型(Model)、观察(View)、投影(Projecttion)三个矩阵。我们顶点坐标起始于局部空间(Local Space)…...
Java数据结构第二十期:解构排序算法的艺术与科学(二)
专栏:Java数据结构秘籍 个人主页:手握风云 目录 一、常见排序算法的实现 1.1. 直接选择排序 1.2. 堆排序 1.3. 冒泡排序 1.4. 快速排序 一、常见排序算法的实现 1.1. 直接选择排序 每⼀次从待排序的数据元素中选出最小的⼀个元素,存放在…...
【机器学习】主成分分析法(PCA)
【机器学习】主成分分析法(PCA) 一、摘要二、主成分分析的基本概念三、主成分分析的数学模型五、主成分分析法目标函数公式推导(梯度上升法求解目标函数)六、梯度上升法求解目标函数第一个主成分七、求解前n个主成分及PCA在数据预…...
perl、python、tcl语法中读写Excel的模块
perl、python、tcl语法中读写Excel的模块 perl、python、tcl语法中存在读写xls和xlsx格式的模块分别有: python 读取 Excel xlrd:支持传统 .xls 格式的读取 pandas:通过 read_excel() 方法支持 .xls 和 .xlsx 格式 写入 …...
libwebsockets实现异步websocket客户端,服务端异常断开可重连
libwebsockets websocket客户端基本流程网上都有,我只额外优化了重连机制。 在服务器异常断开时不触发LWS_CALLBACK_CLOSED或LWS_CALLBACK_CLIENT_CONNECTION_ERROR,导致无法自动重连 通过定时检查链接是否可写入判断链接是否有效 // 判断wsi是否可用if …...
CAD球体密堆积3D插件V2.0
插件介绍 CAD球体密堆积3D插件V2.0版本可在AutoCAD内建立球体堆积模型,插件采取模拟球体在重力作用下的堆积行为,可生成超密堆积的几何模型及进行堆积过程的动态展示。 插件优化重力堆积物理引擎,新增堆积可视化界面,可直观查看…...
【Linux】线程池、单例模式、死锁
线程池 一.线程池1.日志和策略模式2.线程池1.Task.hpp2.Thread.hpp3.ThreadPool.hpp4.ThreadPool.cc 二.线程安全与重入问题三.线程安全的单例模式1.饿汉模式2.懒汉模式3.懒汉模式线程池1.ThreadPool.hpp2.ThreadPool.cc 四.死锁的概念1.死锁2.死锁的四个必要条件3.避免死锁 五…...
AI+视频监控电力巡检:EasyCVR视频中台方案如何赋能电力行业智能化转型
随着电力行业的快速发展,电力设施的安全性、稳定性和运维效率变得至关重要。传统视频监控系统在实时性、智能化及多系统协同等方面面临严峻挑战。EasyCVR视频中台解决方案作为一种先进的技术手段,在电力行业中得到了广泛应用,为电力设施的监控…...
centos8.0系统部署zabbix6.0监控
centos8.0系统部署zabbix6.0监控 一、部署过程1、确认系统版本2、主机基础环境设置3、安装MySQL 8.0数据库3.1 安装MySQL 8.0仓库3.2 安装软件3.3 设置root用户密码3.4 创建zabbix数据库,授权用户 4、配置zabbix6.0仓库5、安装zabbix服务端软件6、导入zabbix数据表7…...
江科大51单片机笔记【12】AT24C02(I2C总线)
写在前言 此为博主自学江科大51单片机(B站)的笔记,方便后续重温知识 在后面的章节中,为了防止篇幅过长和易于查找,我把一个小节分成两部分来发,上章节主要是关于本节课的硬件介绍、电路图、原理图等理论知识…...
电脑一直重启怎么解决 原因及解决方法
电脑一直重启的故障状态,不仅影响电脑的正常使用,还可能导致数据丢失或损坏。那么,电脑一直重启是什么原因呢?又该如何解决呢?下面将为大家介绍电脑一直重启的常见原因和解决方法,帮助您恢复电脑的正常工作…...
内网安全防护新思路 —— HFish + ELK 与 T-Pot 全面蜜罐系统比较分析
在当前网络安全环境日益复杂的背景下,企业和组织面临着来自外部与内部的多种威胁。为了更好地了解攻击者行为、捕获恶意活动并及时响应,部署蜜罐(Honeypot)系统已成为提升内网安全防护的重要手段。本文将重点介绍两种内网蜜罐防护…...
「 机器人 」扑翼飞行器通过总气动力控制四自由度运动方法
一、前言 在扑翼飞行中,总气动力(Total Aerodynamic Force)是指扑翼在运动过程中受到的所有空气动力作用的合力。它是由以下两种主要力的合成结果: 1. 升力(Lift, ):垂直于空气流方向的力,用于支持飞行器(或生物)的重量。 2. 阻力(Drag, ):平行于空气流方向的力,…...
写了一个二叉树构造函数和画图函数,方便debug
代码 class TreeNode(object):def __init__(self, val, leftNone, rightNone):self.val valself.left leftself.right rightdef construct_tree(nodes):if not nodes:return Noneroot TreeNode(nodes[0])queue [root]index 1while index < len(nodes):node queue.p…...
【prompt实战】知乎问题解答专家
本文原创作者:姚瑞南 AI-agent 大模型运营专家,先后任职于美团、猎聘等中大厂AI训练专家和智能运营专家岗;多年人工智能行业智能产品运营及大模型落地经验,拥有AI外呼方向国家专利与PMP项目管理证书。(转载需经授权&am…...
元组(Tuple)详解——c#
在C#中,元组(Tuple) 是一种轻量级的数据结构,用于将多个值组合成一个单一的对象。元组非常适合在不需要定义新类或结构体的情况下,临时存储和传递多个相关的值。 C# 中的元组有两种形式: 传统元组…...
Maven工具基础知识(一)
第一章、Maven概述 一、概述 官网地址:Welcome to Apache Maven – Maven Maven是一个基于Java的项目管理工具,专注于项目构建、依赖管理和项目信息标准化。其核心目标 是简化开发流程,通过标准化项目结构和自动化构建流程ÿ…...
AI模型的构建过程是怎样的(下)
你好,我是舒旻。 上节课,我们讲了一个模型构建的前 2 个环节,模型设计和特征工程。今天,我们继续来讲模型构建的其他 3 个环节,说说模型训练、模型验证和模型融合中,算法工程师的具体工作内容,以及 AI 产品经理需要掌握的重点。 模型训练 模型训练是通过不断训练、验证…...
力扣hot100_二叉树
二叉树的建立与遍历 #include <iostream> #include <vector> #include <queue> using namespace std;// 定义二叉树节点 struct TreeNode {int val;TreeNode* left;TreeNode* right;TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} };// 函数&…...
如何制作Windows系统盘、启动盘?(MediaCreationTool_22H2)
文章目录 每日一句正能量前言一、准备工作二、制作启动盘后记 每日一句正能量 每个在你生命里出现的人,都有原因。喜欢你的人给你温暖关心。你喜欢的人让你学会爱和付出,不喜欢你的人让你自省成长。你不喜欢的人教会你宽容尊重,没有人是偶然出…...
分布式光伏发电的发展现状与前景
分布式光伏发电的发展现状与前景 1、分布式光伏发电的背景2、分布式光伏发电的分类2.1、集中式光伏发电2.1.1、特点、原则2.1.2、优点2.1.3、缺点 2.2、分布式光伏发电2.2.1、特点、原则2.2.2、优点2.2.3、缺点 2.3、对比 3、分布式光伏发电的现状4、分布式光伏发电的应用场景4…...
【AI大模型智能应用】Deepseek生成测试用例
在软件开发过程中,测试用例的设计和编写是确保软件质量的关键。 然而,软件系统的复杂性不断增加,手动编写测试用例的工作量变得异常庞大,且容易出错。 DeepSeek基于人工智能和机器学习,它能够依据软件的需求和设计文…...
NVIDIA k8s-device-plugin源码分析与安装部署
在《kubernetes Device Plugin原理与源码分析》一文中,我们从源码层面了解了kubelet侧关于device plugin逻辑的实现逻辑,本文以nvidia管理GPU的开源github项目k8s-device-plugin为例,来看看设备插件侧的实现示例。 一、Kubernetes Device Pl…...