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

Electron 客户端心跳定时任务调度库调研文档 - Node.js 任务调度库技术调研文档

Electron 客户端心跳定时任务调度库调研文档 - Node.js 任务调度库技术调研文档

本文将对七个流行的定时任务调度库:node-cronrxjsbullnode-scheduleagenda、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。这些库都可以用来处理定时任务,但它们的特点和适用场景有所不同。我们将从…...

【学术投稿-第四届智能电网和绿色能源国际学术会议(ICSGGE 2025)】CSS基本选择器详解:掌握基础,轻松布局网页

可线上 官网:www.icsgge.org 时间:2025年2月28-3月2日 目录 前言 一、基本选择器简介 1. 元素选择器(Type Selector) 基本语法 示例 注意事项 2. 类选择器(Class Selector) 基本语法 示例 注意…...

singleTaskAndroid的Activity启动模式知识点总结

一. 前提知识 1.1. 任务栈知识 二. Activity启动模式的学习 2.1 standard 2.2 singleTop 2.3.singleTask 2.4.singleInstance 引言: Activity作为四大组件之一,也可以说Activity是其中最重要的一个组件,其负责调节APP的视图&#xff…...

Java Stream 全面解析

Java Stream 全面解析 Java 8 引入的 Stream API 提供了一种高效且声明式的方式来处理集合数据。Stream 允许你以函数式编程风格操作数据,支持并行处理,并且可以显著简化代码。下面我们将从 创建操作、中间操作 和 终端操作 三个方面进行全面深入的解析…...

OpenCV识别电脑摄像头中的圆形物体

思路步骤 初始化摄像头:使用cv2.VideoCapture打开电脑摄像头。处理每一帧图像:对摄像头捕获的每一帧图像进行处理,包括灰度化、高斯模糊、霍夫圆变换等操作。绘制圆形和圆心:如果检测到圆形,使用cv2.circle函数用黄线…...

如何在 Tomcat 中屏蔽错误报告

Tomcat 屏蔽错误信息 <h1>HTTP状态 400 - 错误的请求</h1><hr class"line" /><p><b>类型</b> 异常报告</p><p><b>消息</b> 在请求目标中找到无效字符。有效字符在RFC 7230和RFC 3986中定义</p>&…...

Vue 入门到实战 十

第10章 Vue Router​​​​​​​ 目录 10.1 什么是路由 10.2 Vue Router的安装 10.2.1 本地独立版本方法 10.2.2 CDN方法 10.2.3 NPM方法 10.2.4 命令行工具&#xff08;Vue CLI&#xff09;方法 10.3 Vue Router的基本用法 10.3.1 跳转与传参 10.3.2 配置路由 10.…...

jenkins-获取当前时间戳

一. 简述&#xff1a; 很多场景下&#xff0c;需要获取当前时间戳。 二. 使用方法&#xff1a; 1. 安装&#xff1a; 最简单的&#xff0c; 莫过于直接部署相关插件&#xff1a; Build Timestamp Plugin 2. 配置&#xff1a; 3. 使用&#xff1a; post {success {script…...

springboot mybatis-plus 集成多数据源

在 Spring Boot 项目中集成 MyBatis-Plus 并配置多数据源&#xff0c;可以按照以下步骤进行。这个示例将展示如何配置两个数据源&#xff0c;并确保每个数据源都有自己对应的 SqlSessionFactory 和事务管理器。 1. 添加依赖 首先&#xff0c;在你的 pom.xml 文件中添加必要的…...

SSH 登录到 Linux 服务器为什么没有要求输入密码

如果你通过 SSH 登录到 Linux 服务器时没有要求输入密码&#xff0c;通常有以下几种可能性&#xff1a; 1. 使用 SSH 密钥认证 最常见的原因是你的 SSH 登录使用了 公钥认证&#xff0c;而不是密码认证。在这种情况下&#xff0c;服务器上已经配置了你的公钥&#xff0c;并且…...

Kafka 中基于 Segment 和 Offset 查找消息的过程

Kafka 中基于 Segment 和 Offset 查找消息的过程 假设我们有一个 Kafka Topic&#xff0c;其 Partition 划分为多个 Segment 文件。每个 Segment 文件包含 .log、.index 和 .timeindex 文件。现在我们需要查找 Offset 为 368801 的消息。 假设条件 Partition&#xff1a;par…...

【Jenkins流水线搭建】

Jenkins流水线搭建 01、SpringBoot项目 - Jenkins基于Jar持续集成搭建文档基于手动方式发布项目基于dockerfile基于jenkins + dockerfile + jenkinsfile +pieline基于jenkins + jar方式的发布01、环境说明01、准备项目02、准备服务器03、安装git04、安装jdk1.805、安装maven依赖…...

【Java】规则引擎 Drools

https://www.bilibili.com/video/BV1nW421R7qJ 来自尚硅谷 背景 /*** 设置订单积分*/ public void setOrderPoint(Order order){if (order.getAmout() < 100){order.setScore(0);}else if(order.getAmout() > 100 && order.getAmout() < 500){order.setScore(…...

Transformer以及BERT阅读参考博文

Transformer以及BERT阅读参考博文 Transformer学习&#xff1a; 已有博主的讲解特别好了&#xff1a; 李沐&#xff1a;Transformer论文逐段精读【论文精读】_哔哩哔哩_bilibili知乎&#xff1a;Transformer模型详解&#xff08;图解最完整版&#xff09; - 知乎 个人杂想&…...

深入浅出Java反射:掌握动态编程的艺术

小程一言反射何为反射反射核心类反射的基本使用获取Class对象创建对象调用方法访问字段 示例程序应用场景优缺点分析优点缺点 注意 再深入一些反射与泛型反射与注解反射与动态代理反射与类加载器 结语 小程一言 本专栏是对Java知识点的总结。在学习Java的过程中&#xff0c;学习…...

python 替换字符串

在 Python 中&#xff0c;替换字符串可以通过多种方式实现&#xff0c;具体取决于您的需求和上下文。以下是几种常见的方法&#xff1a; 1. 使用 str.replace() 方法 str.replace(old, new[, count]) 是最常用的字符串替换方法。它会将字符串中的所有匹配项替换为新的字符串。…...

数据挖掘智能Agent

&#x1f917; CodeGenie - 智能编程助手 数据处理和分析对于数据分析工作人员来说&#xff0c;往往既复杂又令人头疼&#xff0c;需要耗费大量精力进行重复性工作。为了解决这一问题&#xff0c;我们开发了一款集成了自然语言处理和代码生成功能的智能编程助手——CodeGenie。…...

动手学深度学习11.7. AdaGrad算法-笔记练习(PyTorch)

以下内容为结合李沐老师的课程和教材补充的学习笔记&#xff0c;以及对课后练习的一些思考&#xff0c;自留回顾&#xff0c;也供同学之人交流参考。 本节课程地址&#xff1a;72 优化算法【动手学深度学习v2】_哔哩哔哩_bilibili 本节教材地址&#xff1a;11.7. AdaGrad算法…...

【鸿蒙开发】第三十六章 状态管理 - (V2)

目录​​​​​​​ 1 V2所属装饰器 1.1 ObservedV2装饰器和Trace装饰器&#xff1a;类属性变化观测 1、概述 2、装饰器说明 3、使用限制 1.2 ComponentV2装饰器&#xff1a;自定义组件 1、概述 1.3 Local装饰器&#xff1a;组件内部状态 1、概述 2、装饰器说明 3、…...

基础算法# 求一个数的二进制表示当中有几个1 (C++)

文章目录 题目链接题目解读思路完整代码参考 题目链接 题目解读 给定L,R。统计[L,R]区间内的所有数在二进制下包含的“1”的个数之和。 如5的二进制为101&#xff0c;包含2个“1”。 思路 直接将该数字转为二进制表示,求其有几个1即可。 完整代码 #include<bits/stdc.…...

3D机器视觉的类型、应用和未来趋势

3D机器视觉的类型、应用和未来趋势 类型 3D机器视觉技术主要分为以下几类&#xff1a; 立体视觉&#xff08;Stereo Vision&#xff09; 通过两个或多个摄像头从不同角度捕捉图像&#xff0c;利用视差计算深度信息&#xff0c;生成3D模型。 结构光&#xff08;Structured Li…...

【linux】在 Linux 上部署 DeepSeek-r1:32/70b:解决下载中断问题

【linux】在 Linux 上部署 DeepSeek-r1:32/70b:解决下载中断问题 【承接商业广告,如需商业合作请+v17740568442】 文章目录 【linux】在 Linux 上部署 DeepSeek-r1:32/70b:解决下载中断问题问题描述:解决方法方法一:手动中断并重启下载方法二:使用 Bash 脚本自动化下载在…...

什么是高亮环形光源

高亮环形光源是一种常用于机器视觉、工业检测和光学测量的照明设备。其特点是光线均匀、亮度高,并且呈环形分布,能够为被检测物体提供均匀的照明,减少阴影和反光,提高图像采集的质量。 主要特点: 环形设计:光源呈环形分布,适合安装在镜头周围,能够为物体提供均匀的照明…...

SpringBoot+Vue+微信小程序的高校食堂点餐系统

感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;我会一一回复&#xff0c;希望帮助更多的人。 系统介绍 食堂点餐系统&#xff0c;作为一款融合现代信息技术的高效餐饮服务利器&#xff0c;以其…...

gitlab修改默认端口

问题&#xff1a;gitlab和zabbix部署在同一台服务器上导致80端口冲突 修改gitlab默认端口为8088&#xff1a; 第一步&#xff1a;修改/etc/gitlab/gitlab.rb文件 nginx[listen_port] 8088 第二步&#xff1a;修改默认的gitlab nginx的web服务80端 /var/opt/git…...

大预言模型|微调大预言模型初探索(LLaMA-Factory)(1)

前言 微调模型通常比从零开始训练一个模型的技术要求低。公司不需要拥有大量的深度学习专家&#xff0c;利用现有的开源工具和库&#xff08;如Hugging Face的Transformers等&#xff09;&#xff0c;中小型公司可以轻松地使用和微调大型模型&#xff0c;从而快速实现AI能力的集…...

IOTDB安装部署

IOTDB一般用于工业互联网&#xff0c;至于具体的介绍请自行搜索 1.环境准备 安装前需要保证设备上配有 JDK>1.8 的运行环境&#xff0c;并配置好 JAVA_HOME 环境变量。 设置最大文件打开数为 65535。 关闭防火墙 systemctl stop firewalld.service systemctl disable …...

【Day40 LeetCode】动态规划DP 回文子串问题

一、动态规划DP 回文子串问题 1、回文子串 647 dp数组如果采用一维的&#xff0c;很难进行推导。采用二维&#xff0c;一开始的想法是dp[i][j]表示s[i]~s[j]之间回文子串的个数&#xff0c;这样发现在推导递推公式时遇到困难&#xff0c;例如在s[i]s[j]时&#xff0c;不知道s…...

datasets: PyTorch version 2.5.1+cu124 available 这句话是什么意思

这句话的意思是&#xff1a; datasets&#xff1a;可能是 Python datasets 库的日志信息&#xff0c;说明它检测到了 PyTorch 的安装信息。PyTorch version 2.5.1cu124 available&#xff1a; PyTorch version 2.5.1&#xff1a;表示你的 PyTorch 版本是 2.5.1。cu124&#xf…...

如何通过MDM高效管理企业的Android平板?

目录 1. 批量配置设备&#xff08;Batch Device Provisioning&#xff09; 2. 应用推送与管理&#xff08;App Deployment & Management&#xff09; 3. 远程控制与故障排除&#xff08;Remote Control & Troubleshooting&#xff09; 4. 数据安全管理&#xff08;…...