多线程并发造成的数据重复问题解决方案参考(笔记记录)
一、添加 MySQL 组合唯一索引,需要注意什么坑?
在 MySQL 中,创建组合唯一索引(Composite Unique Index)时,需要注意以下一些容易踩的坑:
1. 字段顺序影响索引使用
问题:组合唯一索引的字段顺序会影响查询性能和匹配情况。例如:
UNIQUE KEY (column_a, column_b)
和 UNIQUE KEY (column_b, column_a)
是完全不同的索引。
- 索引
(column_a, column_b)
可用于查询WHERE column_a = ? AND column_b = ?
或WHERE column_a = ?
。 - 它不能直接优化
WHERE column_b = ?
。
解决:根据实际查询场景设计索引字段顺序,最常用的字段放前面。
2. 插入数据需符合唯一性约束
问题:插入或更新数据时,必须确保组合索引的所有字段组合的值是唯一的。如果其中某个字段允许 NULL
,会带来意想不到的结果:
- 在 MySQL 中,
NULL
不参与唯一性比较。 - 如果索引包含
NULL
值,如(1, NULL)
和(1, NULL)
,MySQL 会认为它们是不同的。
解决:
- 如果需要严格唯一,确保所有字段都设置为
NOT NULL
。 - 如果允许
NULL
,检查业务逻辑是否能够处理上述情况。
3. 索引长度限制
问题:组合索引的长度受限,尤其是使用 VARCHAR
或 TEXT
类型时:
- 索引长度在 InnoDB 表中,单个索引字段长度总和不能超过 3072 字节(MySQL 8.0 默认设置)。
- 超过限制会报错:
Specified key was too long; max key length is 3072 bytes
。
解决:
- 控制索引字段的长度,使用前缀索引(
KEY(column(50))
)。 - 设计数据库时避免过长的
VARCHAR
或TEXT
类型用于索引字段。
4. 隐式索引
问题:在创建外键时,MySQL 会自动为外键字段生成索引。如果这个字段已经是组合索引的一部分,可能导致多余的索引,影响性能。
解决:
- 确认外键字段是否需要单独索引。
- 避免不必要的重复索引。
5. 查询优化器可能不使用组合索引
问题:如果查询语句的条件只使用了部分组合索引字段,MySQL 查询优化器可能不会使用索引。例如:
- 索引是
(column_a, column_b)
。 - 查询是
WHERE column_b = ?
。
解决:
- 确保查询条件尽量使用索引字段的前缀部分。
- 为单独使用频繁的字段创建单独的索引。
6. 更新操作的性能问题
问题:组合索引中的字段发生变化时,MySQL 需要同时更新索引,可能导致性能问题。
解决:
- 减少频繁更新索引字段的场景。
- 如果索引字段需要经常更新,重新评估索引设计是否合理。
7. 唯一索引和业务逻辑冲突
问题:组合唯一索引依赖数据库层面约束,如果业务逻辑不匹配可能会引发冲突。例如:
- 一个字段允许重复,但结合另一个字段需要唯一。
- 复杂的业务规则可能需要动态约束。
解决:
- 明确业务规则,确保数据库约束与业务逻辑一致。
- 必要时,在业务逻辑中补充检查,避免直接依赖数据库约束。
8.总结以下注意事项:
组合唯一索引的坑主要体现在 字段顺序、NULL处理、索引长度、查询优化和业务匹配 上。在设计时:
- 优化字段顺序,优先考虑查询场景。
- 确保字段非空或处理好 NULL。
- 避免长字段造成的索引超长。
- 使用 EXPLAIN 检查查询是否命中索引。
- 定期审查索引设计,确保性能和业务需求匹配。
如果你有具体问题或场景,可以分享下,我可以帮你分析优化方案!
二、可以用加锁的方式来解决加组合唯一索引问题?
当然,加锁可以在一定程度上解决组合唯一索引的一些问题,但需要根据场景谨慎选择是否使用锁,因为加锁可能带来性能开销甚至死锁问题。
以下是一些场景中通过加锁解决问题的方式及其优劣势:
1. 插入或更新时的唯一性校验
问题:组合唯一索引未覆盖复杂的业务规则,导致违反唯一性要求。
解决方案:通过 事务和行级锁 保证并发下的唯一性。
-
实现方法:
在操作之前显式使用SELECT ... FOR UPDATE
检查是否存在冲突数据,确保当前事务持有锁后再执行插入或更新。示例代码:
START TRANSACTION;SELECT id FROM your_table WHERE column_a = ? AND column_b = ? FOR UPDATE;-- 如果上述查询无结果,说明不存在冲突,可以插入 INSERT INTO your_table (column_a, column_b, value) VALUES (?, ?, ?);COMMIT;
-
优点:
- 通过锁住相关行,避免并发事务插入或更新冲突。
- 保证业务层的唯一性校验逻辑不会因并发问题失效。
-
缺点:
- 性能开销较大,尤其在高并发场景下可能导致事务等待。
- 如果事务未正确释放锁,可能引发死锁问题。
2. 处理 NULL
值的唯一性
问题:组合索引中 NULL
不参与唯一性约束,导致数据重复问题。
解决方案:
通过业务逻辑加锁或避免 NULL
值。
-
实现方法:
- 禁用
NULL
值,设置字段为NOT NULL
,并提供默认值。 - 对组合字段加锁,比如在插入时对全表或相关行加锁。
SELECT id FROM your_table WHERE (column_a = ? AND column_b IS NULL) FOR UPDATE;
- 禁用
-
替代方案:避免锁操作,使用触发器检查唯一性规则。
3. 批量插入或更新冲突问题
问题:批量操作可能引发唯一索引冲突。
解决方案:显式加锁限制并发,确保批量操作独占资源。
-
实现方法:对整个表或特定范围加表级锁:
LOCK TABLES your_table WRITE;-- 批量插入 INSERT INTO your_table (column_a, column_b, value) VALUES (?, ?, ?);UNLOCK TABLES;
-
优点:
- 批量操作中避免冲突。
- 不需要额外业务逻辑检查。
-
缺点:
- 表级锁会阻塞其他事务,可能降低并发性能。
4. 索引覆盖范围不足的问题
问题:查询条件未覆盖组合索引的前缀部分,导致索引未生效,查询或更新效率低下。
解决方案:加行级锁配合补充逻辑。
-
实现方法:
通过锁定相关行,明确查询逻辑,即使未命中索引也能避免并发问题:SELECT * FROM your_table WHERE column_b = ? FOR UPDATE;
-
优点:保障一致性。
-
缺点:对性能要求较高的场景可能拖慢响应。
5.什么时候避免加锁?
- 高并发场景:加锁可能导致大量事务等待,降低系统吞吐量。
- 读多写少场景:过多锁操作可能浪费资源。
- 简单规则场景:如果数据库的组合唯一索引已经可以解决问题,无需加锁。
6.更好的替代方案
-
通过分布式锁(如 Redis)控制跨数据库实例的并发操作:
- 适用于分布式场景。
- 性能高,但需小心锁的粒度和过期策略。
-
触发器:
- 使用数据库触发器实现更灵活的唯一性校验。
CREATE TRIGGER before_insert_unique_check BEFORE INSERT ON your_table FOR EACH ROW BEGINIF EXISTS (SELECT 1 FROM your_table WHERE column_a = NEW.column_a AND column_b = NEW.column_b) THENSIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Duplicate entry for combination';END IF; END;
-
应用层校验:
- 在应用代码中,插入或更新前先查询校验。
- 适合中低并发场景,但仍需配合事务和加锁处理边界问题。
7.可以总结为:
加锁可以有效解决组合唯一索引的部分问题,尤其在并发写操作时。但加锁会带来性能开销,需结合业务需求权衡。如果可能:
- 优先通过索引设计优化和字段规则(如
NOT NULL
)规避问题。 - 在高并发场景中,尝试使用分布式锁或应用层校验结合数据库事务。
三、那么对于组合索引,如果历史数据为空值,需要把空值补充完整么?
当然,在某些情况下需要补充完整历史数据的空值,但是否需要具体取决于业务需求和索引规则。以下是需要补充或不需要补充的情况分析及操作建议:
1.需要补充空值的情况
1. 避免索引唯一性约束失效
-
原因:MySQL 在唯一索引中将
NULL
视为不同的值,这可能导致意外的重复数据。例如:- 如果组合索引是
(column_a, column_b)
,column_b
包含NULL
值:- 允许插入
(1, NULL)
和(1, NULL)
,索引约束没有生效。
- 允许插入
- 如果组合索引是
-
解决办法:
- 将
NULL
替换为业务允许的默认值,例如0
、空字符串或N/A
。
SQL 示例:
UPDATE your_table SET column_b = 'DEFAULT_VALUE' WHERE column_b IS NULL;
- 将
2. 避免查询结果不一致
- 原因:查询条件依赖组合索引时,如果字段中存在
NULL
值,可能导致索引无法完全匹配。例如:- 组合索引
(column_a, column_b)
,查询WHERE column_a = 1 AND column_b = 2
。 - 如果
column_b
是NULL
,查询可能无法命中索引。
- 组合索引
- 解决办法:
- 补充默认值,确保索引字段能够完全匹配。
3. 满足新业务需求
- 原因:新的业务规则要求字段不能为空,例如字段被用作主键的一部分。
- 解决办法:
- 确保所有历史数据符合新规则,替换掉
NULL
。
- 确保所有历史数据符合新规则,替换掉
2.不需要补充空值的情况
1. 允许 NULL
作为有效状态
- 原因:如果业务逻辑允许某些字段为空(例如
column_b
表示可选值),且设计上NULL
值有特定含义(如未定义)。 - 解决办法:
- 保持现状,但明确
NULL
的业务含义,并确保查询逻辑正确处理NULL
。
- 保持现状,但明确
2. 唯一性约束对 NULL
的特性无影响
- 原因:在特定场景中,组合索引中包含
NULL
可能正是业务所需。例如:(column_a, column_b)
,其中column_b
是NULL
时,允许column_a
重复。
- 解决办法:
- 确保业务逻辑和索引设计一致,不需要额外处理。
3.如何判断是否需要补充空值
-
业务需求是否允许字段为空:
- 如果字段
NULL
表示特殊状态(如未定义),可能无需补充。 - 如果
NULL
是异常数据或无意义的数据,建议补充。
- 如果字段
-
是否影响索引的唯一性:
- 如果索引规则要求字段唯一,
NULL
可能导致重复数据,需要补充。 - 如果
NULL
不影响规则,可保持现状。
- 如果索引规则要求字段唯一,
-
是否影响查询性能:
- 如果查询频繁依赖组合索引,
NULL
可能导致索引失效,建议补充。 - 如果查询不依赖该字段的匹配,可能无需处理。
- 如果查询频繁依赖组合索引,
4.如何安全地补充空值
1. 确定补充规则
- 根据业务含义定义合理的默认值。例如:
- 对
VARCHAR
字段:补充空字符串''
或默认标识N/A
。 - 对
INT
字段:补充0
或其他默认值。
- 对
2. 分批更新历史数据
-
避免一次性更新导致锁表或性能问题,使用分页更新:
UPDATE your_table SET column_b = 'DEFAULT_VALUE' WHERE column_b IS NULL LIMIT 1000;
3. 修改表结构,设置字段非空约束
-
如果业务要求字段不能为空,在补充完数据后添加
NOT NULL
约束:ALTER TABLE your_table MODIFY column_b VARCHAR(255) NOT NULL DEFAULT 'DEFAULT_VALUE';
4. 检查索引规则是否仍然适用
-
如果组合索引因为字段补充发生变化,可能需要重新创建索引:
DROP INDEX your_index ON your_table; CREATE UNIQUE INDEX your_index ON your_table (column_a, column_b);
5.总结以下几点:
- 需要补充的关键点:当
NULL
值会导致索引失效、查询不命中或者业务规则不一致时,应该补充默认值。 - 无需补充的关键点:如果
NULL
值在业务中是有效状态,且不会导致功能性问题,可以保留。 - 最佳实践:补充历史数据前先分析业务需求,分批更新数据,并在测试环境中验证后上线,确保操作安全可靠。
四、如果历史数据有字段为 null 值,允许添加组合索引么?
历史数据有字段为 NULL
时,MySQL 允许添加组合索引,但需要注意以下问题和潜在的坑点,确保索引能够正常工作并符合业务需求。
1. 添加索引的基本规则
-
MySQL 支持在包含
NULL
值的字段上添加索引(包括单字段索引和组合索引)。 -
组合索引中的
NULL
值对唯一性约束的影响:-
如果是普通索引,
NULL
值可以正常索引,并且不影响数据重复。 -
如果是唯一索引,
NULL
被视为不同值,因此不会违反唯一性约束。例如:CREATE TABLE example (column_a INT,column_b INT,UNIQUE KEY unique_index (column_a, column_b) );
-
插入以下数据是合法的:
INSERT INTO example (column_a, column_b) VALUES (1, NULL); INSERT INTO example (column_a, column_b) VALUES (1, NULL); -- 不报错
-
-
2. 添加索引是否成功
即使数据中存在 NULL
值,MySQL 不会阻止组合索引的创建。例如:
CREATE INDEX idx_combination ON table_name (column_a, column_b);
以上语句可以成功执行,即使 column_a
或 column_b
包含 NULL
值。
3.问题与注意点
1. 查询时索引可能失效
-
如果字段中存在
NULL
值,某些查询条件可能无法完全利用索引:-
组合索引规则:只有查询条件覆盖了索引的最左前缀字段,且字段值不是
NULL
,索引才会生效。 -
示例:
SELECT * FROM table_name WHERE column_b = 1; -- 索引失效,因为未用到 column_a SELECT * FROM table_name WHERE column_a = 1 AND column_b = NULL; -- 结果不匹配,可能索引失效
-
2. 唯一性约束的潜在问题
-
如果创建唯一索引(
UNIQUE
),NULL
值会被视为不同的值,可能导致意外行为:CREATE UNIQUE INDEX idx_unique_combination ON table_name (column_a, column_b); INSERT INTO table_name (column_a, column_b) VALUES (1, NULL); INSERT INTO table_name (column_a, column_b) VALUES (1, NULL); -- 不报错
原因:MySQL 的唯一索引规则中,
NULL
值不参与重复判断。- 解决方法:避免索引字段允许
NULL
,用默认值(如0
、空字符串
)替代。
- 解决方法:避免索引字段允许
4. 查询结果可能不符合预期
-
对于包含
NULL
的组合索引,查询需要特别处理NULL
值:SELECT * FROM table_name WHERE column_a = 1 AND column_b IS NULL;
如果遗漏
IS NULL
条件,查询结果可能不完整。
5. 性能隐患
- 如果大量字段值为
NULL
,索引可能会被冗余信息占用,影响性能:- 数据量大时,
NULL
值可能导致索引块中存储的数据分布不均。 - 建议定期清理或优化索引字段。
- 数据量大时,
6.操作建议
1. 添加索引前的检查
-
清理历史数据:
-
如果
NULL
不符合业务规则,补充默认值:UPDATE table_name SET column_b = 'DEFAULT_VALUE' WHERE column_b IS NULL;
-
-
确认业务逻辑:
- 如果业务允许
NULL
,确保查询逻辑正确处理NULL
值。
- 如果业务允许
2. 创建索引时避免 NULL
值
-
设置字段为
NOT NULL
:-
如果历史数据清理完毕,更新字段为非空:
ALTER TABLE table_name MODIFY column_b INT NOT NULL;
-
-
使用默认值替代
NULL
:- 适合组合索引中使用。例如,将
NULL
替换为0
或业务上其他默认值。
- 适合组合索引中使用。例如,将
3. 查询逻辑优化
-
明确处理
NULL
值的查询条件:SELECT * FROM table_name WHERE column_a = 1 AND (column_b = 2 OR column_b IS NULL);
-
避免直接依赖索引命中
NULL
的字段。
4. 唯一索引的规避方案
- 如果需要严格控制唯一性,避免
NULL
值:- 清理历史数据并设置字段为非空。
- 或者在应用层增加唯一性校验逻辑。
7.最后的总结
- 允许添加组合索引:即使字段包含
NULL
值,MySQL 允许添加组合索引。 - 注意业务影响:
NULL
值可能导致查询索引失效或唯一性约束行为异常。 - 优化建议:
- 根据业务需求决定是否清理
NULL
数据。 - 对字段设置
NOT NULL
或替换NULL
为默认值以规避问题。 - 确保查询逻辑正确处理
NULL
值,避免查询结果和性能问题。
- 根据业务需求决定是否清理
相关文章:
多线程并发造成的数据重复问题解决方案参考(笔记记录)
一、添加 MySQL 组合唯一索引,需要注意什么坑? 在 MySQL 中,创建组合唯一索引(Composite Unique Index)时,需要注意以下一些容易踩的坑: 1. 字段顺序影响索引使用 问题:组合唯一索…...
使用uniapp开发微信小程序使用uni_modules导致主包文件过大,无法发布的解决方法
在使用uniapp开发微信小程序时候,过多的引入uni_modules的组件库,会导致主包文件过大,导致无法上传微信小程序,主包要求大小不超过1.5MB.分包大小每个不能超过2M。 解决方法:分包。 1.对每个除了主页面navbar的页面进…...
01_MinIO部署(Windows单节点部署/Docker化部署)
单节点-Windows环境安装部署 在Windows环境安装MinIO,主要包含两个东西: MinIO Server(minio.exe):应用服务本身MinIO Client(mc.exe):MinIO客户端工具(mc)…...
uniapp微信小程序转发跳转指定页面
onShareAppMessage 是微信小程序中的一个重要函数,用于自定义转发内容。当用户点击右上角的菜单按钮,并选择“转发”时,会触发这个函数。开发者可以在这个函数中返回一个对象,用于定义分享卡片的标题、图片、路径等信息。 使用场…...
【AI知识】两类最主流AI应用(文生图、ChatGPT)中的目标函数
之前写过一篇 【AI知识】了解两类最主流AI任务中的目标函数,介绍了AI最常见的两类任务【分类、回归】的基础损失函数【交叉熵、均方差】,以初步了解AI的训练目标。 本篇更进一步,聊一聊流行的“文生图”、“聊天机器人ChatGPT”模型中的目标函…...
区块链入门—带你快速了解(通俗易懂)
读懂这篇文章需要有一定的数据结构与算法的基础。 本篇文章如果有不正确的地方,欢迎指正。 目录 一、区块链基础 1.基本概念 2.核心特性 3.区块链分类 4.区块链发展历程 二、区块链技术概念 1.技术架构 2.区块图解 3.共识机制 4.智能合约 5.密码学—哈…...
【数据库知识】mysql进阶-Mysql数据库的主从复制
mysql主从复制 概述一、数据同步机制二、复制流程三、保证数据一致性的措施四、复制拓扑结构五、应用场景与优势 双主复制的过程一、配置前的准备二、配置主服务器三、配置从服务器(相对角色)四、验证复制状态五、处理潜在的问题 双主复制如何解决冲突问…...
深度学习中的mAP
在深度学习中,mAP是指平均精度均值(mean Average Precision),它是深度学习中评价模型好坏的一种指标(metric),特别是在目标检测中。 精确率和召回率的概念: (1).精确率(Precision):预测阳性结果中实际正确的比例(TP / …...
TB6612电机驱动模块使用指南
实物图: 简介:TB6612是一款双路H桥型直流电机驱动模块,可以控制两个直流电机的转速和方向 H桥:(双路H桥就是有两个这个结构) 引脚图:...
小试牛刀-Anchor安装和基础测试
目录 一、编写目的 二、安装步骤 2.1 安装Rust 设置rustup镜像 安装Rust 2.2 安装node.js 2.3 安装Solana-CLI 2.4 安装Anchor CLI 三、Program测试 四、可能出现的问题 Welcome to Code Blocks blog 本篇文章主要介绍了 [Anchor安装和基础测试] 博主广交技术好友&…...
基于FPGA(现场可编程门阵列)的SD NAND图片显示系统是一个复杂的项目,它涉及硬件设计、FPGA编程、SD卡接口、NAND闪存控制以及图像显示等多个方面
文章目录 0、前言 1、目标 2、图片的预处理 3、SD NAND的预处理 4、FPGA实现 4.1、详细设计 4.2、仿真 4.3、实验结果 前言 在上一篇文章《基于FPGA的SD卡的数据读写实现(SD NAND FLASH)》中,我们了解到了SD NAND Flash的相关知识&am…...
1.tree of thought (使用LangChain解决4x4数独问题)
本教程将介绍如何使用LangChain库和chatglm API来解决一个4x4的数独问题。我们将通过以下步骤实现这一目标: 初始化chatglm 的聊天模型。定义数独问题和解决方案。创建一个自定义的检查器来验证每一步的思考。使用ToTChain来运行整个思考过程。 1. 初始化chatglm4…...
对subprocess启动的子进程使用VSCode python debugger
文章目录 1 情况概要(和文件结构)2 具体设置和启动步骤2.1 具体配置Step 1 针对attach debugger到子进程Step 2 针对子进程的暂停(可选) Step 3 判断哪个进程id是需要的子进程 2.2 启动步骤和过程 3 其他问题解决3.13.2 ptrace: Operation not permitted…...
MATLAB实现GARCH(广义自回归条件异方差)模型计算VaR(Value at Risk)
MATLAB实现GARCH(广义自回归条件异方差)模型计算VaR(Value at Risk) 1.计算模型介绍 使用GARCH(广义自回归条件异方差)模型计算VaR(风险价值)时,方差法是一个常用的方法。GARCH模型能够捕捉到金融时间序列数据中的波…...
Android中常见内存泄漏的场景和解决方案
本文讲解Android 开发中常见内存泄漏场景及其解决方案,内容包括代码示例、原因分析以及最佳实践建议。 1. 静态变量导致的内存泄漏 静态变量的生命周期与应用进程一致,如果静态变量持有了对 Activity 或其他大对象的引用,就可能导致内存泄漏…...
爬取链家二手房房价数据存入mongodb并进行分析
感谢您的关注!需要完整源码评论区获取~ 【实验目的】 1. 使用 python 将爬虫数据存入 mongodb; 2. 使用 python 读取 mongodb 数据并进行可视化分析。 【实验原理】 MongoDB 是文档数据库,采用 BSON 的结构来存储数据。在文档中可嵌套其…...
《TCP/IP网络编程》学习笔记 | Chapter 13:多种 I/O 函数
《TCP/IP网络编程》学习笔记 | Chapter 13:多种 I/O 函数 《TCP/IP网络编程》学习笔记 | Chapter 13:多种 I/O 函数send & recv 函数Linux 平台下的 send 和 recv 函数MSG_OOB:发送紧急消息紧急模式的工作原理检查输入缓冲 readv & w…...
详细介绍下oracle冷备(coolbackup)
冷备,也就说数据库不是运行(热的状态)的备份。有些时候我们的数据库比较小,进行同操作系统数据迁移和恢复的时候就比较好用。下面我们详细介绍下oracle数据库的冷备(我们使用最简单的拷贝数据文件方式进行冷备…...
MYSQL——多表设计以及数据库中三种关系模型
大致介绍数据库中三种关系模型 一对多(1:N) 定义: 一个实体可以与另一个实体的多个实例相关联,而后者只能与前者的一个实例相关联。 例子: 学生和课程的关系。 学生(1):每个学生…...
泷羽sec学习打卡-html基础
声明 学习视频来自B站UP主 泷羽sec,如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 关于云技术基础的那些事儿-捕获帅照 html基础什么是html? 常用的html标签html示例 css基础什…...
国标GB28181摄像机接入EasyGBS国标GB28181设备管理软件:GB28181-2022媒体传输协议解析
随着信息技术的飞速发展,视频监控领域正经历从传统安防向智能化、网络化安防的深刻转变。在这一转变过程中,国标GB28181设备管理软件EasyGBS成为了这场技术变革的重要一环。 GB28181-2022媒体传输协议 媒体传输命令包括实时视音频点播、历史视音频回放/…...
鸿蒙网络编程系列50-仓颉版TCP回声服务器示例
1. TCP服务端简介 TCP服务端是基于TCP协议构建的一种网络服务模式,它为HTTP(超文本传输协议)、SMTP(简单邮件传输协议)等高层协议的应用程序提供了可靠的底层支持。在TCP服务端中,服务器启动后会监听一个或…...
JMeter监听器与压测监控之 InfluxDB
1. 简介 在本文中,我们将介绍如何在 Kali Linux 上通过 Docker 安装 InfluxDB,并使用 JMeter 对其进行性能监控。InfluxDB 是一个高性能的时序数据库,而 JMeter 是一个开源的性能测试工具,可以用于对各种服务进行负载测试和性能监…...
混合上下文学习 ;In-Context Learning(ICL)
目录 In-Context Learning(ICL) 混合上下文学习 核心内容 核心创新点的原理与理论 举例说明 In-Context Learning(ICL) 是一种在大语言模型(LLM)中使用的技术,它允许模型通过提供一组输入输出示例(即“demonstrations”)来适应新任务,而无需对模型参数进行显…...
【STM32】软件I2C读写MPU6050
文章目录 软件I2C读写MPU6050接线图代码整体框架MyI2C模块MyI2C.cMyI2C.h MPU6050模块MPU6050.cMPU6050_Reg.h MPU6050.h main.c 源程序 软件I2C读写MPU6050 要实现软件I2C读写MPU6050分为两个部分: 完成软件I2C协议时序基于I2C协议读写寄存器操控MPU6050 接线图…...
HarmonyOS鸿蒙系统上File文件常用操作
HarmonyOS鸿蒙系统上,file文件常用操作记录 1.创建文件 createFile(fileName: string, content: string): string {// 获取应用文件路径let context getContext(this) as common.UIAbilityContext;let filesDirPath context.filesDir / fileName;// 新建并打开…...
如何解决Java EasyExcel 导出报内存溢出
如何解决Java EasyExcel 导出报内存溢出 EasyExcel大数据量导出常见方法 1. 分批写入 EasyExcel支持分批写入数据,可以将数据分批加载到内存中,分批写入Excel文件,避免一次性将大量数据加载到内存中。 示例代码: String fileNa…...
[产品管理-91]:产品经理的企业运营的全局思维-1
目录 前言:企业架构图 产品经理的企业运营全局思维 1、用户 - 用户价值与体验:真正的需求,真正的问题,一切的原点 2、大势 - 顺应宏观大势:政策趋势、行业趋势、技术趋势 3、市场 - 知己知彼:市场调研…...
学习笔记——stm32看门狗
目录 一、WDG简介 二、IWDG框图 2.1独立看门狗结构 2.2键寄存器 2.3超时时间 三、WWDG框图 3.1窗口看门狗结构 3.2WWDG时序图 3.3最早、最晚时间 四、IWDG和WWDG对比 五、IWDG相关库函数和应用 5.1相关库函数 5.2应用 六、WWDG相关库函数和应用 6.1相关库函数 6…...
2411rust,cargo清理缓存
原文 Cargo最近在晚间通道上取得了一个不稳定的功能(从nightly-2023-11-17开始),它可自动清理Cargo主目录中的缓存内容. 总之,请求使用晚间通道的人启用此功能,并在Cargo问题跟踪器上报告问题.要启用它,请在你的一般在~/.cargo/config.toml或%USERPROFILE%\.cargo\config.tom…...
高级java每日一道面试题-2024年11月19日-基本篇-获取一个类Class对象的方式有哪些?
如果有遗漏,评论区告诉我进行补充 面试官: 获取一个类Class对象的方式有哪些? 我回答: 在 Java 中,获取一个类的 Class 对象有多种方式。这些方式各有优缺点,适用于不同的场景。以下是常见的几种方法及其详细解释: 1. 使用 new 关键字实…...
Vue 3与TypeScript集成指南:构建类型安全的前端应用
在Vue 3中使用TypeScript,可以让你的组件更加健壮和易于维护。以下是使用TypeScript与Vue 3结合的详细步骤和知识点: 1. 环境搭建 首先,确保你安装了Node.js(推荐使用最新的LTS版本)和npm或Yarn。然后,安…...
可视化建模与UML《活动图实验报告》
你当像鸟飞往你的山。 一、实验目的: 1、熟悉活动图的基本功能和使用方法。 2、掌握使用建模工具软件绘制协作图的方法 二、实验环境: window7 | 10 | 11 EA15 三、实验内容: <1>绘制学生选课系统中添加课程(Add Course)用例的活动图…...
接雨水
接雨水 1、 题目描述2、解题思路 1、 题目描述 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 2、解题思路 本题使用了双指针,根据下图可以得出,下标 i 处能接的雨水量由左边…...
i春秋-签到题
练习平台地址 竞赛中心 题目描述 题目内容 点击GUESS后会有辨识细菌的选择题 全部完成后会有弹窗提示 输入nickname后提示获得flag F12检查 元素中没有发现信息 检查后发现flag在控制台中 flag flag{663a5c95-3050-4c3a-bb6e-bc4f2fb6c32e} 注意事项 flag不一定要在元素中找&a…...
Selenium + 数据驱动测试:从入门到实战!
引言 在软件测试中,测试数据的多样性和灵活性对测试覆盖率至关重要。而数据驱动测试(Data-Driven Testing)通过将测试逻辑与数据分离,极大地提高了测试用例的可维护性和可扩展性。本文将结合Selenium这一流行的测试工具࿰…...
考研倒计时30天丨和西电一起向前!再向前!
上岸后 就能来 西安电子科技大学 和学长学姐一起吃饭,XDU食堂都有你想要的一切 ①、海棠篇:海棠新生初入校园,还在犹豫吃什么?宿舍楼边的海棠餐厅物美价廉,满足你一日三餐的需求与期盼! 俗话说:…...
json数组写入文件每行一条数据
我们知道将json或json数组写入文件,一般是用JSON.stringify先将json或json数组转成字符串,再写入文件。JSON.stringify()的语法是这样的:JSON.stringify(value[, replacer[, space]]) JSON.stringify(value)调用则不带空格tab换行等分隔符&am…...
EasyExcel并行导出多个excel文件并压缩下载
EasyExcel并行导出多个excel文件并压缩下载 在SpringBoot应用中,采用同步方式导出Excel文件会导致服务器在生成文件期间阻塞,特别是在处理大量数据时,这种效率较低的方法会严重影响性能。为了解决这个问题,可以采用以下改进措施:首先将导出的数据进行拆分,然后利用Compl…...
hadoop3.x 新特性
hadoop3.x 新特性 FeaturesHadoop 2.xHadoop 3.xMinimum Required Java VersionJDK 6 and above.JDK 8 is the minimum runtime version of JAVA required to run Hadoop 3.x as many dependency library files have been used from JDK 8.Fault ToleranceFault Tolerance is …...
单片机智能家居火灾环境安全检测-分享
目录 前言 一、本设计主要实现哪些很“开门”功能? 二、电路设计原理图 电路图采用Altium Designer进行设计: 三、实物设计图 四、程序源代码设计 五、获取资料内容 前言 传统的火灾报警系统大多依赖于简单的烟雾探测器或温度传感器,…...
241117学习日志——[CSDIY] [ByteDance] 后端训练营 [05]
CSDIY:这是一个非科班学生的努力之路,从今天开始这个系列会长期更新,(最好做到日更),我会慢慢把自己目前对CS的努力逐一上传,帮助那些和我一样有着梦想的玩家取得胜利!!&…...
Oracle 19C 安装RAC磁盘投票失败
ORACLE 19C 安装RAC第二个节点报错,没有找到足够的 voting 文件(投票磁盘) 1、磁盘投票失败分析 1.1、02节点报错日志 CRS-4123: Starting Oracle High Availability Services-managed resources CRS-2672: Attempting to start ora.mdnsd…...
vulfocus在线靶场:骑士cms_cve_2020_35339:latest 速通手册
目录 一、启动环境,访问页面,ip:端口号/index.php?madmin,进入后台管理页面,账号密码都是adminadmin 二、进入之后,根据图片所示,地址后追加一下代码,保存修改 三、新开标签页访问:①ip:端…...
【Linux内核深度解析】TCP协议栈之tcp_recvmsg
tcp_recvmsg 是 Linux 内核中用于处理 TCP 套接字接收数据的核心函数。它的主要任务是从接收队列中读取数据并将其复制到用户空间。 函数原型 int tcp_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, size_t len, int nonblock, int flags, int *addr_le…...
android-studio-4.2下载 、启动
下载 分享一个国内的android studio网站,可以下载SDK和一些Android studio开发工具 https://www.androiddevtools.cn/ 启动 JAVA_HOME/app/zulu17.48.15-ca-jdk17.0.10-linux_x64/ /app5/android-studio-home/android-studio-ide-201.6568795-linux-4.2C1/bin/s…...
Excel——宏教程(2)
Excel——宏教程(2) 一)、处理单元格 1、直接赋值与引用 将变量、常量值直接赋给单元格、或将单元格的值直接赋给变量、常量,这是在excel中最简单的单元格赋值及引用方法。 如下例将工作表"Sheet1"A1单元格的值赋给Integer变量I,并将I1的值…...
React Native 全栈开发实战班 - 性能与调试之打包与发布
在完成 React Native 应用的开发与性能优化后,下一步就是将应用打包并发布到各大应用市场,如 Apple App Store 和 Google Play Store。本章节将详细介绍 React Native 应用的打包与发布流程,包括 Android 和 iOS 平台的打包步骤、签名配置、发…...
C# 5000 转16进制 字节(激光器串口通讯生成指定格式命令)
最近在做一个与激光器用串口进行通讯的程序文档中要求将频率参数以3个字节的方式进行发送。这里记录一下过程。以便以后再有类似问题时可以快速解决。 /// <summary>/// 设置频率/// </summary>/// <param name"sender"></param>/// <par…...
Win11下载和配置VSCode(详细讲解)
配置VSCode需要的工具: 一、MinGW-w64 二、Visual Studio Code 一、MinGW-w64下载 1、下载 MinGW官网地址: Downloads - MinGW-w64 直链下载: 下载 mingw-w64-install.exe (MinGW-w64 - 适用于 32 位和 64 位 Windows&#…...