Maven讲解从基础到高级配置与实践
一、基础认知
1.1 Maven 的主要作用
Maven 主要是用来管理 Java 项目构建流程的工具,包括以下几个方面:
- 依赖管理:通过
POM.xml文件管理项目的外部依赖库,不同版本的依赖包可以通过 Maven 中央仓库自动下载,减少了手动添加依赖包的复杂性。 - 标准化项目结构:Maven 提供了一种约定的目录结构和构建流程,简化了项目的结构管理。
- 自动化构建:通过指定构建生命周期中的不同阶段,Maven 可在项目构建、测试、打包时实现自动化。
- 插件扩展:Maven 的插件体系支持各种任务的定制和扩展,如编译、测试、报告生成等。
1.2 Maven 项目的目录结构
Maven 约定的项目目录结构如下:
my-app
├── src
│ ├── main
│ │ ├── java # 源代码
│ │ ├── resources # 资源文件(如配置文件)
│ └── test
│ ├── java # 测试代码
│ ├── resources # 测试资源
├── target # 编译后的文件
└── pom.xml # 项目对象模型文件
这种标准化的目录布局有助于统一管理项目结构。
1.3 Maven 常用命令
Maven 提供了多种命令以便在项目的各个阶段进行操作,这些命令大多以 mvn 开头并附带相应的参数和选项。下面列举并解释了常见的 Maven 命令,帮助理解和管理 Maven 项目的不同阶段。
1.3.1 构建命令
-
mvn clean:清理目标目录(
target/),删除所有生成的文件和文件夹。这是重建项目的第一步,确保构建过程干净、不会使用旧的编译文件。mvn clean -
mvn compile:编译主源码,输出文件到
target/classes/。该命令只会编译主代码,不包括测试代码。mvn compile -
mvn test-compile:编译测试代码,将测试类编译到
target/test-classes/,为单元测试准备编译好的测试类。mvn test-compile -
mvn test:运行项目中的测试代码。它会首先执行
mvn compile和mvn test-compile,然后运行测试类,生成测试报告。mvn test
1.3.2 打包与安装命令
-
mvn package:将项目打包成 JAR 或 WAR 文件,具体打包形式由
POM.xml中的配置决定。通常用于生成发布版本的可执行包。mvn package -
mvn install:将打包好的文件安装到本地仓库(
~/.m2/repository),以便其他项目可以引用。此命令适合本地开发时共享包之间的依赖。mvn install -
mvn deploy:将打包文件发布到远程仓库,适用于项目构建并需要在共享仓库中共享的场景,常用于持续集成环境。
mvn deploy
1.3.3 依赖管理命令
-
mvn dependency:解析并下载所有项目依赖,将它们下载到本地仓库并在项目中链接依赖包。可以快速检查项目的依赖是否正确安装。
mvn dependency:resolve -
mvn dependency:生成依赖树,显示项目所有的直接和间接依赖关系。该命令有助于分析依赖冲突。
mvn dependency:tree
1.3.4 验证与调试命令
-
mvn validate:验证项目的结构和必要的信息(如
POM.xml),确保项目配置正确。mvn validate -
mvn verify:运行任何集成测试以验证项目包的完整性。这个命令在
package之后运行,适用于执行额外的检查。mvn verify
1.3.5 生成与清理命令
-
mvn site:生成项目的站点文档,其中包括项目报告、代码质量报告、测试报告等。生成文件存储在
target/site文件夹中。mvn site -
mvn clean:清理项目构建的输出目录
target/,适合需要重构、重构代码或在新的构建环境中重新开始构建时使用。mvn clean
1.3.6 组合命令
Maven 允许将多个命令组合在一起运行,例如:
-
mvn clean install:组合了清理和安装命令,先删除旧的构建文件,再重新安装新的构建。
mvn clean install -
mvn clean package -DskipTests:跳过测试阶段进行打包,适合在开发过程中进行快速测试(仅用于确认功能,不推荐在生产环境中跳过测试)。
mvn clean package -DskipTests
1.4 如何排查某个 Jar 的依赖项和依赖树
在大型 Maven 项目中,随着依赖项的增加,容易出现依赖冲突、版本不兼容等问题。Maven 提供了多种命令可以帮助我们分析某个 Jar 包的依赖关系,并排查依赖树中的问题。
1.4.1 使用 dependency:tree 查看完整依赖树
Maven 提供的 dependency:tree 插件可以生成项目的完整依赖树,列出所有的直接和传递依赖,帮助我们了解依赖的来源和层次结构,快速定位并解决依赖冲突。
命令用法
-
查看完整依赖树 使用以下命令查看项目的完整依赖树:
mvn dependency:tree该命令会输出项目中的所有依赖项,包括其各自的依赖层次结构。
-
查看特定依赖项 若只想查找某个特定的 Jar 包(如
spring-core)的依赖关系,可以结合grep命令进行过滤:mvn dependency:tree | grep spring-core -
保存依赖树 可以将依赖树保存到文件中便于后续分析,使用以下命令:
mvn dependency:tree -DoutputFile=dependency-tree.txt
示例输出
运行 mvn dependency:tree 命令时,生成的依赖树如下:
[INFO] com.example:my-app:jar:1.0
[INFO] +- org.springframework.boot:spring-boot-starter-web:jar:2.5.0:compile
[INFO] | +- org.springframework.boot:spring-boot-starter:jar:2.5.0:compile
[INFO] | | +- org.springframework:spring-core:jar:5.3.6:compile
...
1.4.2 使用 dependency:resolve 查看项目直接依赖
dependency:resolve 插件可以列出项目中的直接依赖关系,并提供版本和作用域的信息,便于分析当前的直接依赖项及其版本。
命令用法
mvn dependency:resolve
示例输出
[INFO] com.example:my-app:jar:1.0
[INFO] org.springframework.boot:spring-boot-starter-web:jar:2.5.0:compile
[INFO] org.springframework.boot:spring-boot-starter-test:jar:2.5.0:test
...
1.4.3 使用 dependency:analyze 分析未使用的依赖
dependency:analyze 插件可以分析项目中未被直接使用的依赖项,帮助简化依赖树、减少冗余依赖。
命令用法
mvn dependency:analyze
示例输出
[INFO] Used declared dependencies found:
[INFO] org.springframework.boot:spring-boot-starter-web:jar:2.5.0:compile
[INFO] Unused declared dependencies found:
[INFO] com.fasterxml.jackson.core:jackson-databind:jar:2.11.4:compile
...
1.4.4 使用 dependency:tree 分析依赖冲突
当出现版本冲突时,可以使用 dependency:tree 查看冲突的依赖项来源并进行排除处理。例如,当项目依赖两个不同版本的 spring-core 时,可以在输出中查找并定位该冲突。
解决冲突
在 pom.xml 中,通过 `` 标签排除特定版本的依赖:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework</groupId><artifactId>spring-core</artifactId></exclusion></exclusions>
</dependency>
此配置将排除指定依赖项,从而避免版本冲突。
二、POM 文件
POM(Project Object Model) 文件是 Maven 项目的核心配置文件,存放了项目的基本信息、依赖管理、插件配置等。
2.1 POM 文件中的基本元素
以下是 POM 文件的主要元素:
<project><modelVersion>4.0.0</modelVersion> <!-- POM模型版本号 --><groupId>com.example</groupId> <!-- 项目组织ID --><artifactId>my-app</artifactId> <!-- 项目名 --><version>1.0.0</version> <!-- 项目版本 -->
</project>
- groupId:项目组织的唯一标识,如公司或项目组名。
- artifactId:项目名称,通常是项目或模块的名称。
- version:项目版本号,用于版本控制和发布。
2.2 在 POM 文件中添加项目依赖
在 dependencies 节点中添加项目所需的依赖库:
<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.3.10</version></dependency>
</dependencies>
2.3 依赖范围(scope)
依赖范围用于指定依赖的使用场景,常见的范围包括:
- compile:默认范围,编译和运行时都可用。
- test:仅在测试阶段可用。
- provided:编译期可用,但在运行时由容器(如 Tomcat)提供。
例如:
<dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version><scope>provided</scope>
</dependency>
三、仓库管理
在 Maven 中,仓库用于存储和管理项目的依赖项和构建结果。Maven 仓库分为本地仓库和远程仓库,本地仓库通常位于开发者的机器上,而远程仓库则可以是公共仓库或私有仓库。以下是仓库配置的细节,包括如何设置仓库密码以及代理的配置。
3.1 本地仓库与远程仓库
- 本地仓库:在 Maven 下载依赖时会将其存储在本地仓库中,默认路径为
~/.m2/repository。 - 远程仓库:若本地仓库中没有找到依赖,Maven 会尝试从配置的远程仓库(如 Maven Central、企业私有仓库等)获取依赖。
3.2 配置私有仓库及设置仓库密码
在企业环境中,为了避免重复下载公共仓库的依赖,通常会搭建私有仓库,并使用认证保护。Maven 的 settings.xml 文件可以配置私有仓库和认证信息。
-
在
settings.xml中配置私有仓库在
settings.xml文件(位于~/.m2/)中配置私有仓库的 URL:<mirrors><mirror><id>my-private-repo</id><url>https://repo.mycompany.com/maven2</url><mirrorOf>*</mirrorOf></mirror> </mirrors>上述配置将所有 Maven 下载请求重定向到
https://repo.mycompany.com/maven2,并指定mirrorOf为"*"。 -
设置仓库密码
如果私有仓库需要认证,Maven 提供了安全的密码存储方式:
-
在
settings.xml中配置凭据:<servers><server><id>my-private-repo</id><username>your-username</username><password>your-password</password></server> </servers> -
对密码进行加密:
- 首先生成加密密钥:
mvn --encrypt-master-password your-master-password - 使用生成的密钥加密仓库密码:
mvn --encrypt-password your-password - 将加密后的密码粘贴到
settings.xml中的 `` 节点。
- 首先生成加密密钥:
-
3.3 设置代理提升下载速度
当 Maven 访问远程仓库的网络受限时,可以通过配置代理来提升下载速度:
-
在
settings.xml中配置代理<proxies><proxy><id>example-proxy</id><active>true</active><protocol>http</protocol><host>proxy.example.com</host><port>8080</port><username>proxy-user</username><password>proxy-password</password></proxy> </proxies>通过该代理配置,Maven 的网络请求将通过代理服务器访问远程仓库,从而提高下载速度。
四、构建生命周期
Maven 的构建生命周期定义了一系列构建阶段,常见的生命周期阶段包括:
- clean:清理生成的文件。
- compile:编译源代码。
- test:运行测试代码。
- package:将项目打包为可发布的格式,如 JAR。
- install:安装到本地仓库中。
- deploy:发布到远程仓库。
运行 mvn package 会执行清理、编译、测试和打包等阶段。
五、依赖管理策略
Maven 的依赖管理策略主要用于避免依赖冲突、管理版本控制。dependencyManagement 是其中的重要机制,适用于管理复杂项目中的依赖版本和冲突。
5.1 依赖冲突的解决机制
当项目中多个依赖项包含相同的依赖时,Maven 使用“最短路径优先”与“声明顺序优先”规则来解决冲突。
- 最短路径优先:Maven 会选择依赖树中路径最短的依赖。
- 声明顺序优先:如果路径长度相同,则优先使用依赖树中最先声明的依赖版本。
5.2 使用 dependencyManagement 管理依赖版本
在多模块项目中,dependencyManagement 用于在父 POM 中集中管理依赖版本,避免子模块重复声明版本信息。子模块只需引入依赖而不需要指定版本,Maven 会自动采用父 POM 中指定的版本。
示例:
-
父 POM 的
dependencyManagement配置<project><groupId>com.example</groupId><artifactId>parent-project</artifactId><version>1.0</version><packaging>pom</packaging><dependencyManagement><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.3.8</version></dependency></dependencies></dependencyManagement> </project> -
子模块引用依赖
子模块的
pom.xml中不需要指定版本信息,Maven 会自动从父 POM 中获取版本:<project><parent><groupId>com.example</groupId><artifactId>parent-project</artifactId><version>1.0</version></parent><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId></dependency></dependencies> </project>在此配置下,
spring-core的版本由父 POM 的dependencyManagement统一管理,有效避免了版本冲突和冗余声明。
5.3 使用 exclusions 排除冲突的依赖
在某些情况下,直接依赖会引入不兼容的传递依赖项,可以使用 exclusions 标签排除这些依赖,确保项目中无冲突依赖。
示例:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework</groupId><artifactId>spring-core</artifactId></exclusion></exclusions>
</dependency>
通过以上配置,可以有效避免不兼容的版本冲突
六、插件使用
6.1 常用的 Maven 插件
- maven-compiler-plugin:控制 Java 源码编译的插件。
- maven-surefire-plugin:执行单元测试。
- maven-jar-plugin:创建 JAR 包。
6.2 配置自定义插件
在 POM 文件中配置插件:
<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin></plugins>
</build>
七、与其他工具集成
7.1 Maven 与 Jenkins 集成
Maven 项目与 Jenkins 集成时,可使用 mvn clean package 命令自动触发构建,并通过 Jenkins 中的 Maven 插件实现持续集成。
7.2 Maven 与 IDE 的集成体验
常用的 IDE(如 IntelliJ IDEA 和 Eclipse)都可以很好地集成 Maven。通过 Maven 插件,可以自动下载依赖、执行构建命令、运行测试等,使开发流程更加高效。
八、Maven 模块管理案例:实现一个公共模块
Maven 的模块管理功能非常强大,特别是在大型项目中,使用模块化管理可以有效提高代码的复用性和维护性。下面,我们将通过一个具体的案例,讲解如何使用 Maven 的父子项目结构来实现一个公共模块,以供其他模块复用。
8.1 案例背景
假设我们正在开发一个企业级的 Java 应用程序,其中有多个微服务模块。为了提高代码复用性,我们决定将一些通用的功能(如日志、配置管理、工具类等)抽取成一个公共模块,并通过 Maven 的模块管理来实现。
8.2 项目结构
我们将创建以下项目结构:
css复制代码my-company
│
├── pom.xml (父 POM)
│
├── common-utils
│ └── pom.xml (公共模块)
│
├── service-a
│ └── pom.xml (服务 A 模块)
│
└── service-b└── pom.xml (服务 B 模块)
8.3 父 POM 文件配置
在 my-company/pom.xml 中,定义父 POM,并指定子模块:
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.mycompany</groupId><artifactId>my-company</artifactId><version>1.0-SNAPSHOT</version><packaging>pom</packaging><modules><module>common-utils</module><module>service-a</module><module>service-b</module></modules>
</project>
在这个 POM 中,我们定义了一个名为 my-company 的项目,并指定了三个子模块:common-utils、service-a 和 service-b。
8.4 公共模块 common-utils 配置
接下来,在 common-utils/pom.xml 中,我们定义公共模块的 POM:
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.mycompany</groupId><artifactId>my-company</artifactId><version>1.0-SNAPSHOT</version></parent><artifactId>common-utils</artifactId><packaging>jar</packaging><dependencies><!-- 这里可以添加公共模块的依赖 --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.30</version></dependency></dependencies>
</project>
在此配置中,common-utils 模块依赖于 SLF4J 作为日志记录框架。
8.5 服务模块 service-a 和 service-b 配置
我们将让 service-a 和 service-b 模块使用 common-utils 模块。在 service-a/pom.xml 中:
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.mycompany</groupId><artifactId>my-company</artifactId><version>1.0-SNAPSHOT</version></parent><artifactId>service-a</artifactId><packaging>jar</packaging><dependencies><dependency><groupId>com.mycompany</groupId><artifactId>common-utils</artifactId><version>${project.version}</version></dependency></dependencies>
</project>
对于 service-b 的配置也是类似:
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.mycompany</groupId><artifactId>my-company</artifactId><version>1.0-SNAPSHOT</version></parent><artifactId>service-b</artifactId><packaging>jar</packaging><dependencies><dependency><groupId>com.mycompany</groupId><artifactId>common-utils</artifactId><version>${project.version}</version></dependency></dependencies>
</project>
8.6 构建项目
完成以上配置后,我们可以在项目根目录下运行以下命令构建整个项目:
mvn clean install
这条命令会依次构建 common-utils、service-a 和 service-b 模块,将它们的 JAR 包安装到本地 Maven 仓库中,供其他项目使用。
8.7 使用公共模块
在其他项目中,如果需要使用 common-utils 模块,只需在相应的 POM 文件中添加如下依赖即可:
<dependency><groupId>com.mycompany</groupId><artifactId>common-utils</artifactId><version>1.0-SNAPSHOT</version>
</dependency>相关文章:
Maven讲解从基础到高级配置与实践
一、基础认知 1.1 Maven 的主要作用 Maven 主要是用来管理 Java 项目构建流程的工具,包括以下几个方面: 依赖管理:通过 POM.xml 文件管理项目的外部依赖库,不同版本的依赖包可以通过 Maven 中央仓库自动下载,减少了…...
Vue3组件式父子传值
下面是使用 <script setup> 语法的 Vue 3 组件之间传值的示例。 示例 1:使用 Props 和 Emits 父组件 <template><div><h1>父组件</h1><ChildComponent :message="parentMessage" @reply="handleReply" /><p>…...
网页自动化测试和爬虫:Selenium库入门与进阶
网页自动化测试和爬虫:Selenium库入门与进阶 在现代Web开发和数据分析中,自动化测试和数据采集成为了开发流程中的重要部分。Python 的 Selenium 库是一种强大的工具,不仅用于网页自动化测试,也在网页爬虫中得到了广泛的应用。本…...
Cells 单元
Goto Data Grid 数据网格 Cells 单元 Content Alignment 内容对齐 显示数值的数据网格单元格会将其内容向右对齐。显示其他类型数据的单元格将其内容向左排列。若要更改单元格内容对齐方式,请处理 ColumnView.RowCellDefaultAlignment 事件。 Selection Modes 选…...
2024/11/2 安卓创建首页界面
Gradle 8.7 bin是指Gradle 8.7版本的二进制包,通常以.zip或.tar.gz格式提供。这个二进制包包含了运行Gradle所需的所有文件,用户可以直接下载并解压使用,无需从源代码编译。 首先了解最常用的布局 线性布局(从上到下&#x…...
SpringSession源码分析
默认对常规Session的理解和使用,如何使用Set-Cookie。 Maven库 常见的spring-session-data-redis依赖spring-session-core <dependency><groupId>org.springframework.session</groupId><artifactId>spring-session-core</artifactId&…...
IIC
IIC 目录 IIC BH1750型号的光照传感器 IIC通信协议 iic物理层 IIC软件层协议 -- 那么一主多从,怎么选中与指定的从机通信呢? 从机设备地址 -- 从手册中查看 IIC 写操作 IIC 读操作 硬件IIC和模拟 IIC 使用 模拟 IIC 使用 !&…...
LLM Observability: Azure OpenAI (一)
作者:来自 Elastic Vinay Chandrasekhar•Andres Rodriguez 我们很高兴地宣布 Azure OpenAI 集成现已全面上市,它提供了对 Azure OpenAI 服务性能和使用的全面可观察性!另请参阅本博客的第 2 部分 虽然我们已经提供了对 LLM 环境的可视性一段…...
qt QBrush详解
1、概述 QBrush是Qt框架中的一个基本图形对象类,它主要用于定义图形的填充模式。QBrush可以用于填充如矩形、椭圆形、多边形等形状,也可以用于绘制背景等。通过QBrush,可以设置填充的颜色、样式(如实心、渐变、纹理等)…...
Excel函数CUnique连接合并指定区域的唯一值
上一篇文章向大家介绍了如何使用VBA在低版本Excel中创建unique函数的方法,今天我跟大家分享一下如何使用函数连接指定区域的唯一值,也就是将unique函数获取的唯一值连接合并成一个,并指定连接符。 同样,我们需要先创建一个自定义的…...
机械革命屏幕设置为RGB
机械革命屏幕设置为RGB 如何设为机械革命屏幕显示为RGB如何设置1.win菜单下输入“显卡控制中心”2.选择显示器3.设置为RGB4.饱和度大家设为自己舒服的就行5.调整亮度 参考来源 如何设为机械革命屏幕显示为RGB 之前买的显示器,感觉调成sRGB看起来非常舒服。就想着是…...
开源项目-投票管理系统
哈喽,大家好,今天主要给大家带来一个开源项目-投票管理系统 投票管理系统主要有首页,发起投票,管理投票,参与投票,查看投票等功能 首页 为用户提供了一键导航到各个功能模块的便捷途径。 新增投票 用户可以在此轻松创建新的投票活动,设置投票主题、选项等信息。 管理…...
LeetCode 104.二叉树的最大深度
题目描述 给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:3 示例 2: 输入:root [1…...
Android启动流程_Init阶段
前言 本文将会介绍 Android 启动流程,将基于 Android 10 代码逻辑介绍原生启动过程。 bootloader 上电 -> 加载 recovery 镜像或者 boot 镜像 -> linux kernel 启动 -> 加载 init 进程 -> 加载 zygote 进程 -> systemserver 进程 -> 系统启动 …...
萤火虫算法优化BILSTM神经网络多输入回归分析
目录 LSTM的基本定义 LSTM实现的步骤 BILSTM神经网络 代码 结果分析 展望 完整代码下载:的MATALB代码(代码完整,数据齐全)资源-CSDN文库 https://download.csdn.net/download/abc991835105/88755564 背影 bp神经网络是一种成熟的神经网络,应用非常广,本文用萤火虫算法…...
在线QP(QuotedPrintable)编码解码工具
具体前往:Quoted-printable在线编码解码工具-将给定文本编码为:可打印字符引用编码(简称:QP编码),也支持在线解码...
【已解决】cra 配置路径别名 @ 后,出现 ts 报错:找不到模块“@/App”或其相应的类型声明。ts(2307)
cra 配置路径别名 后,出现 ts 报错:找不到模块“/App”或其相应的类型声明。ts(2307) 然后可以在 tsconfig.json 中配置 baseUrl 和 paths : {"compilerOptions": {"target": "es5","lib": [&quo…...
leetcode-643. 子数组最大平均数 I
文章目录 二 解法2.1 每次都重新计算2.2 使用窗口 给你一个由 n 个元素组成的整数数组 nums 和一个整数 k 。请你找出平均数最大且 长度为 k 的连续子数组,并输出该最大平均数。任何误差小于 10-5 的答案都将被视为正确答案。二 解法 2.1 每次都重新计算 超时 pu…...
论分布式架构设计及其实现
一、引言 随着互联网用户规模的扩大和需求的多样化,传统的集中式架构已经难以支撑高并发、高可用的系统要求。分布式架构的出现,提供了将计算和存储分布到不同服务器上的解决方案,有效提高了系统的可扩展性和容灾能力。分布式架构目前已广泛…...
基于BP神经网络的手写体数字图像识别
基于BP神经网络的手写体数字图像识别 摘要 在信息化飞速发展的时代,光学字符识别是一个重要的信息录入与信息转化的手段,其中手写体数字的识别有着广泛地应用,如:邮政编码、统计报表、银行票据等等,因其广泛地应用范围…...
聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
动态 Web 开发技术入门篇
一、HTTP 协议核心 1.1 HTTP 基础 协议全称 :HyperText Transfer Protocol(超文本传输协议) 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。 请求方法 : GET :用于获取资源,…...
【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论
路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中(图1): mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...
AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...
TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?
在工业自动化持续演进的今天,通信网络的角色正变得愈发关键。 2025年6月6日,为期三天的华南国际工业博览会在深圳国际会展中心(宝安)圆满落幕。作为国内工业通信领域的技术型企业,光路科技(Fiberroad&…...
嵌入式常见 CPU 架构
架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集,单周期执行;低功耗、CIP 独立外设;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel(原始…...
