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

docker快速部署xxjob2.3.0-SpringBoot快速集成示例

xxjob 2.3.0 部署

参考资料

docker安装xxl-job-admin步骤_JEECG低代码平台的技术博客_51CTO博客

run前准备

1 新建数据库  xxl_job
2 建表sql(可以直接使) https://github.com/xuxueli/xxl-job/blob/master/doc/db/tables_xxl_job.sql

建库sql

#
# XXL-JOB v2.4.0-SNAPSHOT
# Copyright (c) 2015-present, xuxueli.CREATE database if NOT EXISTS `xxl_job` default character set utf8mb4 collate utf8mb4_unicode_ci;
use `xxl_job`;SET NAMES utf8mb4;CREATE TABLE `xxl_job_info` (`id` int(11) NOT NULL AUTO_INCREMENT,`job_group` int(11) NOT NULL COMMENT '执行器主键ID',`job_desc` varchar(255) NOT NULL,`add_time` datetime DEFAULT NULL,`update_time` datetime DEFAULT NULL,`author` varchar(64) DEFAULT NULL COMMENT '作者',`alarm_email` varchar(255) DEFAULT NULL COMMENT '报警邮件',`schedule_type` varchar(50) NOT NULL DEFAULT 'NONE' COMMENT '调度类型',`schedule_conf` varchar(128) DEFAULT NULL COMMENT '调度配置,值含义取决于调度类型',`misfire_strategy` varchar(50) NOT NULL DEFAULT 'DO_NOTHING' COMMENT '调度过期策略',`executor_route_strategy` varchar(50) DEFAULT NULL COMMENT '执行器路由策略',`executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler',`executor_param` varchar(512) DEFAULT NULL COMMENT '执行器任务参数',`executor_block_strategy` varchar(50) DEFAULT NULL COMMENT '阻塞处理策略',`executor_timeout` int(11) NOT NULL DEFAULT '0' COMMENT '任务执行超时时间,单位秒',`executor_fail_retry_count` int(11) NOT NULL DEFAULT '0' COMMENT '失败重试次数',`glue_type` varchar(50) NOT NULL COMMENT 'GLUE类型',`glue_source` mediumtext COMMENT 'GLUE源代码',`glue_remark` varchar(128) DEFAULT NULL COMMENT 'GLUE备注',`glue_updatetime` datetime DEFAULT NULL COMMENT 'GLUE更新时间',`child_jobid` varchar(255) DEFAULT NULL COMMENT '子任务ID,多个逗号分隔',`trigger_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '调度状态:0-停止,1-运行',`trigger_last_time` bigint(13) NOT NULL DEFAULT '0' COMMENT '上次调度时间',`trigger_next_time` bigint(13) NOT NULL DEFAULT '0' COMMENT '下次调度时间',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;CREATE TABLE `xxl_job_log` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`job_group` int(11) NOT NULL COMMENT '执行器主键ID',`job_id` int(11) NOT NULL COMMENT '任务,主键ID',`executor_address` varchar(255) DEFAULT NULL COMMENT '执行器地址,本次执行的地址',`executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler',`executor_param` varchar(512) DEFAULT NULL COMMENT '执行器任务参数',`executor_sharding_param` varchar(20) DEFAULT NULL COMMENT '执行器任务分片参数,格式如 1/2',`executor_fail_retry_count` int(11) NOT NULL DEFAULT '0' COMMENT '失败重试次数',`trigger_time` datetime DEFAULT NULL COMMENT '调度-时间',`trigger_code` int(11) NOT NULL COMMENT '调度-结果',`trigger_msg` text COMMENT '调度-日志',`handle_time` datetime DEFAULT NULL COMMENT '执行-时间',`handle_code` int(11) NOT NULL COMMENT '执行-状态',`handle_msg` text COMMENT '执行-日志',`alarm_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '告警状态:0-默认、1-无需告警、2-告警成功、3-告警失败',PRIMARY KEY (`id`),KEY `I_trigger_time` (`trigger_time`),KEY `I_handle_code` (`handle_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;CREATE TABLE `xxl_job_log_report` (`id` int(11) NOT NULL AUTO_INCREMENT,`trigger_day` datetime DEFAULT NULL COMMENT '调度-时间',`running_count` int(11) NOT NULL DEFAULT '0' COMMENT '运行中-日志数量',`suc_count` int(11) NOT NULL DEFAULT '0' COMMENT '执行成功-日志数量',`fail_count` int(11) NOT NULL DEFAULT '0' COMMENT '执行失败-日志数量',`update_time` datetime DEFAULT NULL,PRIMARY KEY (`id`),UNIQUE KEY `i_trigger_day` (`trigger_day`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;CREATE TABLE `xxl_job_logglue` (`id` int(11) NOT NULL AUTO_INCREMENT,`job_id` int(11) NOT NULL COMMENT '任务,主键ID',`glue_type` varchar(50) DEFAULT NULL COMMENT 'GLUE类型',`glue_source` mediumtext COMMENT 'GLUE源代码',`glue_remark` varchar(128) NOT NULL COMMENT 'GLUE备注',`add_time` datetime DEFAULT NULL,`update_time` datetime DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;CREATE TABLE `xxl_job_registry` (`id` int(11) NOT NULL AUTO_INCREMENT,`registry_group` varchar(50) NOT NULL,`registry_key` varchar(255) NOT NULL,`registry_value` varchar(255) NOT NULL,`update_time` datetime DEFAULT NULL,PRIMARY KEY (`id`),KEY `i_g_k_v` (`registry_group`,`registry_key`,`registry_value`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;CREATE TABLE `xxl_job_group` (`id` int(11) NOT NULL AUTO_INCREMENT,`app_name` varchar(64) NOT NULL COMMENT '执行器AppName',`title` varchar(12) NOT NULL COMMENT '执行器名称',`address_type` tinyint(4) NOT NULL DEFAULT '0' COMMENT '执行器地址类型:0=自动注册、1=手动录入',`address_list` text COMMENT '执行器地址列表,多地址逗号分隔',`update_time` datetime DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;CREATE TABLE `xxl_job_user` (`id` int(11) NOT NULL AUTO_INCREMENT,`username` varchar(50) NOT NULL COMMENT '账号',`password` varchar(50) NOT NULL COMMENT '密码',`role` tinyint(4) NOT NULL COMMENT '角色:0-普通用户、1-管理员',`permission` varchar(255) DEFAULT NULL COMMENT '权限:执行器ID列表,多个逗号分割',PRIMARY KEY (`id`),UNIQUE KEY `i_username` (`username`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;CREATE TABLE `xxl_job_lock` (`lock_name` varchar(50) NOT NULL COMMENT '锁名称',PRIMARY KEY (`lock_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;INSERT INTO `xxl_job_group`(`id`, `app_name`, `title`, `address_type`, `address_list`, `update_time`) VALUES (1, 'xxl-job-executor-sample', '示例执行器', 0, NULL, '2018-11-03 22:21:31' );
INSERT INTO `xxl_job_info`(`id`, `job_group`, `job_desc`, `add_time`, `update_time`, `author`, `alarm_email`, `schedule_type`, `schedule_conf`, `misfire_strategy`, `executor_route_strategy`, `executor_handler`, `executor_param`, `executor_block_strategy`, `executor_timeout`, `executor_fail_retry_count`, `glue_type`, `glue_source`, `glue_remark`, `glue_updatetime`, `child_jobid`) VALUES (1, 1, '测试任务1', '2018-11-03 22:21:31', '2018-11-03 22:21:31', 'XXL', '', 'CRON', '0 0 0 * * ? *', 'DO_NOTHING', 'FIRST', 'demoJobHandler', '', 'SERIAL_EXECUTION', 0, 0, 'BEAN', '', 'GLUE代码初始化', '2018-11-03 22:21:31', '');
INSERT INTO `xxl_job_user`(`id`, `username`, `password`, `role`, `permission`) VALUES (1, 'admin', 'e10adc3949ba59abbe56e057f20f883e', 1, NULL);
INSERT INTO `xxl_job_lock` ( `lock_name`) VALUES ( 'schedule_lock');commit;
3 创建 挂载目录
mkdir -p /opt/xxjobData

docker run

docker run -e PARAMS="--spring.datasource.url=jdbc:mysql://124.222.227.132:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=UTC --spring.datasource.username=root --spring.datasource.password=数据库密码" -p 8090:8080  -v /opt/xxjobData:/data/applogs --name xxl-job-admin -d xuxueli/xxl-job-admin:2.3.0

运行结果

默认账号密码

admin

123456

image-20230209095019653

开放防火墙

本地

开发防火墙
firewall-cmd --zone=public --add-port=8090/tcp --permanent 
重启防火墙-使其开发端口号生效
firewall-cmd --reload 
检查防火墙端口号是否开发成功!
firewall-cmd --list-ports参数解释:zone =作用域(范围)permanent 永久生效

SpringBoot 快速集成 2.3.0

内网穿透设置(如果xxjob 部署到了云服务器-本地测试Job代码需要执行这步)

  1. 下载花生壳

  2. 外网映射配置

    image-20230209163614945

  3. 本地防火墙规则配置

    1. 入站规则

      image-20230209164004537

      image-20230209164027241

    2. 出站规则

      image-20230209164117367

      image-20230209164133584

配置执行器(先使用默认的演示示例)

  1. 简单的任务示例

    image-20230209164228683

    image-20230209170521245

  2. 分片广播任务示例

image-20230209170648840

image-20230209170734215

配置任务管理(先使用默认的演示示例)

image-20230209164306424

代码集成

  1. build.gradle

    plugins {id 'java'id 'org.springframework.boot' version '2.7.8'id 'io.spring.dependency-management' version '1.0.15.RELEASE'
    }group = 'com.example'
    version = '0.0.1-SNAPSHOT'
    sourceCompatibility = '1.8'configurations {compileOnly {extendsFrom annotationProcessor}
    }repositories {mavenCentral()
    }dependencies {implementation 'org.springframework.boot:spring-boot-starter-web'compileOnly 'org.projectlombok:lombok'annotationProcessor 'org.projectlombok:lombok'testImplementation 'org.springframework.boot:spring-boot-starter-test'implementation 'com.xuxueli:xxl-job-core:2.3.0'implementation 'log4j:log4j:1.2.17'
    }tasks.named('test') {useJUnitPlatform()
    }
  2. application.properties

    # xxjob 配置信息
    xxl.job.admin.addresses=http://www.onlinecodeboy.cn:8090/xxl-job-admin/
    xxl.job.admin.userName=admin
    xxl.job.admin.password=123456
    xxl.job.executor.appname=xxl-job-executor-sample
    xxl.job.executor.port=9092
    xxl.job.executor.logretentiondays=7
    spring.main.allow-circular-references=true
    
  3. Config 类

    package com.example.springbootxxjobdemo.config;import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;/*** @Description xxjob配置类* @ClassName XxJobConfig* @Author 康世行* @Date 11:29 2023/2/9* @Version 1.0**/
    @Configuration
    public class XxJobConfig {Logger logger=LoggerFactory.getLogger(XxJobConfig.class);@Value("${xxl.job.admin.addresses}")private String adminAddresses;@Value("${xxl.job.executor.appname}")private String appname;@Value("${xxl.job.executor.port}")private int port;@Value("${xxl.job.executor.logretentiondays}")private int logRetentionDays;@Beanpublic XxlJobSpringExecutor xxlJobExecutor() {logger.info(">>>>>>>>>>> xxl-job config init.");XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();xxlJobSpringExecutor.setAdminAddresses(adminAddresses);xxlJobSpringExecutor.setAppname(appname);// xxlJobSpringExecutor.setIp("http://3d518x8064.zicp.vip");xxlJobSpringExecutor.setPort(port);//xxlJobSpringExecutor.setAccessToken(accessToken);//xxlJobSpringExecutor.setLogPath(logPath);xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);return xxlJobSpringExecutor;}}
  4. jobHandler

    1. 简单示例

      package com.example.springbootxxjobdemo.job;import com.xxl.job.core.biz.model.ReturnT;
      import com.xxl.job.core.context.XxlJobHelper;
      import com.xxl.job.core.handler.IJobHandler;
      import com.xxl.job.core.handler.annotation.XxlJob;
      import groovy.util.logging.Slf4j;
      import org.slf4j.Logger;
      import org.slf4j.LoggerFactory;
      import org.springframework.stereotype.Component;/*** @Description XxlJob开发示例(Bean模式)*  * 开发步骤:*  * 1、任务开发:在Spring Bean实例中,开发Job方法;*  * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。*  * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志;*  * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果;* @ClassName SampleXxlJob* @Author 康世行* @Date 14:48 2023/2/9* @Version 1.0**/
      @Component
      public class SampleXxlJob {private static Logger log= LoggerFactory.getLogger(SampleXxlJob.class);/*** 1、简单任务示例(Bean模式)*/@XxlJob("demoJobHandler")public void demoJobHandler()  {String jobParam = XxlJobHelper.getJobParam();log.info("XXL-JOB, Hello World."+jobParam);}}
    2. 分片广播示例

      /*** 2、分片广播任务*/@XxlJob("shardingJobHandler")public void shardingJobHandler() throws Exception {// 分片参数int shardIndex = XxlJobHelper.getShardIndex();int shardTotal = XxlJobHelper.getShardTotal();log.info("分片参数:当前分片序号 = {}, 总分片数 = {}", shardIndex, shardTotal);XxlJobHelper.log("分片参数:当前分片序号 = {}, 总分片数 = {}", shardIndex, shardTotal);// 业务逻辑for (int i = 0; i < shardTotal; i++) {if (i == shardIndex) {XxlJobHelper.log("第 {} 片, 命中分片开始处理", i);} else {XxlJobHelper.log("第 {} 片, 忽略", i);}}}
  5. 启动成功

    image-20230209165532580

执行xxjob 任务

  1. 修改执行器-ip注册方式为手动注册(请勿自动注册,因为自动注册会把局域网地址注册上去,xxjob无法调通)

image-20230209164719229

机器地址:外网映射之后生产的地址

image-20230209164847340

执行结果

  1. 简单示例
  2. image-20230209165238379
  3. 分片广播示例

image-20230209173151253

运行模式(BEAN)

本次演示使用的是BEAN模式

BEAN模式:任务以JobHandler方式维护在执行器端;需要结合 "JobHandler" 属性匹配执行器中任务;GLUE模式(Java):任务以源码方式维护在调度中心;该模式的任务实际上是一段继承自IJobHandler的Java类代码并 "groovy" 源码方式维护,它在执行器项目中运行,可使用@Resource/@Autowire注入执行器里中的其他服务;GLUE模式(Shell):任务以源码方式维护在调度中心;该模式的任务实际上是一段 "shell" 脚本;GLUE模式(Python):任务以源码方式维护在调度中心;该模式的任务实际上是一段 "python" 脚本;GLUE模式(PHP):任务以源码方式维护在调度中心;该模式的任务实际上是一段 "php" 脚本;GLUE模式(NodeJS):任务以源码方式维护在调度中心;该模式的任务实际上是一段 "nodejs" 脚本;GLUE模式(PowerShell):任务以源码方式维护在调度中心;该模式的任务实际上是一段 "PowerShell" 脚本;- JobHandler:运行模式为 "BEAN模式" 时生效,对应执行器中新开发的JobHandler类“@JobHandler”注解自定义的value值;- 执行参数:任务执行所需的参数;     

路由策略

image-20230209170419473

具体每个路由详解,敬请期待下篇博客分享,本次博客分享结束感谢阅读!

相关文章:

docker快速部署xxjob2.3.0-SpringBoot快速集成示例

xxjob 2.3.0 部署 参考资料 docker安装xxl-job-admin步骤_JEECG低代码平台的技术博客_51CTO博客 run前准备 1 新建数据库 xxl_job 2 建表sql(可以直接使) https://github.com/xuxueli/xxl-job/blob/master/doc/db/tables_xxl_job.sql建库sql # # XXL-JOB v2.4.0-SNAPSHOT…...

项目管理的前路,前辈能给一些意见吗?

什么是项目管理&#xff1f;关于项目管理的解释主要是基于国际项目管理三大体系不同的解释及本领域权威专家的解释!!!! 项目管理就是以项目为对象的系统管理方法&#xff0c;通过一个临时性的、专门的柔性组织&#xff0c;对项目进行高效率的计划、组织、指导和控制&#xff0c…...

省钱的年轻人,钱包被折扣店钻了空子

【潮汐商业评论/原创】过年期间&#xff0c;除了商场超市&#xff0c;小区附近的折扣店成了Amy经常光顾的对象。用Amy的话来说&#xff0c;“跟附近超市比价格&#xff0c;跟大卖场比距离&#xff0c;综合下来折扣店就是我随时购物的不二选择。”从Amy的话里&#xff0c;我们可…...

【华为OD机试真题 js、python】优选核酸检测点、寻找核酸检测点【2022 Q4 100分】

代码请进行一定修改后使用,提供有js、python两种语言 题目描述 张三要去外地出差,需要做核酸,需要在指定时间点前做完核酸,请帮他找到满足条件的 核酸检测只点。 给出一组核酸检测点的距离和每个核酸检测点当前的人数给出张三要去做核酸的出发时间 出发时间是10分钟的倍数…...

【MySQL】MySQL 8.0 新特性之 - 公用表表达式(CTE)

MySQL 8.0 新特性之 - 公用表表达式&#xff08;CTE&#xff09;1. 公用表表达式&#xff08;CTE&#xff09; - WITH 介绍1.1 公用表表表达式1.1.1 什么是公用表表达式1.1.2 CTE 语法1.1.3 CTE示例1.3 递归 CTE1.3.1 递归 CTE 简介1.3.2 递归成员限制1.3.3 递归 CTE 示例1.3.4…...

基础面试题:C++中如何理解const修饰符

面试题目&#xff1a;1、题 int i10; const int*p &i; int *const* p &i; const在不同位置有什么不 同 2、const 修饰类成员变量是有什么特殊要求 3、const 修饰类成员函数会发什么 4、const 对象有什么意义 目录 前言 一、const的意义 二、const使用规则 1.初始化…...

在RT-Thread STM32F407平台下配置SPI flash为U盘

记录下SPI Flash U盘实现过程中踩过的坑&#xff0c;与您分享。前提条件是&#xff0c;需要先将SPI Flash 配置到elm fal文件系统&#xff0c;并挂载成功。如下图然后开始配置USB1&#xff0c;在CubeMX&#xff0c;选择SUB_OTG_FS2 选择USB Device3&#xff0c;确认USB时钟为48…...

数据存储技术复习(二)未完

module3存储是数据中心内的核心元素。请说明常用的存储选项及其特点。磁盘驱动器&#xff1a;具有很大的存储容量&#xff0c;随机读/写访问闪存驱动器&#xff1a;使用半导体介质&#xff0c;提供高性能&#xff0c;低功耗2&#xff0e;若某磁盘驱动器显示每个磁道有八个扇区&…...

使用 QuTrunk+Amazon Deep Learning AMI(TensorFlow2)构建量子神经网络

量子神经网络是基于量子力学原理的计算神经网络模型。1995年&#xff0c;Subhash Kak 和 Ron Chrisley 独立发表了关于量子神经计算的第一个想法&#xff0c;他们致力于量子思维理论&#xff0c;认为量子效应在认知功能中起作用。然而&#xff0c;量子神经网络的典型研究涉及将…...

python selenium浏览器复用技术

使用selenium 做web自动化的时候&#xff0c;经常会遇到这样一种需求&#xff0c;是否可以在已经打开的浏览器基础上继续运行自动化脚本&#xff1f; 这样前面的验证码登录可以手工点过去&#xff0c;后面页面使用脚本继续执行&#xff0c;这样可以解决很大的一个痛点。 命令行…...

第二章:创建虚拟机

创建Windows server&#xff1a;首先第一步就是打开我们的vm&#xff0c;然后找到上一章讲的主页图标创建新的虚拟机。点击这上面类似的&#xff0c;然后转站。博文地址&#xff1a;https://blog.csdn.net/ryduijftgvhj/article/details/127934939?spm1001.2014.3001.5502视频…...

码上【call,apply,bind】的手写

一、call &#xff08;1&#xff09;官方用法 call() 方法使用一个指定的 this 值和单独给出的一个或多个参数来调用一个函数。 语法&#xff1a;function.call(要绑定的this值&#xff0c;参数&#xff0c;参数&#xff0c;…)。不一定这些参数都需要&#xff0c;这些参数都…...

代谢组学Nature子刊!抑郁症居然“男女有别”,脑膜淋巴管起关键作用!

文章标题&#xff1a;A functional role of meningeal lymphatics in sex difference of stress susceptibility in mice 发表期刊&#xff1a;Nature Communications 影响因子&#xff1a;17.694 发表时间&#xff1a;2022年8月 作者单位&#xff1a;中山大学中山医学院 …...

nacos配置中心搭建

网站每次更新版本都有短暂暂停&#xff0c;影响用户使用&#xff0c;返回经常不可用&#xff0c;需要改进 需要实现高可用&#xff0c;搭建负载均衡&#xff0c;实现jenkinsnacos不停机部署 nacos搭建预备环境准备 64 bit OS&#xff0c;支持 Linux/Unix/Mac/Windows&#x…...

uni-app低成本封装一个取色器组件

在uni-ui中找不到对应的工具 后面想想也是 移动端取色干什么&#xff1f; 没办法 也挂不住特殊需求 因为去应用市场下载 这总东西 又不是很有必要 那么 下面这个组件或许能解决您的烦恼 <template><view class"content"><view class"dialog&…...

APP 怎么免费接入 MobPush

1、获取 AppKey 申请 Appkey 的流程&#xff0c;请点击 http://bbs.mob.com/thread-8212-1-1.html?fromuid70819 2、下载 SDK 下载解压后&#xff0c;如下图&#xff1a; 目录结构 &#xff08;1&#xff09;Sample&#xff1a;演示Demo。&#xff08;2&#xff09;SDK&am…...

XGBoost

目录 1.XGBoost推导示意图 2.分裂节点算法 Weighted Quantile Sketch 3.对缺失值得处理 1.XGBoost推导示意图 XGBoost有两个很不错得典型算法&#xff0c;分别是用来进行分裂节点选择和缺失值处理 2.分裂节点算法 Weighted Quantile Sketch 对于特征切点点得选择&#xff…...

你是什么时候从轻视到高看软件测试的?

刚开始学软件测试很轻视&#xff0c;因为我那时很无知&#xff0c;这也是那时绝大多数人员的心态&#xff0c;那时中国最讲究“编程才是硬道理”。 如今却非常热爱软件测试&#xff0c;包括软件测试工具&#xff0c;方法&#xff0c;理论&#xff0c;技术。因为我在3年的测试工…...

基于ssm的航空售票系统

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经从做了六年的毕业设计程序开发&#xff0c;开发过上千套毕业设计程序&#xff0c;没有什么华丽的语言&#xf…...

滑动窗口最大值

给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。 示例: 输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3 输出: [3,3,5,5,6,7] 解释: 滑动窗口的位置 最大值 --------------- ----- [1 3 -1] -3 5 3 6 7 3 …...

2026论文写作工具红黑榜:AI论文网站怎么选?这份榜单够用!

红榜优先选千笔AI、ThouPen、豆包&#xff0c;适配国内学术规范&#xff1b;黑榜避开低质免费工具、无真实引用平台、过度依赖全文生成的工具&#xff0c;优先按需求匹配三维模型&#xff08;需求匹配度 - 数据可信度 - 成本承受力&#xff09;。 一、红榜&#xff1a;10 款高分…...

别再只用M法了!手把手教你用Arduino和旋转编码器实现M/T法测速(附代码)

别再只用M法了&#xff01;手把手教你用Arduino和旋转编码器实现M/T法测速&#xff08;附代码&#xff09; 在电机控制项目中&#xff0c;精确的速度测量往往是实现闭环控制的第一步。许多初学者会直接采用简单的M法&#xff08;频率测量法&#xff09;&#xff0c;但在实际测试…...

从加速度传感器到Symbol生成:Cadence VerilogA建模避坑指南

从加速度传感器到Symbol生成&#xff1a;Cadence VerilogA建模避坑指南 在MEMS传感器设计领域&#xff0c;将物理量精确转化为可仿真的电学模型是每个硬件工程师必须掌握的技能。三明治式加速度传感器作为典型的多物理场耦合器件&#xff0c;其VerilogA行为级建模过程既考验工…...

别再为付费教程头疼了!手把手教你用两块ESP32实现经典蓝牙通信(附完整代码)

零成本玩转ESP32蓝牙通信&#xff1a;从踩坑到实战的完整指南 在创客圈里流传着一句话&#xff1a;"每个物联网项目都是从点亮第一颗LED开始的。"而当我们想用两块ESP32开发板通过蓝牙控制这颗LED时&#xff0c;却常常陷入付费教程、失效代码和模糊文档的泥潭。本文将…...

别再为3DGS头疼了!手把手教你用COLMAP+UnityGaussianSplatting从照片到实时场景(避坑指南)

3D高斯重建实战&#xff1a;从照片到Unity实时渲染的全流程避坑指南 当我在工作室第一次尝试将手机拍摄的照片转换成可交互的3D场景时&#xff0c;经历了无数次COLMAP崩溃、点云缺失和Unity插件报错。这种挫败感让我意识到&#xff0c;3D高斯重建技术虽然强大&#xff0c;但工具…...

Qwen2.5-Coder-1.5B新手指南:如何用‘fill-in-the-middle’模式补全代码

Qwen2.5-Coder-1.5B新手指南&#xff1a;如何用‘fill-in-the-middle’模式补全代码 重要提示&#xff1a;Qwen2.5-Coder-1.5B是一个专门用于代码任务的预训练模型&#xff0c;不适合直接用于对话。它最擅长的场景是代码补全、生成和修复&#xff0c;特别是使用"fill-in-t…...

【愚公系列】《剪映+DeepSeek+即梦:短视频制作》026-字幕:用文字来美化画面(美化字幕)

&#x1f48e;【行业认证权威头衔】 ✔ 华为云天团核心成员&#xff1a;特约编辑/云享专家/开发者专家/产品云测专家 ✔ 开发者社区全满贯&#xff1a;CSDN博客&商业化双料专家/阿里云签约作者/腾讯云内容共创官/掘金&亚马逊&51CTO顶级博主 ✔ 技术生态共建先锋&am…...

ComfyUI-WanVideoWrapper:AI视频生成性能优化的终极指南

ComfyUI-WanVideoWrapper&#xff1a;AI视频生成性能优化的终极指南 【免费下载链接】ComfyUI-WanVideoWrapper 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI-WanVideoWrapper 在AI视频生成领域&#xff0c;显存限制和部署复杂性一直是开发者面临的核心挑…...

TWS耳机充电仓硬件设计全解析:从Type-C接口到NTC保护的7大核心模块

TWS耳机充电仓硬件设计全解析&#xff1a;从Type-C接口到NTC保护的7大核心模块 当你在咖啡馆掏出AirPods时&#xff0c;可能不会想到那个小巧的充电仓里藏着多少精密电路。作为硬件工程师&#xff0c;我们眼中的充电仓不是简单的塑料盒子&#xff0c;而是一个由七大核心模块组成…...

nlp_structbert_sentence-similarity_chinese-large保姆级教程:前端React界面二次开发与定制化UI集成指南

nlp_structbert_sentence-similarity_chinese-large保姆级教程&#xff1a;前端React界面二次开发与定制化UI集成指南 1. 引言&#xff1a;为什么需要定制化UI&#xff1f; 如果你已经体验过基于StructBERT-Large的语义相似度工具&#xff0c;可能会发现它的基础界面虽然功能…...