【云原生】prometheus结合jmx exporter 的java agent模式采集tomcat监控实战
前言
大家好,我是沐风晓月,今天我们又来探讨一款使用prometheus监控tomcat的另外一种形式:Java agent模式。
如果你想使用http server模式,请参考:【云原生】prometheus结合jmx exporter 的http server模式采集tomcat监控实战
本文中的是prometheus已经安装好,如果你还未安装,可以参考上一篇文章:prometheus安装及使用入门
文章目录
- 前言
- 一. 实验环境
- 二. 安装tomcat8
- 2.1 安装jdk8
- 2.2 安装tomcat8.5
- 2.2.1 下载tomcat8.5二进制安装包
- 2.2.2 解压tomcat8.5二进制安装包
- 2.2.3 创建tomcat用户
- 2.2.4 修改tomcat8目录的文件所属
- 2.2.5 查看tomcat的帮助
- 2.2.6 启动tomcat
- 2.2.7 查看启动情况
- 三、JMX exporter简介
- 3.1 什么是jmx exporter?
- 3.2 下载jmx exporter
- 3.3 jmx exporter的启动依赖
- 四、安装JMX exporter
- 4.1 下载jmx exporter
- 4.2 添加config.yaml文件
- 4.3 jmx exporter集成到tomcat
- 4.4 修改jmx exporter的所属
- 4.5 重新启动tomcat
- 4.6 查看启动情况
- 4.7 查看jmx exproter采集的数据
- 五、配置prometheus拉取jmx exporer采集的数据
- 5.1 修改prometheus配置文件
- 5.2 让prometheus重新读取配置文件
- 六.查看prometheus的监控数据
- 6.1 到网页端查看prometheus监控目标
- 6.2 在prometheus网页查询结果
- 七、导入grafana模板
- 7.1 导入模板
- 7.2 查看模板效果
- 八、总结
一. 实验环境
本次实验环境见下表:
| 操作系统 | 服务器IP | hostname |
|---|---|---|
| centos7.9 | 10.0.0.7 | mufengrow7 |
二. 安装tomcat8
本次实验使用tomcat8.5.87版本进行演示。
2.1 安装jdk8
- 为什么要安装jdk8呢?
我们可以从tomcat官方网站上得知,tomcat8.5版本需要在java7或者更高版本的java环境中运行。而且现在国内普遍都是使用java8的环境,所以我们的环境也是安装java8。

- 使用yum命令安装jdk8
安装jdk8有两种方式,一种是到orcale官网上下载官方编译好的jdk二进制安装包,另一种是使用yum命令安装centos7仓库中的opnjdk8,本次使用的是第二种方式,安装openjdk8。
[root@mufengrow7 apps]# yum install -y java-1.8.0-openjdk
- 查看jdk8版本
查看jdk版本
[root@mufengrow7 apps]# java -version
openjdk version "1.8.0_362"
OpenJDK Runtime Environment (build 1.8.0_362-b08)
OpenJDK 64-Bit Server VM (build 25.362-b08, mixed mode)
2.2 安装tomcat8.5
2.2.1 下载tomcat8.5二进制安装包
本次安装的是taomcat8.5,所以我们到tomcat官方下载最新版的tomcat8.5.87的二进制安装包
#创建tomcat安装目录
[root@mufengrow7 ~]# mkdir -p /apps
#进入安装目录
[root@mufengrow7 ~]# cd /apps
#使用wget命令下载tomcat8.5.87的二进制安装包
[root@mufengrow7 apps]# wget --no-check-certificate https://dlcdn.apache.org/tomcat/tomcat-8/v8.5.87/bin/apache-tomcat-8.5.87.tar.gz
代码注释:
--no-check-certificate:下载文件不验证安全证书
2.2.2 解压tomcat8.5二进制安装包
解压tomcat8.5.87的二进制安装包
[root@mufengrow7 apps]# tar zxvf apache-tomcat-8.5.87.tar.gz
代码注释:
zxvf:这里可以拆分为z,x,v,f四个选项
z:解压的文件包含gzip属性
x:从归档中解压文件
v:列出解压的文件
f:指定解压的文件
2.2.3 创建tomcat用户
在公司的环境中,不会直接使用root用户启动tomcat,所以我们创建一个用户,用于启动tomcat
[root@mufengrow7 apps]# useradd www
2.2.4 修改tomcat8目录的文件所属
既然要用新创建的www用户启动tomcat,那么我们需要将tomcat文件夹和里面的文件的所属都改为www用户,避免以后启动出现权限拒绝的问题
[root@mufengrow7 apps]# chown -R www.www apache-tomcat-8.5.87
代码注释:
-R:递归修改属性
2.2.5 查看tomcat的帮助
对于不熟悉tomcat启动的朋友来说,我们先查看一下tomcat的帮助文档,看看tomcat是如何启动的
#进入到tomcat文件夹下的bin目录里
[root@mufengrow7 apps]# cd apache-tomcat-8.5.87/bin/#查看帮助
[root@mufengrow7 bin]# ./catalina.sh --help
为了更直观一些,我们把常用的参数用表格来展示:
| 参数 | 描述 |
|---|---|
| debug | 以调试的方式启动tomcat |
| run | 前台启动tomcat |
| start | 后台启动tomcat |
| stop | 停止tomcat,在5秒内等待进程的结束 |
| stop -force | 停止tomcat,如果5秒后进程不结束就直接把进程kill掉强制结束进程 |
| configtest | 检查server.xml文件的语法 |
| version | 查看tomcat的信息 |
2.2.6 启动tomcat
我们使用www用户启动tomcat
[root@mufengrow7 bin]# su - www -c "/apps/apache-tomcat-8.5.87/bin/catalina.sh start"
Using CATALINA_BASE: /apps/apache-tomcat-8.5.87
Using CATALINA_HOME: /apps/apache-tomcat-8.5.87
Using CATALINA_TMPDIR: /apps/apache-tomcat-8.5.87/temp
Using JRE_HOME: /
Using CLASSPATH: /apps/apache-tomcat-8.5.87/bin/bootstrap.jar:/apps/apache-tomcat-8.5.87/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
2.2.7 查看启动情况
我们使用ps命令来查看tomcat的进程状态,使用ss命令来查看tomcat的端口
#使用ps命令来查看tomcat的进行状态
#通过查看下面的结果,我们得知现在的tomcat的确是使用了“www”用户进行启动[root@mufengrow7 bin]# ps -ef | grep tomcat | grep -v grep#tomcat的启动后的默认端口为8080,所以通过命令来查找8080端口确认tomcat的端口是否有启动
[root@mufengrow7 bin]# ss -tnl | grep 8080
LISTEN 0 100 [::]:8080 [::]:*
代码注释:
-
-e:显示所有执行程序的进程(除会话领导者与终端关联的进程) -
-f:显示UID,PPIP,C与STIME栏位
三、JMX exporter简介
3.1 什么是jmx exporter?
jmx exproter是prometheus官方提供的用于采集JVM数据的exporter。
其中jmx exporter有两种监控方式:
第一种:使用Java Agent进行监控
该exporter可以集成在java服务里,并且在启动后当做java的agent并且暴露出该exporter的端口,prometheus就可以通过HTTP服务来采集数据。
本文就是通过启动jmx exporter的java agent模式进行采集数据。
第二种:使用HTTP Server进行监控
这种方式是将exporter作为一个独立的采集JMX数据的HTTP服务运行,通过HTTP服务程的方式来采集JVM的数据。
使用HTTP Server方式进行监控,可以看【云原生】prometheus结合jmx exporter 的http server模式采集tomcat监控实战
3.2 下载jmx exporter
我们可以从prometheus官方的下载页面上看到。prometheus官方并没有提供这个exproter的下载地址。
既然官方的下载网页没有提供jmx exporter的下载地址,为什么说这个是prometheus官方提供的用于采集jmx数据的exporter呢?
其实,在prometheus官方的下载页面里,有推荐给我们使用的exporter

点击进入页面,找到jmx exporter,点击连接就可以进入jmx exporter的github页面

Jmx exporter的github地址为:https://github.com/prometheus/jmx_exporter
3.3 jmx exporter的启动依赖
通过浏览jmx exporter的github页面我们可以看到jmx exporter的启动依赖,通过下图可以我们可以知道jmx exporter最低可以支持到java6版本。我们服务器的环境是安装了jdk8的所以需要下载的是没有“_java6”后缀的jar包

四、安装JMX exporter
4.1 下载jmx exporter
在jmx exporter的github里点击右方的“Releases”后选择版本进行下载

我们这次下载最新版本的jmx exporter,进入到“Releases”页面,找到最新的“1.18.0”版本,选择“jmx_prometheus_javaagent-0.18.0.jar”进行下载。
#进入到tomcat的bin目录下
[root@mufengrow7 ~]# cd /apps/apache-tomcat-8.5.87/bin/
#使用weget命令进行下载
[root@mufengrow7 bin]# wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.18.0/jmx_prometheus_javaagent-0.18.0.jar
这里可能会有朋友问到,为什么jmx exporter的jar包要放在这里呢?
原因有两个:
-
tomcat使用的jar包基本都是放在这里的,所以我也就下载到这里。
-
由于本次演示,只会启动一个tomcat,放在这里比较好管理,如果有多个tomcat的话,那就把jmx exporter下载到一个公共目录,供所有的tomcat一起使用。
4.2 添加config.yaml文件
我们在jmx exproter的github页面的提示中可以看到启动jmx exporter的时候需要有一个config.yaml的文件,然后在下面也提示了该文件在哪里可以找到范例

接着我们进入到存放config.yaml范例的文件夹

找到tomcat.yaml文件,点击进去

在看到文件内容后将内容全部复制
[root@mufengrow7 bin]# vim config.yaml
---
lowercaseOutputLabelNames: true
lowercaseOutputName: true
rules:
- pattern: 'Catalina<type=GlobalRequestProcessor, name=\"(\w+-\w+)-(\d+)\"><>(\w+):'name: tomcat_$3_totallabels:port: "$2"protocol: "$1"help: Tomcat global $3type: COUNTER
- pattern: 'Catalina<j2eeType=Servlet, WebModule=//([-a-zA-Z0-9+&@#/%?=~_|!:.,;]*[-a-zA-Z0-9+&@#/%=~_|]), name=([-a-zA-Z0-9+/$%~_-|!.]*), J2EEApplication=none, J2EEServer=none><>(requestCount|maxTime|processingTime|errorCount):'name: tomcat_servlet_$3_totallabels:module: "$1"servlet: "$2"help: Tomcat servlet $3 totaltype: COUNTER
- pattern: 'Catalina<type=ThreadPool, name="(\w+-\w+)-(\d+)"><>(currentThreadCount|currentThreadsBusy|keepAliveCount|pollerThreadCount|connectionCount):'name: tomcat_threadpool_$3labels:port: "$2"protocol: "$1"help: Tomcat threadpool $3type: GAUGE
- pattern: 'Catalina<type=Manager, host=([-a-zA-Z0-9+&@#/%?=~_|!:.,;]*[-a-zA-Z0-9+&@#/%=~_|]), context=([-a-zA-Z0-9+/$%~_-|!.]*)><>(processingTime|sessionCounter|rejectedSessions|expiredSessions):'name: tomcat_session_$3_totallabels:context: "$2"host: "$1"help: Tomcat session $3 totaltype: COUNTER
- pattern: ".*" #显示所有的信息
4.3 jmx exporter集成到tomcat
把jmx exporter集成到tomcat里也很简单,只需要修改启动脚本,在启动Tomact时也一起启动jmx exporter即可。
我们修改tomcat的启动脚本catalina.sh,内容如下:
[root@mufengrow7 bin]# vim catalina.sh
.....
# Copy CATALINA_BASE from CATALINA_HOME if not already set
[ -z "$CATALINA_BASE" ] && CATALINA_BASE="$CATALINA_HOME"
JAVA_OPTS="-javaagent:/apps/apache-tomcat-8.5.87/bin/jmx_prometheus_javaagent-0.18.0.jar=38081:config.yaml" #添加这行内容,放哪里都行。建议此处写绝对路径
......
代码注释:
-javaagent:作为javaagent启动
=38081:设置javaagent的端口,可以根据需求进行修改端口。
:config.yaml:设置读取的yaml文件,可以根据需求修改文件名称。
4.4 修改jmx exporter的所属
由于我们是用root用户将jmx exporter下载和添加config.yaml文件的,而我们启动tomcat的用户是www,所以我们需要将这两个文件所属修改为www用户,避免启动时出现权限拒绝的问题。
[root@mufengrow7 bin]# chown www.www jmx_prometheus_javaagent-0.18.0.jar config.yaml
4.5 重新启动tomcat
#关闭tomcat
[root@mufengrow7 bin]# ./shutdown.sh #启动tomcat
[root@mufengrow7 bin]# ./catalina.sh startTomcat started.
4.6 查看启动情况
通过ps命令来查找tomcat启动时是否集成到“jmx_prometheus_javaagent”,同时通过ss命令查看java agent的端口
#通过ps命令查看
[root@mufengrow7 bin]# ps -ef | grep jmx_prometheus_javaagent | grep -v grep#通过ss命令查看
[root@mufengrow7 bin]# ss -tnl | grep 38081 | grep -v grep
LISTEN 0 3 [::]:38081 [::]:*
4.7 查看jmx exproter采集的数据
- 使用命令查看jmx exporter采集的数据
[root@mufengrow7 bin]# curl 10.0.0.7:38081/metrics
# HELP jvm_memory_pool_allocated_bytes_total Total bytes allocated in a given JVM memory pool. Only updated after GC, not continuously.
# TYPE jvm_memory_pool_allocated_bytes_total counter
jvm_memory_pool_allocated_bytes_total{pool="Code Cache",} 5475584.0
jvm_memory_pool_allocated_bytes_total{pool="PS Eden Space",} 1.09051904E8
jvm_memory_pool_allocated_bytes_total{pool="PS Old Gen",} 1.3875544E7
jvm_memory_pool_allocated_bytes_total{pool="PS Survivor Space",} 5454976.0
jvm_memory_pool_allocated_bytes_total{pool="Compressed Class Space",} 2042872.0
jvm_memory_pool_allocated_bytes_total{pool="Metaspace",} 1.86804E7
# HELP jvm_memory_objects_pending_finalization The number of objects waiting in the finalizer queue.
# TYPE jvm_memory_objects_pending_finalization gauge
jvm_memory_objects_pending_finalization 0.0
......
- 使用浏览器查看jmx exporter采集的数据
浏览器访问:
10.0.0.7:38081/metrics
浏览器页面显示的结果如下:

五、配置prometheus拉取jmx exporer采集的数据
5.1 修改prometheus配置文件
修改的方式如图:

其中job_name、prometheus读取配置文件的方式、目标的ip和端口都可以根据需求自行修改。
5.2 让prometheus重新读取配置文件
- 检查prometheus配置文件语法
[root@mufengrow7 prometheus]# ./promtool check config prometheus.yml
Checking prometheus.ymlSUCCESS: prometheus.yml is valid prometheus config file syntax
- 重启prometheus
通过重启,让prometheus重新读取配置文件
[root@mufengrow7 prometheus]# systemctl restart prometheus
六.查看prometheus的监控数据
6.1 到网页端查看prometheus监控目标
我们到prometheus的网页端,查看prometheus采集数据的目标是否有tomcat,通过下图,我们知道prometheus已经连接上jmx exporter了。

6.2 在prometheus网页查询结果
接下来我们到prometheus的查询面板查看prometheus有没有采集到tomcat的数据
- 查看jmx exporter版本

- 查看JVM信息

七、导入grafana模板
本文中的grafana已经安装好了,如果你还未安装,可以参考文章:promehtheus整合grafana实现可视化监控实战
7.1 导入模板
grafana推荐模板:8563、8704、8878、3066
以编号8563为例
- 输入模板编号,点击Load

- 修改job的名称为prometheus配置文件里的“job_name”,点击import

7.2 查看模板效果
以下为编号“8563”模板的效果,如果有什么问题可以自行修改。

注意:每个jmx模板需要的config.yaml文件可能有不同,所以我们可以到该模板的网页查看要求。
八、总结
prometheus监控tomcat的步骤为:
-
安装prometheus
-
安装java8环境和tomcat
-
下载jmx exporter和添加
config.yaml并修改tomcat的启动文件。
注意:添加的config.yaml文件需要根据后面的grafana模板的添加而进行修改 -
修改prometheus的配置文件,添加tomcat实例,并重新读取配置文件
-
进入prometheus的WEB页面进行验证
相关文章:
【云原生】prometheus结合jmx exporter 的java agent模式采集tomcat监控实战
前言 大家好,我是沐风晓月,今天我们又来探讨一款使用prometheus监控tomcat的另外一种形式:Java agent模式。 如果你想使用http server模式,请参考:【云原生】prometheus结合jmx exporter 的http server模式采集tomca…...
深度学习应用技巧总结与pytorch框架下训练过程的记忆技巧
大家好,我是微学AI,今天给大家总结一下深度学习模型训练过程中的一些技巧总结,以及pytorch框架下训练过程的记忆技巧,很有用的干货,理解模型训练过程的步骤,让流程难懂,难记忆的过程变得简单&am…...
数字图像处理 基于OpenCV的一种简单的阴影校正的方法
一、简述 在很多工业场景,都是基于工业相机、或者结合显微镜进行拍照采样,以进行进一步的分析,通常情况下分析结果和图像的质量息息相关,我们这里讨论的主要是因光照不均衡而在图像边缘产生阴影的图像的校正。 1、亮度阴影 亮度阴影(光学上称为渐晕,Vignetting)就是我们…...
OpenHarmony之cJSON库使用介绍
一、前言 我们前面OpenHarmony设备配网 文章中,给大家提供的示例有使用cJSON解析和cJSON创建json数据的用法 那么有同学会提出疑问,我难道只能用cJSON库? 当然不是啊,你也可以用 json-parser、parson、jansson 等等三方库 回到正题…...
门面设计模式
介绍 Java门面模式(Facade Pattern)是一种结构型设计模式,它提供了一个简单的接口,隐藏了复杂系统的实现细节,使得客户端可以更加容易地使用系统. 在Java门面模式中,一个门面对象(Facade)提供了一个简单的接口,该接口包装了一个或多个复杂的子系统,客户端可以直接使用门面对象…...
苹果手写笔好用吗?比较好用的ipad手写笔推荐
随着技术的进步,各种新型的电子产品和数码器件层出不穷。比如智能手机、IPAD、以及电容笔。而在实际生活中,为了更好的利用ipad,我们需要一支好用的电容笔。就好比如我们在ipad上做笔记,要用手来进行手写记录,会很不方…...
GPT-4来了!看看她究竟强在哪里!
GPT-4来了!OpenAI老板Sam Altman直接开门见山地介绍说:这是我们迄今为止功能最强大的模型!GPT-4是一个超大的多模态模型,也就是说,它的输入可以是文字(上限2.5万字),还可以是图像。我…...
GPT-4 API 接口调用及价格分析
GPT-4 API 接口调用及价格分析 15日凌晨,OpenAI发布了万众期待的GPT-4!新模型支持多模态,具备强大的识图能力,并且推理能力和回答准确性显著提高。在各种专业和学术基准测试上的表现都媲美甚至超过人类。难怪OpenAI CEO Sam Altm…...
MySQL高级功能:存储过程、触发器、事务、备份和恢复
MySQL高级功能MySQL是一款广泛使用的关系型数据库管理系统,它不仅具有基本的数据库功能,还支持一些高级功能,如存储过程、触发器、事务、备份和恢复等。这些高级功能可以帮助开发人员更高效地管理和维护数据库,本文将介绍MySQL的高…...
SAP 发出商品业务配置
SAP发出商品业务配置,即: 出具销售发票时结转成本 一、业务背景: 发出商品业务简单的理解为跨月开票,即出库与开票不在同一个月份。 该业务在系统内的实现方式,为保证成本与收入的配比,在出库时不计算成…...
C++线程池理解
线程池基本信息 线程池是一种结合池化思想衍生出来的一种线程管理及使用的方案 其主要针对服务器端多线程场景下,服务器频繁接收请求,每个请求都分配一个单独的线程去处理。 使用线程的开销: 创建和销毁线程调度线程 线程池主要解决的核…...
2023年最新软著申请流程(一):软件著作权说明、国家版权官网的账号注册与实名认证
若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/129230460 红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软…...
SuperMap iServer如何发布S3对象存储中的瓦片
作者:Carlo 前言: S3 对象存储服务是一个基于对象的海量存储服务,为客户提供海量、安全、高可靠、低成本的数据存储能力。其海量、安全的特性,为存储海量瓦片提供可能。 SuperMap iServer 支持将存储在阿里云对象存储 (OSS)、华为…...
ElasticSearch-第四天
目录 ElasticSearch文档分值_score计算底层原理 relevance score算法 Term frequency Inverse document frequency Field-length norm 分析一个document上的_score是如何被计算出来的 分词器工作流程 切分词语 内置分词器的介绍 定制分词器 ik分词器详解 IK分词器自…...
基于鲸鱼算法的极限学习机(ELM)分类算法-附代码
基于鲸鱼算法的极限学习机(ELM)分类算法 文章目录基于鲸鱼算法的极限学习机(ELM)分类算法1.极限学习机原理概述2.ELM学习算法3.分类问题4.基于鲸鱼算法优化的ELM5.测试结果6.参考文献7.Matlab代码摘要:本文利用鲸鱼算法对极限学习机进行优化,并用于分类问…...
一文彻底读懂webpack常用配置
开发环境 const webpack require("webpack"); const path require(path) module.exports {// entry: {// a: ./src/0706/a.js,// c: ./src/0706/c.js,// },entry: "./src/0707/reactDemo.js",output: {filename: [name]_dist.js,path: path.resolve(__…...
大环境不好,找工作太难?三面阿里,幸好做足了准备,已拿offer
三面大概九十分钟,问的东西很全面,需要做充足准备,就是除了概念以外问的有点懵逼了(呜呜呜)。回来之后把这些题目做了一个分类并整理出答案(强迫症的我狂补知识)分为软件测试基础、Python自动化…...
C++ 手撸简易服务器(完善版本)
本文没有带反射部分内容,可以看我之前发的 Server.h #pragma once#include <string> #include <iostream> #include <thread> #include <unordered_map> using namespace std; #ifndef _SERVER_ #define _SERVER_#include <winsock.h&…...
【Python入门第三十四天】Python丨文件处理
文件处理是任何 Web 应用程序的重要组成部分。 Python 有几个用于创建、读取、更新和删除文件的函数。 文件处理 在 Python 中使用文件的关键函数是 open() 函数。 open() 函数有两个参数:文件名和模式。 对于刚学Python的小伙伴,我给大家准备了2023…...
【Linux】写一个基础的bash
头文件#include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<sys/wait.h> #include<sys/stat.h> #include<string.h> #include<pwd.h> #include<dirent.h>分割输入的命令串字符串或参数内容为空则退出strtok( ,…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...
浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...
面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
