Gradle+SpringBoot多模块开发

news2024/10/5 21:15:09

关于使用Gradle结合SpringBoot进行多模块开发。
本来是打算使用buildSrc之类的,但是感觉好像好麻烦,使用这种方法就可以实现,没必要采用其他的。
我不怎么会表述,可能写的跟粑粑一样,哈哈哈哈
这是我的项目地址。
存在gitee,会一直更新
TinaSprout
首先这是模块的目录结构

C:\USERS\MI\CODESPACE\IDEAPROJECTS\TINASPROUT.gitignore
│  build.gradle
│  gradlew
│  gradlew.bat
│  LICENSE
│  settings.gradle
│
├─.gradle
│  ├─7.6.1
│  │  │  gc.properties
│  │  │
│  │  ├─checksums
│  │  │      checksums.lock
│  │  │      md5-checksums.bin
│  │  │      sha1-checksums.bin
│  │  │
│  │  ├─dependencies-accessors
│  │  │      dependencies-accessors.lock
│  │  │      gc.properties
│  │  │
│  │  ├─executionHistory
│  │  │      executionHistory.bin
│  │  │      executionHistory.lock
│  │  │
│  │  ├─fileChanges
│  │  │      last-build.bin
│  │  │
│  │  ├─fileHashes
│  │  │      fileHashes.bin
│  │  │      fileHashes.lock
│  │  │      resourceHashesCache.bin
│  │  │
│  │  └─vcsMetadata
│  ├─buildOutputCleanup
│  │      buildOutputCleanup.lock
│  │      cache.properties
│  │      outputFiles.bin
│  │
│  └─vcs-1
│          gc.properties
│
├─.idea
│  │  compiler.xml
│  │  git_toolbox_prj.xml
│  │  gradle.xml
│  │  jarRepositories.xml
│  │  misc.xml
│  │  modules.xml
│  │  vcs.xml
│  │  workspace.xml
│  │
│  └─modules
│      ├─tinasprout-core
│      │      TinaSprout.tinasprout-core.main.iml
│      │
│      └─tinasprout-robot
│              TinaSprout.tinasprout-robot.main.iml
│
├─gradle
│  └─wrapper
│          gradle-wrapper.jar
│          gradle-wrapper.properties
│
├─tinasprout-core
│  │  .gitignore
│  │  build.gradle
│  │  gradlew
│  │  gradlew.bat
│  │
│  ├─gradle
│  │  └─wrapper
│  │          gradle-wrapper.jar
│  │          gradle-wrapper.properties
│  │
│  └─src
│      ├─main
│      │  ├─java
│      │  │  └─com
│      │  │      └─wuxianggujun
│      │  │          └─tinasproutcore
│      │  │              │  TinaSproutCoreApplication.java
│      │  │              │
│      │  │              ├─config
│      │  │              │      BotConfig.java
│      │  │              │
│      │  │              └─network
│      │  │                      WsHandler.java
│      │  │
│      │  └─resources
│      │      │  application.properties
│      │      │
│      │      ├─static
│      │      └─templates
│      └─test
│          └─java
│              └─com
│                  └─wuxianggujun
│                      └─tinasproutcore
│                              TinaSproutCoreApplicationTests.java
│
└─tinasprout-robot
    │  .gitignore
    │  build.gradle
    │  gradlew
    │  gradlew.bat
    │
    ├─gradle
    │  └─wrapper
    │          gradle-wrapper.jar
    │          gradle-wrapper.properties
    │
    └─src
        ├─main
        │  ├─java
        │  │  └─com
        │  │      └─wuxianggujun
        │  │          └─tinasproutrobot
        │  │                  TinasproutRobotApplication.java
        │  │
        │  └─resources
        │      │  application.properties
        │      │
        │      ├─static
        │      └─templates
        └─test
            └─java
                └─com
                    └─wuxianggujun
                        └─tinasproutrobot
                                TinasproutRobotApplicationTests.java

步骤就是,现在创建一个Gradle项目,取名为TinaSprout(当然,这是我项目的名字,你们随便取)然后删除src的目录,用不到。
然后新建两个子模块tinasprout-coretinasprout-robot
tinasprout-core ----- 是用来写核心框架的。
tinasprout-robot -----是SpringBoot启动项目。
将两个子模块的settings.gradle删除,不需要。
完成之后开始编写我们根目录的settings.gradle文件,将两个子模块引入。

rootProject.name = 'TinaSprout'
include 'tinasprout-core'
include 'tinasprout-robot'

现在我们开始编写根目录的build.gradle,用于管理子模块

buildscript {
    repositories {
        mavenLocal()
        maven {
            url 'https://repo.huaweicloud.com/repository/maven/'
        }
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:3.0.4")
    }
}

plugins {
    id 'java'
    id 'org.springframework.boot' version '3.0.4' apply false
    //apply false的作用是告诉Gradle不要执行插件的逻辑,只是声明依赖
    id 'io.spring.dependency-management' version '1.1.0'
}

allprojects {
    apply plugin: 'java'

    group 'com.wuxianggujun'
    version '1.0-SNAPSHOT'
    sourceCompatibility = '17'

    configurations {
        compileOnly {
            extendsFrom annotationProcessor
        }
    }

    repositories {
        mavenCentral()
        maven {
            url 'https://repo.huaweicloud.com/repository/maven/'
        }
    }

    dependencies {
        testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
        testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
    }

    tasks.withType(JavaCompile) {
        options.encoding = "UTF-8"
    }

}

subprojects {
    apply plugin: 'org.springframework.boot'
    apply plugin: 'io.spring.dependency-management'

    dependencyManagement {

        imports {
            mavenBom "org.springframework.boot:spring-boot-dependencies:3.0.4"
        }

    }

    dependencies {
        implementation 'org.springframework.boot:spring-boot-starter'
        implementation 'org.springframework.boot:spring-boot-starter-web'
        compileOnly 'org.projectlombok:lombok'
        developmentOnly 'org.springframework.boot:spring-boot-devtools'
        annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
        annotationProcessor 'org.projectlombok:lombok'
        testImplementation 'org.springframework.boot:spring-boot-starter-test'
    }

    tasks.named('test') {
        useJUnitPlatform()
    }
    
}

通过上面的build.gradle配置文件,设置了allprojects和subprojects用于定义一些共用的内容。反正不难,应该看得懂吧!
接下来是tinasprout-core,我是想将这个打包成jar包,供给tinasprout-robot使用。所以指定bootjar的enabled为false,jar 的enabled为true

bootJar{
    enabled(false)
    archiveBaseName = 'tinasprout-core'
    archiveVersion = '0.0.1-SNAPSHOT'
}

jar{
    enabled = true
}

dependencies {
    implementation "com.alibaba:fastjson:1.2.83"
    implementation 'io.netty:netty-all:4.1.86.Final'
}

接下来,我们看tinasprout-robot的配置文件,这是用于部署在服务器启动SpringBoot的。

springBoot {
    mainClass = 'com.wuxianggujun.tinasproutrobot.TinasproutRobotApplication'
}

bootJar {
    archiveBaseName = 'TinaSprout'
    archiveVersion = '0.0.1-SNAPSHOT'
    // 将子模块一起打包进来
    includeEmptyDirs = true
    // 设置输出目录,相对于项目根目录
    destinationDirectory = file("$rootDir/build")
}

dependencies {
    implementation project(':tinasprout-core')
}

指定springBoot的mainClass,用于在jar启动的时候可以运行springboot。
bootJar的一些属性,是我自己假的,当然你们也可以删除,不影响。
我是要添加这些是要将这个jar包,部署在服务器,所以修改名称输出在根目录的build文件下。
在这里插入图片描述
通过运行bootjar将SpringBoot项目打包成jar包,我们就可以在build目录中看见。
在这里插入图片描述
现在项目模块化已经完成了,我也不知道应该搞什么。直接来运行看看效果吧。
打开终端,将文件夹拖动到当前目录,我们使用命令来查看一下jar包。
在这里插入图片描述
使用这条命令查看,这个命令用于查看一个 JAR 文件中包含的所有文件和目录,可以用来确认 JAR 文件中是否包含了需要的类和资源文件。

jar tf .\TinaSprout-0.0.1-SNAPSHOT.jar 

//其他命令
jar tf <jar包> | grep 'BOOT-INF/lib' 
jar tf <jar包> | grep 'BOOT-INF/classes'
 

在这里插入图片描述
这是输出内容,可以看到tinasprout-core-1.0-SNAPSHOT-plain已经被打包进去了。

META-INF/
META-INF/MANIFEST.MF
org/
org/springframework/
org/springframework/boot/
org/springframework/boot/loader/
org/springframework/boot/loader/ClassPathIndexFile.class
org/springframework/boot/loader/ExecutableArchiveLauncher.class
org/springframework/boot/loader/JarLauncher.class
org/springframework/boot/loader/LaunchedURLClassLoader$DefinePackageCallType.class
org/springframework/boot/loader/LaunchedURLClassLoader$UseFastConnectionExceptionsEnumeration.class
org/springframework/boot/loader/LaunchedURLClassLoader.class
org/springframework/boot/loader/Launcher.class
org/springframework/boot/loader/MainMethodRunner.class
org/springframework/boot/loader/PropertiesLauncher$ArchiveEntryFilter.class
org/springframework/boot/loader/PropertiesLauncher$ClassPathArchives.class
org/springframework/boot/loader/PropertiesLauncher$PrefixMatchingArchiveFilter.class
org/springframework/boot/loader/PropertiesLauncher.class
org/springframework/boot/loader/WarLauncher.class
org/springframework/boot/loader/archive/
org/springframework/boot/loader/archive/Archive$Entry.class
org/springframework/boot/loader/archive/Archive$EntryFilter.class
org/springframework/boot/loader/archive/Archive.class
org/springframework/boot/loader/archive/ExplodedArchive$AbstractIterator.class
org/springframework/boot/loader/archive/ExplodedArchive$ArchiveIterator.class
org/springframework/boot/loader/archive/ExplodedArchive$EntryIterator.class
org/springframework/boot/loader/archive/ExplodedArchive$FileEntry.class
org/springframework/boot/loader/archive/ExplodedArchive$SimpleJarFileArchive.class
org/springframework/boot/loader/archive/ExplodedArchive.class
org/springframework/boot/loader/archive/JarFileArchive$AbstractIterator.class
org/springframework/boot/loader/archive/JarFileArchive$EntryIterator.class
org/springframework/boot/loader/archive/JarFileArchive$JarFileEntry.class
org/springframework/boot/loader/archive/JarFileArchive$NestedArchiveIterator.class
org/springframework/boot/loader/archive/JarFileArchive.class
org/springframework/boot/loader/data/
org/springframework/boot/loader/data/RandomAccessData.class
org/springframework/boot/loader/data/RandomAccessDataFile$DataInputStream.class
org/springframework/boot/loader/data/RandomAccessDataFile$FileAccess.class
org/springframework/boot/loader/data/RandomAccessDataFile.class
org/springframework/boot/loader/jar/
org/springframework/boot/loader/jar/AbstractJarFile$JarFileType.class
org/springframework/boot/loader/jar/AbstractJarFile.class
org/springframework/boot/loader/jar/AsciiBytes.class
org/springframework/boot/loader/jar/Bytes.class
org/springframework/boot/loader/jar/CentralDirectoryEndRecord$Zip64End.class
org/springframework/boot/loader/jar/CentralDirectoryEndRecord$Zip64Locator.class
org/springframework/boot/loader/jar/CentralDirectoryEndRecord.class
org/springframework/boot/loader/jar/CentralDirectoryFileHeader.class
org/springframework/boot/loader/jar/CentralDirectoryParser.class
org/springframework/boot/loader/jar/CentralDirectoryVisitor.class
org/springframework/boot/loader/jar/FileHeader.class
org/springframework/boot/loader/jar/Handler.class
org/springframework/boot/loader/jar/JarEntry.class
org/springframework/boot/loader/jar/JarEntryCertification.class
org/springframework/boot/loader/jar/JarEntryFilter.class
org/springframework/boot/loader/jar/JarFile$1.class
org/springframework/boot/loader/jar/JarFile$JarEntryEnumeration.class
org/springframework/boot/loader/jar/JarFile.class
org/springframework/boot/loader/jar/JarFileEntries$1.class
org/springframework/boot/loader/jar/JarFileEntries$EntryIterator.class
org/springframework/boot/loader/jar/JarFileEntries$Offsets.class
org/springframework/boot/loader/jar/JarFileEntries$Zip64Offsets.class
org/springframework/boot/loader/jar/JarFileEntries$ZipOffsets.class
org/springframework/boot/loader/jar/JarFileEntries.class
org/springframework/boot/loader/jar/JarFileWrapper.class
org/springframework/boot/loader/jar/JarURLConnection$1.class
org/springframework/boot/loader/jar/JarURLConnection$JarEntryName.class
org/springframework/boot/loader/jar/JarURLConnection.class
org/springframework/boot/loader/jar/StringSequence.class
org/springframework/boot/loader/jar/ZipInflaterInputStream.class
org/springframework/boot/loader/jarmode/
org/springframework/boot/loader/jarmode/JarMode.class
org/springframework/boot/loader/jarmode/JarModeLauncher.class
org/springframework/boot/loader/jarmode/TestJarMode.class
org/springframework/boot/loader/util/
org/springframework/boot/loader/util/SystemPropertyUtils.class
BOOT-INF/
BOOT-INF/classes/
BOOT-INF/classes/com/
BOOT-INF/classes/com/wuxianggujun/
BOOT-INF/classes/com/wuxianggujun/tinasproutrobot/
BOOT-INF/classes/com/wuxianggujun/tinasproutrobot/TinasproutRobotApplication.class
BOOT-INF/classes/application.properties
BOOT-INF/lib/
BOOT-INF/lib/tinasprout-core-1.0-SNAPSHOT-plain.jar
BOOT-INF/lib/spring-boot-autoconfigure-3.0.4.jar
BOOT-INF/lib/spring-boot-3.0.4.jar
BOOT-INF/lib/jakarta.annotation-api-2.1.1.jar
BOOT-INF/lib/spring-webmvc-6.0.6.jar
BOOT-INF/lib/spring-web-6.0.6.jar
BOOT-INF/lib/spring-context-6.0.6.jar
BOOT-INF/lib/spring-aop-6.0.6.jar
BOOT-INF/lib/spring-beans-6.0.6.jar
BOOT-INF/lib/spring-expression-6.0.6.jar
BOOT-INF/lib/spring-core-6.0.6.jar
BOOT-INF/lib/snakeyaml-1.33.jar
BOOT-INF/lib/fastjson-1.2.83.jar
BOOT-INF/lib/netty-all-4.1.89.Final.jar
BOOT-INF/lib/logback-classic-1.4.5.jar
BOOT-INF/lib/log4j-to-slf4j-2.19.0.jar
BOOT-INF/lib/jul-to-slf4j-2.0.6.jar
BOOT-INF/lib/spring-jcl-6.0.6.jar
BOOT-INF/lib/jackson-datatype-jsr310-2.14.2.jar
BOOT-INF/lib/jackson-module-parameter-names-2.14.2.jar
BOOT-INF/lib/jackson-annotations-2.14.2.jar
BOOT-INF/lib/jackson-core-2.14.2.jar
BOOT-INF/lib/jackson-datatype-jdk8-2.14.2.jar
BOOT-INF/lib/jackson-databind-2.14.2.jar
BOOT-INF/lib/tomcat-embed-websocket-10.1.5.jar
BOOT-INF/lib/tomcat-embed-core-10.1.5.jar
BOOT-INF/lib/tomcat-embed-el-10.1.5.jar
BOOT-INF/lib/micrometer-observation-1.10.4.jar
BOOT-INF/lib/netty-transport-native-epoll-4.1.89.Final-linux-x86_64.jar
BOOT-INF/lib/netty-transport-native-epoll-4.1.89.Final-linux-aarch_64.jar
BOOT-INF/lib/netty-transport-native-kqueue-4.1.89.Final-osx-x86_64.jar
BOOT-INF/lib/netty-transport-native-kqueue-4.1.89.Final-osx-aarch_64.jar
BOOT-INF/lib/netty-transport-classes-epoll-4.1.89.Final.jar
BOOT-INF/lib/netty-transport-classes-kqueue-4.1.89.Final.jar
BOOT-INF/lib/netty-resolver-dns-native-macos-4.1.89.Final-osx-x86_64.jar
BOOT-INF/lib/netty-resolver-dns-native-macos-4.1.89.Final-osx-aarch_64.jar
BOOT-INF/lib/netty-resolver-dns-classes-macos-4.1.89.Final.jar
BOOT-INF/lib/netty-resolver-dns-4.1.89.Final.jar
BOOT-INF/lib/netty-handler-4.1.89.Final.jar
BOOT-INF/lib/netty-transport-native-unix-common-4.1.89.Final.jar
BOOT-INF/lib/netty-codec-dns-4.1.89.Final.jar
BOOT-INF/lib/netty-codec-4.1.89.Final.jar
BOOT-INF/lib/netty-transport-4.1.89.Final.jar
BOOT-INF/lib/netty-buffer-4.1.89.Final.jar
BOOT-INF/lib/netty-codec-haproxy-4.1.89.Final.jar
BOOT-INF/lib/netty-codec-http-4.1.89.Final.jar
BOOT-INF/lib/netty-codec-http2-4.1.89.Final.jar
BOOT-INF/lib/netty-codec-memcache-4.1.89.Final.jar
BOOT-INF/lib/netty-codec-mqtt-4.1.89.Final.jar
BOOT-INF/lib/netty-codec-redis-4.1.89.Final.jar
BOOT-INF/lib/netty-codec-smtp-4.1.89.Final.jar
BOOT-INF/lib/netty-codec-socks-4.1.89.Final.jar
BOOT-INF/lib/netty-codec-stomp-4.1.89.Final.jar
BOOT-INF/lib/netty-codec-xml-4.1.89.Final.jar
BOOT-INF/lib/netty-resolver-4.1.89.Final.jar
BOOT-INF/lib/netty-common-4.1.89.Final.jar
BOOT-INF/lib/netty-handler-proxy-4.1.89.Final.jar
BOOT-INF/lib/netty-handler-ssl-ocsp-4.1.89.Final.jar
BOOT-INF/lib/netty-transport-rxtx-4.1.89.Final.jar
BOOT-INF/lib/netty-transport-sctp-4.1.89.Final.jar
BOOT-INF/lib/netty-transport-udt-4.1.89.Final.jar
BOOT-INF/lib/logback-core-1.4.5.jar
BOOT-INF/lib/slf4j-api-2.0.6.jar
BOOT-INF/lib/log4j-api-2.19.0.jar
BOOT-INF/lib/micrometer-commons-1.10.4.jar
BOOT-INF/classes/static/
BOOT-INF/classes/templates/
BOOT-INF/lib/spring-boot-jarmode-layertools-3.0.4.jar
BOOT-INF/classpath.idx
BOOT-INF/layers.idx

接下来,运行看看

java -jar .\TinaSprout-0.0.1-SNAPSHOT.jar 

在这里插入图片描述
输入命令之后可以看到。项目已经成功的被启动了。
在这里插入图片描述

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

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

相关文章

Java速成篇-Day01笔记

提示&#xff1a;这里只记录我个人不熟悉的知识&#xff0c;并非所有内容 笔记目录课程&#xff1a;04-第一行代码① jshell② 对象.方法课程&#xff1a;05-第一份源码① Java开发程序的流程② 入口方法课程&#xff1a;06-常见问题-中文乱码① 乱码原因② 解决方法课程&#…

【基础算法】单链表的OJ练习(4) # 分割链表 # 回文链表 #

文章目录前言分割链表回文链表写在最后前言 本章的OJ练习相对前面的难度加大了&#xff0c;但是换汤不换药&#xff0c;还是围绕单链表的性质来出题的。我相信&#xff0c;能够过了前面的OJ练习&#xff0c;本章的OJ也是轻轻松松。 对于OJ练习(3)&#xff1a;-> 传送门 <…

华为OD机试题,用 Java 解【单词反转】问题

华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典使用说明 参加华为od机试,一定要注意不…

在 Docker 安装 Oracle12

说明 单独在Linux上安装Oracle很繁琐&#xff0c;首先需要安装各种依赖&#xff0c;其次安装如果失败了&#xff0c;重新配置安装也挺麻烦&#xff0c;所以如果是开发或者测试的时候使用Docker来进行安装会非常的方便。 搜索了很多的oracle相关镜像&#xff0c;选择一个适合自…

【Linux】-- 基本指令

目录 用户管理 adduser passwd userdel pwd ls指令 -l -a -d -F -r -t -R -1 which alias ll ls -n cd cd - cd ~ touch -d stat mkdir -p rmdir rm -r -f man cp ​编辑 -r -f mv cat -n tac more less -N head tail | 管道 dat…

Cookies与Session

&#x1f482;作者简介&#xff1a; THUNDER王&#xff0c;一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读&#xff0c;同时任汉硕云&#xff08;广东&#xff09;科技有限公司ABAP开发顾问。在学习工作中&#xff0c;我通常使用偏后…

JavaScript基础六、函数

零、文章目录 文章地址 个人博客-CSDN地址&#xff1a;https://blog.csdn.net/liyou123456789个人博客-GiteePages&#xff1a;https://bluecusliyou.gitee.io/techlearn 代码仓库地址 Gitee&#xff1a;https://gitee.com/bluecusliyou/TechLearnGithub&#xff1a;https:…

Deploy Workshop|DIY部署环境,让OceanBase跑起来

2023 年 3 月 25 日&#xff0c;我们将在北京开启首次 OceanBase 开发者大会&#xff0c;与开发者共同探讨单机分布式、云原生、HTAP 等数据库前沿趋势&#xff0c;分享全新的产品 Roadmap&#xff0c;交流场景探索和最佳实践&#xff0c;此外&#xff0c;OceanBase 开源技术全…

Qt多线程文件查找器

⭐️我叫恒心&#xff0c;一名喜欢书写博客的研究生在读生。 原创不易~转载麻烦注明出处&#xff0c;并告知作者&#xff0c;谢谢&#xff01;&#xff01;&#xff01; 这是一篇近期会不断更新的博客欧~~~ 有什么问题的小伙伴 欢迎留言提问欧。 Qt多线程文件查找器 前言 最近…

JUC并发编程——wait-notify

目录一、wait / notify1.1 wait / notify 原理1.2 wait / notify API介绍二、wait VS sleep三、wait / notify —代码改进一、wait / notify 1.1 wait / notify 原理 ● Owner线程发现条件不满足&#xff0c;调用wait( )方法即可进入WaitSet变为 WAITING状态 ● BLOCKED 和 W…

AI的简单介绍

什么是AI&#xff1f; AI 是 Artificial Intelligent 的缩写&#xff0c;是我们通常意义上说的人工智能。 简单来说就是让机器能够模拟人类的思维能力&#xff0c;让它能够像人一样感知、思考甚至决策。 为什么要开发AI&#xff1f; 因为在过去&#xff0c;都是我们学习机器…

408 计算机基础复试笔记 —— 更新中

计算机组成原理 计算机系统概述 问题一、冯诺依曼机基本思想 存储程序&#xff1a;程序和数据都存储在同一个内存中&#xff0c;计算机可以根据指令集执行存储在内存中的程序。这使得程序具有高度灵活性和可重用性。指令流水线&#xff1a;将指令分成若干阶段&#xff0c;每…

opencv学习(一)图像的基本操作

数据的读取cv2.IMREAD_COLOR:彩色图像cv2.IMREAD_GRAYSCALE:灰度图像import cv2 img cv2.imread(E:/opencv/open-cv/2-7/cat.jpg,1)cv2.imshow("img", img) cv2.waitKey(0) cv2.destroyAllWindows() cv2.imread()读取图片&#xff0c;当括号里面是1时&#xff…

华为OD机试题,用 Java 解【水仙花数】问题

华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典使用说明 参加华为od机试,一定要注意不…

抓包技术(浏览器APP小程序PC应用)

P1 抓包工具 01. Fidder 首先第一个Fiddler它的优势&#xff0c;独立运行&#xff0c;第二个支持移动设备&#xff08;是否能抓移动APP的包&#xff0c;&#xff09;在这一块的话wireshark、httpwatch就不支持&#xff0c;因此在这一块就可以排除掉前连个&#xff0c;因为我们…

SpringCloudGateway--基于redis实现令牌桶算法

目录 一、限流算法 1、计数器算法 2、漏桶算法 3、令牌桶算法 二、Gateway中的限流 一、限流算法 1、计数器算法 计数器算法是指从第一个请求开始&#xff0c;每多一个请求就加1&#xff0c;假设设置每秒限流100&#xff0c;当在一秒钟前500ms已经达到100&#xff0c;后面的5…

华为云计算HCIA学习笔记-第1章 云计算基础概念

1.1 云计算课程安排说明 &#xff08;IA-虚拟化-FC / IP-Linux OpenStack 桌面云/IE-备份容灾迁移&#xff09; 1.2 为什么云计算IA讲虚拟化&#xff1f; 提前告知学员&#xff0c;为什么IA课程要重点讲解虚拟化&#xff1f;云计算基于OpenStack&#xff0c;其底层虚拟化技术…

赞!中原银行|古风金融产品体验运营数字驾驶舱大屏!

本期「V友故事」&#xff1a;中原银行设计师作品——古风金融产品体验运营大屏 金融行业数字化转型是近年来提出的一个关键词&#xff0c;它不仅在改变金融服务的结构、形式和方式&#xff0c;而且也在影响中国金融行业的扩张规模&#xff0c;基于此行业趋势&#xff0c;金融从…

加密图像的脆弱水印及应用

原文题目&#xff1a;《A self-embedding secure fragile watermarking scheme with high quality recovery》 学习笔记&#xff1a; 应用场景 为了确保图像在传输过程中不被损坏&#xff0c;在将原始图像发送到云端之前&#xff0c;将用于篡改检测和恢复的水印嵌入到原始图像…

docker逃逸复现--pid=host模式下的逃逸

漏洞原理当docker以--pidhost模式启动时&#xff0c;你可以通过在容器进程中注入一些shellcode进行逃逸。相当于给了docker Linux中的CAP_SYS_PTRACE权限--pidhost&#xff1a;意味着宿主机与容器公享一套pid&#xff0c;如此做容器就可以访问并跟踪宿主机的进程Linux中的CAP_S…