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

[Maven高级]->近万字文章带你深入了解Maven

⭐作者介绍:大二本科网络工程专业在读,持续学习Java,努力输出优质文章
⭐作者主页:@逐梦苍穹
⭐所属专栏:JavaEE
⭐如果觉得文章写的不错,欢迎点个关注一键三连😉有写的不好的地方也欢迎指正,一同进步😁

目录

  • ⭐1、分模块开发与设计
  • ⭐2、聚合
  • ⭐3、继承
  • ⭐4、属性
    • 4.1、自定义属性
    • 4.2、内置属性
    • 4.3、Setting属性
    • 4.4、Java系统属性
    • 4.5、环境变量属性
  • 5、版本管理
  • 6、资源配置
  • 7、多环境开发配置
  • 8、跳过测试
  • 9、⭐私服
    • 9.1、资源获取
    • 9.2、仓库分类
    • 9.3、IDEA中使用
  • 10、私服->Nexus

⭐1、分模块开发与设计

在这里插入图片描述

在Java中使用Maven进行模块化开发和设计是一种常见的做法,它有几个主要的优势和原因:
  1. 代码组织和可维护性: 将项目分割成多个模块可以更好地组织代码,使其更易于维护和理解。每个模块都有自己的职责和功能,可以独立地进行开发、测试和部署。这样的模块化结构可以减少代码的复杂性,提高开发效率。
  2. 重用性和解耦合: 模块化设计可以促使开发者更多地考虑代码的重用性和解耦合。模块之间通过明确定义的接口进行通信,而不是直接依赖于具体的实现。这样可以降低模块之间的依赖关系,使得模块可以独立地进行修改和升级,同时也方便其他项目重用这些模块。
  3. 并行开发和构建: 使用模块化开发可以使不同的开发团队并行工作,每个团队负责不同的模块。这样可以提高开发效率和项目交付速度。此外,模块化开发还使得项目的构建过程更加可控和可靠。
  4. 依赖管理: Maven作为一个强大的依赖管理工具,可以帮助开发者管理项目的依赖关系。通过将项目划分为多个模块,可以更清晰地定义和管理模块之间的依赖关系,确保项目的构建过程能够正确地解决依赖,并且能够方便地升级和切换依赖版本。

总的来说,使用Maven进行模块化开发和设计可以提高代码的组织性、可维护性和可重用性,促进团队的协作和并行开发,并且简化了依赖管理和项目构建过程。这些优势使得Maven在Java开发中被广泛使用。

⭐2、聚合

在Maven中,聚合(aggregation)是一种用于组织和管理多个相关项目的机制。聚合允许您在一个父项目中定义和管理多个子项目,以便同时构建和管理它们。
聚合通过一个称为"父"或"聚合"项目来管理多个相关的子项目。父项目通常不包含实际的代码,而是作为一个容器,用于定义和管理子项目的共享配置和依赖关系。子项目可以是独立的模块,每个模块都有自己的独立代码库和构建配置。

以下是聚合的一些主要优势和用途:

  1. 项目组织和一致性: 聚合允许您将相关的项目组织在一起,并将它们作为一个逻辑单元进行管理。这样可以更容易地维护和管理这些项目,确保它们之间的一致性,例如共享配置、版本控制和依赖管理。
  2. 一键构建: 通过聚合,您可以使用一个简单的命令来同时构建多个子项目,而不需要逐个构建每个项目。这对于大型项目或拥有多个模块的项目非常有用,可以提高构建效率和开发流程的整体速度。
  3. 跨项目依赖管理: 在聚合中,您可以定义和管理子项目之间的依赖关系。这样,您可以轻松地确保子项目之间的依赖正确解决,并且可以方便地升级和切换子项目之间的依赖版本。
  4. 统一版本管理: 聚合允许您在父项目中定义和管理子项目的版本号。这样可以确保所有子项目都使用相同的版本号,从而提高项目的可维护性和版本一致性。
  5. 模块化开发和测试: 聚合允许您将大型项目拆分为多个独立的子项目,每个子项目都可以独立开发、测试和部署。这样可以提高并行开发和测试的效率,并促进团队之间的协作。

要创建一个聚合项目,您需要创建一个包含子项目模块的父项目,并在父项目的pom.xml文件中使用元素列出子项目的模块路径。然后,您可以在父项目的根目录中运行Maven命令来构建或执行其他操作,Maven将会递归地对所有子项目进行相应的操作。

总的来说,聚合是Maven中一种有用的机制,它简化了多项目的管理和构建过程,并提供了更好的组织性、一致性和重用性。
在这里插入图片描述
在这里插入图片描述

⭐3、继承

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在Maven中,继承(inheritance)是一种机制,允许您定义一个父项目(或称为超级POM)并继承其配置和依赖关系到子项目中。这种继承关系允许子项目共享父项目的通用配置,从而简化项目的管理和维护。
继承的主要优势和用途如下:

  1. 代码重用和一致性: 继承允许您将通用的配置和依赖关系定义在父项目中,子项目可以继承这些配置而无需重复定义。这样可以提高代码重用性,并确保子项目之间的配置保持一致。
  2. 统一的构建配置: 通过继承,您可以定义一组通用的构建配置,例如编译器版本、源代码目录、测试目录等。子项目可以继承这些配置,而无需在每个子项目中重复定义。
  3. 依赖管理和版本控制: 父项目可以定义和管理所有子项目共享的依赖关系。这样可以确保所有子项目使用相同的依赖版本,并简化依赖的管理和升级过程。
  4. 插件配置和执行: 通过继承,您可以在父项目中配置和管理一组通用的构建插件。子项目可以继承这些插件配置,并根据需要进行定制。这样可以确保插件的一致性和统一的构建行为。

要创建一个继承关系,您需要在子项目的pom.xml文件中声明父项目。通常情况下,父项目的pom.xml文件位于父项目的根目录下,而子项目的pom.xml文件位于子项目的根目录下。
在子项目的pom.xml文件中,使用元素指定父项目的坐标(groupId、artifactId和version),如下所示:

<project><modelVersion>4.0.0</modelVersion><parent><groupId>com.example</groupId><artifactId>parent-project</artifactId><version>1.0.0</version></parent><!-- 子项目的其他配置和依赖 -->
</project>

通过这样的配置,子项目将继承父项目的配置和依赖关系。您可以在子项目中添加、覆盖或继承父项目的配置,根据需要进行定制。
总的来说,Maven的继承机制允许您在父项目中定义通用的配置和依赖关系,并使子项目能够继承和定制这些配置,从而提高项目的管理和维护效率。它促进了代码重用、一致性和依赖管理,并简化了构建和部署过程。

⭐4、属性

属性类别:

  1. 自定义属性
  2. 内置属性
  3. Setting属性
  4. Java系统属性
  5. 环境变量属性

在Maven中,存在不同类型的属性,包括自定义属性、内置属性、Setting属性、Java系统属性和环境变量属性。下面逐个介绍这些属性类别:

  1. 自定义属性: 这些属性是由您在项目的pom.xml文件中定义的。您可以使用元素在pom.xml中声明自定义属性,并在项目中的其他地方引用这些属性。
  2. 内置属性: Maven提供了一些内置的属性,可用于引用有关构建和环境的信息。例如,${project.groupId}表示项目的groupId,${project.version}表示项目的版本号。您可以在pom.xml文件中直接使用这些内置属性。
  3. Setting属性: Setting属性是在Maven的settings.xml文件中定义的。Settings.xml文件是全局配置文件,用于配置Maven的行为和设置。您可以在settings.xml中定义属性,并在项目的pom.xml或其他配置文件中引用这些属性。
  4. Java系统属性: Maven还可以引用Java虚拟机的系统属性作为属性。这些属性可以通过使用-D选项在命令行传递给Maven,也可以在settings.xml文件或其他Maven配置文件中设置。
  5. 环境变量属性: Maven还可以引用操作系统环境变量作为属性。您可以在Maven配置文件中使用${env.变量名}的形式引用环境变量的值。

这些属性类别提供了不同级别和范围的属性定义和引用方式,使得配置更加灵活和可定制。您可以根据需求选择适当的属性类别来定义和使用属性。无论是项目特定的配置还是全局配置,这些属性类别都允许您引用和管理各种类型的属性值,以满足项目的需求。
在Maven中,属性(properties)是一种可以在pom.xml文件中定义的可重用的值。属性允许您在项目的各个地方引用相同的值,从而提高配置的灵活性和可维护性。
属性的一些重要特点和用途如下:

  1. 配置重用和简化: 使用属性可以将重复的值定义为一个属性,并在需要的地方引用。这样可以简化配置,并确保多个地方使用相同的值,从而减少错误和维护成本。
  2. 灵活的配置: 属性可以根据不同的环境或需求进行定制。您可以根据需要在不同的配置文件中定义不同的属性值,从而使项目的配置更加灵活和可适应多种情况。
  3. 版本控制和管理: 属性在定义依赖版本时特别有用。通过定义属性来表示依赖的版本号,可以轻松地在项目的不同模块中使用相同的版本,从而提高版本的一致性和可维护性。
  4. 命令行参数传递: Maven允许您通过命令行参数传递属性值。这样可以在构建时动态地修改属性值,从而适应不同的构建需求。

4.1、自定义属性

在这里插入图片描述

4.2、内置属性

在这里插入图片描述

4.3、Setting属性

在这里插入图片描述

4.4、Java系统属性

在这里插入图片描述

4.5、环境变量属性

在这里插入图片描述

5、版本管理

版本管理在软件开发中是一个关键的概念,它用于跟踪和管理软件的不同版本。在Maven中,版本管理是通过定义和控制项目的版本号来实现的。
版本号通常遵循一种特定的格式,例如主版本号.次版本号.修订号。常见的版本号格式是“MAJOR.MINOR.PATCH”。以下是版本号的一般含义:
  ● 主版本号(MAJOR):当进行重大功能更改或不兼容的API更改时增加。这意味着新版本可能无法与先前版本兼容。
 ● 次版本号(MINOR):当添加新功能或进行向后兼容的修改时增加。这意味着新版本与先前版本兼容。
 ● 修订号(PATCH):当进行错误修复或进行非破坏性的补丁更新时增加。

使用版本管理的好处如下:

  1. 清晰的版本控制: 版本号可以提供对软件发行版本的明确标识,使得开发人员和用户能够轻松地识别和区分不同版本。
  2. 功能追踪和计划管理: 通过版本号的增加,可以清晰地追踪项目的功能增量和进度,并支持制定计划和路线图。
  3. 错误修复和维护: 版本管理允许开发团队在发现错误或漏洞时,为特定版本提供修复和补丁更新,以确保软件的稳定性和安全性。
  4. 依赖管理: 版本管理对于管理项目的依赖关系非常重要。通过明确定义依赖的版本号,可以确保项目使用特定版本的库或框架,并避免因版本冲突而引起的问题。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

6、资源配置

在Maven中,资源配置用于将项目所需的非Java源文件(例如配置文件、模板、图像等)包含在构建过程中,并将其复制到生成的构建目录中。资源配置允许您在项目中管理和使用这些非代码资源。
Maven使用约定优于配置的原则来处理资源文件。按照默认约定,项目的资源文件应该位于src/main/resources目录下。这些资源文件将与项目的Java源代码一起打包到最终的构建输出中。

资源配置的一些重要特点和用途如下:

  1. 资源过滤: Maven允许您在资源文件中使用属性占位符,并在构建过程中根据配置的属性值进行替换。这样可以根据不同的环境或需求,动态地修改资源文件的内容。资源过滤可以在pom.xml或使用专门的资源过滤配置文件(例如filters)进行配置。
  2. 资源目录结构: 默认情况下,资源文件应位于src/main/resources目录中,并按照相应的包结构组织。例如,资源文件com/example/config.properties将位于src/main/resources/com/example目录下。
  3. 资源过滤器: Maven提供了资源过滤器(resource filtering)的机制,可以对资源文件进行动态过滤和处理。资源过滤器可以应用于特定文件类型,例如properties文件或XML文件,并根据配置的属性值进行替换。
  4. 资源插件: Maven提供了一些资源插件,可以进一步处理资源文件。例如,Maven插件可以将资源文件压缩、加密、合并等。通过使用适当的资源插件,您可以根据项目的需求进行资源文件的额外处理。
    在这里插入图片描述
    在这里插入图片描述

7、多环境开发配置

在软件开发中,多环境开发配置是一种常见的实践,它允许在不同的环境中(如开发、测试和生产)使用不同的配置。这样可以确保在不同环境中正确地配置和运行应用程序,以满足各自环境的需求。

在Maven中,可以使用不同的配置文件和属性来实现多环境开发配置。
下面是一种常见的做法:

  1. 创建环境特定的配置文件: 针对每个环境,创建一个特定的配置文件,用于存储该环境的相关配置。例如,可以创建一个名为application-dev.properties的文件用于开发环境配置,application-test.properties用于测试环境配置,application-prod.properties用于生产环境配置等。
  2. 使用不同的配置文件: 在Maven的资源配置中,根据当前环境,使用相应的配置文件。这可以通过在pom.xml中设置不同的资源目录或使用Maven Profiles来实现。
      ○ 方法一:使用不同的资源目录。在Maven项目中,为每个环境创建不同的资源目录(例如src/main/resources/dev,src/main/resources/test,src/main/resources/prod),并将相应的配置文件放置在各自的目录中。然后,在构建过程中,根据不同的环境选择相应的资源目录。
      ○ 方法二:使用Maven Profiles。在pom.xml中定义多个Profile,每个Profile对应一个环境,并在Profile中设置相应的资源配置和属性。通过在构建时选择特定的Profile,可以加载相应的配置文件和属性。
  3. 配置环境相关属性: 在配置文件中,可以定义与该环境相关的属性。这些属性可以在应用程序中使用,以根据当前环境动态调整应用程序的行为。例如,可以在配置文件中设置数据库连接字符串、日志级别、服务URL等环境相关的属性。
  4. 属性过滤和替换: 在配置文件中,可以使用Maven的资源过滤功能,通过属性占位符引用属性,并在构建过程中根据环境相关的属性值进行替换。这样可以根据不同的环境自动调整配置文件的内容。

通过以上步骤,您可以根据不同的环境设置和使用特定的配置文件和属性,从而实现多环境开发配置。这样可以确保应用程序在不同环境中以适当的方式运行,并且可以在切换环境时轻松地进行配置调整。这对于开发、测试和生产环境之间的无缝切换和部署是非常有帮助的。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8、跳过测试

跳过测试的应用场景可以包括以下几种情况:

  1. 快速构建和开发迭代: 在开发过程中,如果您只对代码的编译和构建结果感兴趣,而不需要运行所有的单元测试,可以跳过测试以加快构建速度。这对于频繁的代码更改和快速迭代非常有用。
  2. 集成和部署流程: 在持续集成和自动化部署流程中,为了加快构建和部署的速度,跳过测试可以是一种常见的做法。在这种情况下,测试通常在集成环境中进行,而不是在构建过程中。
  3. 依赖关系的变化: 当您的项目依赖的外部库或服务发生变化时,有时测试可能会因为环境或依赖关系的变化而失败。在这种情况下,为了快速构建并检查其他方面的兼容性,可以暂时跳过测试。
  4. 资源受限环境: 在一些资源受限的环境中,如内存或处理能力有限的系统,测试执行可能会对性能产生较大影响。为了确保构建和部署的顺利进行,可以选择跳过测试。

需要注意的是,尽管跳过测试可以加快构建速度并在特定场景下提高效率,但测试是确保软件质量和稳定性的关键部分。因此,在生产环境部署之前,应始终确保进行适当的测试,并尽量覆盖各种测试类型(单元测试、集成测试、端到端测试等)以验证应用程序的正确性和可靠性。跳过测试应谨慎使用,并在合适的时机进行。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

9、⭐私服

私服(Repository Manager)是一种用于管理和托管软件包和依赖项的服务器。在软件开发中,私服起到了集中管理、缓存和分发依赖项的作用,提供了更高效、可靠和可控的依赖管理解决方案。

以下是私服的一些主要功能和优势:

  1. 依赖项管理: 私服可以用于集中管理项目所需的依赖项。它允许您将依赖项上传到私服中,并在项目构建过程中从私服中获取依赖项,而不是从公共中央仓库或其他远程仓库下载。这样可以避免对外部仓库的依赖,提高构建速度和稳定性。
  2. 缓存远程仓库: 私服可以缓存远程仓库中的依赖项,减少构建过程中对远程仓库的依赖和网络传输。当项目中的多个开发者或构建服务器使用相同的依赖项时,私服可以从缓存中快速提供这些依赖项,节省构建时间和带宽。
  3. 本地部署和定制: 私服允许您在本地环境中部署并定制软件包。您可以将自己开发的库、框架或第三方依赖项上传到私服,使其在团队或组织内部共享和使用。私服还提供了配置和管理选项,使您能够根据特定需求进行定制,例如设置访问权限、限制下载速度等。
  4. 镜像和分发管理: 私服可以作为中央仓库的镜像,提供更快的下载速度和更可靠的访问。您可以配置私服以同步和缓存中央仓库的内容,并为团队内部提供更好的性能和稳定性。私服还可以用于分发内部构建的软件包和工件,使其可供其他团队或项目使用。
  5. 企业级支持和安全性: 私服通常提供了企业级支持和安全性功能。它们支持用户认证、访问控制、审计日志和安全连接等功能,以确保私有的软件包和依赖项受到保护,并符合组织的安全和合规要求。

一些流行的私服管理工具包括Apache Archiva、Sonatype Nexus和JFrog Artifactory等。这些工具提供了友好的用户界面和丰富的功能,使您能够轻松地设置和管理私服。

总而言之,私服是一个用于管理和托管软件包和依赖项的服务器,它提供了依赖项管理、缓存远程仓库、本地部署和定制、镜像和分发管理以及企业级支持和安全性等功能。私服的使用可以提高构建效率、减少对外部仓库的依赖,并为团队或组织提供更好的依赖管理和软件分发解决方案。
在这里插入图片描述

9.1、资源获取

在这里插入图片描述

9.2、仓库分类

  1. 宿主仓库(Hosted Repository): 宿主仓库是私服中用于保存自主研发或第三方非开源项目的仓库。这些项目的资源无法从中央仓库或其他公共仓库获取,因此需要在私服的宿主仓库中进行保存和管理。宿主仓库是存储具体项目的实际资源的地方。
  2. 代理仓库(Proxy Repository): 代理仓库用于代理远程仓库,例如中央仓库或其他公共仓库。通过配置代理仓库,私服可以缓存远程仓库中的资源,并为团队提供更快的访问速度和可靠性。当项目需要依赖某个远程资源时,私服会首先检查代理仓库中是否已经存在该资源,如果存在则直接提供下载,如果不存在则从远程仓库下载并缓存到代理仓库。
  3. 仓库组(Repository Group): 仓库组是将多个仓库组合在一起形成一个逻辑单元的方式。通过配置仓库组,可以将多个宿主仓库、代理仓库或其他仓库类型组合在一起,形成一个统一的访问点。团队可以通过仓库组来简化配置,只需关注仓库组的地址,而不需要直接指定底层的仓库地址。仓库组本身不保存资源,它只是一个逻辑集合。
    在这里插入图片描述

总结来说,私服中常见的仓库分类包括宿主仓库、代理仓库和仓库组。宿主仓库用于保存自主研发或第三方非开源项目的资源,代理仓库用于代理远程仓库,而仓库组则是将多个仓库组合在一起以简化配置和提供统一访问点。

9.3、IDEA中使用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

10、私服->Nexus

Nexus是一个流行的私服管理工具,用于管理和托管软件包和依赖项。它由Sonatype开发,是一个功能强大、易于使用的仓库管理器,被广泛用于软件开发和构建过程中。
下载地址:https://help.sonatype.com/repomanager3/product-information/download

以下是Nexus的一些主要特点和功能:

  1. 仓库管理: Nexus支持多种类型的仓库,包括Maven、npm、Docker和Raw(原始)仓库。它提供了仓库的创建、配置和管理功能,允许您集中管理和组织软件包、组件和工件。
  2. 依赖项管理: Nexus可以作为Maven项目的中央仓库,用于存储和分发项目的依赖项。它可以缓存远程仓库中的依赖项,减少构建过程中对远程仓库的依赖和网络传输。Nexus还支持依赖项的搜索、浏览和版本管理。
  3. 企业级功能: Nexus提供了许多企业级功能,如用户认证、访问控制、角色管理和审计日志等。它可以与现有的企业身份验证和授权系统集成,以确保私有的软件包和依赖项受到保护,并满足组织的安全和合规要求。
  4. 代理和镜像: Nexus支持代理和镜像功能,可以将外部仓库的内容缓存到本地,并提供更快的下载速度和更可靠的访问。您可以配置Nexus以同步和缓存中央仓库的内容,并为团队内部提供更好的性能和稳定性。
  5. 构建和部署支持: Nexus提供了构建和部署的支持,可以用于存储和分发构建产物、工件和发布版本。它支持发布流程的自动化,并可以与持续集成和持续部署工具集成,以实现无缝的构建和部署过程。
  6. 用户界面和管理工具: Nexus提供了易于使用和直观的Web用户界面,用于管理和配置仓库、权限和设置。它还提供了REST API和CLI(命令行界面)工具,以便于自动化和批量操作。

Nexus有两个主要版本:Nexus Repository OSS(开源版)和Nexus Repository Pro(专业版)。开源版是免费提供的,并提供了许多核心功能。专业版则提供了更多高级功能、技术支持和企业级特性。

总而言之,Nexus是一个功能强大的私服管理工具,可用于管理和托管软件包和依赖项。它提供了仓库管理、依赖项管理、企业级功能、代理和镜像、构建和部署支持等一系列功能,为团队和组织提供了高效的依赖管理和软件分发解决方案。
在这里插入图片描述

相关文章:

[Maven高级]->近万字文章带你深入了解Maven

⭐作者介绍&#xff1a;大二本科网络工程专业在读&#xff0c;持续学习Java&#xff0c;努力输出优质文章 ⭐作者主页&#xff1a;逐梦苍穹 ⭐所属专栏&#xff1a;JavaEE ⭐如果觉得文章写的不错&#xff0c;欢迎点个关注一键三连&#x1f609;有写的不好的地方也欢迎指正&…...

物联网Lora模块从入门到精通(五)光照与温湿度传感器

一、前言 在程序开发中&#xff0c;光照与温湿度的获取是十分常见与重要的&#xff0c;本文我们主要是使用M21温湿度光照三合一传感器&#xff0c;其中温湿度数据通过协议获取&#xff0c;而光照通过ADC获取。 二、代码实现 本文内容较为简单&#xff0c;且后续文章将在本文基…...

【网络编程】计算机网络基础知识总结 | 运输层 |TCP协议

文章目录 前言一、计算机网络层次结构二、网络层三、运输层3.1、TCP/IP协议介绍3.2、端口&#xff08;协议端口号&#xff09;3.3、套接字3.4、TCP实现原理3.4.1、TCP的特点3.4.2、停止等待协议3.4.3、滑动窗口协议3.4.4、拥塞控制3.4.5、TCP连接的三个阶段 3.5、UDP实现原理 前…...

python关键知识点

1. 变量&#xff1a;在程序中存储值或对象的名称。 2. 数据类型&#xff1a;指变量的数据类型&#xff0c;例如 str、int、float、list、tuple、dict、set 等。 3. 操作符&#xff1a;表示运算符号&#xff0c;例如加号 和减号 -。 4. 循环&#xff1a;通过重复执行某个代码…...

c# 从零到精通 数组的操作-将两个一维数组合并成一个二维数组

c# 从零到精通 数组的操作-将两个一维数组合并成一个二维数组 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Test07 { class Program { static void Main(string[] args) { //定义两个一维数组 int[] arr1 new int[] {…...

Linux目录结构(与window目录结构对比+绝对路径和相对路径)

一、Linux目录结构 Linux目录结构是一个标准化的文件系统层次结构&#xff0c;非常有组织性并且易于管理。而与Windows 操作系统不同&#xff0c;Linux将所有文件和设备都组织在一个单一的根目录下。以下是Linux的标准目录结构&#xff1a; /&#xff1a;根目录&#xff0c;包含…...

投票活动小程序开发搭建

由于小程序是基于微信开发者工具编写的&#xff0c;因此我先介绍一下需要使用的工具和技术&#xff1a; - 微信开发者工具&#xff1a;用于开发、调试和发布小程序。 - 小程序云开发&#xff1a;用于存储数据和进行后端逻辑处理。 - uni-app框架&#xff1a;uni-app 是一个使…...

代码随想录day18

513.找树左下角的值 本题用前中后序都可以&#xff08;都是先遍历左再遍历右&#xff0c;保证最后一定是左侧的节点&#xff09;&#xff0c;因为没有中节点的处理逻辑&#xff0c;用全局变量记录最大深度&#xff0c;只要遇到叶子结点并且当前深度比最大深度大&#xff0c;就更…...

QT+OpenGL高级光照 Blinn-Phong和Gamma校正

QTOpenGL高级光照1 本篇完整工程见gitee:QtOpenGL 对应点的tag&#xff0c;由turbolove提供技术支持&#xff0c;您可以关注博主或者私信博主 Blinn-Phong 冯氏光照&#xff1a;视线与反射方向之间的夹角不小于90度&#xff0c;镜面光分量会变成0.0&#xff08;不是很合理&am…...

【Ubuntu系统内核更新与卸载】

【Ubuntu系统内核更新与卸载】 1. 前言2. 内核安装2.1 系统更新2.2 官网下载 3. 内核卸载3.1 需求分析3.2 卸载方法 1. 前言 我们在搭建环境时常常遇到内核版本不匹配的问题&#xff0c;需要我们安装新的内核版本&#xff1b;有时又会遇到在安装软件时报错boot空间已满无法安装…...

RL - 强化学习 马尔可夫奖励过程 (MRP) 的状态价值

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://blog.csdn.net/caroline_wendy/article/details/131084795 GitHub 源码: https://github.com/SpikeKing/Reinforcement-Learning-Algorithm 马尔可夫奖励过程 (MRP) 的状态价值是指在某…...

Mybatis之批处理流式查询

文章目录 1 批处理查询1.1 引言1.2 流式查询1.2.1 定义1.2.2 流式查询接口1.2.3 使用流式查询关闭问题1.2.3.1 SqlSessionFactory1.2.3.2 TransactionTemplate1.2.3.3 Transactional 注解 1.2.4 完整示例1.2.4.1 mapper接口和SQL1.2.4.2 Service操作 1.3 游标查询1.3.1 定义1.3…...

Spring架构篇--2.7.3 远程通信基础--Netty原理--bind实现端口的绑定

前言&#xff1a;在对ServerBootstrap 进行属性赋值之后&#xff0c;通过bind 方法完成端口的绑定&#xff0c;并开始在NioEventLoop中进行轮询进行事件的处理&#xff1b;本文主要探究ServersocketChannel 在netty 中是如何完成注册&#xff0c;以及端口的绑定 1 Nio selecto…...

【改进的多同步挤压变换】基于改进多同步挤压的高分辨率时频分析工具,用于分析非平稳信号(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

有关 python 切片的趣事

哈喽大家好&#xff0c;我是咸鱼 今天来讲一个我在实现 python 列表切片时遇到的趣事 在正式开始之前&#xff0c;我们先来了解一下切片&#xff08;slice&#xff09; 切片操作是访问序列&#xff08;列表、字符串…&#xff09;中元素的另一种方法&#xff0c;它可以访问一…...

ChatGPT 会带来失业潮吗?

&#xff08;永久免费&#xff0c;扫码加入&#xff09; 最近在翻知乎上的一些文章&#xff0c;很多都是跟ChatGPT有关的。因为本身是搞Python编程的&#xff0c;知乎推荐系统给我推荐了一篇廖雪峰老师的文章&#xff0c;觉得很有意思。 一共1119个赞&#xff0c;还是很厉害的&…...

如何对待工作中的失误

在日复一日的工作中&#xff0c;我们免不了会产生一些失误&#xff0c;会因此感到沮丧和失望。但如何正确地对待和处理这些失误才是最重要的&#xff0c;它直接影响到我们的工作表现和个人成长。一起来谈谈作为职场人的你时如何处理工作中的失误的吧&#xff01; 一、在面对失…...

微信小程序快速入门【一】

微信小程序快速入门【一】 文章目录 微信小程序快速入门【一】&#x1f468;‍&#x1f3eb;内容1&#xff1a;背景&#x1f468;‍⚖️内容2&#xff1a;准备工作&#x1f468;‍&#x1f4bb;内容3&#xff1a;新建一个小程序&#x1f349;文末推荐 &#x1f468;‍&#x1f…...

TiDB亿级数据亚秒响应查询集群部署

目录 1 集群部署1.1 环境要求1.1.1 操作系统建议配置1.1.2 服务器建议配置 1.2 环境准备1.3 安装TiUP1.3.1 什么是TiUP1.3.2 安装TiUP组件1.3.3 配置TiUP环境1.3.4 检查TiUP 工具是否安装1.3.5 安装 cluster 组件1.3.6 升级cluster组件 1.4 编辑部署文件1.4.1 常见的部署场景1.…...

并发——同步访问共享的可变数据

关键字 synchronized 可以保证在同一时刻&#xff0c;只有一个线程可以执行某一个方法&#xff0c;或者某一段代码块。许多程序员把同步的概念仅仅理解为一种互斥的方式。即&#xff0c;当一个对象被一个线程修改的时候&#xff0c;可以阻止另一个线程观察到内部不一致的状态。…...

Docker网络模型(九)禁用容器网络

禁用容器网络 如果你想完全禁用容器上的协议栈&#xff0c;你可以在启动容器时使用 --network none 标志。在容器内&#xff0c;只有回环设备被创建。下面的例子说明了这一点。 创建容器 $ docker run --rm -dit \--network none \--name no-net-alpine \alpine:latest \ash通…...

JavaScript 教程---互联网文档计划

学习目标&#xff1a; 每天记录一章笔记 学习内容&#xff1a; JavaScript 教程---互联网文档计划 笔记时间&#xff1a; 2023-6-5 --- 2023-6-11 学习产出&#xff1a; 1.入门篇 1、JavaScript 的核心语法包含部分 基本语法标准库宿主API 基本语法&#xff1a;比如操作符…...

做好功能测试需要的8项基本技能【点工进来】

功能测试是测试工程师的基础功&#xff0c;很多人功能测试还做不好&#xff0c;就想去做性能测试、自动化测试。很多人对功能测试的理解就是点点点&#xff0c;如何自己不用心去悟&#xff0c;去研究&#xff0c;那么你的职业生涯也就停留在点点点上了。在这里&#xff0c;我把…...

在弹出框内三个元素做水平显示

最终效果图要求是这样&#xff1a; js代码&#xff1a; // 显示弹出窗口 function showPopup(node) {var popup document.createElement(div);popup.className popup;var inputContainer1 document.createElement(div);/* inputContainer1.className input-container1; */…...

纠删码技术在vivo存储系统的演进【上篇】

作者&#xff1a;vivo 互联网服务器团队- Gong Bing 本文将学术界和工业界的纠删码技术的核心研究成果进行了相应的梳理&#xff0c;然后针对公司线上存储系统的纠删码进行分析&#xff0c;结合互联网企业通用的IDC资源、服务器资源、网络资源、业务特性进行分析对原有纠删码技…...

如何实现APP自动化测试?

APP测试&#xff0c;尤其是APP的自动化测试&#xff0c;在软件测试工程师的面试中越来越会被问到了。为了更好的回答这个问题&#xff0c;我今天就给大家分享一下&#xff0c;如何进行APP的自动化测试。 一、为了实现JavaAppiumJunit技术用于APP自动化测试&#xff0c;所以需要…...

​​INNODB和MyISAM区别

1 存储引擎是MyISAM 如下&#xff1a; CREATE table test_myisam (cli int ) ENGINEMyISAM 存储目录里会有三个文件 test_myisam.frm为“表定义”&#xff0c;是描述数据表结构的文件 test_myisam.MYI文件是表的索引 test_myisam.MYD文件是表的数据 2 存储引擎是INNODB…...

普中自动下载软件1.86下载程序失败案例

今天在用开发板做一个功能&#xff0c;下载的时候报错了&#xff0c;说芯片超时 确定驱动安装好了的 波特率也试了一圈 线也换过了 最后发现是芯片类型选错了&#xff0c;这个开发板是用的stc89c52,所以我选了图里这个&#xff0c;但是翻了开发板配套的资料&#xff0c;发现…...

JavaScript HTML DOM

JavaScript HTML DOM&#xff08;文档对象模型&#xff09;是一种用于访问和操作HTML文档元素的编程接口。它将HTML文档表示为一个树形结构&#xff0c;使开发人员可以使用JavaScript来操作和修改HTML元素、属性、样式和事件。 通过使用HTML DOM&#xff0c;你可以使用JavaScr…...

solr快速上手:配置IK中文分词器(七)

0. 引言 solr作为搜索引擎&#xff0c;常用在我们对于搜索速度有较高要求且大数据量的业务场景&#xff0c;我们之前已经配置过英文分词器&#xff0c;但是针对中文分词不够灵活和实用&#xff0c;要实现真正意义上的中文分词&#xff0c;还需要单独安装中文分词器 solr快速上…...

网页及网站建设用什么软件/怎么找专业的营销团队

前言 后端在写对外的API接口时&#xff0c;一般会对参数进行签名来保证接口的安全性&#xff0c;在设计签名算法的时候&#xff0c;主要考虑的是这几个问题&#xff1a; 1. 请求的来源是否合法 2. 请求参数是否被篡改 3. 请求的唯一性 我们的签名加密也是主要针对这几个问题来…...

自己做网站和凡科的区别/青岛seo建站

名字 strstr, strcasestr - 在字符串中定位一个子串概要 #include <string.h>char *strstr(const char *haystack, const char *needle);char *strcasestr(const char *haystack, const char *needle); // 是GNU的扩展描述 strstr()函数在haysta…...

商务网站建设与管理/百度长尾关键词挖掘工具

题目 原题链接 问题描述 我们以[b,q,y][b,q,y][b,q,y]表示以bbb为首元素&#xff0c;qqq为公差&#xff0c;yyy为序列个数的序列&#xff0c;如[−1,2,4][-1,2,4][−1,2,4]表示序列[−1,1,3,5][-1,1,3,5][−1,1,3,5]。 若存在两个序列AAA、BBB&#xff0c;它们的交集为序列CC…...

眼科医院网站设计怎么做/天津优化网络公司的建议

首先我们打开一个测试用的文档。 然后&#xff0c;如果我们需要隐藏某一列&#xff0c;则选中这一列。 在【开始】选项卡的“单元格”组中单击【格式】按钮 在打开的下拉菜单中选择【隐藏和取消隐藏】&#xff0c;根据下级菜单中的相关命令来进行行列的隐藏操作。 选择【隐藏行…...

做电影网站算侵权吗/百度网盘搜索引擎网站

测试环境&#xff1a;ubuntu18.04driver450cuda11.0cudnn8.0.5opencv4.4.0 1、ubuntu显卡驱动下载安装 2、cuda及cudnn安装 3、opencv4编译配置 4、darknet源码编译测试...

wordpress 空间推荐/网络营销的工具和方法

多年以后&#xff0c;面对办公室的屏幕&#xff0c;我会回忆起开始肝第二周OO作业的那个遥远的下午。那时的程序是一个一两百行的符号求导&#xff0c;基类与接口在包里一字排开&#xff0c;工整的注释一望到底 谁能想到&#xff0c;接下来的十几个小时我要经历什么样的噩梦&am…...