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

微信app制作/东莞seo整站优化火速

微信app制作,东莞seo整站优化火速,商务网页设计与制作实训报告,wordpress 下载选择前两天由于项目需要,一个windows上的批处理任务(kitchen.bat),需要接到mq的消息通知后执行,为了快速实现这里我们通过springboot写了一个jar程序,用于接收mq的消息,并调用bat文件。 本程序需要实…

前两天由于项目需要,一个windows上的批处理任务(kitchen.bat),需要接到mq的消息通知后执行,为了快速实现这里我们通过springboot写了一个jar程序,用于接收mq的消息,并调用bat文件。

本程序需要实现的功能

  • 调用windows的批处理脚本bat,并支持传参
  • 可根据配置设置并发,同时消费多个mq消息调用多个批处理脚本
  • 确保java程序能一直正常运行(如果有假死或者宕机了可以自动重启)
  • 批处理脚本执行失败了,则再将信息重新放回到mq的队列尾部,等待下次执行

需要用的技术

  • Java的java.lang.Runtime类 用于调用windows服务器命令
  • 通过环境变量配置程序运行的参数,如mq信息、和执行的批处理脚本命令路径、并发等
  • 通过rabbitmq的手工ack来确定消息是否处理成功,及并发实现
  • 通过actuator来判断java程序是否健康
  • 通过windows定时任务来定时检查java程序是否正常提供服务,如果不正常则触发重启jar应用
  • 通过maven+ant打包程序,将可执行程序jar及相关脚本打包成一个zip文件,方便发给使用方使用

主要实现逻辑

开发环境:jdk1.8 + maven3.x + rabbitmq
运行环境:windows + jre1.8

Java调用bat批处理文件

package cn.iccboy.kitchen.common;import lombok.extern.slf4j.Slf4j;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;/*** @author iccboy*/@Slf4j
public class CmdUtil {/*** 处理执行进程的流** @param inputStream* 			  InputStream 执行进程的流* @param tag* 			  int 标志:1--InputStream;2--ErrorStream*/private static void processStreamHandler(final InputStream inputStream, int tag) {// 处理流的线程new Thread(() -> {String line;try (InputStreamReader inputStreamReader = new InputStreamReader(inputStream);BufferedReader bufferedReader = new BufferedReader(inputStreamReader)) {while ((line = bufferedReader.readLine()) != null) {if(tag == 1) {log.info(line);} else {log.error(line);}}} catch (Exception e) {log.error("【异常】命令执行异常:{}", e.getMessage());}}).start();}public static int exec(String command, String... args) throws IOException {String cmd = StrUtil.splicingWithSpace(command, args);log.info("执行命令:{}", cmd);int ret = 99;Process process = Runtime.getRuntime().exec(cmd);processStreamHandler(process.getInputStream(), 1);processStreamHandler(process.getErrorStream(), 2);try {ret = process.waitFor();} catch (InterruptedException e) {log.error("【异常】process.waitFor:{}" , e.getMessage());}log.info("执行命令:{}, 返回状态码={}", cmd, ret);return ret;}
}

上面的程序中,一定要注意的是process.getErrorStream()process.getInputStream() 一定要将命令行执行输出的信息(输出流)和错误信息(错误流)都从缓冲区读取出来,不然会导致程序执行阻塞。

process的阻塞: 在runtime执行大点的命令中,输入流和错误流会不断有流进入存储在JVM的缓冲区中,如果缓冲区的流不被读取被填满时,就会造成runtime的阻塞。所以在进行比如:大文件复制等的操作时,需要不断的去读取JVM中的缓冲区的流,防止Runtime的死锁阻塞。

程序健康检查

这里通过actuator来实现,首先程序集成actuator,由于是springboot项目,所以很方便。然后通过一个简单的java程序(CheckActuator)来访问actuator的http地址,通过返回值来判断jar程序是否运行正常,然后通过windows的脚本(checkHealth.bat)来调用CheckActuator,根据返回值在进行java程序的重启等操作。

1. pom.xml增加actuator及prometheus的配置

	<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>io.micrometer</groupId><artifactId>micrometer-registry-prometheus</artifactId></dependency>

上的版本会根据springboot对应版本自动集成
2. 配置actuator
在application.yml中增加如下配置

management:health:rabbit:enabled: trueendpoints:web:exposure:include: ["prometheus","health"]endpoint:health:show-details: alwaysmetrics:export:prometheus:enabled: truejmx:enabled: true

3. 编写CheckActuator.java程序
当然也可以通过windows的批处理命令直接访问actuator的地址,来判断服务是否正常。

/*** 注意:该类不能删除!!!! 不能改名!!!!不能移动位置!!!!*/
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;/*** ===================================================* 注意:该类不能删除!!!! 不能改名!!!!不能移动位置!!!!** 该类用于检查程序是否健康(通过actuator进行判断是否健康)** 主要供脚本checkHealth.bat进行调用* ===================================================*/
public class CheckActuator {private static final String HEALTH_FLAG = "\"status\":\"UP\"";public static void main(String[] args) {String url = "http://127.0.0.1:8000/actuator/health";if(args != null && args.length != 0) {url = args[0];}testUrlWithTimeOut(url);}public static void testUrlWithTimeOut(String urlString){int timeOutMillSeconds = 2000;URL url;try {url = new URL(urlString);URLConnection conn =  url.openConnection();conn.setConnectTimeout(timeOutMillSeconds);conn.connect();InputStream in = conn.getInputStream();BufferedReader reader = new BufferedReader(  new InputStreamReader(in));String line;StringBuilder sb = new StringBuilder();while ((line = reader.readLine()) != null) {sb.append(line);}boolean healthFlag = sb.toString().contains(HEALTH_FLAG);if(healthFlag) {System.exit(0);} else {System.out.println("健康检查异常:" + sb);System.exit(1);}} catch (Exception e) {System.out.println("网络连接异常: e=" + e.getMessage());System.exit(1);}}
}

我将上面的CheckActuator.java文件放到maven项目的test/java/跟目录下,后面会通过ant命令将.class移动到指定位置

  1. 健康检测脚本checkHealth.bat

上面的springboot项目会通过http服务,其运行的端口是8000,下面脚本会通过8000端口来获取对应的进程pid

::存活监控!
@echo off
set strPath=%~dp0
echo %strPath%
mkdir %strPath%log
set "yMd=%date:~0,4%-%date:~5,2%-%date:~8,2% %time:~0,8%"
set strFile=%strPath%log/checkHealth-%date:~0,4%%date:~5,2%%date:~8,2%.log
java -classpath %strPath% CheckActuator
if ERRORLEVEL 1 (goto err) else (goto ok):err
echo %yMd% 程序连接失败,进行重启! >> %strFile%
set port=8000
for /f "tokens=1-5" %%i in ('netstat -ano^|findstr ":%port%"') do (echo kill the process %%m who use the port taskkill /pid %%m -t -f   
)
goto start
exit :ok
echo %yMd% 程序运行正常 >> %strFile%
exit 
:start
chcp 65001
setlocal enabledelayedexpansion
set filename=""
for /f %%a in ('dir strPath *.jar /o-d /tc /b ') do (set filename=%%~na%%~xaecho 文件名: !filename!, 最新创建时间: %%~ta >> %strFile%if not !filename! == ""  (goto startjar)
)
:startjar
rem 注释:查找最新文件结束,最新文件名为:%filename%
java -jar %strPath%%filename%

windows定时任务配置

  1. 新增-健康检查定时任务.bat
@echo off
set strPath=%~dp0
set checkBat=%strPath%checkHealth.bat
schtasks /create /tn xxx-health-check /tr %checkBat% /sc minute /mo 2
pause

上面的xxx-health-check是定时任务的名字; /sc minute /mo 2 表示每2分钟执行一次命令。上面是通过命令配置的定时任务,也可以通过windows的图形管理界面【计划任务】配置。

  1. 移除-健康检查定时任务.bat
@echo off
pause
schtasks /delete /tn xxx-health-check /f
pause
  1. 查看-健康检查定时任务.bat
@echo off
schtasks /query /V /FO LIST   /tn xxx-health-check
pause

通过windows环境变量设置java程序的配置

application.yml 部分配置如下:

server:port: ${K_PORT:8000}servlet:context-path: /
spring:application:name: xxxrabbitmq:host: ${K_MQ_HOST:172.18.1.100}password: ${K_MQ_PASSWORD:123456}port: ${K_MQ_PORT:5672}username: ${K_MQ_USERNAME:mq}connection-timeout: 15000listener:simple:acknowledge-mode: manual #开启手动ACKconcurrency: ${K_WORKS:1} # 并发max-concurrency: ${K_WORKS:1} # 最大并发prefetch: 1 # 每个消费每次预去取几个消息jackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: GMT+8shell:paths: ${K_BAT_PATHS:C:\invoke.bat}

可通过设置系统的环境变量来改变配置,可设置的变量包含:

变量说明默认值
K_PORT程序运行的http服务端口8000
K_MQ_HOSTrabbitmq 服务ip172.18.1.100
K_MQ_PORTrabbitmq 服务端口5672
K_MQ_USERNAMErabbitmq 用户名mq
K_MQ_PASSWORDrabbitmq 密码123456
K_BAT_PATHSbat脚本路径,可以配置多个,通过英文逗号分隔,配置多个就会启动多个消费者,如:C:\invoke_1.bat,C:\invoke_2.batC:\invoke.bat
K_WORKS每个消费者的并发数。如:K_BAT_PATHS配置了3个命令,K_WORKS 配置了 2 ,这表示有3*2=6个消费者1

消费mq消息并执行bat文件

package cn.iccboy.kitchen.mq;import cn.iccboy.kitchen.common.CmdUtil;
import cn.iccboy.kitchen.common.ThreadUtil;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.MessageProperties;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.support.AmqpHeaders;
import org.springframework.messaging.Message;
import org.springframework.messaging.handler.annotation.Headers;import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Map;import static cn.iccboy.kitchen.mq.TopicRabbitMqConfig.EXCHANGE_DATA;
import static cn.iccboy.kitchen.mq.TopicRabbitMqConfig.KEY_INDEX_PROCESS;/*** @author iccboy* @date 2023-08-05 15:35*/
@Slf4j
public class CmdMqReceive {@Setterprivate String batPath;@Setterprivate Integer seq;@RabbitListener(queues = TopicRabbitMqConfig.QUEUE_INDEX_PROCESS)public void receive(Message<String> message, @Headers Map<String,Object> headers, Channel channel) throws IOException {long deliveryTag = (long) headers.get(AmqpHeaders.DELIVERY_TAG);try {log.info("[start]第{}执行器,消息内容:{}", seq, message.getPayload());int status = CmdUtil.exec(batPath, message.getPayload());if(status != 0) {log.info("[err_1]第{}执行器,消息内容:{}加工脚本执行异常,状态码={}",seq, message.getPayload(), status);throw new RuntimeException("脚本执行异常");}log.info("[end]第{}执行器执行完成:{}", seq, message.getPayload());} catch (Exception e) {ThreadUtil.sleep(1000);log.error("[err]第{}执行器,执行异常重新进入队列:{}", seq, message.getPayload(), e);//channel.basicNack(deliveryTag, false, true);// 将处理错误的消息放到重新队列尾部channel.basicPublish(EXCHANGE_DATA,KEY_INDEX_PROCESS, MessageProperties.PERSISTENT_TEXT_PLAIN, message.getPayload().getBytes(StandardCharsets.UTF_8));} finally {// 确认已处理channel.basicAck(deliveryTag,false);}}}

通过批处理命令配置个数,动态生成对应个数消费者

package cn.iccboy.kitchen.mq;import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.MutablePropertyValues;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.context.EnvironmentAware;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
import org.springframework.core.env.Environment;
import org.springframework.core.type.AnnotationMetadata;import java.util.List;@Slf4j
@Configuration
@Import(DynamicBuildMqReceiveBean.ImportConfig.class)
public class DynamicBuildMqReceiveBean {public static class ImportConfig implements ImportBeanDefinitionRegistrar, EnvironmentAware {private List<String> batPaths;@Overridepublic void setEnvironment(Environment environment) {try {batPaths = environment.getProperty("shell.paths", List.class);} catch (Exception ex) {log.error("参数绑定", ex);}}@Overridepublic void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {int seq = 0;for (String batPath : batPaths) {seq++;// 注册beanRootBeanDefinition beanDefinition = new RootBeanDefinition();beanDefinition.setBeanClass(CmdMqReceive.class);MutablePropertyValues values = new MutablePropertyValues();values.addPropertyValue("batPath", batPath);values.addPropertyValue("seq", seq);beanDefinition.setPropertyValues(values);registry.registerBeanDefinition(CmdMqReceive.class.getName() + "#" + seq, beanDefinition);}}}
}

上面通过ImportBeanDefinitionRegistrar的方式 实现了动态bean的生成

通过maven的ant插件实现打包

在项目的 pom.xml文件中增加如下配置

	<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-antrun-plugin</artifactId><version>1.8</version><executions><execution><id>clean</id><phase>clean</phase><configuration><target><delete file="${basedir}/shell/CheckActuator.class"/></target></configuration><goals><goal>run</goal></goals></execution><execution><id>test-compile</id><phase>test-compile</phase><configuration><target><copy overwrite="true" file="${project.build.directory}/test-classes/CheckActuator.class"todir="${basedir}/shell" /></target></configuration><goals><goal>run</goal></goals></execution><execution><id>package</id><phase>package</phase><configuration><target><delete dir="${project.build.directory}/kitchen-mq-bin"/><mkdir dir="${project.build.directory}/kitchen-mq-bin"/><copy todir="${project.build.directory}/kitchen-mq-bin" overwrite="true"><fileset dir="${basedir}/shell" erroronmissingdir="false"><include name="*"/></fileset></copy><copy overwrite="true" file="${project.build.directory}/${project.name}-${project.version}.jar" todir="${project.build.directory}/kitchen-mq-bin" /><zip destfile="${basedir}/kitchen-mq-bin.zip"><fileset dir="${project.build.directory}/kitchen-mq-bin"><include name="*"/></fileset></zip></target></configuration><goals><goal>run</goal></goals></execution></executions></plugin></plugins></build>

项目结构如下图:
在这里插入图片描述
获取执行包

  1. 执行打包命令mvn clean package
  2. 上面命令执行完成后,在项目的跟目录会产生一个压缩包kitchen-mq-bin.zip,将压缩包直接拷贝到目标服务器,解压即可。
  3. 解压后,直接执行新增-健康检查定时任务.bat即可。2分钟后就会启动程序。

下图是执行命令后,多出的 zip文件包,以及包里面的文件
在这里插入图片描述在这里插入图片描述

相关文章:

windows服务器下java程序健康检测及假死崩溃后自动重启应用、开机自动启动

前两天由于项目需要&#xff0c;一个windows上的批处理任务&#xff08;kitchen.bat&#xff09;&#xff0c;需要接到mq的消息通知后执行&#xff0c;为了快速实现这里我们通过springboot写了一个jar程序&#xff0c;用于接收mq的消息&#xff0c;并调用bat文件。 本程序需要实…...

七夕特辑(一)浪漫表白方式 用神经网络生成一首情诗

目录 一、准备工作二、用神经网络生成一首诗&#xff0c;代码说明 牛郎织女相会&#xff0c;七夕祝福要送来。祝福天下有情人&#xff0c;终成眷属永相伴。 七夕是中国传统的情人节&#xff0c;也是恋人们表达爱意的好时机。在这个特别的日子里&#xff0c;送上温馨的祝福&…...

springboot的 spring.redis.lettuce的max-active、max-idle、min-idle的搭配

在Spring Boot中&#xff0c;使用Lettuce作为Redis客户端是一种常见的选择。Lettuce是一个高性能、可扩展的异步Redis客户端。下面是关于application.yml配置文件中spring.redis.lettuce的一些配置&#xff1a; spring:redis:host: localhostport: 6379database: 0lettuce:poo…...

盒子模型样式

&#x1f353;盒子属性 属性名称中文注释备注border设置盒子的边框边框宽度 边框类型 边框颜色border-left设置左边框边框宽度 边框类型 边框颜色border-right设置右边框边框宽度 边框类型 边框颜色border-top设置上边框边框宽度 边框类型 边框颜色border-bottom设置下边框边框…...

动态规划入门之线性动态规划

P1115 最大子段和 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目要求求连续得一段子串使其累加和最大。 我们做动态规划首先考虑小情况&#xff0c;然后推而广之。 假设三个数1&#xff0c;-2&#xff0c;5. 我们先选1然后我们在-2以及-2加1里边选&#xff0c;我们选…...

基于HTML+CSS+Echarts大屏数据可视化集合共99套

基于HTMLCSSEcharts大屏数据可视化集合共99套 一、介绍二、展示1.大数据展示系统2.物流订单系统3.物流信息系统4.办税渠道监控平台5.车辆综合管控平台 三、其他系统实现四、获取源码 一、介绍 基于HTML/CSS/Echarts的会议展览、业务监控、风险预警、数据分析展示等多种展示需求…...

Leetcode 0814周总结

本周刷题&#xff1a; 88, 108, 121, 219, 228, 268, 283, 303, 349, 350, 414, 448 88 合并两个有序数组 nums1{1, 2, 3 ,0, 0, 0} nums2{2, 5, 6} 合成效果&#xff1a;nums1{1, 2, 2, 3, 5, 6} 思路&#xff1a;【双指针】对两个数组设置双指针&#xff0c;依次比较哪…...

华为网络篇 OSPF的Silent-Interface-33

难度1复杂度1 目录 一、实验拓扑 二、实验步骤 三、实验过程 总结 一、实验拓扑 二、实验步骤 1.搭建如图所示的网络拓扑&#xff1b; 2.初始化各设备&#xff0c;配置相应的IP地址&#xff0c;测试直连网络的连通性&#xff1b; 3.整个网络配置OSPF协议&#xff0c;查看…...

longtext,bigint是什么数据类型

longtext 是一种数据类型&#xff0c;用于在关系型数据库中存储长文本或大段的文本数据。它通常用于存储超过普通文本长度限制的内容&#xff0c;比如文章、博客内容、HTML 代码等。 在多数关系型数据库中&#xff0c;longtext 是一种用于存储可变长度字符数据的类型&#xff…...

Hive无法启动的解决方案

关掉虚拟机后&#xff0c;重新启动后&#xff0c;按照Hadoop和Hive的流程重新启动&#xff0c;发现无法启动成功&#xff0c;特别是元数据服务无法启动&#xff0c;出现以下错误: Exception in thread “main” java.lang.RuntimeException: java.net.ConnectException: Call F…...

华为云零代码新手教学-体验通过Astro Zero快速搭建微信小程序

您将会学到 您将学会如何基于Astro零代码能力&#xff0c;DIY开发&#xff0c;完成问卷、投票、信息收集、流程处理等工作&#xff0c;还能够在线筛选、分析数据。实现一站式快速开发个性化应用&#xff0c;体验轻松拖拽开发的乐趣。 您需要什么 环境准备 注册华为云账号、实…...

【前端】快速掌握HTML+CSS核心知识点

文章目录 1.HTML核心基础知识1.1.编写第一个HTML网页1.2.超链接a标签和路径1.3.图像img标签的用法1.4.表格table标签用法1.5.列表ul、ol、dl标签用法1.6.表单form标签用法1.7.区块标签和行内标签用法 2.CSS核心基础知识2.1.CSS标签选择器viewport布局2.2.CSS样式的几种写法2.3.…...

二叉树算法的框架套路总结

二叉树算法的框架套路总结 总结 本文主要来源于Leetcode用户&#xff1a;https://leetcode.cn/u/labuladong/&#xff0c;感谢写了这么好的文章作者&#xff1a;labuladong 链接&#xff1a;https://leetcode.cn/problems/same-tree/solutions/6558/xie-shu-suan-fa-de-tao-l…...

【ARM 嵌入式 编译 Makefile 系列 2 - Makefile 如何打印信息】

文章目录 Makefile 打印信息方法介绍Makefile 打印信息方法介绍 在Makefile中,我们可以使用echo命令来打印信息。这种方法适用于大多数的 UNIX shell,包括bash、sh、ksh、zsh等。 在 Makefile 中的规则部分,你可以添加 echo 命令来打印一些信息。例如: all: echo "…...

re学习(34)攻防世界-csaw2013reversing2(修改汇编顺序)

参考文章&#xff1a; re学习笔记&#xff08;27&#xff09;攻防世界-re-csaw2013reversing2_Forgo7ten的博客-CSDN博客攻防世界逆向入门题之csaw2013reversing2_沐一 林的博客-CSDN博客 三种做法 1、ida静态分析修改指令 main函数反编译的代码 由于运行之后的是乱码&…...

centos 7.9 部署django项目

1、部署框架 主要组件&#xff1a;nginx、uwsgi、django项目 访问页面流程&#xff1a;nginx---》uwsgi---》django---》uwsgi---》nginx 2、部署过程 操作系统&#xff1a;centos 7.9 配置信息&#xff1a;4核4G 50G 内网 eip &#xff1a;10.241.103.216 部署过程&…...

12 正则表达式 | HTTP协议相关介绍

文章目录 正则表达式re模块最基础操作&#xff08;匹配开头&#xff09;匹配单个字符匹配多个字符匹配开头结尾匹配分组对于group的理解r的作用re 模块高级用法compilesearchfindall易错点 sub直接替换函数替换 split 根据匹配进行切割字符串&#xff0c;并返回一个列表 python…...

【C语言】数组概述

&#x1f6a9;纸上得来终觉浅&#xff0c; 绝知此事要躬行。 &#x1f31f;主页&#xff1a;June-Frost &#x1f680;专栏&#xff1a;C语言 &#x1f525;该篇将带你了解 一维数组&#xff0c;二维数组等相关知识。 目录&#xff1a; &#x1f4d8;前言&#xff1a;&#x1f…...

8. 实现业务功能--用户注册

目录 1. 顺序图 2. 参数要求 3. 接口规范 4. 创建扩展 Mapper.xml 5. 修改 DAO 6. 创建 Service 接口 7. 实现接口 8. 测试接口 9. 实现 Controller 9.1 密码加密处理 10. 实现前端界面 业务实现过程中主要的包和目录及主要功能&#xff1a; model 包&#xff1a;实体对象 d…...

深入浅出Pytorch函数——torch.nn.init.eye_

分类目录&#xff1a;《深入浅出Pytorch函数》总目录 相关文章&#xff1a; 深入浅出Pytorch函数——torch.nn.init.calculate_gain 深入浅出Pytorch函数——torch.nn.init.uniform_ 深入浅出Pytorch函数——torch.nn.init.normal_ 深入浅出Pytorch函数——torch.nn.init.c…...

版本控制工具Git集成IDEA的学习笔记(第一篇Gitee)

目录 一、Gitee的使用 1、注册网站会员 2、用户中心 3、创建远程仓库 4、配置SSH免密登录 二、集成IDEA&#xff0c;Git项目搭建 1、本地仓库搭建 1&#xff09;创建一个新项目 2&#xff09;打开终端&#xff0c;在当前目录新建一个Git代码库 3&#xff09;忽略文件 …...

【链表】 61. 旋转链表

61. 旋转链表 解题思路 首先计算出链表长度将链表长度进行取余遍历链表 对链表进行分割 得到两个子链表重新连接两个链表比如1 2 3 4 5 k 2 进行分割得到 1 2 3 和 4 5两个子链表 /*** Definition for singly-linked list.* public class ListNode {* int val;* Lis…...

深入浅出Pytorch函数——torch.nn.init.kaiming_uniform_

分类目录&#xff1a;《深入浅出Pytorch函数》总目录 相关文章&#xff1a; 深入浅出Pytorch函数——torch.nn.init.calculate_gain 深入浅出Pytorch函数——torch.nn.init.uniform_ 深入浅出Pytorch函数——torch.nn.init.normal_ 深入浅出Pytorch函数——torch.nn.init.c…...

查询Oracle和MySQL数据库中当前所有连接信息

查询Oracle当前所有连接信息&#xff1a; SELECTs.sid AS 会话ID,s.serial# AS 序列号,s.username AS 用户名,s.osuser AS 操作系统用户,s.machine AS 客户端机器,s.program AS 客户端程序,s.status AS 会话状态,s.sql_id AS 正在执行的SQL_ID,t.sql_text AS 正在执行的SQL文本…...

Android glide框架及框架涉及到的设计模式

目录 原文链接Android glide框架 简单使用介绍Glide 框架整体结构设计Glide 框架的优点基本使用&#xff1a;Glide占位符 Android glide框架涉及到的设计模式 原文链接 Android glide框架 简单使用介绍 Glide&#xff1a;快速高效的Android图片加载库&#xff0c;可以自动加载…...

使用yolov5进行安全帽检测填坑指南

参考项目 c​​​​​​​​​​​​​​GitHub - PeterH0323/Smart_Construction: Base on YOLOv5 Head Person Helmet Detection on Construction Sites&#xff0c;基于目标检测工地安全帽和禁入危险区域识别系统&#xff0c;&#x1f680;&#x1f606;附 YOLOv5 训练自己的…...

【BASH】回顾与知识点梳理(三十二)

【BASH】回顾与知识点梳理 三十二 三十二. SELinux 初探32.1 什么是 SELinux当初设计的目标&#xff1a;避免资源的误用传统的文件权限与账号关系&#xff1a;自主式访问控制, DAC以政策规则订定特定进程读取特定文件&#xff1a;委任式访问控制, MAC 32.2 SELinux 的运作模式安…...

vscode远程调试PHP代码

目录 一、准备工作 二、ssh连接和xdebug配置 1.ssh连接 2.xdebug配置 三、xdebug调试&#xff0c;访问 一、准备工作 1.安装vscode里面的两个扩展 2.安装对应PHP版本的xdebug 去xdebug官方&#xff0c;复制自己的phpinfo源码到方框里&#xff0c;再点击Analyse Xdebug: …...

flink1.17 实现 udf scalarFunctoin get_json_object 支持 非标准化json

特色 相比官方的json_value,该函数支持非标准化json,比如v是个object,但是非标准json会外套一层引号,内部有反引号. eg: {"kkkk2": "{\"kkkk1\":\"vvvvvvv\"}" } 支持value为 100L 这种java格式的bigint. {"k":999L…...

基于VUE3+Layui从头搭建通用后台管理系统(前端篇)九:自定义组件封装下

一、本章内容 续上一张,本章实现一些自定义组件的封装,包括文件上传组件封装、级联选择组件封装、富文本组件封装等。 1. 详细课程地址: 待发布 2. 源码下载地址: 待发布 二、界面预览 三、开发视频 基于VUE3+Layui从头搭建通用后台管...