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

【实体转换】mapstruct详解

        大家好,我是jstart千语。今天来给大家讲讲在项目中经常可以使用得到的一个“工具”,就是mapstruct。

一、工具介绍

        这个工具有些类似于spring提供的BeanUtils.copyProperties()用于对象转化。而mapstruct是通过生成高效的、类型安全的映射代码来帮助开发人员在不同的数据对象之间进行转换。但他们的实现方式大有不同,从而他们从性能方面也会有差异。

        总得来说,如果项目中使用到的实体转换场景不多,那么使用BeanUtils就可以了,但如果项目中需要大量使用到实体转换,那么使用mapstruct在提高性能方面就是一个很好的选择

二、引入依赖

一般来说引入两个依赖,但是如果你用到了lombok依赖,一定要将lombok依赖放到mapstruct依赖前面

        <!-- lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency>        <!-- mapstruct --><dependency><groupId>org.mapstruct</groupId><artifactId>mapstruct</artifactId><version>1.4.2.Final</version></dependency><dependency><groupId>org.mapstruct</groupId><artifactId>mapstruct-processor</artifactId><version>1.4.2.Final</version></dependency>

三、实现方法

mapstruct的实现方法有两种方式:

  • 依靠spring的依赖注入实现
  • 通过使用mapstruct静态工厂来实现

区别:

spring依赖注入更符合spring的代码风格, 支持自动注入其他 Bean。
mapstruct静态工厂简单直接,实例生命周期需手动管理

两种在性能上没有什么区别,我更喜欢用静态工厂这种方法,因为它足够简单,只需要一行代码就可以搞定。


1、spring依赖注入方式

定义Mapper接口,使用@Mapper注解并指定componentModel = "spring",使其成为Spring Bean

// Mapper 接口(配置 componentModel = "spring")
@Mapper(componentModel = "spring")
public interface JudgeSubjectConverter {JudgeSubjectDTO toDto(JudgeSubject judgeSubject);
}// 使用方式(通过注入)
@Service
public class MyService {@Autowiredprivate JudgeSubjectConverter judgeSubjectConverter;public void process() {JudgeSubject judgeSubject = new JudgeSubject();JudgeSubjectDTO judgeSubjectDTO = judgeSubjectConverter.toDto(judgeSubject);}
}

2、mapstruct静态工厂

@Mapper
public interface JudgeSubjectConverter {JudgeSubjectConverter INSTANCE = Mappers.getMapper(JudgeSubjectConverter.class);JudgeSubjectDTO toDto(JudgeSubject judgeSubject);
}// 使用方式:直接通过类名调用
@Service
public void myService(){//...JudgeSubject judgeSubject = new JudgeSubject();JudgeSubjectDTO judgeSubjectDTO = JudgeSubjectConverter.INSTANCE.toDto(judgeSubject);//...}

3、共同功能

首先记得添加@Mapper注解时,导入的是mapstruct的包,不要导入了mybatis的包了。

(1)处理字段映射

默认的映射关系就是只有属性名相同才会映射转换,如果两个实体的属性名不同还需要进行转换的话就需要手动映射。

public class User {private String email;
}public class UserDTO {private String emailAddress;
}// Mapper 接口
@Mapper
public interface UserMapper {@Mapping(source = "email", target = "emailAddress")UserDTO toDto(User user);
}

(2)忽略字段

public class User {private String password;
}public class UserDTO {private String password; // 不希望映射此字段
}// Mapper 接口
@Mapper
public interface UserMapper {@Mapping(target = "password", ignore = true)UserDTO toDto(User user);
}

(3)格式化日期

public class User {private Date createTime;
}public class UserDTO {private String createTime;
}// Mapper 接口
@Mapper
public interface UserMapper {@Mapping(target = "createTime", dateFormat = "yyyy-MM-dd HH:mm:ss")UserDTO toDto(User user);
}

(4)多源对象映射

public class Order {private String orderId;
}public class User {private String userId;
}public class OrderDTO {private String orderId;private String userId;
}// Mapper 接口
@Mapper
public interface OrderMapper {@Mapping(source = "order.orderId", target = "orderId")@Mapping(source = "user.userId", target = "userId")OrderDTO toDto(Order order, User user);
}

例2:

/**
*题目信息表
*/
@Data
public class SubjectInfo implements Serializable {private static final long serialVersionUID = -71318372165220898L;/*** 主键*/private Long id;/*** 题目名称*/private String subjectName;}
---------------------------------------------------------------------------------------/**
*题目DTO
*/
@Data
public class SubjectOptionBO implements Serializable {/*** 题目答案*/private String subjectAnswer;/*** 题目选项的答案内容*/private List<SubjectAnswerBO> optionList;}
---------------------------------------------------------------------------------------
/**
*题目BO
*/
@Data
public class SubjectInfoBO extends PageInfo implements Serializable {//主键private Long id;//题目名称private String subjectName;//题目答案private String subjectAnswer;//答案选项private List<SubjectAnswerBO> optionList;}
---------------------------------------------------------------------------------------/**
* 多源类型转换
*/
@Mapper
public interface SubjectInfoConverter {SubjectInfoBO convertOptionAndInfoToBo(SubjectOptionBO subjectOptionBO,SubjectInfo subjectInfo);
}

(5)设置默认值

当源字段为 null 时,使用默认值:

@Mapping(target = "description", source = "desc", defaultValue = "暂无描述")
ProductDTO toDto(Product product);

(6)设置常量值

直接为目标字段赋固定值:

@Mapping(target = "type", constant = "VIP")
UserDTO toDto(User user);



四、与BeanUtils.copyProperties()比较

他们两个都可以进行对象转换,最主要的区别就是性能上了。

(1)Spring 的 BeanUtils.copyProperties()

底层是通过 Java 的 反射机制 实现的:

  • 运行时获取源对象和目标对象的 getter/setter 方法;
  • 检查方法签名是否匹配;
  • 动态调用 setXxx() 设置属性值。

性能影响:

  • 反射调用慢:反射比直接方法调用慢得多,因为它要解析类结构、做安全检查、动态调用方法;

  • 运行期做类型判断和匹配:每次调用都要做这些检查;

  • 不可内联优化:JVM 对反射方法优化很有限,无法像普通方法调用一样 JIT 编译优化。 


(2)MapStruct 是编译期生成代码(纯 Java)

MapStruct 在你编译代码的时候,就自动生成了普通 Java 类和方法来做对象转换,不使用反射。

  • 这些方法就是标准的 obj.setXxx(obj.getYyy());
  • 完全等同于你自己写一堆 setter 调用,只不过 MapStruct 自动帮你写好了。

性能优势:

  • 没有反射开销

  • 纯 Java 调用,JVM 可以 JIT 优化、内联优化

  • 内存更友好,因为不需要动态创建 Method 对象;

  • 执行速度接近你手写转换方法的极限。 


(3)MapStruct 字节码展示

编译完后:

相关文章:

【实体转换】mapstruct详解

大家好&#xff0c;我是jstart千语。今天来给大家讲讲在项目中经常可以使用得到的一个“工具”&#xff0c;就是mapstruct。 一、工具介绍 这个工具有些类似于spring提供的BeanUtils.copyProperties()用于对象转化。而mapstruct是通过生成高效的、类型安全的映射代码来帮助开发…...

部署路线Ubuntu_MySQL_Django_绑定域名

第 1 步&#xff1a;绑定域名&#xff08;DNS&#xff09; 在域名服务商后台&#xff08;例如阿里云 / 腾讯云 / Cloudflare&#xff09;中设置&#xff1a; A 记录 →域名 → 指向服务器公网 IP 可选&#xff1a;也加一个 www.域名 → 同样指向服务器 第 2 步&#xff1a;安…...

大屏设计与汇报:政务服务可视化实践

大屏设计与汇报:政务服务可视化实践 引言 在政务服务数字化转型浪潮中,大屏设计成为展现业务能力与数据价值的关键手段。本文围绕政务大屏设计,从设计要点、业务逻辑到汇报技巧展开深入探讨,为相关从业者提供全面参考。 一、大屏设计核心要点 (一)多维度考量 设计大…...

【MySQL】数据库和表的操作详解

目录 一、数据库&#xff1a; 1、查看数据库&#xff1a; 2、创建数据库&#xff1a; 3、删除数据库&#xff1a; 4、数据库的编码问题&#xff1a; 5、校验规则对数据库的影响&#xff1a; 6、修改数据库&#xff1a; 7、库的备份与恢复&#xff1a; 8、查看链接情况…...

从PDF到播客:MIT开发的超越NotebookLM的工具

NotebookLM是谷歌推出的更具创意的AI产品之一,几个月前刚刚推出。 许多人对它的能力感到惊叹——尤其是将长文本转化为两位播客主持人之间有趣对话的功能。 NotebookLM提供的不仅仅是这些,还包括聊天(问答)甚至生成思维导图。 如果你还没有尝试过NotebookLM,我强烈建议…...

ubuntu系统上基于RKE2部署K8S及Rancher

由于我们特殊的网络环境&#xff0c;所以只能使用国内资源来进行安装 - Rancher Releases Mirrors&#xff1a;https://mirror.rancher.cn/ - 阿里云镜像仓库&#xff1a;registry.cn-hangzhou.aliyuncs.com 1、配置资源仓库及token rootdemo-1:~# mkdir -p /etc/rancher/r…...

STM32单片机入门学习——第40节: [11-5] 硬件SPI读写W25Q64

写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难&#xff0c;但我还是想去做&#xff01; 本文写于&#xff1a;2025.04.18 STM32开发板学习——第一节&#xff1a; [1-1]课程简介第40节: [11-5] 硬件SPI读…...

vue3学习笔记之属性绑定

属性绑定 1. 基本语法 在 Vue 3 里&#xff0c;使用 : 或者 v-bind: 来进行属性绑定。这两种写法是等价的&#xff0c;: 是 v-bind: 的缩写形式。以下是示例代码&#xff1a; <template><!-- 使用缩写形式 --><img :src"imageUrl" alt"An exa…...

C++ 面向对象关键语法详解:override、虚函数、转发调用和数组引用传参-策略模式

int A(参数...) override { return 某个对象.A(参数...);} 一.目标 本文将用一个简单的“数学运算器”例子&#xff0c;从零解释以下 C 语法特性&#xff1a; virtual 虚函数 override 重写关键字 函数体内部的“转发调用” 数组引用作为函数参数 适合初学者和希望加深…...

Spring_MVC 快速入门指南

Spring_MVC 快速入门指南 一、Spring_MVC 简介 1. 什么是 Spring_MVC&#xff1f; Spring_MVC 是 Spring 框架的一个模块&#xff0c;用于构建 Web 应用程序。它基于 MVC&#xff08;Model-View-Controller&#xff09;设计模式&#xff0c;将应用程序分为模型&#xff08;M…...

Starrocks 数据均衡DiskAndTabletLoadReBalancer的实现

背景 最近在研究了一下 Starrocks的tablet的Rebalance的能力&#xff0c;这里进行记录一下 本文基于 StarRocks 3.3.5 结论 数据的rebalance 主要以两种模式来进行&#xff1a; 按照磁盘的使用率进行移动&#xff0c;如果每个BE的磁盘使用率不足tablet_sched_balance_load_…...

设计模式之工厂方法模式

1. 核心思想 工厂方法模式&#xff08;Factory Method Pattern&#xff09;将对象的创建过程延迟到子类。具体来说&#xff0c;定义一个创建对象的接口&#xff08;抽象工厂&#xff09;&#xff0c;但由子类决定实例化哪个具体类。这种方式解耦了对象的创建和使用&#xff0c…...

ubuntu学习day3

3 编译与调试 3.1 gcc/g编译器 当我们进行编译的时候&#xff0c;要使用一系列的工具&#xff0c;我们称之为工具链。SDK就是编译工具链的简写&#xff0c;我们所使用的是gcc系列编译工具链。使用-v参数来查看gcc的版本&#xff0c;从而确定某些语法特性是否可用&#xff0c;…...

【从零实现高并发内存池】申请、释放内存过程联调测试 与 大于256KB内存申请全攻略

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客仓库&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &…...

element-plus添加暗黑模式

main.ts文件 //引入暗黑模式样式 import "element-plus/theme-chalk/dark/css-vars.css"; style.scss文件 // 设置默认主题色 :root {--base-menu-min-width: 80px;--el-color-primary-light-5: green !important;--route--view--background-color: #fff !import…...

第八周作业

1、使用Sqlmap工具完成对DVWA数据库的注入过程&#xff0c;要求按照库、表、列、内容的顺序进行注入 使用kali自带的sqlmap工具进行 (1)爆破库名 sqlmap -u "http://10.0.0.5:8080/vulnerabilities/sqli/?id1&SubmitSubmit#" -p id --cookie "PHPSESSID…...

工作督导 | 具有边缘型人格障碍倾向的高危来访者,咨询师如何应对?

一个学校心理中心&#xff0c;可能同时有几十位乃至数百位同学在接受咨询&#xff0c;其中大约10-20%是重点难点个案&#xff0c;一次督导如果只能督导1-2个个案&#xff0c;不足以保障所有危重难个案的有如何处理恰当、方向正确、快速解决、高效工作&#xff0c;是学校心理咨询…...

c++ map与unordered_map的比较

c map与unordered_map的比较 在c的STL库中&#xff0c;有map与unordered_map这两种名字十分相似的容器&#xff0c;但是他们的区别还是很大&#xff0c;下面我们从 底层实现、性能特性 和 适用场景进行逐一比较 底层实现 std::mapstd::unordered_map底层数据结构红黑树&…...

新手蓝桥杯冲击国一练习题单(四)

2025蓝桥杯省赛已结束&#xff0c;接下来是冲击国赛的时间 此题单为算法基础精选题单&#xff0c;包含蓝桥杯常考考点以及各种经典算法&#xff0c;可以帮助你打牢基础&#xff0c;查漏补缺。 本题单目标是冲击蓝桥杯省一国一&#xff0c;团体程序天梯赛个人国三、XCPC区域赛铜…...

PyTorch深度学习框架60天进阶学习计划 - 第45天:神经架构搜索(一)

PyTorch深度学习框架60天进阶学习计划 - 第45天&#xff1a;神经架构搜索&#xff08;一&#xff09; 第一部分&#xff1a;详解DARTS的可微分搜索空间 大家好&#xff01;欢迎来到我们PyTorch深度学习框架进阶学习计划的第45天。今天我们将深入探讨神经架构搜索(Neural Arch…...

【java 13天进阶Day04】常用API、正则表达式,泛型、Collection集合API

Math类的使用。 Math用于做数学运算。Math类中的方法全部是静态方法&#xff0c;直接用类名调用即可。方法&#xff1a; public static int abs(int a) 获取参数a的绝对值public static double ceil(double a) 向上取整public static double floor(double a) 向下取整public s…...

leetcode 309. Best Time to Buy and Sell Stock with Cooldown

目录 题目描述 第一步&#xff0c;明确并理解dp数组及下标的含义 第二步&#xff0c;分析并理解递推公式 1.求dp[i][0] 2.求dp[i][1] 3.求dp[i][2] 第三步&#xff0c;理解dp数组如何初始化 第四步&#xff0c;理解遍历顺序 代码 题目描述 这道题与第122题的区别就是卖…...

RAG 实战|用 StarRocks + DeepSeek 构建智能问答与企业知识库

文章作者&#xff1a; 石强&#xff0c;镜舟科技解决方案架构师 赵恒&#xff0c;StarRocks TSC Member &#x1f449; 加入 StarRocks x AI 技术讨论社区 https://mp.weixin.qq.com/s/61WKxjHiB-pIwdItbRPnPA RAG 和向量索引简介 RAG&#xff08;Retrieval-Augmented Gen…...

Java拼团项目

一些记录 环境配置 首先是把配置安装好&#xff0c;jdk1.8&#xff0c;maven3.8.8&#xff0c;docker&#xff0c;idea&#xff0c;脚手架 然后创建工程&#xff0c;通过小傅哥的脚手架从远程把一些包&#xff0c;依赖拉过来 然后在gitcode上边创建仓库&#xff0c;把代码提交…...

力扣每日打卡 2364. 统计坏数对的数目 (中等)

力扣 2364. 统计坏数对的数目 中等 前言一、题目内容二、解题方法1. 哈希函数12. 哈希函数22.官方题解2.1 方法一&#xff1a;使用 sqrt 函数 前言 这是刷算法题的第十四天&#xff0c;用到的语言是JS 题目&#xff1a;力扣 2364. 统计坏数对的数目 (中等) 一、题目内容 给你…...

R语言之.rdata文件保存及加载

在 R 中&#xff0c;.rdata 文件是通过 save() 函数创建的。 使用 save() 函数可以将一个或多个 R 对象保存到 .rdata 文件中。使用 load() 函数可以将 .rdata 文件中的对象恢复到当前工作环境中。 1.创建并保存对象到.rdata 假设有一个基于 iris 数据集训练的线性回归模型&a…...

神经网络优化 - 小批量梯度下降之批量大小的选择

上一博文学习了小批量梯度下降在神经网络优化中的应用&#xff1a; 神经网络优化 - 小批量梯度下降-CSDN博客 在小批量梯度下降法中&#xff0c;批量大小(Batch Size)对网络优化的影响也非常大&#xff0c;本文我们来学习如何选择小批量梯度下降的批量大小。 一、批量大小的…...

开源AI守护每一杯------奶茶咖啡店视频安全系统的未来之力

连锁饮品奶茶咖啡店视频安全系统以开源AI技术为引擎&#xff0c;将后厨管理从“被动查漏”升级为“主动防控”&#xff0c;让消费者从“担心卫生”变为“放心下单”。 解决方案亮点&#xff1a;技术驱动&#xff0c;全面防护 1. 实时监控与AI识别&#xff1a;秒级捕捉隐患 亮…...

音视频元素

目录 HTMLMediaElement网络状态 (networkState)就绪状态 (readyState)错误代码 (error.code) video属性方法事件 audio HTMLMediaElement HTMLMediaElement 是 HTML5 中 和 元素的基类&#xff0c;定义了它们共享的属性、方法和事件。无论你使用的是音频还是视频元素&#xff0…...

音视频小白系统入门课-2

本系列笔记为博主学习李超老师课程的课堂笔记&#xff0c;仅供参阅 课程传送门&#xff1a;音视频小白系统入门课 音视频基础ffmpeg原理 往期课程笔记传送门&#xff1a; 音视频小白系统入门笔记-0音视频小白系统入门笔记-1 课程实践代码仓库&#xff1a;传送门 音视频编解…...

时序逻辑电路——序列检测器

文章目录 一、序列检测二、牛客真题1. 输入序列连续的序列检测&#xff08;输入连续、重叠、不含无关项、串行输入&#xff09;写法一&#xff1a;移位寄存器写法二&#xff1a;Moore状态机写法三&#xff1a;Mealy状态机 一、序列检测 序列检测器指的就是将一个指定的序列&…...

#systemverilog# 进程控制问题#(八)关于#0 问题的使用(三)

今天,我们继续研究一下上一节讨论的问题。其实,还有一个小问题,我们来探讨一下。 `timescale 1ns/10psmodule tb_top(); reg clk; reg reset;initial begin reset = 0; #10 reset = 1; #15 reset = 0; #50 $finish; endinitial beginfor(int i = 0; i < 4 ; i++)fork #…...

k8s低版本1.15安装prometheus+grafana进行Spring boot数据采集

目录 一、背景&#xff1a; 二、实施过程 1&#xff09;.安装地址&#xff1a;https://github.com/prometheus-operator/kube-prometheus 2).安装方式两种&#xff0c; 3&#xff09;.安装Prometheus需要对照k8s集群版本。 4&#xff09;.拉去prometheus 5&#xff09;.导…...

Spring-Ioc容器的加载过程?

大家好&#xff0c;我是锋哥。今天分享关于【SpringIoC的实现机制是什么&#xff1f;】面试题。希望对大家有帮助&#xff1b; Spring-Ioc容器的加载过程&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Spring IoC容器的加载过程是指在应用启动时&…...

kaamel Privacy agent:AI赋能的隐私保护技术解决方案

智能隐私合规解决方案 在当今数字经济环境下&#xff0c;有效的隐私合规已成为企业运营的基础要求。全球范围内已有超过120项隐私法规生效&#xff0c;这对企业的数据处理流程提出了严峻挑战。kaamel Privacy agent作为专门为隐私合规领域设计的AI引擎&#xff0c;通过自动化技…...

从零到上线!AI生成SpringBoot项目脚手架实战(含K8s+Docker配置)

在 Java 开发领域,搭建 Spring Boot 项目脚手架是一项耗时且繁琐的工作。传统方式下,开发者需要手动配置各种依赖、编写基础代码,过程中稍有疏忽就可能导致配置错误,影响开发进度。如今,随着 AI 技术的迅猛发展,飞算 JavaAI 的出现为开发者带来了全新解决方案,让自动生成 Sprin…...

VueRouter笔记

定义路由 import { createMemoryHistory, createRoute } from vue-router; import MyView1 from ./MyView1.vue; import MyView2 from ./MyView2.vue;const routes [{ path: /1, component: MyView1 },{ path: /2, component: MyView2 } ];const router createRouter({histo…...

vue3 Element-plus修改内置样式复现代码

笔者在修改Element-plus的内置样式时&#xff0c;遇到一点挫折&#xff0c;现提供需求场景与解决方案。 一、实现&#xff08;1&#xff09;透明弹窗可拖拽&#xff0c;且不影响点击弹窗外内容&#xff1b;&#xff08;2&#xff09;弹窗内置表格&#xff0c;表格需修改样式颜色…...

easyui进度条

简单打开和关闭 // 展示进度条 $.messager.progress({title: 请稍候,msg: 系统处理中...,text: 0%});//关闭进度条 $.messager.progress(close); easyui 普通提示 <!DOCTYPE html> <html> <head><meta charset"UTF-8">&l…...

vcpkg缓存问题研究

vcpkg缓存问题研究 问题描述解决方案官网给出的方案其实并不是大多数人语境中的“清除缓存”实际解决方案 问题描述 使用vcpkg管理c的库的时候&#xff0c;vcpkg会在c盘某些地方缓存下载的库&#xff0c;如果安装的库过多&#xff0c;这个缓存文件夹会过大占用磁盘空间&#x…...

优化WAV音频文件

优化 WAV 音频文件通常涉及 减小文件体积、提升音质 或 适配特定用途&#xff08;如流媒体、广播等&#xff09;。以下是分场景的优化方法&#xff0c;涵盖工具和操作步骤&#xff1a; 一、减小文件体积&#xff08;无损/有损压缩&#xff09; 1. 无损压缩 转换格式&#xff1…...

系统架构设计师:流水线技术相关知识点、记忆卡片、多同类型练习题、答案与解析

题目&#xff1a; 流水线技术中&#xff0c;若某流水线分为5段&#xff0c;每段执行时间为Δt&#xff0c;则执行100条指令的总时间为&#xff08; &#xff09; A. 100Δt B. 104Δt C. 500Δt D. 505Δt 答案&#xff1a;B‌ ‌解析&#xff1a;流水线总时间(nk-1)Δt&#…...

test ssl java

// 文件名&#xff1a;SslUtilsTest.java// 包路径&#xff1a; import static org.junit.Assert.*; import static org.mockito.Mockito.*; import java.io.InputStream; import java.security.KeyStore; import javax.net.ssl.SSLContext; import org.apache.hc.client5…...

【系统分析师】-软件工程

考点汇总 考点详情 软件生存周期&#xff1a;可行性分析与项目开发计划&#xff0c;需求分析&#xff0c;概要设计&#xff0c;详细设计&#xff0c;编码&#xff0c;测试&#xff0c;维护 软件能力成熟度模型 CMM&#xff1a;初始级&#xff0c;可重复级&#xff0c;已定义级…...

FFmpeg 硬核指南:从底层架构到播放器全链路开发实战 基础

目录 1.ffmpeg的基本组成2.播放器的API2.1 复用器阶段2.1.1 分配解复用上下文2.1.2 文件信息操作2.1.3 综合示例 2. 2 编解码部分2.2.1 分配解码器上下文2.2.2编解码操作2.2.3 综合示例 3 ffmpeg 内存模型3.1 基本概念3.2API 1.ffmpeg的基本组成 模块名称功能描述主要用途AVFo…...

2025MathorcupD题 短途运输货量预测及车辆调度问题 保姆级教程讲解|模型讲解

2025Mathorcup数学建模挑战赛&#xff08;妈妈杯&#xff09;D题保姆级分析完整思路代码数据教学 其中更详细的思路&#xff0c;各题目思路、代码、讲解视频、成品论文及其他相关内容&#xff0c;可以点击下方群名片哦&#xff01;...

CSS 包含块

CSS 中的包含块&#xff08;Containing Block&#xff09;是一个非常重要的概念&#xff0c;它定义了元素在布局中的参考框架。元素的尺寸、位置和偏移量通常都是基于其包含块来计算的。理解包含块的概念对于掌握 CSS 布局至关重要。 1. 包含块的作用 定位元素&#xff1a;当…...

嵌入式设备网络的动态ID分配机制实现

文章目录 前言一、系统设计要点二、核心数据结构2.1 设备唯一标识(DeviceUID)2.2 节点信息(Node)2.3 节点管理器(NodeManager) 三、核心算法实现3.1 初始化与清理3.1.1 初始化节点管理器3.1.2 清理节点管理器 3.2 动态ID分配策略3.2.1 查找最小可用ID3.2.2 ID使用检查 3.3 心跳…...

(论文阅读)RNNoise 基于递归神经网络的噪声抑制库

RNNoise 是一个基于递归神经网络的噪声抑制库。 有关该算法的描述见以下论文&#xff1a; J.-M. Valin, A Hybrid DSP/Deep Learning Approach to Real-Time Full-Band Speech Enhancement, Proceedings of IEEE Multimedia Signal Processing (MMSP) Workshop, arXiv:1709.08…...

Linux:线程概念与控制

✨✨所属专栏&#xff1a;Linux✨✨ ✨✨作者主页&#xff1a;嶔某✨✨ Linux&#xff1a;线程概念于控制 var code “d7e241ae-ed4d-475f-aa3d-8d78f873fdca” 概念 在一个程序里的一个执行路线就叫做线程thread。更准确一点&#xff1a;线程是“一个进程内部的控制序列” …...