Elastic-Job相关
文档参考视频:09_SpringBoot案例演示_哔哩哔哩_bilibili
一、Elastic-Job介绍
Elastic-Job 是一个轻量级、分布式的任务调度框架,旨在解决分布式环境下的定时任务调度问题。
1.1. Elastic-Job 的核心组件
Elastic-Job 是由多个核心组件构成的,每个组件负责不同的任务调度和分布式管理功能。以下是 Elastic-Job 的主要核心组件:
1. 作业(Job)
-
定义:作业是 Elastic-Job 中的核心概念,代表需要被调度执行的任务。Elastic-Job 提供了两种类型的作业:
- SimpleJob:最简单的作业类型,适用于需要简单定时执行的任务。它只需实现
SimpleJob
接口,并实现execute(ShardingContext shardingContext)
方法即可。 - DataflowJob:适用于数据流处理场景,作业会分批处理数据,并且支持读取和写入数据。
- SimpleJob:最简单的作业类型,适用于需要简单定时执行的任务。它只需实现
-
作用:作业负责处理实际的业务逻辑,Elastic-Job 框架提供了调度机制来管理这些作业在集群中的分配和执行。
2. 作业配置(Job Configuration)
-
定义:作业配置是 Elastic-Job 中用来配置作业调度规则、分片策略等的配置对象。它包含了以下几个重要部分:
- JobCoreConfiguration:作业的核心配置,包含作业名称、Cron 表达式、分片数、分片参数等。
- SimpleJobConfiguration:用于简单作业的配置,指定作业类型(如
SimpleJob
)和核心配置。 - LiteJobConfiguration:用于 Lite 作业的配置,继承了
SimpleJobConfiguration
,是最终的作业配置对象,包含了所有作业调度的设置。
-
作用:通过作业配置,你可以灵活地设置作业调度的各项参数,如执行频率、作业分片、分片参数、容错设置等。
3. 作业调度器(JobScheduler)
- 定义:作业调度器是负责执行作业的核心组件,它会定时触发作业的执行。Elastic-Job 中有不同类型的调度器,最常用的是
SpringJobScheduler
,它将作业调度与 Spring 集成。 - 作用:作业调度器负责调度作业的执行,监听作业配置的变化,并按设定的 Cron 表达式或时间间隔执行作业。它也负责处理作业的生命周期,例如初始化、暂停、停止等操作。
4. 注册中心(Registry Center)
-
定义:Elastic-Job 通过注册中心来协调分布式作业的执行,确保作业在多个节点之间正确分配和执行。常用的注册中心是 Zookeeper,Elastic-Job 支持将 Zookeeper 作为作业的注册中心。
-
作用:注册中心用于存储作业的调度信息和状态,包括作业执行的分片信息、作业的执行状态、任务是否失败等。Elastic-Job 使用注册中心来保证作业调度的协调性,避免作业的重复执行和确保作业的高可用性。
-
注册中心的功能:
- 协调作业的分片分配:Elastic-Job 会将作业的分片信息存储在注册中心,确保每个分片只会在一个节点上执行。
- 作业状态管理:通过注册中心,Elastic-Job 可以实时获取作业的执行状态,并根据需要做出调整(例如重新分配分片)。
- 容错与恢复:如果某个节点失效,注册中心会重新分配失败节点的作业分片。
5. 分片策略(Sharding Strategy)
- 定义:Elastic-Job 使用分片机制来将作业拆分为多个任务片段(分片),这些分片会被不同的节点(实例)执行。作业的分片可以是静态的(固定分片)或动态的(动态调整)。
- 作用:分片策略控制作业分片的分配,确保作业的任务在不同节点之间平衡负载,避免单个节点承受过多的压力。Elastic-Job 提供了多个分片策略(例如:按数据划分、按任务划分等)来灵活适应不同的业务场景。
6. 作业执行上下文(ShardingContext)
- 定义:
ShardingContext
是作业执行时的上下文信息,它包含了当前作业的分片编号、作业名称、作业实例编号等信息。 - 作用:
ShardingContext
提供给作业执行方法execute(ShardingContext shardingContext)
使用,可以让作业根据自己的分片编号来执行相应的逻辑,确保作业在分布式环境下正确执行。
1.2. Elastic-Job 的工作原理
Elastic-Job 的工作原理大致如下:
-
作业注册与调度:作业类实现了
SimpleJob
接口并定义了作业的执行逻辑,然后通过作业配置创建作业的调度配置。作业调度器(如SpringJobScheduler
)会读取这些配置,启动调度任务。 -
作业分片:作业会根据配置的分片数将任务划分为多个片段,每个分片负责处理一部分任务。每个作业实例(节点)会根据自己的分片编号执行相应的任务片段。
-
注册中心协调:作业的调度和分片信息会存储在注册中心(如 Zookeeper)中,Elastic-Job 使用注册中心来保证作业分片的协调性,避免重复执行,并确保作业的高可用性和容错性。
-
作业执行:作业调度器会按照配置的 Cron 表达式或时间间隔触发作业的执行,并通过
ShardingContext
将分片信息传递给作业执行方法。每个作业实例根据分片信息执行任务。 -
容错与失败重试:如果作业执行失败,Elastic-Job 会根据配置进行失败重试。并且,如果某个节点故障,Zookeeper 会重新分配该节点的分片,确保作业继续执行。
二、Spring boot集成Elastic-Job
下面是一个基本的 Spring Boot 集成 Elastic-Job 的完整实现步骤。
1.安装并启动zookeeper
下载地址:Index of /apache/zookeeper
Zookeeper 安装包解压后,里面会有一个 conf
文件夹,在该文件夹中有一个示例配置文件 zoo_sample.cfg
。需要复制并重命名为 zoo.cfg
,然后进行修改。
1. 进入 Zookeeper 解压后的目录,找到 conf
文件夹。
2. 复制 zoo_sample.cfg
文件,并将其重命名为 zoo.cfg
。
3. 打开 zoo.cfg
配置文件,进行必要的配置修改。
# Zookeeper 数据目录,保存事务日志和快照
dataDir=C:/zookeeper/data# Zookeeper 的端口号(默认是 2181)
clientPort=2181
4. 启动zookeeper
进入 Zookeeper 安装目录中的 bin
文件夹。然后双击启动 zkServer.cmd 文件。
5. 测试 Zookeeper
Zookeeper 启动后,使用 zkCli.cmd
命令行工具连接到 Zookeeper,测试是否能够正常连接。进入 bin
文件夹,然后双击运行 zkCli.cmd 文件。输入以下内容进行测试:
[zk: localhost:2181(CONNECTED) 0] ls /
[zookeeper]
[zk: localhost:2181(CONNECTED) 1] create /my_node "Hello Zookeeper"
Created /my_node
[zk: localhost:2181(CONNECTED) 2] get /my_node
Hello Zookeeper
2.添加依赖
这里用的是2.1.5的版本
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--elastic-job--><dependency><groupId>com.dangdang</groupId><artifactId>elastic-job-lite-spring</artifactId><version>2.1.5</version></dependency></dependencies>
3.配置Zookeeper
application.yml文件中配置
spring:application:name: elastic-job-demo
elasticjob:zookeeper-url: localhost:2181namespace: elastic-job-demo
server:port: 8081
4.创建作业类
Elastic-Job 通过实现 SimpleJob
接口来定义一个作业。我们需要在作业类中实现 execute
方法,定义作业的具体业务逻辑。这里打印当前日期。
import com.dangdang.ddframe.job.api.ShardingContext;
import com.dangdang.ddframe.job.api.simple.SimpleJob;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;import java.util.Date;@Component
public class MyJob implements SimpleJob {private static final Logger log = LoggerFactory.getLogger(MyJob.class);@Overridepublic void execute(ShardingContext shardingContext) {log.info("=============={}============",new Date());}
}
5.创建和配置 Zookeeper 注册中心
Elastic-Job 依赖 Zookeeper 来存储作业调度的元数据(例如作业状态、分片信息等),并且使用 Zookeeper 来协调和管理作业的执行。
ZookeeperConfig
类的配置主要目的是确保 Elastic-Job 能够在分布式环境下正确执行作业,利用 Zookeeper 来进行作业的协调、分片管理和故障恢复。通过将 CoordinatorRegistryCenter
配置为 Spring Bean,Elastic-Job 可以在 Spring Boot 应用启动时自动连接到 Zookeeper,实现分布式作业的调度和管理。
/*** 创建和配置 Zookeeper 注册中心,并将其注入到 Spring 容器中。*/
@Configuration
public class ZookeeperConfig {@Bean(initMethod = "init")public CoordinatorRegistryCenter createZookeeperCenter(@Value("${elasticjob.zookeeper-url}") String zookeeperUrl,@Value("${elasticjob.namespace}") String groupName) {//zk的配置 url 和命名空间名字ZookeeperConfiguration zookeeperConfiguration = new ZookeeperConfiguration(zookeeperUrl, groupName);//设置zk超时时间zookeeperConfiguration.setSessionTimeoutMilliseconds(10000);//创建注册中心CoordinatorRegistryCenter zookeeperRegistryCenter = new ZookeeperRegistryCenter(zookeeperConfiguration);return zookeeperRegistryCenter;}
}
6.配置和初始化 Elastic-Job 的调度器
在 Spring Boot 集成 Elastic-Job 的过程中,除了配置 ZookeeperConfig
来管理作业的调度和分布式协调之外,还需要配置 ElasticJobConfig
来创建和初始化作业调度器 (SpringJobScheduler
) 并配置作业的具体执行规则。
ElasticJobConfig
主要是将作业的调度配置和作业任务与注册中心(Zookeeper)进行集成,从而实现具体的作业调度和执行管理。
@Configuration
public class ElasticJobConfig {@Autowiredprivate MyJob myJob;@Autowiredprivate CoordinatorRegistryCenter registryCenter;/*** 创建作业的核心配置* 这个方法的目的是 创建一个作业配置对象,并根据传入的参数(如作业类、Cron 表达式、分片数量等)生成配置,* 最终返回一个 LiteJobConfiguration 对象。该对象用于配置 Elastic-Job 中的作业调度,涉及到作业的名称、执行周期(Cron 表达式)、分片策略等。** @param jobClass 作业类* @param cron Cron 表达式* @param shardingTotalCount 总分片数* @param shardingItemParameters 分片项参数* @return LiteJobConfiguration 作业的配置对象*/private static LiteJobConfiguration createJobConfiguration(final Class<? extends SimpleJob> jobClass,final String cron,final int shardingTotalCount,final String shardingItemParameters) {// 定义作业核心配置 任务名称 cron表达式 分片数量JobCoreConfiguration.Builder jobCoreConfigurationBuilder =JobCoreConfiguration.newBuilder(jobClass.getSimpleName(), cron, shardingTotalCount);// 如果分片项参数不为空,设置它if (!StringUtils.isEmpty(shardingItemParameters)) {jobCoreConfigurationBuilder.shardingItemParameters(shardingItemParameters);}// 定义 SIMPLE 类型作业配置SimpleJobConfiguration simpleJobConfig = new SimpleJobConfiguration(jobCoreConfigurationBuilder.build(),jobClass.getCanonicalName() // 作业类的完整类名);// 定义 Lite 作业根配置LiteJobConfiguration liteJobRootConfig = LiteJobConfiguration.newBuilder(simpleJobConfig).overwrite(true) // 覆盖已有作业.build();return liteJobRootConfig;}//初始化并配置一个 Elastic-Job 的作业调度器(SpringJobScheduler)@Bean(initMethod = "init")public SpringJobScheduler initSimpleElasticJob() {// 创建 SpringJobScheduler 实例 传入作业类、注册中心、LiteJobConfiguration 对SpringJobScheduler springJobScheduler = new SpringJobScheduler(myJob, registryCenter, createJobConfiguration(myJob.getClass(),"0/3 * * * * ?", 1, null));return springJobScheduler;}}
7.创建启动类
@SpringBootApplication
public class ElasticJobDemoApplication {public static void main(String[] args) {SpringApplication.run(ElasticJobDemoApplication.class, args);}}
8.测试
启动之后,可以在控制台看到日志:
这里我们可以在不同端口启动多个实例:
注意添加VM参数,指定不同的端口号,然后同时启动。可以看到在没有分片的情况下,任务只会在一台实例上运行。
Elastic-Job 使用 Zookeeper 作为注册中心来协调不同节点的作业执行。当在不同端口上启动多个实例时,Zookeeper 会确保作业的分片不会重复执行。例如,如果一个节点失败或宕机,Zookeeper 会重新分配该节点的分片到其他健康的节点,确保作业继续执行,不会出现丢失或重复执行的情况。
三、模拟备份数据
这里模拟备份文件,以backedUp 为标识,1代表备份,0代表未备份。
1.建表
CREATE TABLE file_info(id INT PRIMARY KEY,name VARCHAR(50),content VARCHAR(255),type VARCHAR(50),backedUp TINYINT
);INSERT INTO file_info(id, name, content, type, backedUp) VALUES
(1, '文件1', '内容1', 'text', 1),
(2, '文件2', '内容2', 'text', 1),
(3, '文件3', '内容3', 'text', 1),
(4, '文件4', '内容4', 'image', 1),
(5, '文件5', '内容5', 'image', 1),
(6, '文件6', '内容6', 'radio', 1),
(7, '文件7', '内容7', 'radio', 1),
(8, '文件8', '内容8', 'vedio', 1),
(9, '文件9', '内容9', 'vedio', 1),
(10, '文件10', '内容10', 'vedio', 1),
(11, '文件11', '内容11', 'text', 1),
(12, '文件12', '内容12', 'image', 1),
(13, '文件13', '内容13', 'radio', 1),
(14, '文件14', '内容14', 'vedio', 1),
(15, '文件15', '内容15', 'image', 1),
(16, '文件16', '内容16', 'text', 1),
(17, '文件17', '内容17', 'radio', 1),
(18, '文件18', '内容18', 'vedio', 1),
(19, '文件19', '内容19', 'radio', 1),
(20, '文件20', '内容20', 'vedio', 1);
2.添加依赖
<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.18</version></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.0.0</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version></dependency>
3.添加配置
spring:application:name: elastic-job-demodatasource:url: jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC&characterEncoding=utf8username: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driver
elasticjob:zookeeper-url: localhost:2181namespace: elastic-job-demo
server:port: 8081
4.添加实体类
public class FileInfo {private int id;private String name;private String content;private String type;private boolean backedUp;// 无参构造函数public FileInfo() {}// getter 和 setter 方法public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}public String getType() {return type;}public void setType(String type) {this.type = type;}public boolean isBackedUp() {return backedUp;}public void setBackedUp(boolean backedUp) {this.backedUp = backedUp;}@Overridepublic String toString() {return "FileInfo{" +"id=" + id +", name='" + name + '\'' +", content='" + content + '\'' +", type='" + type + '\'' +", backedUp=" + backedUp +'}';}
}
5.添加mapper
@Mapper
public interface FileInfoMapper {@Select("select id, name, content, type, backedUp from file_info where backedUp=0")public abstract List<FileInfo> selectAll();@Update("update file_info set backedUp = #{state} where id = #{id}")public abstract int changeState(@Param("id") int id, @Param("state") int state);
}
6.job对象
@Component
public class FileBackupElasticJob implements SimpleJob {@Autowiredprivate FileInfoMapper fileInfoMapper;@Overridepublic void execute(ShardingContext shardingContext) {doWork();}private void doWork() {List<FileInfo> fileList = fileInfoMapper.selectAll();System.out.println("需要备份文件个数: " + fileList.size());for (FileInfo FileInfo : fileList) {backUpFile(FileInfo);}}private void backUpFile(FileInfo fileInfo) {try {// 模拟备份动作Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("执行文件备份 ===> " + fileInfo);fileInfoMapper.changeState(fileInfo.getId(), 1);}
}
7.配置调度器
@Bean(initMethod = "init")public SpringJobScheduler initSimpleElasticJob(FileBackupElasticJob fileBackupElasticJob) {// 创建 SpringJobScheduler 实例 传入作业类、注册中心、LiteJobConfiguration 对SpringJobScheduler springJobScheduler = new SpringJobScheduler(fileBackupElasticJob, registryCenter, createJobConfiguration(fileBackupElasticJob.getClass(),"0 0/1 * * * ?", 1, null));return springJobScheduler;}
启动类:
@SpringBootApplication
@MapperScan("com.example.elasticjobdemo.mapper")
public class ElasticJobDemoApplication {public static void main(String[] args) {SpringApplication.run(ElasticJobDemoApplication.class, args);}}
8.测试
9.作业分片
定义分片规则:4分片,规则:"0=text,1=image,2=radio,3=vedio"
新增根据类型查询数据方法:
执行的doWork方法把ShardingParameter传进去,也就是把0=text 的text传进去。
根据传入的类型进行处理,备份对应类型的文件。
测试,可以看到不同的端口,备份的文件类型是不一样的
相关文章:
Elastic-Job相关
文档参考视频:09_SpringBoot案例演示_哔哩哔哩_bilibili 一、Elastic-Job介绍 Elastic-Job 是一个轻量级、分布式的任务调度框架,旨在解决分布式环境下的定时任务调度问题。 1.1. Elastic-Job 的核心组件 Elastic-Job 是由多个核心组件构成的&#x…...
Ruby语言的正则表达式
Ruby语言的正则表达式详解 正则表达式(Regular Expressions,简称Regex)是一种强大的文本处理工具,它可以用来匹配、搜索、替换字符串中的模式。在Ruby语言中,正则表达式的使用非常灵活,并且具有良好的可读…...
“深入浅出”系列之QT:(5)Json数据格式处理详解
一、JSON数据结构 JSON主要有两种数据结构:JSON对象和JSON数组。 JSON对象:由键值对组成,每个键(key)是字符串,值(value)可以是字符串、数字、布尔值、null、JSON数组或JSON对象。对…...
cursor试用出现:Too many free trial accounts used on this machine 的解决方法
文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons:JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram,自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 ? 5 IDEA必装的插件&…...
Calico BGP网络问题
Calico BGP网络问题 文章目录 Calico BGP网络问题排除步骤calico-node 正常运行,但在 describe 中有警告信息错误现象 ip route 路由表中删除 blackhole后又会自动生成网卡选择无效导致 calico 的 pod 内容器未就绪问题现象原因分析问题解决方式一:直接修…...
Jenkins-部署-windows
Jenkins-部署-windows 一: Jenkins 资料 一: Jenkins 资料...
benchANT 性能榜单技术解读 Part 1:写入吞吐
近期,国际权威数据库性能测试榜单 benchANT 更新了 Time Series: Devops(时序数据库)场景排名,KaiwuDB 数据库在 xsmall 和 small 两类规格下的时序数据写入吞吐、查询吞吐、查询延迟、成本效益等多项指标刷新榜单原有数据纪录。在…...
【 算法设计与分析-回顾算法知识点】福建师范大学数学与计算机科学学院 2006 — 2007学年第二学期考试 A 卷
一.填空题(每空2分,共30分) 1.算法的时间复杂性指算法中 元运算 的执行次数。 2.在忽略常数因子的情况下,O、和三个符号中, O 提供了算法运行时间的一个上界。 3.设Dn…...
【25考研】川大计算机复试情况,重点是啥?怎么准备?
24年进入复试的同学中,有10位同学的复试成绩为0分。具体是个人原因还是校方原因,还尚不明确。但是C哥提醒,一定要认真复习!复试完后不要跟任何人讨论有关复试的题目及细节! 一、复试内容 四川大学复试内容较多…...
设计模式-结构型-适配器模式
在软件开发中,随着系统的不断扩展和模块的不断增加,往往会遇到不同模块之间接口不兼容的情况。此时,如果我们能通过某种方式将一个接口转化为另一个接口,那么开发工作将变得更加灵活和高效。适配器模式(Adapter Patter…...
el-table表格合并某一列
需求:按照下图完成单元格合并,数据展示 可以看到科室列是需要合并的 并加背景色展示;具体代码如下: <el-tableref"tableA":data"tableDataList":header-cell-style"{ backgroundColor: #f2dcdb, col…...
分布式Id方案选择
分布式 ID 方案选择 在当今分布式系统日益盛行的背景下,分布式 ID 生成方案的选择成为了众多开发者关注的焦点。一个优秀的分布式 ID 方案,不仅能够确保生成的 ID 全局唯一,避免数据冲突,还能在高并发、大规模的分布式环境中保持…...
uni app 写的 小游戏,文字拼图?文字拼写?不知道叫啥
从下方的偏旁部首中选在1--3个组成上面文章中的文字,完成的文字标红 不喜勿喷 《满江红》 其中用到了两个文件 strdata.json parameters.json 这两个文件太大 放到资源中了 资源文件 <template><view class"wenzi_page_main"><view c…...
【xLua】xLua-master签名、加密Lua文件
GitHub - Tencent/xLua: xLua is a lua programming solution for C# ( Unity, .Net, Mono) , it supports android, ios, windows, linux, osx, etc. 如果你想在项目工程上操作,又发现项目工程并没导入Tools,可以从xLua-master工程拷贝到项目工程Assets…...
Yolo11改进:注意力改进|Block改进|ESSAformer,用于高光谱图像超分辨率的高效Transformer|即插即用
摘要 一、论文介绍 高光谱图像超分辨率的重要性:高光谱成像技术通过密集采样光谱特征,为材料区分提供丰富的光谱和空间结构信息,广泛应用于各领域。高光谱图像超分辨率(HSI-SR)旨在从低分辨率HSI生成高分辨率HSI。传统方法的局限性:传统方法依赖手工制作的先验,如低秩近…...
第二十八周学习周报
目录 摘要Abstract1 GFPGAN1.1 总体结构1.2 实验研究1.3 代码分析 总结 摘要 本周主要的学习内容是GFPGAN模型。GFPGAN是一种基于生成对抗网络(GAN)的模型,其利用封装在预训练的人脸GAN中的丰富多样的先验进行人脸图像的修复。这种生成面部先验(GFP&…...
太速科技-418-基于AD9361 +ZYNQ7020 的软件无线电 SDR 套件
基于AD9361 ZYNQ7020 的软件无线电 SDR 套件 一、板卡信息 ● ZYNQ芯片采用XC7Z020,逻辑容量更大,支持更大的逻辑设计; ● 内存采用两片512M DDR3,共1GByte,更大容量。 ● 支持千兆网口,支持ZEDFMCO…...
STM32裸机开发转FreeRTOS教程
目录 1. 简介2. RTOS设置(1)分配内存(2)查看任务剩余空间(3)使用osDelay 3. 队列的使用(1)创建队列(1)直接传值和指针传值(2)发送/接收…...
swagger导出json
要将 Swagger(或者 OpenAPI)文档导出为 JSON 文件,通常有几种常见的方法,具体取决于你使用的 Swagger 工具(如 Swagger UI、Swagger Editor、Swagger Hub 等)。下面列出了几种常见的导出 JSON 文件的方法。 1. 通过 Swagger UI 导出 JSON 文件 如果你在使用 Swagger UI…...
大纲笔记幕布的替换
文章目录 前言类似的大纲软件探索 DynalistLogseq通过国内代码仓库建立 Git 仓库Logseq 的使用PC 端安卓端Git 操作Termux git 步骤Termux 的桌面组件:Termux widget 报错参考 前言 之前我一直用幕布,买了三年,奈何要过期了,又三…...
【Excel/WPS】根据平均值,生成两列/多列指定范围的随机数/随机凑出两列数据
原理就是通过随机生成函数和平均值函数。 适用场景:在总体打分后,需要在小项中随机生成小分数 第一列:固定的平均值A2第二列: RANDBETWEEN(A2-10,A210)第三列:根据第二列用平均值函数算除 A2*2-B2这是随机值1的公式&am…...
单元测试MockitoExtension和SpringExtension
1. MockitoExtension MockitoExtension 是 JUnit 5 提供的一个扩展,用于支持 Mockito 的集成。它可以自动初始化标记为 Mock、InjectMocks 等的 Mockito 对象,而不需要显式调用 MockitoAnnotations.initMocks(this)。 主要特点: 自动初始化 Mock、Spy…...
springboot+vue使用easyExcel实现导出功能
vue部分 // 导出计算数据exportDataHandle(id) {this.$http({url: this.$http.adornUrl(/xxx/xxx/exportCalDataExcel),method: post,data: this.$http.adornData({id: id}),responseType: blob, // 重要:告诉axios我们希望接收二进制数据}).then(({data}) > {c…...
优化提示词改善答疑机器人回答质量
1.通过优化提示词来调整大模型的回答 1.1使用场景 默认提示词无法满足业务要求。 回答的内容太简单/困难,输出内容/格式/语气达不到要求等 1.2llama-index 的提示词模版 1.2.1llama-index 的默认模板 from llama_index.llms.dashscope import DashScope from lla…...
Spring AMQP-保证消费者消息的可靠性
为什么要保证消息的可靠性? 当MQ向消费者发送一个消息之后需要得到消费者的状态,因为消息并不一定就真的被消费者给消费了,可能在消费的过程中出现了一些意外,比如 1. 网络问题 2. 消息转换有问题 3. 消费者本身的业务处理有问题 …...
32单片机从入门到精通之数据处理——数学运算(十三)
无论你身在何处,无论你面对什么困难,只要对自己充满信心,坚持不懈地努力,相信自己的能力,你就能战胜任何困难,实现自己的目标。不要害怕失败,因为失败并不意味着你没有能力成功,只是…...
latex_学习
参考: https://www.overleaf.com/learn/latex/Free_online_introduction_to_LaTeX_(part_3)https://www.overleaf.com/learn/latex/Free_online_introduction_to_LaTeX_(part_2)https://www.overleaf.com/learn/latex/Free_online_introduction_to_LaTeX_(part_1) …...
小程序textarea组件键盘弹起会遮挡住输入框
<textarea value"{{remark}}" input"handleInputRemark" ></textarea> 如下会有遮挡: 一行代码搞定 cursor-spacing160 修改后代码 <textarea value"{{remark}}" input"handleInputRemark" cursor-spacin…...
vue之element-ui文件上传(二)
一、点击上传,使用默认的action上传,添加校验,上传成功后,去除校验: <el-form-item label"文件md5" prop"fileMd5"><el-uploadv-if"!form.fileMd5"v-model"form.fileMd5&…...
DC/AC并网逆变器模型与仿真MATLAB
DC/AC并网逆变器是一种将直流电(DC)转化为交流电(AC),并将其与电网并联的设备。它的核心功能是实现直流电源(如光伏电池板或储能电池)与电网的有效连接,同时保证输出电能质量满足电网…...
python面向对象
面向对象简介 python完全采用了面向对象的思想,是真正面向对象的变成语言,完全支持面向对象的基本功能,例如:继承、多态、封装等 python中,一切皆为对象。前面学习的数据类型、函数等都是对象 面向过程和面向对象思…...
【UI自动化测试】selenium八种定位方式
🏡个人主页:謬熙,欢迎各位大佬到访❤️❤️❤️~ 👲个人简介:本人编程小白,正在学习互联网求职知识…… 如果您觉得本文对您有帮助的话,记得点赞👍、收藏⭐️、评论💬&am…...
基于物联网疫苗冷链物流监测系统设计
1. 项目开发背景 随着全球对疫苗运输要求的提高,特别是针对温度敏感型药品(如疫苗)的冷链管理,如何保证疫苗在运输过程中的温度、湿度、震动等环境因素的稳定性已成为亟需解决的问题。疫苗运输过程中,任何温度或湿度的…...
实训云上搭建集群
文章目录 1. 登录实训云1.1 实训云网址1.2 登录实训云 2. 创建网络2.1 网络概述2.2 创建步骤 3. 创建路由器3.1 路由器名称3.1 创建路由器3.3 查看网络拓扑 4. 连接子网5. 创建虚拟网卡5.1 创建原因5.2 查看端口5.3 创建虚拟网卡 6. 管理安全组规则6.1 为什么要管理安全组规则6…...
【网页自动化】篡改猴入门教程
安装篡改猴 打开浏览器扩展商店(Edge、Chrome、Firefox 等)。搜索 Tampermonkey 并安装。 如图安装后,浏览器右上角会显示一个带有猴子图标的按钮。 创建用户脚本 已进入篡改猴管理面板点击创建 脚本注释说明 name:脚本名称。…...
(概率论)无偏估计
参考文章:(15 封私信 / 51 条消息) 什么是无偏估计? - 知乎 (zhihu.com) 首先,第一个回答中,马同学图解数学讲解得很形象, 我的概括是:“注意,有一个总体的均值u。然后,如果抽样n个&…...
JavaScript 正则表达式
JavaScript 正则表达式(RegEx)是一种强大的工具,用于在字符串中查找匹配的模式、替换文本,或者验证输入的格式。下面是一些常用的正则表达式操作和语法: 常用正则表达式符号: .:匹配任意字符(除了换行符)。^:匹配输入字符串的开始。$:匹配输入字符串的结束。[]:定…...
Swift语言的正则表达式
Swift语言的正则表达式 正则表达式是一种用于匹配字符串的强大工具,它可以帮助开发者在文本处理中高效地搜索和操作字符串。在Swift语言中,正则表达式的支持是通过Foundation框架提供的。本文将全面介绍Swift中的正则表达式,从基础知识到进阶…...
Matlab 数据处理与可视化的多元拓展应用(具体代码分析)
一、代码整体功能概述: 该代码主要实现了以下几个功能: 从文件(part1.txt)中读取数据,并提取第二列数据,将其存储在 originalColumnData 中。对原始数据进行可视化,包括绘制置零前数据的折线图…...
小程序与内嵌网页的数据通信
小程序与内嵌网页的数据通信 前言 微信小程序提供了web-view组件,允许开发者在小程序中嵌入网页。然而,由于小程序和网页运行在不同的环境中,它们之间的通信就需要依赖特定的机制来实现。然而我们日常的需求中,很多的时候都涉及…...
【学习笔记】数据结构(十一)
外部排序 文章目录 外部排序11.1 外存信息的存取11.2 外部排序的方法11.3 多路平衡归并的实现 - 增加k11.4 置换-选择排序 - 减少m11.5 最佳归并树 外部排序 指的是大文件的排序,即待排序的记录存储在外存储器 上,在排序过程中需进行多次的内、外存之间的…...
【Logstash03】企业级日志分析系统ELK之Logstash 过滤 Filter 插件
Logstash 过滤 Filter 插件 数据从源传输到存储库的过程中,Logstash 过滤器能够解析各个事件,识别已命名的字段以构建结构, 并将它们转换成通用格式,以便进行更强大的分析和实现商业价值。 Logstash 能够动态地转换和解析数据&a…...
深度学习模型部署——基于Onnx Runtime的深度学习模型CPU与GPU部署(C++实现)
1.概述 许多机器学习和深度学习模型都是在基于 Python 的框架中开发和训练的,例如 PyTorch 和 TensorFlow 等。但是,当需要将这些训练好模型部署到生产环境中时,通常会希望将模型集成到生产流程中,而这些流程大多是用 C 编写的&a…...
Selenium 的四种等待方式及使用场景
Selenium 的四种等待方式及使用场景 隐式等待(Implicit Wait)显式等待(Explicit Wait)自定义等待(Custom Wait)固定等待(Sleep) 1. 隐式等待 定义: 隐式等待是为 WebD…...
攻防世界 ics-07
点击之后发现有个项目管理能进,点进去,点击看到源码,如下三段 <?php session_start(); if (!isset($_GET[page])) { show_source(__FILE__); die(); } if (isset($_GET[page]) && $_GET[page] ! index.php) { include(flag.php);…...
一文读懂「LoRA」:大型语言模型的低秩适应
LoRA: Low-Rank Adaptation of Large Language Models 前言 LoRA作为大模型的微调框架十分实用,在LoRA出现以前本人都是通过手动修改参数、优化器或者层数来“炼丹”的,具有极大的盲目性,但是LoRA技术能够快速微调参数,如果LoRA…...
新车月交付突破2万辆!小鹏汽车“激活”智驾之困待解
首次突破月交付2万辆规模的小鹏汽车,稳吗? 本周,高工智能汽车研究院发布的最新监测数据显示,2024年11月,小鹏汽车在国内市场(不含出口)交付量(上险口径,下同)…...
dockerfile 中 #(nop)
在 Dockerfile 中,#(nop) 通常出现在 docker history 命令的输出中。以下是对它的详细解释: 背景 当你使用 docker history <image_name> 命令查看 Docker 镜像的构建历史时,你可能会看到 #(nop) 这样的标记。这是因为 Docker 镜像由…...
升级 Spring Boot 3 配置讲解 —— 为何 SpringBoot3 淘汰了 JDK8?
学会这款 🔥全新设计的 Java 脚手架 ,从此面试不再怕! 随着 Spring Boot 3 的发布,许多开发者发现了一个重要的变化:Spring Boot 3 不再支持 JDK 8。这一变化引发了不少讨论,尤其是对于那些仍然在使用 JDK …...
IT面试求职系列主题-人工智能(一)
想成功求职,必要的IT技能一样不能少,再从人工智能基础知识来一波吧。 1)您对人工智能的理解是什么? 人工智能是计算机科学技术,强调创造能够模仿人类行为的智能机器。这里智能机器可以定义为能够像人一样行动、像人一…...