SprongBoot及其基础应用全套部署脚本和配置

POM.xml配置
</dependencies>    <!--skywalking日志监控依赖--><dependency><groupId>org.apache.skywalking</groupId><artifactId>apm-toolkit-logback-1.x</artifactId><version>8.5.0</version></dependency><dependency><groupId>org.apache.skywalking</groupId><artifactId>apm-toolkit-trace</artifactId><version>8.5.0</version></dependency>
</dependencies><build><plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><version>1.0.0</version><configuration><!--生成的镜像名称,需要替换的地方--><imageName>creatar</imageName><!--覆盖旧镜像--><forceTags>true</forceTags><!--指定dockerfile文件所在目录,跟pom平级--><dockerDirectory>${basedir}</dockerDirectory><buildArgs><!--指定需要复制的jar的名称,在dockerfile中会根据这个参数来将jar复制到容器中--><JAR_FILE>${project.build.finalName}.jar</JAR_FILE></buildArgs></configuration></plugin></plugins>
</build>
logback日志配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration><springProperty scope="context" name="log.path" source="logging.file.path"/><!-- 日志输出格式 --><property name="log.pattern"value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{50} - [methodName:%method,line:%line] - %msg%n"/><!-- 控制台输出 --><appender name="console" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>${log.pattern}</pattern></encoder></appender><!-- 系统日志输出 --><appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 循环政策:基于时间创建日志文件 --><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 日志文件名格式 --><fileNamePattern>${log.path}/%d{yyyy-MM-dd}/%d{HH}/sys-info.log</fileNamePattern><!-- 日志最大的历史 60天 --><maxHistory>60</maxHistory></rollingPolicy><encoder><pattern>${log.pattern}</pattern></encoder><filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 过滤的级别 只会打印info不会有info日志--><level>INFO</level><!-- 匹配时的操作:接收(记录) --><onMatch>ACCEPT</onMatch><!-- 不匹配时的操作:拒绝(不记录) --><onMismatch>DENY</onMismatch></filter></appender><appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 循环政策:基于时间创建日志文件 --><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 日志文件名格式 --><fileNamePattern>${log.path}/%d{yyyy-MM-dd}/%d{HH}/sys-error.log</fileNamePattern><!-- 日志最大的历史 60天 --><maxHistory>60</maxHistory></rollingPolicy><encoder><pattern>${log.pattern}</pattern></encoder><filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 过滤的级别 --><level>ERROR</level><!-- 匹配时的操作:接收(记录) --><onMatch>ACCEPT</onMatch><!-- 不匹配时的操作:拒绝(不记录) --><onMismatch>DENY</onMismatch></filter></appender><!--发送日志skywalking--><appender name="SKYWALKING" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender"><!-- 日志输出编码 --><encoder><pattern>${log.pattern}</pattern></encoder></appender><!-- 系统模块日志级别控制  --><logger name="com.example" level="info"/><!-- Spring日志级别控制  --><logger name="org.springframework" level="warn"/><root level="info"><appender-ref ref="console"/><appender-ref ref="SKYWALKING"/></root><!--系统操作日志--><root level="info"><appender-ref ref="file_info"/><appender-ref ref="file_error"/><appender-ref ref="SKYWALKING"/></root></configuration>
Dockerfile

Dockerfile文件跟pom文件平级

FROM eclipse-temurin:21
RUN mkdir /opt/app
ARG JAR_FILE
#看情况,自己要改复制到镜像中的名称也行,但是注意在ENTRYPOINT处启动的jar名称也要换
ADD target/${JAR_FILE} /opt/app/creatar.jar
#跟项目src文件平级的文件夹,后续会有截图
ADD base-app/skywalking/apache-skywalking-java-agent-9.1.0.tgz /opt/app/
#配置日志监控平台,跟后续的docker-compose呼应
ENV SW_AGENT_NAME=creatar
ENV SW_AGENT_COLLECTOR_BACKEND_SERVICES=creatar-skywalking-oap:11800
ENTRYPOINT ["java","-javaagent:/opt/app/skywalking-agent/skywalking-agent.jar","-jar","-Xms512m","-Xmx512m","/opt/app/creatar.jar"]
docker-compose
version: "1.0.0"
#创建Docker网络,用于容器间通信,通过容器名称访问
networks:
#容器名称,默认就是使用bridge模式,如果替换了名称,那本文件中后续所有关于networks节点的配置都要换名称creatar-networks:
services:
#应用镜像,镜像名称,在pom的imageName节点配置的是什么这里就写什么creatar:image: creatar:latest#应用容器名称,可换可不换container_name: creatar#限制容器内存大小deploy:resources:limits:memory: 1024MBnetworks:- creatar-networks#配置日志监控环境变量,用于初次运行时environment:- "SW_AGENT_NAME=creatar"- "SW_AGENT_COLLECTOR_BACKEND_SERVICES=creatar-skywalking-oap:11800"ports:- "9436:9436"restart: always#启动应用之前先启动redis、mysql、esdepends_on:- "creatar-redis"- "creatar-mysql"- "creatar-elasticsearch"volumes:- ./base-app/creatar/logs:/opt/app/logs#Redis容器creatar-redis:image: redis:7.2.4container_name: creatar-rediscap_add:- ALLcommand: redis-server  /etc/redis/redis.confnetworks:- creatar-networksports:- 9437:6379restart: alwaysvolumes:- ./base-app/redis/data:/data:rw- ./base-app/redis/conf/redis.conf:/etc/redis/redis.conf:rw- ./base-app/redis/logs:/logs:rw#mysql容器creatar-mysql:image: mysql:8.2.0container_name: creatar-mysqlcap_add:- ALLcommand:- "--default-authentication-plugin=caching_sha2_password"environment:#配置mysql的root用户密码- "MYSQL_ROOT_PASSWORD=creatar_mysql@yyds"#创建数据库- "MYSQL_DATABASE=creatar"#创建用户,该用户对MYSQL_DATABASE创建的数据库拥有所有权限- "MYSQL_USER=creatar"#新用户的密码- "MYSQL_PASSWORD=creatar9436"- "TZ=Asia/Shanghai"networks:- creatar-networksports:- 9438:3306restart: alwaysvolumes:- ./base-app/mysql/data/:/var/lib/mysql:rw- ./base-app/mysql/log:/var/log/mysql:rw#ES容器creatar-elasticsearch:image: elasticsearch:7.17.16container_name: creatar-elasticSearchdeploy:resources:limits:memory: 3072MBcap_add:- ALLenvironment:- discovery.type=single-node#设置Es访问密码,用户名默认就是:elastic- ELASTIC_PASSWORD=creatar9436- xpack.security.enabled=true- ES_JAVA_OPTS=-Xlog:disable -Xlog:gc=debug:stderr -Xms2048m -Xmx3072m- PATH=/usr/share/elasticsearch/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin- ELASTIC_CONTAINER=truenetworks:- creatar-networksports:- 9439:9200- 9440:9300restart: alwaysulimits:memlock:hard: -1soft: -1nofile:hard: 65536soft: 65536volumes:- ./base-app/elasticSearch/data/data:/usr/share/elasticsearch/data:rw- ./base-app/elasticSearch/data/backup:/usr/share/elasticsearch/backup:rw- ./base-app/elasticSearch/data/conf/jvm.options:/usr/share/elasticsearch/config/jvm.options:rw#创建日志监控收集工具,oapcreatar-skywalking-oap:image: apache/skywalking-oap-server:9.0.0container_name: creatar-skywalking-oapcap_add:- ALLenvironment:#使用Es存储日志- "SW_STORAGE=elasticsearch"#ES地址,由于是同一网络所以就使用容器名称即可- "SW_STORAGE_ES_CLUSTER_NODES=creatar-elasticsearch:9200"#ES地址- "SW_ES_USER=elastic"#ES密码,就是在ES容器配置项目中设置的密码- "SW_ES_PASSWORD=creatar9436"- "TZ=Asia/Shanghai"networks:- creatar-networksports:#端口暴露,skywalking需要暴露11800和12800- 9441:11800- 9442:12800restart: always#依赖于ES,需要等ES启动之后在启动depends_on:- "creatar-elasticsearch"
#日志监控界面容器creatar-skywalking-ui:image: apache/skywalking-ui:9.0.0container_name: creatar-skywalking-uicap_add:- ALLenvironment:#skywalking-oap服务地址,使用容器名访问- "SW_OAP_ADDRESS=http://creatar-skywalking-oap:12800"- "TZ=Asia/Shanghai"networks:- creatar-networksports:#UI界面需要暴露8080端口- 9443:8080restart: alwaysdepends_on:#依赖于Skywalking-oap服务- "creatar-skywalking-oap"
初次部署运行脚本
echo "开始构建应用镜像----------------"
#删除旧镜像
docker rmi $(docker images | grep creatar | awk '{print $3}')
#打包并使用dockerfile构建应用镜像
mvn clean package
mvn docker:build#后续会有该目录的讲解
chmod -R 777 ./base-appecho "开始构建基础应用---------------"
docker-compose up -d
#赋予权限
chmod 777 deploy.sh
#执行脚本
sh deploy.sh
卸载脚本

会将应用的Docker镜像删除,以及本次部署所用到的,应用容器,基础设施容器全部删除

#停止creatar容器
docker stop $(docker ps -a | grep creatar | awk '{print $1}')
#停止mysql容器
docker stop $(docker ps -a | grep creatar-mysql | awk '{print $1}')
#停止Redis容器
docker stop $(docker ps -a | grep creatar-redis | awk '{print $1}')
#停止skywalking-ui容器
docker stop $(docker ps -a | grep creatar-skywalking-ui | awk '{print $1}')
#停止skywalking-oap容器
docker stop $(docker ps -a | grep creatar-skywalking-oap | awk '{print $1}')
#停止ES容器
docker stop $(docker ps -a | grep creatar-elasticSearch | awk '{print $1}')#删除creatar容器
docker rm $(docker ps -a | grep creatar | awk '{print $1}')
#删除creatar镜像
docker rmi $(docker images | grep creatar | awk '{print $3}')
#删除mysql容器
docker rm $(docker ps -a | grep creatar-mysql | awk '{print $1}')
#删除redis容器
docker rm $(docker ps -a | grep creatar-redis | awk '{print $1}')
#删除skywalking-ui容器
docker rm $(docker ps -a | grep creatar-skywalking-ui | awk '{print $1}')
#删除skywalking-oap容器
docker rm $(docker ps -a | grep creatar-skywalking-oap | awk '{print $1}')
#删除es容器
docker rm $(docker ps -a | grep creatar-elasticSearch | awk '{print $1}')
#删除Docker网络
docker network rm creatar_creatar-networks#删除creatar应用数据
rm -rf ./base-app/creatar/logs/*#清空mysql数据
rm -rf ./base-app/mysql/data/*
rm -rf ./base-app/mysql/log/*#删除Redis数据
rm -rf ./base-app/redis/data/*
rm -rf ./base-app/redis/conf/redis.conf
#赋予权限
chmod 777 undeploy.sh
#执行脚本
sh undeploy.sh
应用更新

当jar报需要更新时使用

#拉取最新代码
git pull origin main
#停止容器
docker stop $(docker ps -a | grep creatar | awk '{print $1}')
#删除容器
docker rm $(docker ps -a | grep creatar | awk '{print $1}')
#删除旧镜像
docker rmi $(docker images | grep creatar | awk '{print $3}')
#构建镜像
mvn clean package
mvn docker:build
docker run -dit --restart=always -p 9436:9436 -m 512m --name creatar --network=creatar_creatar-networks $(docker images | grep creatar | awk '{print $3}') /bin/bash
chmod 777 build.sh
sh build.sh
base-app目录详解

该目录是和项目中的src文件夹平级的,当本项目所用到的所有容器启动之后,他们的数据卷都是挂载在这个目录的,里面包含了一些容器启动时的配置文件,以及第三方的一些包(例如Skywalking的插件tar包)

image-20240707181045340

在项目中按照这个结构创建即可,其中的**.gitkeep**文件只是为了占位而已,避免文件夹是空的提交不到Git上.

jvm.options

该文件是es启动时需要的,如果没有会报错,这个文件是本人在不使用数据卷挂载时启动ES之后复制出来的官方配置

################################################################
##
## JVM configuration
##
################################################################
##
## WARNING: DO NOT EDIT THIS FILE. If you want to override the
## JVM options in this file, or set any additional options, you
## should create one or more files in the jvm.options.d
## directory containing your adjustments.
##
## See https://www.elastic.co/guide/en/elasticsearch/reference/7.17/jvm-options.html
## for more information.
##
################################################################################################################################
## IMPORTANT: JVM heap size
################################################################
##
## The heap size is automatically configured by Elasticsearch
## based on the available memory in your system and the roles
## each node is configured to fulfill. If specifying heap is
## required, it should be done through a file in jvm.options.d,
## and the min and max should be set to the same value. For
## example, to set the heap to 4 GB, create a new file in the
## jvm.options.d directory containing these lines:
##
## -Xms4g
## -Xmx4g
##
## See https://www.elastic.co/guide/en/elasticsearch/reference/7.17/heap-size.html
## for more information
##
################################################################################################################################
## Expert settings
################################################################
##
## All settings below here are considered expert settings. Do
## not adjust them unless you understand what you are doing. Do
## not edit them in this file; instead, create a new file in the
## jvm.options.d directory containing your adjustments.
##
################################################################## GC configuration
8-13:-XX:+UseConcMarkSweepGC
8-13:-XX:CMSInitiatingOccupancyFraction=75
8-13:-XX:+UseCMSInitiatingOccupancyOnly## G1GC Configuration
# NOTE: G1 GC is only supported on JDK version 10 or later
# to use G1GC, uncomment the next two lines and update the version on the
# following three lines to your version of the JDK
# 10-13:-XX:-UseConcMarkSweepGC
# 10-13:-XX:-UseCMSInitiatingOccupancyOnly
14-:-XX:+UseG1GC## JVM temporary directory
-Djava.io.tmpdir=${ES_TMPDIR}## heap dumps# generate a heap dump when an allocation from the Java heap fails; heap dumps
# are created in the working directory of the JVM unless an alternative path is
# specified
-XX:+HeapDumpOnOutOfMemoryError# exit right after heap dump on out of memory error. Recommended to also use
# on java 8 for supported versions (8u92+).
9-:-XX:+ExitOnOutOfMemoryError# specify an alternative path for heap dumps; ensure the directory exists and
# has sufficient space
-XX:HeapDumpPath=data# specify an alternative path for JVM fatal error logs
-XX:ErrorFile=logs/hs_err_pid%p.log## JDK 8 GC logging
8:-XX:+PrintGCDetails
8:-XX:+PrintGCDateStamps
8:-XX:+PrintTenuringDistribution
8:-XX:+PrintGCApplicationStoppedTime
8:-Xloggc:logs/gc.log
8:-XX:+UseGCLogFileRotation
8:-XX:NumberOfGCLogFiles=32
8:-XX:GCLogFileSize=64m# JDK 9+ GC logging
9-:-Xlog:gc*,gc+age=trace,safepoint:file=logs/gc.log:utctime,pid,tags:filecount=32,filesize=64m

redis.conf

Redis容器的配置文件,其中也是配置了一些我个人的东西,例如连接密码呀等等,可以自己复制一份官方的配置文件进行修改即可,篇幅过长这里不做粘贴了

项目整体结构

image-20240707182235775

配置文件中的连接信息
  datasource:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driver#mysql地址,注意,这里因为应用和mysql容器是在一个网络内的,所以可以直接使用mysql的容器名称访问,并且端口号使用的是容器内部的端口号并不是暴露出来的端口号url: jdbc:mysql://creatar-mysql:3306/creatar?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&useSSL=false&allowMultiQueries=true&allowPublicKeyRetrieval=trueusername: creatarpassword: creatar9436data:redis:#同理也是使用的容器名称,我这里是由于使用了SpringBoot3.3.0版本是这么配置的,具体的各位可以参考自己的配置url: redis://creatar9436@creatar-redis:6379lettuce:pool:max-wait: 3000ms
#这里由于项目中使用了Easy-es依赖操作ES,所以我这里是这么配置的
easy-es:enable:address: creatar-elasticsearch:9200username: elasticpassword: creatar9436logging:
#指定日志配置文件config: classpath:logback-spring.xmllevel:web: errorsql: debugcom:baomidou:mybatisplus: debugfile:path: ./logs/
mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpldefault-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/41424.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【周末闲谈】AI“抢饭碗”?绝对不是危言耸听

AI是在帮助开发者还是取代他们? 在软件开发领域,生成式人工智能(AIGC)正在改变开发者的工作方式。无论是代码生成、错误检测还是自动化测试,AI工具正在成为开发者的得力助手。然而,这也引发了对开发者职业前景和技能需求变化的讨论。AI究竟是在帮助开发者还是取代他们?…

2024组装一台能跑AI大模型的电脑

title: 2024组装一台能跑AI大模型的电脑 tags: [组装电脑, AI大模型] categories: [其他, 电脑, windows] 这里不写组装步骤&#xff0c;哪里接线&#xff0c;购买什么品牌网上一大堆。 这里只写如何根据你自己的需求&#xff0c;选择合适的、兼容的配件。 概述 需求&#xff…

本地多卡(3090)部署通义千问Qwen2-72B大模型提速实践:从龟速到够用

最近在做文本风格转化&#xff0c;涉及千万token级别的文本。想用大模型转写&#xff0c;在线的模型一来涉及数据隐私&#xff0c;二来又不想先垫钱再找报销。本地的7-9B小模型又感觉效果有限&#xff0c;正好实验室给俺配了4卡3090的机子&#xff0c;反正也就是做个推理&#…

运维系列.Nginx配置中的高级指令和流程控制

运维专题 Nginx配置中的高级指令和流程控制 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/…

ssrf结合redis未授权getshell

目录 漏洞介绍 SSRF Redis未授权 利用原理 环境搭建 利用过程 rockylinux cron计划任务反弹shell 写公钥免密登录 ubuntu 写公钥免密登录 漏洞介绍 SSRF SSRF&#xff08;server side request forgrey&#xff09;服务端请求伪造&#xff0c;因后端未过滤用户输入&…

桂花网蓝牙网关X1000:引领物联网新时代的智能连接

在物联网技术飞速发展的今天&#xff0c;蓝牙网关作为连接蓝牙设备与互联网的关键设备&#xff0c;其性能与稳定性直接影响到物联网系统的整体运行效果。桂花网蓝牙网关X1000凭借其卓越的性能和广泛的应用场景&#xff0c;成为了物联网领域的佼佼者。 一、产品概述 桂花网蓝牙…

使用Ckman部署ClickHouse集群介绍

使用Ckman部署ClickHouse集群介绍 1. Ckman简介 ClickHouse Manager是一个为ClickHouse数据库量身定制的管理工具&#xff0c;它是由擎创科技数据库团队主导研发的一款用来管理和监控ClickHouse集群的可视化运维工具。目前该工具已在github上开源&#xff0c;开源地址为&…

Angluar 实现pdf页面预览以及编辑

之前用过一个pdf预览的lib&#xff0c;并且还支持在线编辑&#xff0c;和直接下载编辑之后的pdf和直接打印&#xff0c;还不错&#xff0c;记录下 PdfShowcase 首先安装依赖 npm install ngx-extended-pdf-viewer 然后引入 import { NgxExtendedPdfViewerModule } from &q…

硅纪元视角 | 中国电信“星辰大模型·软件工厂”,两分钟完成应用开发,效率飞跃!

在数字化浪潮的推动下&#xff0c;人工智能&#xff08;AI&#xff09;正成为塑造未来的关键力量。硅纪元视角栏目紧跟AI科技的最新发展&#xff0c;捕捉行业动态&#xff1b;提供深入的新闻解读&#xff0c;助您洞悉技术背后的逻辑&#xff1b;汇聚行业专家的见解&#xff0c;…

【数据结构】链表带环问题分析及顺序表链表对比分析

【C语言】链表带环问题分析及顺序表链表对比分析 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;C语言学习之路 文章目录 【C语言】链表带环问题分析及顺序表链表对比分析前言一.顺序表和链表对比1.1顺序表和链表的区别1.2缓存利用率&#…

Linux基础: 二. Linux的目录和文件

文章目录 二. Linux的目录和文件1.1 目录概要1.2 目录详细说明 二. Linux的目录和文件 1.1 目录概要 command&#xff1a;ls / Linux的文件系统像一棵树一样&#xff0c;树干是根目录&#xff08;/&#xff09;&#xff0c;树枝是子目录&#xff0c;树叶是文件&#xff1b; …

亚信安全发布2024年6月威胁态势,高危漏洞猛增60%

近日&#xff0c;亚信安全正式发布《2024年6月威胁态势报告》&#xff08;以下简称“报告”&#xff09;&#xff0c;报告显示&#xff0c;6月份新增信息安全漏洞 1794个&#xff0c;高危漏洞激增60%&#xff0c;涉及0day漏洞占67.67%&#xff1b;监测发现当前较活跃的勒索病毒…

应用案例 | 基于物联网工控屏的工业离心机设备监控系统

案例概况 客户&#xff1a;博鲁班特&#xff08;BROADBENT&#xff09; 应用产品&#xff1a;宏集物联网工控屏 应用场景&#xff1a;离心机设备监控系统 一、前言 在现代工业生产中&#xff0c;离心机作为关键的分离设备&#xff0c;在生产过程中扮演着至关重要的角色。随…

谷粒商城学习笔记-17-快速开发-逆向工程搭建使用

文章目录 一&#xff0c;克隆人人开源的逆向工程代码二&#xff0c;把逆向工程集成到谷粒商城的后台工程三&#xff0c;以商品服务为例&#xff0c;使用逆向工程生成代码1&#xff0c;修改逆向工程的配置2&#xff0c;以Debug模式启动逆向工程3&#xff0c;使用逆向工程生成代码…

基于B/S模式和Java技术的生鲜交易系统

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;B/S模式、Java技术 工具&#xff1a;Visual Studio、MySQL数据库开发工具 系统展示 首页 用户注册…

【Java】详解String类中的各种方法

创建字符串 常见的创建字符串的三种方式&#xff1a; // 方式一 String str "hello world"; // 方式二 String str2 new String("hello world"); // 方式三 char[] array {a, b, c}; String str3 new String(array); "hello" 这样的字符串字…

Halcon 产品周围缺口检测

*读取一张图像read_image (Image, 原图.jpg)*获取图像大小get_image_size(Image, Width, Height)*关闭已经打开的窗口dev_close_window ()*打开新窗口dev_open_window(0, 0, Width, Height, black, WindowHandle) //打开指定大小的窗口*对图像进行阈值操作threshold (Image, R…

【链表】【双指针】1、合并两个有序链表+2、分隔链表+3、删除链表的倒数第N个结点+4、链表的中间结点+5、合并两个链表

3道中等2道简单 数组和字符串打算告一段落&#xff0c;正好最近做的几乎都是双指针&#xff0c;所以今天做链表&#xff01; 1、合并两个有序链表&#xff08;难度&#xff1a;简单&#xff09; 该题对应力扣网址 AC代码 思路简单 /*** Definition for singly-linked list.…

万和day01代码分析

将了数据库的多表之间的操作&#xff0c;实际应用到JDBC中去。 一共五张表&#xff0c; info存储的是具体的信息&#xff0c;edu job role 和info都是多对一的关系。 采用的是Java FX&#xff0c;界面采用xml去编写。 项目理解一 在JavaFX中&#xff0c;ObservableList 是一个…

SCI一区TOP|准随机分形搜索算法(QRFS)原理及实现【免费获取Matlab代码】

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献5.代码获取 1.背景 2024年&#xff0c;LA Beltran受到分形几何、低差异序列启发&#xff0c;提出了准随机分形搜索算法&#xff08;Quasi-random Fractal Search, QRFS&#xff09;。 2.算法原理 2.1算法思…