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

针对 Spring Boot 应用中常见的查询场景 (例如:分页查询、关联查询、聚合查询) 如何进行 SQL 优化?

通用优化原则(适用于所有场景):

  1. 索引是基础: 确保 WHEREJOINORDER BYGROUP BY 涉及的关键列都有合适的索引(单列或联合索引)。
  2. 避免 SELECT *: 只查询业务需要的列,减少数据传输量和内存消耗。覆盖索引(索引包含所有查询所需列)是极佳的优化。
  3. EXPLAIN: 使用 EXPLAIN 分析查询计划来定位瓶颈。
  4. 数据类型: 使用最小、最合适的数据类型。
  5. 应用层缓存: 对于不经常变化的数据,优先考虑使用缓存(如 Redis, Caffeine)。

场景一:分页查询 (Pagination Queries)

分页查询在 Web 应用中极其常见(如商品列表、用户列表、订单列表)。当数据量变大时,深分页(查询靠后的页码)可能成为性能瓶颈。

  • 典型 SQL 模式 (MySQL):

    SELECT col1, col2, ...
    FROM your_table
    WHERE filter_conditions -- 可选的过滤条件
    ORDER BY sort_column [ASC|DESC]
    LIMIT offset, count; -- offset 是起始行的偏移量,count 是每页数量
    
  • 常见性能问题:

    • 深分页下的 OFFSET 问题: LIMIT offset, countoffset 很大时,MySQL 需要扫描 offset + count 行,然后丢弃前面的 offset 行。例如 LIMIT 100000, 10 需要扫描 100010 行,非常低效。
    • ORDER BY 性能: 如果 ORDER BY 的列没有合适的索引,会导致 Using filesort
    • WHERE 条件性能: 如果过滤条件没有索引,会导致全表扫描。
  • 优化策略:

    1. ORDER BY 列和 WHERE 列创建联合索引:

      • 这是最重要的优化。索引应尽量覆盖 WHERE 条件和 ORDER BY 列。
      • 示例: 对于 WHERE status = ? ORDER BY created_at DESC LIMIT ?, ?,创建索引 INDEX idx_status_created (status, created_at)
      • 理想情况下,索引能让 MySQL 直接按顺序读取所需数据,避免 filesort 和扫描过多行。
    2. 避免深分页 - 使用“延迟关联”(Deferred Join) 或 “书签”(Seek Method / Keyset Pagination):

      • 延迟关联 (Deferred Join):

        • 原理: 先通过索引快速定位到目标页的主键(id),再用这些主键去关联(JOIN)原表获取完整数据。这样可以避免在扫描大量数据行时携带过多非索引列。
        • 示例:
          SELECT t1.col1, t1.col2, ...
          FROM your_table t1
          INNER JOIN (SELECT idFROM your_tableWHERE filter_conditions -- 与外层查询相同的过滤条件ORDER BY sort_column [ASC|DESC]LIMIT offset, count
          ) t2 ON t1.id = t2.id;
          
        • 前提: 需要 WHEREORDER BY 列上有相应的索引。
      • 书签/Seek Method/Keyset Pagination (推荐,更优):

        • 原理: 不使用 OFFSET,而是记录上一页最后一条记录的排序键值(和唯一键,如 id),下一页查询时基于这个值进行过滤。
        • 示例 (假设按 created_at 降序,id 是主键):
          -- 查询第一页
          SELECT col1, col2, ..., created_at, id
          FROM your_table
          WHERE filter_conditions
          ORDER BY created_at DESC, id DESC -- 加上唯一键保证排序稳定
          LIMIT count;-- 查询下一页 (假设上一页最后一条记录是 created_at=T, id=I)
          SELECT col1, col2, ..., created_at, id
          FROM your_table
          WHERE filter_conditionsAND (created_at < T OR (created_at = T AND id < I)) -- 关键过滤条件
          ORDER BY created_at DESC, id DESC
          LIMIT count;
          
        • 优点: 无论查询多少页,每次查询的性能都相对稳定,因为它总是从一个已知点开始扫描 count 行。
        • 缺点: 实现稍复杂(需要传递上一页的边界值),不支持直接跳页(只能上一页/下一页),对排序条件有要求(需要稳定且有索引)。
        • Spring Boot 实现: 可以通过封装 Pageable 或自定义查询方法实现。
    3. 限制最大页码: 在产品层面限制用户能访问的最大页码,避免极端的深分页查询。

    4. 考虑覆盖索引: 如果 SELECT 的列都能包含在 WHEREORDER BY 的联合索引中,性能会非常好。


场景二:关联查询 (JOIN Queries)

当需要从多个关联表中获取数据时,JOIN 查询是必需的。

  • 典型 SQL 模式:

    SELECT t1.col_a, t2.col_b, ...
    FROM table1 t1
    INNER JOIN table2 t2 ON t1.foreign_key = t2.primary_key
    LEFT JOIN table3 t3 ON t1.another_key = t3.some_key
    WHERE t1.filter_col = ? AND t3.status = ?
    ORDER BY t1.sort_col;
    
  • 常见性能问题:

    • 连接列上缺少索引: 这是 JOIN 性能差的最常见原因。MySQL 可能需要进行嵌套循环连接(Nested Loop Join)的低效变种,或者使用哈希连接(Hash Join, MySQL 8.0+ 支持更好)但仍需扫描。
    • 连接列数据类型不匹配: 即使有索引,类型不匹配也可能导致索引失效。
    • 连接了过多的表: 查询过于复杂。
    • WHERE/ORDER BY 条件涉及的列无索引: 即使 JOIN 本身快,后续过滤和排序也可能慢。
    • 应用层的 N+1 查询: 这是反模式,应用层逻辑导致多次单独查询而非一次 JOIN。
  • 优化策略:

    1. 为所有 JOIN 的连接列创建索引:

      • 外键列必须有索引。
      • 被引用表(通常是主键)的列通常已有主键索引。
      • 确保连接列的数据类型完全一致
    2. 为 WHERE、ORDER BY、GROUP BY 中涉及的跨表列创建合适的索引:

      • 如果过滤条件或排序涉及 JOIN 后的表,确保这些列也有索引。
      • 考虑联合索引覆盖多个条件。
    3. 选择合适的 JOIN 类型 (INNER JOIN, LEFT JOIN, RIGHT JOIN):

      • INNER JOIN 通常更快,因为它只返回匹配的行。
      • LEFT JOIN 需要保留左表所有行,如果右表很大且匹配行少,可能会慢。确保右表的连接列和过滤列有索引。
    4. 小表驱动大表 (驱动表选择):

      • MySQL 优化器通常会尝试选择最优的 JOIN 顺序。在外层循环(驱动表)中使用行数较少的表(经过 WHERE 过滤后),可以减少内层循环的次数。
      • 可以使用 STRAIGHT_JOIN 强制指定 JOIN 顺序。
    5. 冗余数据/反范式化 (谨慎使用):

      • 如果某个 JOIN 非常频繁且是性能瓶颈,而关联的数据变化很少,可以考虑将少量常用字段冗余到主表中,避免 JOIN。
    6. 拆分复杂 JOIN:

      • 将一个复杂的 JOIN 查询拆分成多个简单的查询,在应用层进行数据组装。这会增加网络开销,但可以降低数据库压力,提高并发性。
    7. Spring Boot/JPA 层面:

      • 避免 N+1 查询: 使用 JOIN FETCH@EntityGraph 在一次查询中加载所需的关联数据。
      • 谨慎使用 Eager Fetching: 默认使用 LAZY,按需加载。

场景三:聚合查询 (Aggregation Queries)

聚合查询用于计算汇总数据,如总数、平均值、最大/最小值等。

  • 典型 SQL 模式:

    SELECT group_key, COUNT(*), SUM(amount), AVG(score)
    FROM your_table
    WHERE filter_conditions
    GROUP BY group_key
    HAVING condition_on_aggregate -- 可选的聚合后过滤
    ORDER BY aggregate_result DESC; -- 可选的按聚合结果排序
    
  • 常见性能问题:

    • GROUP BY / HAVING / ORDER BY 效率低: 如果没有合适的索引,MySQL 可能需要扫描大量数据,并创建临时表 (Using temporary) 和进行文件排序 (Using filesort) 来完成分组和排序。
    • 全表扫描: 如果 WHERE 条件没有索引。
    • 计算量大: 对非常大的数据集进行聚合计算本身就很耗时。
  • 优化策略:

    1. GROUP BY 列和 WHERE 列创建联合索引:

      • 索引应包含 WHERE 条件列和 GROUP BY 列。这有助于快速定位到需要聚合的数据分组。
      • 示例: WHERE status = ? GROUP BY category_id,创建 INDEX idx_status_category (status, category_id)
      • 如果索引顺序与 GROUP BY 列顺序一致,可以避免创建临时表(索引扫描直接完成分组)。
    2. ORDER BY 聚合结果创建索引不可行,但可以优化 GROUP BY 过程:

      • 如果 ORDER BY 是基于 GROUP BY 的列,那么优化 GROUP BY 的索引同样有效。
      • 如果 ORDER BY 是基于聚合函数结果(如 ORDER BY COUNT(*)),无法直接创建索引。此时减少需要排序的数据量是关键。
    3. 覆盖索引: 如果索引能包含 WHERE, GROUP BY 以及聚合函数涉及的列(例如 COUNT(indexed_col), SUM(indexed_col)),MySQL 只需扫描索引即可完成聚合(Using index for group-by)。

    4. 预计算/汇总表 (Summary Tables):

      • 原理: 对于需要频繁查询且计算复杂的聚合结果(尤其是报表类),可以创建一个单独的汇总表,通过定时任务或触发器(谨慎使用)定期或实时的将聚合结果计算好并存入该表。查询时直接查询汇总表。
      • 优点: 将计算压力分散到写入或后台任务,查询性能高。
      • 缺点: 存在数据延迟(如果非实时更新),需要维护额外的表和更新逻辑。
    5. 在应用层进行部分聚合 (谨慎):

      • 如果数据库聚合压力过大,可以将部分聚合逻辑移到应用层。例如,查询明细数据(可能需要分页),然后在应用内存中进行聚合。
    6. 使用近似聚合算法 (如果业务允许): 对于超大规模数据的 COUNT(DISTINCT ...) 等操作,MySQL 的 HyperLogLog (HLL) 函数可以提供近似结果,速度会快很多。

总结:

针对 Spring Boot 应用中的常见查询场景进行 SQL 优化:

  • 分页查询: 核心是优化 ORDER BYWHERE 的索引,并使用 Seek Method (Keyset Pagination) 避免深分页的 OFFSET 问题。
  • 关联查询: 核心是为所有连接列和过滤列创建索引,确保数据类型一致。在应用层避免 N+1 问题。
  • 聚合查询: 核心是优化 GROUP BYWHERE 的索引,尽量利用索引完成分组,考虑汇总表作为终极手段。

结合 EXPLAIN 分析查询计划,并使用监控工具验证优化效果。创建索引是基础,但有时也需要我们结合 SQL 、缓存、甚至架构调整来达到最佳性能。

相关文章:

针对 Spring Boot 应用中常见的查询场景 (例如:分页查询、关联查询、聚合查询) 如何进行 SQL 优化?

通用优化原则&#xff08;适用于所有场景&#xff09;&#xff1a; 索引是基础: 确保 WHERE、JOIN、ORDER BY、GROUP BY 涉及的关键列都有合适的索引&#xff08;单列或联合索引&#xff09;。避免 SELECT *: 只查询业务需要的列&#xff0c;减少数据传输量和内存消耗。覆盖索…...

shadcn/radix-ui的tooltip高度定制arrow位置

尝试了半天&#xff0c;后来发现&#xff0c;不支持。。。。。就是不支持 那箭头只能居中 改side和align都没用&#xff0c;下面有在线实例 https://codesandbox.io/p/sandbox/radix-ui-slider-forked-zgn7hj?file%2Fsrc%2FApp.tsx%3A69%2C21 但是呢&#xff0c; 第一如果…...

ROS-真机向虚拟机器人映射

问题描述 ROS里的虚拟机械臂可以实现和真实机械臂的位置同步&#xff0c;真实机械臂如何动&#xff0c;ROS里的虚拟机械臂就如何动 效果 步骤 确保库卡机械臂端安装有EthernetKRL辅助软件和KUKAVARPROXY 6.1.101&#xff08;它是一个 TCP/IP 服务器 &#xff0c;可通过网络实…...

ap无法上线问题定位(交换机发包没有剥掉pvid tag)

一中学&#xff0c;新开的40台appoe交换机核心交换机旁挂ac出口路由的组网&#xff0c;反馈ap无法上线&#xff0c;让协助解决。 组网如下&#xff1a; 排查过程&#xff1a; 检查ac的配置&#xff0c;没有发现问题 发现配置没有问题&#xff0c;vlan1000配置子接口&#xff…...

Linux基础

03.Linux基础 了解VMware备份的两种方式 了解Linux系统文件系统 掌握Linux基础命令 备份操作系统 为什么要备份系统&#xff1f; 数据安全&#xff1a;防止因硬件故障、软件错误等原因导致的数据丢失。 系统恢复&#xff1a;快速恢复系统至正常状态&#xff0c;减少停机时…...

python函数与模块

目录 一&#xff1a;函数 1.无参函数 2.带参数函数 2.函数中变量中的作用域 4.内建函数 二&#xff1a;模块与包 1.模块 &#xff08;1&#xff09;模块定义 &#xff08;2&#xff09;模块导入 2.包 &#xff08;1&#xff09;包的使用 &#xff08;2&#xff09;_…...

线上助农产品商城小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的线上助农产品商城小程序源码&#xff0c;旨在为农产品销售搭建一个高效、便捷的线上平台&#xff0c;助力乡村振兴。 一、技术架构 该小程序源码采用了ThinkPHP作为后端框架&#xff0c;FastAdmin作为快速开发框架&#xff0c;UniApp作为跨…...

个人博客后台管理开发日志

技术栈&#xff1a;Vue3 Ts node.js mySQL pinia axios 3月14日 一、数据表梳理 用户&#xff08;user&#xff09; ID名字邮箱密码 头像 地址 创建 时间 总览有本地文件、博客文章、摄影图库、随笔随记&#xff0c;这些板块也有对应的分类&#xff0c;我们要把这些分类…...

[论文阅读]REPLUG: Retrieval-Augmented Black-Box Language Models

REPLUG: Retrieval-Augmented Black-Box Language Models REPLUG: Retrieval-Augmented Black-Box Language Models - ACL Anthology NAACL-HLT 2024 在这项工作中&#xff0c;我们介绍了RePlug&#xff08;Retrieve and Plug&#xff09;&#xff0c;这是一个新的检索增强型…...

Matlab 基于共面螺旋管或共面亥姆霍兹谐振器的超薄低频吸声板

经典吸声材料的吸声性能严格依赖于材料的厚度&#xff0c;要达到完全吸声&#xff0c;至少需要四分之一波长。在本文中&#xff0c;我们报道了一种厚度约为波长百分之一的超薄吸声板&#xff0c;可以完全吸收声能。其策略是将四分之一波长的减声管弯曲并缠绕成二维共面减声管&a…...

济南国网数字化培训班学习笔记-第二组-4节-输电线路工程安全管理

输电线路工程安全管理 安全标识 颜色 禁止红、警示黄、指令蓝、提示绿 安全器具 定义 安全工器具通常专指“电力安全工器具”&#xff0c;是防止触电、灼伤、坠落、摔跌、腐蚀、窒息等事故&#xff0c;保障工作人员人身安全的各种专用工具和器具 分类 个体防护设备 防…...

【C语言】数据在内存中的存储:从整数到浮点数的奥秘

前言 在计算机的世界里&#xff0c;数据的存储和表示是编程的基础。今天&#xff0c;我们就来深入探讨一下数据在内存中的存储方式&#xff0c;包括整数和浮点数的存储细节&#xff0c;以及大小端字节序的奥秘。这些内容不仅对理解计算机系统至关重要&#xff0c;还能帮助我们…...

白鲸开源WhaleStudio与崖山数据库管理系统YashanDB完成产品兼容互认证

近日&#xff0c;北京白鲸开源科技有限公司与深圳计算科学研究院联合宣布&#xff0c;双方已完成产品兼容互认证。此次认证涉及深圳计算科学研究院自主研发的崖山数据库管理系统YashanDB V23和北京白鲸开源科技有限公司的核心产品WhaleStudio V2.6。经过严格的测试与验证&#…...

图论---朴素Prim(稠密图)

O( n ^2 ) 题目通常会提示数据范围&#xff1a; 若 V ≤ 500&#xff0c;两种方法均可&#xff08;朴素Prim更稳&#xff09;。 若 V ≤ 1e5&#xff0c;必须用优先队列Prim vector 存图。 // 最小生成树 —朴素Prim #include<cstring> #include<iostream> #i…...

借助deepseek和vba编程实现一张表格数据转移到多张工作簿的表格中

核心目标 将工作表中的内容按村社名称分类放入对应位置的目标工作簿的第一个工作表的对应位置 deepseek提问方式 你是一个擅长vba编程的专家&#xff0c;核心目标是奖工作表中的部分内容按下列要求写入对应工作簿的第一个工作表中。第一&#xff0c;在工作表A列中筛选出相…...

springboot整合redis实现缓存

一、redis 二、spring boot 整合redis 三、基于注解的Redis缓存实现 使用Cacheable、CachePut、CacheEvict注解定制缓存管理 对CommentService类中的方法进行修改使用Cacheable、CachePut、CacheEvict三个注解定制缓存管理&#xff0c;修改后的方法如下 Cacheable(cacheNam…...

git tag使用场景和实践

背景 每次上线一个迭代&#xff0c;为了区分本次代码的分支是哪个迭代&#xff0c;可以给分支打上tag&#xff0c;这样利于追踪分支所属迭代&#xff0c;如果devops没有自动给分支打tag&#xff0c;需要自己来打 操作 1.查看当前tag git tag2.给分支打tag git tag <tag…...

十分钟恢复服务器攻击——群联AI云防护系统实战

场景描述 服务器遭遇大规模DDoS攻击&#xff0c;导致服务不可用。通过群联AI云防护系统的分布式节点和智能调度功能&#xff0c;快速切换流量至安全节点&#xff0c;清洗恶意流量&#xff0c;10分钟内恢复业务。 技术实现步骤 1. 启用智能调度API触发节点切换 群联系统提供RE…...

国产紫光同创FPGA视频采集转SDI编码输出,基于HSSTHP高速接口,提供2套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目紫光同创FPGA相关方案推荐本博已有的 SDI 编解码方案本方案在Xilinx--Artix7系列FPGA上的应用本方案在Xilinx--Kintex系列FPGA上的应用本方案在Xilinx--Zynq系列FPGA上…...

最小生成树-prim、kruskal算法

目录 prim算法 kruskal算法 题目练习 &#xff08;1&#xff09;AcWing 858. Prim算法求最小生成树 - AcWing &#xff08;2&#xff09;859. Kruskal算法求最小生成树 - AcWing题库​编辑 学习之前建议温习一下迪杰斯特拉算法和并查集~ 先简单认识下最小生成树&#xff1a…...

【硬核干货】JetBrains AI Assistant 干货笔记

快进来抄作业&#xff0c;小编呕心沥血整理的 JetBrains AI Assistant 超干货笔记&#xff01; 原文链接&#xff1a;【硬核干货】JetBrains AI Assistant 干货笔记 关于晓数神州 晓数神州坚持以“客户为中心”的宗旨&#xff0c;为客户提供专业的解决方案和技术服务&#xff…...

强化学习核心原理及数学框架

1. 定义与核心思想 强化学习&#xff08;Reinforcement Learning, RL&#xff09;是一种通过智能体&#xff08;Agent&#xff09;与环境&#xff08;Environment&#xff09;的持续交互来学习最优决策策略的机器学习范式。其核心特征为&#xff1a; ​​试错学习​​&#x…...

C# 综合示例 库存管理系统4 classMod类

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的 在《库存管理系统》中使用classMod类来保存全局变量。 变量定义和含义,请详见下面的源代码: public class classMod { //数据库路径...

[C] 第6章 C51函数

文章目录 C51函数函数概述从函数定义角度分类从函数有无返回值分类从函数有无参数 函数定义的一般形式C51无参函数的一般形式C51有参函数的一般形式 函数的形式参数和实际参数形式参数实际参数函数的返回值一般形式为&#xff1a; 函数的形参和实参的特点 函数的调用函数的调用…...

docker 配置代理

docker 配置代理有 2 中方法 1.Daemon configuration 直接在 /etc/docker/daemon.json 文件中配置 {"proxies": {"http-proxy": "http://proxy.example.com:3128","https-proxy": "https://proxy.example.com:3129",&quo…...

Redis 深度解析:从核心原理到生产实践

Redis 深度解析&#xff1a;从核心原理到生产实践 一、Redis 核心定位与数据结构 1. 核心能力矩阵深度解析 Redis 作为高性能内存数据库&#xff0c;核心能力覆盖缓存、数据存储、消息中间件等场景&#xff0c;其设计哲学围绕速度优先、内存高效、功能丰富展开&#xff1a; …...

从零搭建高可用分布式限流组件:设计模式与Redis令牌桶实践

一、需求背景与设计目标 在分布式系统中&#xff0c;面对突发流量时需要一种精准可控的流量控制手段。我们的组件需要具备&#xff1a; 多维度限流&#xff08;用户/IP/服务节点/自定义表达式&#xff09;分布式环境下精准控制开箱即用的Spring Boot Starter集成高扩展性的架…...

基于霍尔效应传感器的 BLDC 电机梯形控制方案详解

基于霍尔效应传感器的 BLDC 电机梯形控制方案解读 使用霍尔效应传感器的无刷直流(BLDC)电机梯形控制 一、系统核心架构与技术优势 (一)BLDC 电机与霍尔传感器控制原理 BLDC 电机作为永磁同步电机的一种,其核心特征是转子反电动势为梯形波,定子电流为 120 电角度宽度的矩…...

Pikachu靶场-File Inclusion

文件包含漏洞&#xff08;File Inclusion Vulnerability&#xff09;是Web应用程序中的一种常见安全漏洞&#xff0c;通常由于开发者未对用户输入进行严格过滤&#xff0c;导致攻击者能够包含并执行恶意文件。这种漏洞主要分为两种类型&#xff1a; 1. 漏洞类型 本地文件包含&a…...

如何模拟黑客攻击(Red Teaming)以测试服务器安全性

模拟黑客攻击&#xff08;Red Teaming&#xff09;是评估服务器安全性的有效方法&#xff0c;但需严格遵循**合法授权**和**道德准则**。以下是专业且安全的操作流程&#xff1a; --- ### **1. 前期准备** - **法律授权** - 获得目标系统的**书面授权**&#xff0c;明确测…...

分页查询优惠券

文章目录 概要整体架构流程技术细节小结 概要 接口分析 一个典型的带过滤条件的分页查询&#xff0c;非常简单。按照Restful风格设计即可&#xff0c;我们关注的点有两个&#xff1a; 请求参数 返回值格式 请求参数包含两部分&#xff0c;一个是分页参数&#xff0c;另一…...

QTcpSocket 和 QUdpSocket 来实现基于 TCP 和 UDP 的网络通信

在 Qt 中&#xff0c;您可以通过 QTcpSocket 和 QUdpSocket 来实现基于 TCP 和 UDP 的网络通信。以下是如何使用 Qt 实现这两种通信方式的简要示例。 1. TCP 网络通信 TCP 是面向连接的协议&#xff0c;确保数据的可靠传输。下面是一个简单的 TCP 客户端和服务器示例。 TCP …...

从岗位依附到能力生态:AI革命下“什么叫就业”的重构与价值

在人工智能(AI)技术深刻重塑社会生产关系的当下,“就业”这一概念正经历着从“职业绑定”到“能力变现”的范式转移。本文将从传统就业观的解构、AI赋能艺术教育的价值逻辑、以及未来就业形态的进化方向三个维度,探讨技术驱动下就业的本质变革,并揭示AI技术如何通过教育创…...

2025上海车展 | 移远通信全栈车载智能解决方案重磅亮相,重构“全域智能”出行新范式

2025年4月23日至5月2日&#xff0c;第二十一届上海国际汽车工业展览会在国家会展中心&#xff08;上海&#xff09;盛大启幕。作为车载智能解决方案领域的领军企业&#xff0c;移远通信以“全域智能 驭见未来”为主题&#xff0c;携丰富的车载解决方案及客户终端惊艳亮相8.2馆8…...

LVGL在VScode的WSL2中仿真

目录 一、前言 二、开始部署 1.拉取github的库 2.在WSL安装一些必要的库或者包 3.开始编译 三、注意事项 一、前言 相信有不少兄弟因为苦于没有外设而无法学习LVGL&#xff0c;这里我提供一种WSL中仿真LVGL工程的方法。结果图如下&#xff1a; 二、开始部署 1.拉取github…...

React-组件和props

1、类组件 import React from react; class ClassApp extends React.Component {constructor(props) {super(props);this.state{};}render() {return (<div><h1>这是一个类组件</h1><p>接收父组件传过来的值&#xff1a;{this.props.name}</p>&…...

驱动开发系列53 - 一个OpenGL应用程序是如何调用到驱动厂商GL库的

一:概述 一个 OpenGL 应用程序调用 GPU 驱动的过程,主要是通过动态链接库(libGL.so)来完成的。本文从上到下梳理一下整个调用链,包含 GLVND、Mesa 或厂商驱动之间的关系。 二:调用关系 1. 首先一个 OpenGL 应用程序(比如游戏或图形渲染软件)在运行时会调用 OpenGL 提供…...

【python】一文掌握 markitdown 库的操作(用于将文件和办公文档转换为Markdown的Python工具)

更多内容请见: python3案例和总结-专栏介绍和目录 文章目录 一、markitdown概述1.1 markitdown介绍1.2 MarkItDown支持的文件1.3 为什么是Markdown?二、markitdown安装2.1 pip方式安装2.2 源码安装2.3 docker方式安装三、基本使用3.1 命令行方式3.2 可选依赖项配置3.3 插件方…...

【网络入侵检测】基于Suricata源码分析NFQ IPS模式实现

【作者主页】只道当时是寻常 【专栏介绍】Suricata入侵检测。专注网络、主机安全,欢迎关注与评论。 1. 概要 👋 本文聚焦于 Suricata 7.0.10 版本源码,深入剖析其 NFQ(Netfilter Queue)模式的实现原理。通过系统性拆解初始化阶段的配置流程、数据包监听机制的构建逻辑,以…...

驱动开发硬核特训 · Day 19:从字符设备出发,掌握 Linux 驱动的实战路径(含 gpio-leds 控制示例)

视频教程请关注 B 站&#xff1a;“嵌入式 Jerry” 一、背景说明&#xff1a;字符设备驱动的角色定位 在 Linux 内核驱动体系中&#xff0c;**字符设备驱动&#xff08;Character Device Driver&#xff09;**扮演着关键的桥梁作用&#xff0c;它直接向用户空间程序提供 read/…...

项目——高并发内存池

目录 项目介绍 做的是什么 要求 内存池介绍 池化技术 内存池 解决的问题 设计定长内存池 高并发内存池整体框架设计 ThreadCache ThreadCache整体设计 哈希桶映射对齐规则 ThreadCache TLS无锁访问 CentralCache CentralCache整体设计 CentralCache结构设计 C…...

几种查看PyTorch、cuda 和 Python 版本方法

在检查 PyTorch、cuda 和 Python 版本时&#xff0c;除了直接使用 torch.__version__ 和 sys.version&#xff0c;我们还可以通过其他方式实现相同的功能 方法 1&#xff1a;直接访问属性&#xff08;原始代码&#xff09; import torch import sysprint("PyTorch Versi…...

如何实现跟踪+分割的高效协同?SiamMask中的多任务损失设计

如何实现跟踪分割的高效协同&#xff1f;SiamMask中的多任务损失设计 一、引言二、三大分支损失函数详解2.1 分类分支损失2.2 回归分支损失2.3 Mask分支损失 三、损失加权策略与系数选择3.1 常见超参数设定3.2 动态权重&#xff08;可选&#xff09; 四、训练实践&#xff1a;平…...

MODBUS转EtherNetIP边缘计算网关配置优化:Logix5000与ATV340高效数据同步与抗干扰方案

一、行业背景 智能制造是当前工业发展的趋势&#xff0c;智能工厂通过集成各种自动化设备和信息技术&#xff0c;实现生产过程的智能化、自动化和高效化。在某智能工厂中&#xff0c;存在大量采用ModbusTCP协议的设备&#xff0c;如智能传感器、变频器等&#xff0c;而工厂的主…...

从代码学习深度学习 - 图像增广 PyTorch 版

文章目录 前言一、图像增广的基本概念二、PyTorch中的图像增广实现三、数据加载与处理四、模型训练与评估五、实验设置与执行六、实验结果与分析七、讨论总结前言 在深度学习中,数据是关键。尤其是在计算机视觉任务中,高质量且丰富多样的数据对模型性能有着决定性的影响。然…...

从机械应答到智能对话:大模型为呼叫注入智慧新动能

引言 在当今竞争激烈的商业环境中&#xff0c;高效和有效的客户沟通对于企业的成功至关重要。智能外呼系统已成为企业与潜在客户和现有客户互动的重要工具。最近&#xff0c;大模型&#xff08;如大型语言模型或 LLMs&#xff09;的出现为这些系统带来了显著的提升&#xff0c…...

深入浅出 Python 协程:从异步基础到开发测试工具的实践指南

Python 的异步编程近年来越来越受欢迎&#xff0c;尤其在需要同时处理大量 I/O 请求的场景中&#xff0c;它展现了出色的性能。而协程是异步编程的核心&#xff0c;也是开发高效异步测试工具的关键技术。 这篇文章将用通俗的语言带你快速入门 Python 协程&#xff0c;结合实际…...

算法之分支定界

分支定界 分支定界概述核心思想与步骤常见变体复杂度分析案例分析1. 0-1背包问题2. 最短路径问题&#xff08;分支定界法&#xff09;3. 旅行商问题&#xff08;TSP&#xff09; 分支定界 概述 分支定界&#xff08;Branch and Bound&#xff09;是一种用于解决组合优化问题的…...

Hugging Face上面找开源的embedding模型

问题 想找一个支持中文的embedding模型&#xff08;把一段文本转化成多维度的向量&#xff09;。Hugging Face平台上面共享了很多开源模型&#xff0c;算是这年头&#xff08;2025年&#xff09;&#xff0c;大家都把自己开源模式都往上放的地方了吧。现在去这个平台上面找一个…...

docker部署Jenkins工具

环境准备 1.当前安装在Windows系统下的Docker-Desktop 下载地址&#xff1a;Docker Desktop: The #1 Containerization Tool for Developers | Docker 2.下载后进行安装并进行配置启动docker 3.创建一个空的文件夹&#xff0c;用于后面的启动时做文件路径映射 下载镜像 d…...