Electron 客户端心跳定时任务调度库调研文档 - Node.js 任务调度库技术调研文档
Electron 客户端心跳定时任务调度库调研文档 - Node.js 任务调度库技术调研文档
本文将对七个流行的定时任务调度库:node-cron、rxjs、bull、node-schedule、agenda、bree、cron。这些库都可以用来处理定时任务,但它们的特点和适用场景有所不同。我们将从以下几个方面进行详细对比:
- 功能
- 优缺点
- 使用场景
- 简易度
- 下载使用量
一、node-cron
Github:https://github.com/node-cron/node-cron
1. 概述
node-cron 是一个基于 Cron 表达式的任务调度库,允许你根据 cron 表达式设置任务的执行频率。它轻量、易用,适用于大多数简单的定时任务需求。
2. 功能
- 支持常见的 cron 表达式(分钟、小时、日、月、星期几)
- 可以定期执行任务,支持秒级别的定时(每秒、每分钟等)
- 支持定时任务的启动、停止和删除
3. 优点
- 简单易用:API 简洁,快速上手,非常适合简单的定时任务需求
- 语法清晰:使用标准的 cron 表达式来描述任务频率,易于理解和使用
- 无外部依赖:仅依赖 cron 语法解析
- 轻量级:适合小型项目或简单任务
4. 缺点
- 不适合复杂任务:不支持任务的重试、失败管理等复杂场景
- 不支持持久化:任务状态不可持久化,重启应用后任务可能丢失
- 单进程限制:任务无法跨进程或服务器同步
- 只能处理定时任务:如果你需要处理异步任务队列或复杂任务调度,node-cron 的能力有限
5. 使用场景
- 定期执行简单的任务,如清理缓存、发送通知、定期同步数据等
- 在小型应用或不需要持久化任务的场景中非常合适。
6. 简易度
- 简单易用
7. 下载使用量
8. 示例
var cron = require('node-cron');// 每分钟执行一次
cron.schedule('* * * * *', () => {console.log('running a task every minute');
});// 每10秒执行一次任务
cron.schedule('*/10 * * * * *', () => {console.log('Running a task every 10 seconds');
});// 每天中午 12 点执行一次
cron.schedule('0 12 * * *', () => {console.log('This runs every day at 12 PM');
});// 每月 1 号执行一次
cron.schedule('0 0 1 * *', () => {console.log('This runs on the 1st day of every month');
});// 每周三和周五的下午 3 点执行
cron.schedule('0 15 * * 3,5', () => {console.log('This runs every Wednesday and Friday at 3 PM');
});// 每隔五分钟执行一次
cron.schedule('*/5 * * * *', () => {console.log('This runs every 5 minutes');
});
二、rxjs
Github:https://github.com/reactivex/rxjs
Rxjs:https://rxjs.dev/
1. 概述
Rxjs 是一个响应式编程库,主要用途是处理异步事件流。
提供了强大的操作符,用于处理事件、异步任务、定时任务等场景。
Rxjs 并非专门用于任务调度,但它可以非常高效地管理定时任务和流式数据
2. 功能
- 支持流式数据和事件的处理,可以非常灵活地组合定时任务。
- 提供了如 interval、timer、delay 等多个操作符来处理定时任务。
- 强大的异步流管理,能够轻松处理复杂的定时任务和事件流。
3. 优点
- 灵活性高:可组合操作符处理复杂逻辑
- 处理异步流:天然支持错误处理、取消订阅、重试机制
- 高效:能够在流式数据中处理并发,减少不必要的性能损耗
4. 缺点
- 学习曲线较高:对于初学者来说,理解 rxjs 的概念和操作符可能需要一定的时间
- 复杂性较高:如果只是需要简单的定时任务,使用 rxjs 可能显得过于复杂
- 需自行封装定时逻辑
5. 使用场景
- 当需要管理复杂的异步流、事件流,或者在一个定时任务中有多个异步操作时
- 适合用来处理带有多个并发操作的定时任务,或者处理与用户交互相关的事件流
- 已有 Rxjs 集成的项目,复用事件流
6. 简易度
- 复杂
7. 下载使用量
8. 示例
import { interval } from 'rxjs';
import { switchMap } from 'rxjs/operators';// 每 10 秒执行一次任务
interval(10000).subscribe(() => {console.log('This runs every 10 seconds');
});// 每 10 秒进行一次接口请求
const heartbeat$ = interval(10000).pipe(switchMap(() => fetch('http://example.com/heartbeat'))
);
heartbeat$.subscribe(response => console.log('Heartbeat sent', response));
三、bull
Github:https://github.com/OptimalBits/bull
1. 概述
bull 是一个基于 Redis 的任务队列库,适合处理大量异步任务。它不仅支持定时任务,还支持任务的重试、延迟执行、优先级队列等。
bull 更适合用来处理生产环境中需要可靠性和高吞吐量的任务,比如在微服务架构中处理后台任务。
2. 功能
- 支持任务队列和重试机制。
- 支持任务优先级、延迟、重复任务等。
- 支持任务的失败管理、事件监听等。
- 提供后台管理界面(如果集成了 Bull Board)。
3. 优点
- 高可靠性:基于 Redis,任务的失败、重试、延迟等都能够得到很好的管理
- 适合高负载:处理大规模任务队列时非常有效
- 支持定时任务:可以使用 bull 的队列系统来安排定时任务
- 分布式支持:多进程/服务器协同,避免任务重复执行。
- 可视化工具:可通过
bull-board
监控任务状态。 - 更适合大企业大项目
4. 缺点
- 依赖 Redis:需额外基础设施支持
- 配置复杂:需管理队列、Worker 和 Redis 连接
5. 使用场景
- 高负载、需要高可用性和高可靠性的任务调度
- 高可靠后台任务(如支付处理、邮件批量发送)
- 微服务架构中跨服务任务调度
6. 简易度
- 复杂(需了解 Redis)
7. 下载使用量
8. 示例
const Queue = require('bull');
const heartbeatQueue = new Queue('heartbeat', {redis: { host: 'localhost', port: 6379 }
});
// 每 10 秒发送一次心跳
heartbeatQueue.add({}, { repeat: { every: 10000 } });// 任务重试,设置最大重试次数为 3 次
myQueue.add({}, { attempts: 3 });
myQueue.process(async (job) => {console.log('Job processing');if (Math.random() > 0.5) throw new Error('Random failure');
});// 并发执行多个任务
const myQueue = new Queue('myQueue');
myQueue.process(5, async (job) => {console.log('Processing job', job.id);
});// 任务处理优先级
myQueue.add({ foo: 'bar' }, { priority: 1 }); // 优先级 1
myQueue.add({ foo: 'baz' }, { priority: 2 }); // 优先级 2
四、node-schedule
Github:https://github.com/node-schedule/node-schedule
1. 概述
node-schedule 是一个类似于 cron 的任务调度库,它使用更自然的语法来定义定时任务,支持使用 cron 表达式和日期对象来安排任务。
2. 功能
- 支持 cron 表达式
- 支持更灵活的日期和时间安排
- 可以运行单次任务,也可以周期性地运行任务
3. 优点
- 多种调度规则:支持 cron 表达式、日期对象或递归规则(如
every 5 minutes
) - 简单易用
4. 缺点
- 无持久化:进程重启后任务丢失
- 没有任务队列:不支持任务队列和高可用性任务管理
- 不适合高吞吐量的任务处理
5. 使用场景
- 定期执行任务,特别是当任务间隔和时间调度较为复杂时,node-schedule 非常合适
- 中小型应用或不需要复杂任务队列的场景
6. 简易度
- 简单易用,和 node-cron 相似
7. 下载使用量
8. 示例
const schedule = require('node-schedule');
// 每10秒执行一次任务
schedule.scheduleJob('*/10 * * * * *', () => {console.log('Sending heartbeat every 10 seconds');
});// 2025 年 2 月 14 9 点半执行
const date = new Date(2025, 1, 14, 9, 30, 0);
const job = schedule.scheduleJob(date, function(){console.log('The world is going to end today.');
});// 每月 1 号执行任务
schedule.scheduleJob('0 0 1 * *', () => {console.log('This runs on the 1st day of every month');
});// 每周三和周五下午三点执行任务
schedule.scheduleJob('0 15 * * 3,5', () => {console.log('This runs every Wednesday and Friday at 3 PM');
});// 延迟执行任务
schedule.scheduleJob(new Date(Date.now() + 5000), () => {console.log('This runs 5 seconds later');
});// 每 30 分钟执行任务
schedule.scheduleJob('*/30 * * * *', () => {console.log('This runs every 30 minutes');
});
五、agenda
Github:https://github.com/agenda/agenda
1. 概述
agenda 是一个基于 MongoDB 的任务调度库,提供强大的作业调度、任务队列和失败重试机制。agenda 适合处理需要高可靠性、任务队列、延迟执行和定期任务的复杂场景。
支持持久化和分布式任务。适合需要持久化任务和分布式调度的场景,比如在多个实例中运行任务,避免重复执行。配置起来可能需要设置MongoDB。
2. 功能
- 支持任务的定时执行、延迟执行、优先级、失败重试等
- 可以存储任务状态到 MongoDB,并提供任务的执行历史
- 支持任务的调度、取消和重试
3. 优点
- 高可靠性:任务的状态和调度信息存储在 MongoDB 中,可以持久化任务的状态
- 强大的功能:支持复杂的任务队列、高吞吐量的任务处理、失败重试机制、并发控制等
- 灵活的任务调度:支持 cron、定时和延迟任务调度
- 持久化与分布式:任务存储在 MongoDB,支持多实例协同
4. 缺点
- 依赖 MongoDB:需维护数据库连接
- 性能瓶颈:高频率任务可能受数据库性能影响
- 比较复杂
5. 使用场景
- 需要持久化但无需复杂队列的中型应用(如定时数据同步)
- 已有 MongoDB 基础设施的项目
6. 简易度
- 比较复杂(需 MongoDB)
7. 下载使用量
8. 示例
const { Agenda } = require('agenda');
const mongoose = require('mongoose');// 连接到 MongoDB
mongoose.connect('mongodb://localhost/agenda-example', {useNewUrlParser: true,useUnifiedTopology: true,
});const agenda = new Agenda({ db: { address: 'mongodb://localhost/agenda-example' } });agenda.on('ready', () => {console.log('Agenda is ready!');agenda.start();
});// 创建一个任务
agenda.define('send heartbeat', async job => {console.log('Sending heartbeat...');try {// 模拟发送 HTTP 请求// 例如 fetch 或 axios// const response = await fetch('http://example.com/heartbeat');// if (!response.ok) throw new Error('Heartbeat failed');} catch (err) {console.error('Error in heartbeat task:', err);// 任务失败后处理逻辑throw err;}
});// 创建定时任务,每 10 秒执行一次
agenda.every('10 seconds', 'send heartbeat');
// 任务延迟执行
agenda.schedule('in 10 minutes', 'send heartbeat');// 控制任务
agenda.stop(); // 停止所有任务调度
agenda.cancel({ name: 'send heartbeat' }); // 取消心跳任务
六、bree
Github:https://github.com/breejs/bree
1. 概述
bree 是一个高效的 JavaScript 和 TypeScript 工作调度库。它是一个现代化的任务调度库,特别适合需要使用多线程和调度背景任务的应用。
bree 的调度系统支持 cron 表达式,并且内置了多任务调度功能。
2. 功能
- 支持 cron 表达式来设置任务
- 支持并行执行任务和延迟任务
- 内置任务状态监控和日志功能
- 支持多进程处理(通过 worker threads)
3. 优点
- 支持多线程和并行任务,适用于处理大量并发任务
- 高效:能够高效地管理大规模的任务调度
- 易集成:支持 Node.js 和 TypeScript 项目,易于集成
- 任务状态:提供任务的状态和日志管理
4. 缺点
- 依赖较重:相较于 node-cron,bree 对于简单的定时任务来说过于复杂
- 任务队列:与 bull 等任务队列系统相比,bree 可能不具备任务队列和重试机制
5. 使用场景
- 高并发的任务调度,尤其是需要使用多线程处理任务的场景
- 需要任务监控、日志记录和多进程任务调度的场景
6. 简易度
- 中等
7. 下载使用量
8. 示例
const Bree = require('bree');
// 每 10 秒执行一次任务
const bree = new Bree({jobs: [{name: 'heartbeat',interval: '10s'}]
});
bree.start();// 监听任务状态
const bree = new Bree({jobs: [{name: 'heartbeat',interval: '10s',onComplete: () => {console.log('Heartbeat job completed');}}]
});bree.start();// 并行处理任务
const bree = new Bree({jobs: [{ name: 'task1', interval: '5s' },{ name: 'task2', interval: '5s' }]
});bree.start();// 任务暂停与继续
const bree = new Bree({jobs: [{ name: 'heartbeat', interval: '10s' }]
});bree.start();
bree.stop('heartbeat'); // 停止任务
bree.start('heartbeat'); // 继续任务
七、cron
Github:https://github.com/kelektiv/node-cron
1. 概述
cron 是一个基于 cron 表达式的任务调度库,功能简单、直接。它可以帮助开发者基于 cron 表达式执行任务,适合于需要定时任务调度的场景。
2. 功能
- 支持 cron 表达式调度任务
- 任务失败时可以重试
- 支持并行执行任务
- 支持任务暂停和删除
3. 优点
- 简单易用:语法与 node-cron 相似,使用起来非常直观
- 灵活:支持自定义的 cron 表达式和多种调度方式
- 定时任务控制:支持暂停、删除等任务管理功能
4. 缺点
- 功能相对较少:相比于 bull 和 agenda,不支持队列、重试和失败管理等复杂任务调度功能
- 性能问题:处理大量复杂任务时,可能会遇到性能瓶颈
5. 使用场景
- 用于简单的定时任务调度,适合需要标准 cron 表达式来调度任务的场景
- 不需要复杂任务队列或失败重试的场景
6. 简易度
- 简单易用,API 与 node-cron 相似,适合快速上手
7. 下载使用量
8. 示例
const cron = require('cron');
// 每 10 秒执行一次任务
const job = new cron.CronJob('*/10 * * * * *', () => {console.log('Heartbeat sent');
});
job.start();// 每分钟执行一次
const job = new cron.CronJob('* * * * *', () => {console.log('This runs every minute');
});
job.start();// 每天中午 12 点执行任务
const job = new cron.CronJob('0 12 * * *', () => {console.log('This runs every day at 12 PM');
});
job.start();// 每周三和周五中午 12 点执行任务
const job = new cron.CronJob('0 12 * * 3,5', () => {console.log('This runs every Wednesday and Friday at 3 PM');
});
job.start();// 凌晨执行任务
const job = new cron.CronJob('0 0 0 * *', () => {console.log('This runs every midnight');
});
job.start();
八、总结
1. 总结
库 | 优点 | 缺点 | 使用场景 | 依赖项 | 简易度 | 维护状态 |
---|---|---|---|---|---|---|
node-cron | 轻量、易用、支持 cron 表达式、语法清晰 | 只支持简单的定时任务,不支持复杂任务队列、重试等功能 | 简单的定时任务调度、定期执行任务(如每小时、每天等) | 无 | 高 | 活跃,常用且广泛支持 |
rxjs | 强大的异步流管理、灵活、可以结合其他任务调度和事件流 | 学习曲线陡峭、复杂性较高,可能对于简单定时任务显得过于复杂 | 复杂的异步任务处理、多任务流管理、事件流和定时任务组合 | 无 | 中 | 活跃,广泛应用于多种异步任务管理 |
bull | 高可靠性、任务队列、任务重试、延迟、优先级、任务状态持久化 | 需要 Redis 支持、配置和部署较为复杂 | 高并发任务处理、任务队列管理、需要持久化和重试机制的任务 | Redis | 中 | 活跃,适用于大规模任务调度 |
node-schedule | 支持复杂的日期和时间规则、灵活、支持定时和基于日期的调度 | 不支持任务队列管理、无法处理高负载任务 | 复杂的定时任务调度、日期时间规则复杂的任务调度 | 无 | 中 | 活跃,广泛用于复杂的调度需求 |
agenda | 支持任务队列、失败重试、优先级、持久化任务、灵活的作业调度 | 需要 MongoDB、配置较为复杂 | 需要高可用、高可靠任务调度的场景、任务队列和任务失败重试的任务 | MongoDB | 中 | 活跃,适用于高负载和任务队列管理 |
bree | 高并发任务、多线程支持、作业状态管理、任务日志、灵活的任务调度 | 配置较复杂、任务管理较重、适合大规模任务 | 多线程任务、高并发任务、需要日志和状态监控的场景 | 无 | 中 | 活跃,适合并行处理和高并发任务 |
cron | 简单、易用、支持 cron 表达式,轻量、配置少 | 不支持复杂任务队列管理、任务重试等功能 | 简单的定时任务调度,适合需要基于 cron 的调度场景 | 无 | 高 | 活跃,广泛应用于简单任务调度 |
2. 项目选型
2.1. 简单任务调度:
- 如果你的任务调度需求非常简单,可以选择 node-cron 或 cron。它们提供了轻量且易用的 API,适用于基于 cron 表达式的常规任务调度
2.2. 复杂的异步任务和事件流:
- rxjs 是最佳选择,特别是当你需要处理事件流、异步操作以及定时任务时,rxjs 的流式处理能力非常强大
2.3. 高负载和任务队列:
- bull 和 agenda 适用于高负载场景,支持任务队列、失败重试、延迟任务等复杂需求。如果你需要高可靠性和任务管理,选择 bull
- agenda 适合需要任务持久化和失败重试的高并发任务
2.4. 灵活和自定义调度:
- node-schedule 适合需要灵活调度和复杂规则的任务,尤其是当你需要根据特定日期或时间来调度任务时,选择 node-schedule
2.5. 高并发和多线程处理:
- bree 是一个强大的任务调度库,适用于需要高并发、多线程处理的场景。它在任务管理和调度方面提供了更多的功能,适合大规模任务处理
相关文章:
Electron 客户端心跳定时任务调度库调研文档 - Node.js 任务调度库技术调研文档
Electron 客户端心跳定时任务调度库调研文档 - Node.js 任务调度库技术调研文档 本文将对七个流行的定时任务调度库:node-cron、rxjs、bull、node-schedule、agenda、bree、cron。这些库都可以用来处理定时任务,但它们的特点和适用场景有所不同。我们将从…...
数据结构——二叉树(2025.2.12)
目录 一、树 1.定义 (1)树的构成 (2)度 2.二叉树 (1)定义 (2)二叉树的遍历 (3)遍历特性 二、练习 1.二叉树 (1)创建二叉树…...
OpenCV机器学习(5)逻辑回归算法cv::ml::LogisticRegression
OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::ml::LogisticRegression 是 OpenCV 机器学习模块中的一个类,用于实现逻辑回归算法。逻辑回归是一种广泛应用于分类问题的统计方法,特别适合二分类任务。…...
matlab 汽车abs的模糊pid和pid控制仿真
1、内容简介 matlab145-汽车abs的模糊pid和pid控制仿真 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略基于模糊控制的汽车ABS系统仿真研究_刘志敏.caj 汽车ABS模糊控制方法的分析与仿真_李林.caj 汽车ABS模糊控制方法的研究_王文竹.pdf 汽车ABS…...
Flutter 正在推进全新 PlatformView 实现 HCPP, 它又用到了 Android 上的什么黑科技
跨平台开发里的 PlatformView 实现一直是一个经久不衰的话题,在之前的 《深入 Flutter 和 Compose 的 PlatformView 实现对比》 我们就详细聊过 Flutter 和 Compose 在 PlatformView 实现上的异同之处,也聊到了 Compose 为什么在相同实现上对比 Flutter …...
VAS1260IB05E 集成内部开关驱动器的汽车级LED硬灯带高效解决方案
VAS1260IB05E LED芯片是一种连续模式电感降压转换器,设计用于从高于LED电压的电压源高效驱动单个或多个串联连接的LED。该设备在5V至60V之间的输入电源下工作,并提供高达1.2A的外部可调输出电流。包括输出开关和高侧输出电流感测电路,该电路使…...
5.【线性代数】—— 转置,置换和向量空间
五 转置,置换和向量空间 1. 置换矩阵2. 转置矩阵3. 对称矩阵4. 向量空间4.1 向量空间4.2 子空间 1. 置换矩阵 定义: 用于行互换的矩阵P。 之前进行ALU分解时,可能存在该行主元为0,要进行行互换,即PALU 性质࿱…...
前端如何实现一个五星评价,鼠标滑动,前边星星颜色的变黄,后边的不变;
直接上代码 <!DOCTYPE html> <html> <head> <style> .star-rating {display: flex;padding: 10px 0; }.star {position: relative;width: 40px;height: 40px; }.half {position: absolute;top: 0;width: 20px;height: 40px;overflow: hidden;font-siz…...
等差数列有几项--INT_MAX【#include <climits>】
等差数列 题目代码INT_MAX的使用 题目 代码 #include <iostream> #include <vector> #include <string> #include <algorithm> #include <math.h> #include <queue> #include <climits> // 包含INT_MAX常量 #include <cctype&g…...
Linux /dev/null
/dev/null 是 Linux 和类 Unix 系统中一个特殊且非常有用的设备文件,也被称为空设备。下面为你详细介绍它的特点、用途和使用示例。 特点 写入丢弃:当向 /dev/null 写入数据时,这些数据会被立即丢弃,不会被保存到任何地方&#…...
计算机视觉-尺度不变区域
一、尺度不变性 1.1 尺度不变性 找到一个函数,实现尺度的选择特性。 1.2 高斯偏导模版求边缘 1.3 高斯二阶导 用二阶过零点检测边缘 高斯二阶导有两个参数:方差和窗宽(给定方差可以算出窗宽) 当图像与二阶导高斯滤波核能匹配…...
串的基本操作--数据结构
目录 一、串的基本概述 二、串的存储结构 2.1定义属性存储结构 串长有两种表示方法: 1、用一个额外的变量length来存放串的长度; 2、串值后面加一个不计入串长的结束标记字符“\0”,此时的串长为隐含值。 2.2堆的顺序存储结构 三、串的基本操…...
C++17 数学特殊函数:探索标准库中的强大工具
文章目录 1. 什么是数学特殊函数?2. C17 中的特殊函数2.1 贝塞尔函数2.2 勒让德函数2.3 椭圆积分2.4 伽马函数2.5 误差函数 3. 实际应用场景3.1 科学计算3.2 工程应用3.3 数据分析 4. 总结 在 C17 中,标准库引入了一系列数学特殊函数,这些函数…...
多模态特征提取与融合助力高光谱+LiDAR数据分类性能飞跃
目录 论文解读 总体架构 CMIIE 模块工作模式 MLFFC模块工作模式 论文解读 提出了一种新的多模态特征提取模块CMIIE,可以捕获高光谱和LiDAR数据之间的互补信息。设计了一个多层特征融合分类模块MLFFC,通过对不同层级的特征进行融合来提高分类性能。使用对抗学习策略来指导网…...
内容中台重构企业内容管理流程驱动智能协作升级
内容概要 内容中台作为企业数字化转型的核心基础设施,通过技术架构革新与功能模块整合,重构了传统内容管理流程的底层逻辑。其核心价值在于构建动态化、智能化的内容生产与流转体系,将分散的创作、存储、审核及分发环节纳入统一平台管理。基…...
网络安全攻防演练——RT实战技巧篇
前言 又是一年hw招聘季,每年hw行动都会吸引大量网络安全从业者参加。同时也会有很多热爱网络安全但无从下手的网安爱好者参与。笔者旨在对网络安全有想法但是没有方向的师傅做一个简单的方向的了解,让师傅有方向去学习。 RT(红队) 1.引入 首先红队的…...
【MySQL】第六弹---数据库表约束详解:从空属性到主键的全方位指南
✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】【MySQL】 目录 1. 表的约束 1.1 空属性 1.2 默认值 1.3 列描述 1.4 zerofill 1.5 主键 1. 表的约束 真正约束字段的是数据类型&…...
JMeter工具介绍、元件和组件的介绍
Jmeter功能概要 JDK常用文件目录介绍 Bin目录:存放可执行文件和配置文件 Docs目录:是Jmeter的API文档,用于开发扩展组件 printable_docs目录:用户帮助手册 lib目录:存放JMeter依赖的jar包和用户扩展所依赖的Jar包…...
vue3 在element-plus表格使用render-header
在vue2中 element表格render-header 源码是有返回h()函数的 在vue3 element-plus 表格源码 render-header函数没有返回h函数了 所以需要用render-header方法中创建虚拟DOM节点的话需要引用h方法 <el-table-column header-align"right" align"right" …...
IM 即时通讯系统-04-聊一聊 IM 要如何进行技术选型
IM 系列 IM 文档开源库 首先,后端技术选型是Java。Java有很多优势,比如跨平台性、丰富的生态系统、高性能和成熟稳定。这些都是为什么选择Java的原因。接下来,前端选用了Vue,因为它具有渐进式框架的特点、响应式数据绑定、组件化…...
机器学习_19 集成学习知识点总结
集成学习(Ensemble Learning)是一种强大的机器学习范式,通过组合多个模型的预测结果来提高整体性能和泛化能力。它在分类、回归和特征选择等任务中表现出色,广泛应用于各种实际问题。今天,我们就来深入探讨集成学习的原…...
自动驾驶---基于深度学习模型的轨迹预测
1 背景 自动驾驶任务中,轨迹预测一直以来是一个难题。 在复杂交通场景中,即使驾驶员最终意图确定,但决策过程中其他车辆的动态行驶路径的即时变化会导致自车路径呈现多模态属性,即车辆的未来轨迹有多种可能性。对车辆的多模态轨迹…...
线性模型 - 二分类问题的损失函数
在二分类问题中,损失函数用于量化模型预测与真实标签之间的差异,以指导模型参数的调整。本文,我们来一起学习一下常见的损失函数及其直观解释。 一、核心二分类损失函数及通俗理解 1. 0-1损失(Zero-One Loss) 公式&…...
string类详解(上)
文章目录 目录1. STL简介1.1 什么是STL1.2 STL的版本1.3 STL的六大组件 2. 为什么学习string类3. 标准库中的string类3.1 string类3.2 string类的常用接口说明 目录 STL简介为什么学习string类标准库中的string类string类的模拟实现现代版写法的String类写时拷贝 1. STL简介 …...
c# —— StringBuilder 类
StringBuilder 类是 C# 和其他一些基于 .NET Framework 的编程语言中的一个类,它位于 System.Text 命名空间下。StringBuilder 类表示一个可变的字符序列,它是为了提供一种比直接使用字符串连接操作更加高效的方式来构建或修改字符串。 与 C# 中的 stri…...
今日行情明日机会——20250217
2025年02月17日行情 后续投资机会分析 根据最新盘面信息,以下板块和个股具备潜在投资机会,需结合市场动态和基本面进一步验证: 1. 腾讯系AI(18家涨停) 核心逻辑:涨停家数最多(18家࿰…...
Openshift或者K8S上部署xxl-job
本案例以版本2.3.0为例 1. 源码编译成jar包 source code: https://github.com/xuxueli/xxl-job/blob/2.3.0/ 这里我们会得到两个jar包:xxl-job-admin-2.3.0.jar和xxl-job-executor-sample-springboot-2.3.0.jar 2. 初始化mysql数据库 sql code: https://github.…...
vite+vue3开发uni-app时低版本浏览器不支持es6语法的问题排坑笔记
重要提示:请首先完整阅读完文章内容后再操作,以免不必要的时间浪费!切记!!!在使用vitevue3开发uni-app项目时,存在低版本浏览器不兼容es6语法的问题,如“?.” “??” 等。为了方便…...
使用 Apache PDFBox 提取 PDF 中的文本和图像
在许多应用中,我们需要从 PDF 文件中提取文本内容和嵌入的图像。为了实现这一目标,Apache PDFBox 是一个非常实用的开源工具库。它提供了丰富的 API,可以帮助我们轻松地读取 PDF 文件、提取其中的文本、图像以及其他资源。 本文将介绍如何使…...
centos7arm架构安装mysql服务
1.安装新版mysql前,需将系统自带的mariadb卸载 rpm -qa|grep mariadb //查找mariadb的rpm包 rpm -e mariadb-libs-5.5.56-2.el7.x86_64 //卸载mariadb包 2.去官网下载对应mysq包https://downloads.mysql.com/archives/community/ 3.解压下载包&…...
【个人开发】deepspeed+Llama-factory 本地数据多卡Lora微调
文章目录 1.背景2.微调方式2.1 关键环境版本信息2.2 步骤2.2.1 下载llama-factory2.2.2 准备数据集2.2.3 微调模式2.2.3.1 zero-3微调2.2.3.2 zero-2微调2.2.3.3 单卡Lora微调 2.3 踩坑经验2.3.1 问题一:ValueError: Undefined dataset xxxx in dataset_info.json.2…...
后端生成二维码,前端请求接口生成二维码并展示,且多个参数后边的参数没有正常传输问题处理
一、后端代码 1、controller GetMapping("/generateQRCode/{url}")ApiOperation(value "生成url链接二维码",notes "生成url链接二维码")public JsonResult<NewsQRCodeVo> generateQRCode(PathVariable String url,HttpServletRespons…...
NBT群落物种级丰度鉴定新方法sylph
文章目录 简介为什么选择Sylph?Sylph的工作原理 Install使用解析成gtdb格式sylph 能做什么?sylph 不能做什么?ANI定义如何使用 sylph-utils 生成包含分类信息的配置文件耗时:66个样本耗时1h 转成easymicroplot可用数据 简介 Sylp…...
长视频生成、尝试性检索、任务推理 | Big Model Weekly 第56期
点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 01 COMAL:AConvergent Meta-Algorithm for Aligning LLMs with General Preferences 许多对齐方法,包括基于人类反馈的强化学习(RLHF),依赖于布拉德利-特里&#…...
使用右侧值现象来处理一个word导入登记表的需求
需求也简单,导word文件用户登记表,有各部门的十几个版本(为什么这么多?不知道)。这里说下谈下我的一些代码做法: 需求分析: 如果能解决java字段和各项填的值怎么配对的问题,那么就…...
FRRouting配置与OSPF介绍,配置,命令,bfd算法:
文章目录 1、frrouting的配置:2、ospf2.1、检测和维护邻居关系2.2、ospfDR和BDR2.3、odpf邻居表2.4、ospf常用命令2.5、bfd配置 1、frrouting的配置: sudo service zebra start sudo service ospfd start telnet localhost 2604 en configure termina…...
基于ThinkPHP 5~8兼容的推荐算法类实现,
在现代推荐系统中,随着用户量和物品量的增长,传统的推荐算法可能会面临性能瓶颈。本文将介绍如何基于 ThinkPHP 实现一个高性能的推荐系统,结合显性反馈(如兴趣选择)、隐性反馈(如观看时长、评论、点赞、搜…...
使用Python爬虫实时监控行业新闻案例
目录 背景环境准备请求网页数据解析网页数据定时任务综合代码使用代理IP提升稳定性运行截图与完整代码总结 在互联网时代,新闻的实时性和时效性变得尤为重要。很多行业、技术、商业等领域的新闻都可以为公司或者个人发展提供有价值的信息。如果你有一项需求是要实时…...
kong身份认证插件详解之Basic Auth插件
1.3、Basic Authentication 支持基于用户名和密码的基本认证,通常用于简单的身份验证场景。 1.3.1、环境准备 1.3.1.1、创建一个服务,basic-auth-service curl -i -s -X POST http://localhost:8001/services \--data namebasic-auth-service \--dat…...
Copilot基于企业PPT模板生成演示文稿
关于copilot创建PPT,咱们写过较多文章了: Copilot for PowerPoint通过文件创建PPT Copilot如何将word文稿一键转为PPT Copilot一键将PDF转为PPT,治好了我的精神内耗 测评Copilot和ChatGPT-4o从PDF创建PPT功能 Copilot for PPT全新功能&a…...
用React实现一个登录界面
使用React来创建一个简单的登录表单。以下是一个基本的React登录界面示例: 1. 设置React项目 如果你还没有一个React项目,你可以使用Create React App来创建一个。按照之前的步骤安装Create React App,然后创建一个新项目。 2. 创建登录组…...
前端布局的方式有哪些
前端布局的方式有哪些 在前端开发里,布局就像是装修房子,把不同的东西合理地摆放在合适的位置,让整个空间既美观又实用。下面给你介绍几种常见的前端布局方式: 1. 普通流布局(标准文档流布局) 这就像是按…...
seata集成nacos
#nacos集成nacos并配置mysql数据源 1. 所需依赖 <!--seata 分布式事务--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-seata</artifactId></dependency> 2. 打开seata目录ÿ…...
第29篇 基于ARM A9处理器用C语言实现中断<五>
Q:怎样设计基于ARM A9处理器的C语言程序使用定时器中断实现实时时钟? A:在上一期的程序中添加A9 Private Timer作为第三个中断源,配置该定时器使其每隔0.01秒产生一次中断。使用该定时器使全局变量time的值递增,并将…...
deepseek多列数据对比,联想到excel的高级筛选功能
目录 1 业务背景 2 deepseek提示词输入 3 联想分析 4 EXCEL高级搜索 1 业务背景 系统上线的时候经常会遇到一个问题,系统导入的数据和线下的EXCEL数据是否一致,如果不一致,如何快速找到差异值,原来脑海第一反应就是使用公…...
C 程序多线程拆分文件
C 程序多线程拆分文件 在C语言中,实现多线程来拆分文件通常需要借助多线程库,比如 POSIX 线程库(pthread)或者 Windows 的线程库(CreateThread 或类似的函数)。下面我将分别展示在 Linux 和 Windows 环境下…...
mysql 使用 CONCAT、GROUP_CONCAT 嵌套查询出 json 格式数据
tb_factory表由 factory_code 和 factory_name 字段,查询出如下所示效果: {"factory_0001": "工厂1","factory_0002": "工厂2",... } select sql: SELECT CONCAT( "{",GROUP_CONCAT( C…...
Leetcode 2466. Count Ways To Build Good Strings
Problem Given the integers zero, one, low, and high, we can construct a string by starting with an empty string, and then at each step perform either of the following: Append the character ‘0’ zero times.Append the character ‘1’ one times. This can …...
分布式 IO 模块:食品罐装产线自动化与高效运行的推手
在当今竞争激烈的罐装视频生产行业,如何实现产线的自动化与连续性高效运行,成为了众多企业追求的核心目标。明达技术推出的MR30分布式 IO 模块作为一种先进的工业控制技术,正逐渐崭露头角,为食品罐装产线带来了前所未有的变革。 痛…...
rustdesk编译修改名字
最近,我用Rust重写了一个2W行C代码的linux内核模块。在此记录一点经验。我此前没写过内核模块,认识比较疏浅,有错误欢迎指正。 为什么要重写? 这个模块2W行代码量看起来不多,却在线上时常故障,永远改不完。…...