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

Maven私服仓库配置-Nexus详解

目录

    • 一、什么是Maven私服?
    • 二、Maven 私服优势
    • 三、Maven 私服搭建
    • 四、Sonatype Nexus介绍
    • 五、Nexus仓库属性和分类
    • 六、Nexus仓库配置以及创建仓库
    • 七、Nexus配置用户角色
    • 八、Maven SNAPSHOT(快照)
    • 九、项目当中配置Nexus上传依赖
    • 十、项目当中配置Nexus下载依赖
    • 十一、测试SNAPSHOT版本
    • 十二、Nexus构件搜索
    • 十三、手动上传构件
    • 十四、关于nexus代理仓库状态

技术前提:熟练的掌握Maven基础知识

一、什么是Maven私服?

Maven 私服是一种特殊的Maven远程仓库,它是架设在局域网内的仓库服务,用来代理位于外部的远程仓库(中央仓库、其他远程公共仓库)。

当然也并不是说私服只能建立在局域网,也有很多公司会直接把私服部署到公网,具体还是得看公司业务的性质是否是保密的等等,因为局域网的话只能在公司用,部署到公网的话员工在家里也可以办公使用。

建立了 Maven 私服后,当局域网内的用户需要某个构件时,会按照如下顺序进行请求和下载。

  1. 请求本地仓库,若本地仓库不存在所需构件,则跳转到第 2 步;
  2. 请求 Maven 私服,将所需构件下载到本地仓库,若私服中不存在所需构件,则跳转到第 3 步。
  3. 请求外部的远程仓库,将所需构件下载并缓存到 Maven 私服,若外部远程仓库不存在所需构件,则 Maven 直接报错。

此外,一些无法从外部仓库下载到的构件,也能从本地上传到私服供其他人使用。

下图中展示了 Maven 私服的用途。

二、Maven 私服优势

Maven 私服具有以下 5 点优势:

  • 节省外网带宽:大量对于外部远程仓库的重复请求,会消耗很大量的带宽,利用 Maven私服代理外部仓库后,能够消除对外部仓库的大量重复请求,降低外网带宽压力。
  • 下载速度更快:Maven 私服位于局域网内,从私服下载构建更快更稳定。
  • 便于部署第三方构件:有些构件是无法从任何一个远程仓库中获得的(例如,某公司或组织内部的私有构件、Oracle 的 JDBC 驱动等),建立私服之后,就可以将这些构件部署到私服中,供内部 Maven 项目使用。
  • 提高项目的稳定性,增强对项目的控制:如果不建立私服,那么 Maven 项目的构件就高度依赖外部的远程仓库,若外部网络不稳定,则项目的构建过程也会变得不稳定。建立私服后,即使外部网络状况不佳甚至中断,只要私服中已经缓存了所需的构件,Maven 也能够正常运行。
  • 此外,一些私服软件(如 Nexus)还提供了很多额外控制功能,例如,权限管理、RELEASE/SNAPSHOT 版本控制等,可以对仓库进行一些更加高级的控制。
  • 降低中央仓库得负荷压力:由于私服会缓存中央仓库得构件,避免了很多对中央仓库的重复下载,降低了中央仓库的负荷。

三、Maven 私服搭建

能够帮助我们建立 Maven 私服的软件被称为 Maven 仓库管理器(Repository Manager),主要有以下 3 种:

  • Apache Archiva
  • JFrog Artifactory
  • Sonatype Nexus

其中,Sonatype Nexus 是当前最流行、使用最广泛的 Maven 仓库管理器。本篇文章也是重点讲解Sonatype Nexus。

关于nexus安装:https://blog.csdn.net/weixin_43888891/article/details/130675829

本篇直接基于nexus3最新版进行讲解!

四、Sonatype Nexus介绍

Nexus 的全称是 Nexus Repository Manager(Nexus 仓库管理器),是 Sonatype 公司的一个产品。Nexus 是一个强大的仓库管理器,极大地简化了内部仓库的维护和外部仓库的访问。Nexus 分为开源版和专业版,其中开源版足以满足大部分 Maven 用户的需求。

Nexus 开源版具有以下优点:

  • 占用内存小(28 M 左右)
  • 具有基于 ExtJs 得操作界面,用户体验较好
  • 使用基于 Restlet 的完全 REST API
  • 支持代理仓库、宿主仓库和仓库组
  • 基于文件系统,不需要依赖数据库
  • 支持仓库管理
  • 支持构件搜索
  • 支持在界面上上传构件

五、Nexus仓库属性和分类

这里我直接用的nexus最新版3.54.1版本。

点击左边导航栏中的 Repositories(仓库),可以看到 Nexus 自带的几个内置仓库,如下图所示。

在仓库列表中,每个仓库都具有一系列属性:

  • Type:仓库的类型,这里一共有三种
    • proxy:用来代理远程公共仓库,如 Maven 中央仓库、JBoss 远程仓库。
    • hosted:又称 Nexus 本地仓库,该仓库通常用来部署本地项目所产生的构件。 hosted 宿主仓库又分为:releases 和shapshots,分别表示依赖的版本的发行版、快照版。快照版依赖不能上传到发行版仓库,反之亦然。nexus做了限制。
    • group:仓库组,用来聚合代理仓库和宿主仓库,为这些仓库提供统一的服务地址,以便 Maven 可以更加方便地获得这些仓库中的构件。
  • Format:仓库的格式有两种maven2、nuget。我们是搞java的,所以新建仓库一般都是选择的maven2格式。
  • Status:仓库的状态,只有在线状态才能被访问。
  • URL:仓库的路径。

为了更加直观的理解仓库组、代理仓库和宿主仓库的概念,我们通过下图展示它们的用途和区别。

由上图可知:

  • Maven 可以直接从宿主仓库中下载构件。
  • Maven 也可以从代理仓库中下载构件,代理仓库会从远程仓库下载并缓存构件。
  • Maven 还可以从仓库组中下载构件,仓库组会从其包含的宿主仓库和代理仓库中获取构件。

我们使用nexus私服,配置文件中配置的也就是仓库组地址,因为仓库组可以把代理仓库、宿主仓库聚合,这样就完美实现:从私服下载依赖,私服仓库找不到还能去代理仓库那找。找到了之后缓存到私服这样下次就能从私服直接获取了。

六、Nexus仓库配置以及创建仓库

刚安装好的nexus一共给我们创建了7个仓库(不同的nexus版本可能有一点差距),我们只需要关注Format为maven2的仓库即可,也就是一共有4个:

  • maven-central:该仓库用来代理 Maven 中央仓库,其策略为 Release,只会下载和缓存中央仓库中的发布版本的构件。
  • maven-releases:策略为 Release 的宿主仓库,用来部署公司或组织内部的发布版本构件。
  • maven-snapshots:策略为 Snapshot 的宿主仓库,用来部署公司或组织内部的快照版本构件。
  • maven-public:仓库组,默认聚合了以上三个仓库。

下面进行一个一个讲解:

(1)maven-central

我们也可以再新建一个代理仓库,然后代理到阿里云镜像地址。通过阿里云镜像下载依赖要比maven中央仓库快的多。

选择maven2 (proxy)

其他配置默认即可。然后代理地址写:
https://maven.aliyun.com/repository/public

(2)maven-public

maven-public仓库组就是将这几个仓库汇集到一块,然后项目使用nexus,不需要配置其他仓库的地址,只需要配置仓库组的地址即可。

(3)maven-releases

release仓库需要把这块改一下,设置为Allow redeploy代表允许我们对仓库中的依赖维护升级新版本,如果设置为disable redeploy意味着我们无法将升级版本上传上来。

七、Nexus配置用户角色

nexus预定了两个用户

  • admin:最高权限
    1. 浏览仓库
    2. 搜索仓库
    3. 上传构建
    4. 新建修改仓库
  • anonymous:没有默认密码,不可以登录管理平台,拥有的权限有如下:
    1. 浏览仓库
    2. 搜索仓库

在低的版本当中可能会有一个deployment角色,不知道为什么新的版本当中这个角色给取消了。

一般我们不建议maven当中直接去配置admin账户,因为admin账户有新增和删除仓库的权限,我们可以选择新增一个账户,只给这个账号赋予上传依赖和下载依赖的权限即可,由于nexus是用户角色制,所以新增账户前,首先我们需要新建一个角色。然后让角色只具备上传依赖和下载依赖的权限。然后再给用户赋予该角色权限。

(1)新增角色

Role ID和Role Name自定义即可。

具体的需要新增的权限如下:

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

在这里插入图片描述

别忘了右下角保存!

(2)新增用户,并指定该角色

这时候可以使用新账号登录测试一下,登录后会发现他没有设置的权限,这就是我们要的效果!

八、Maven SNAPSHOT(快照)

接下来我们可能会频繁接触SNAPSHOT版本,在这里我们先熟悉一下这个版本号。

在我们是实际开发的项目当中很少会定义beat 、alpha 这些里程碑版本,因为这些一般都是开源框架才会定义的,他代表了一个特殊的寓意,例如beat就是测试版本,而我们经常在开发中会定义SNAPSHOT版本。SNAPSHOT不同于里程碑版本,里程碑版本他也就是一个普通的版本名称,说白了只是用这些英文来代表这个版本的含义,而SNAPSHOT对于私服来说是有特殊功能的。

使用场景: 大型的应用软件通常由多个功能模块组成,这些模块有时候分别于不同的团队负责开发。假设有两个团队,他们分别负责项目中的 member-service(会员服务) 和 user-service(用户服务) 两个模块,且 member-service 需要依赖 user-service 项目。

基于以上假设,若 user-service 团队正在进行快节奏的 bug 修复及功能增强,会在短时间内高频率地更新代码以及发布版本。就会出现以下情况:

  • user-service 团队每次发布新版本更新代码时,都应该通知member-service团队。
  • member-service 团队则需要定期更新其 pom.xml 以获得最新的版本。

这样,势必会影响开发效率,甚至会影响项目的验收及投产。要解决这个问题,其实很简单,那就是使用 SNAPSHOT(快照)版本。

版本介绍: SNAPSHOT(快照)是一种特殊的版本,它表示当前开发进度的副本。与常规版本不同,快照版本的构件在发布时,Maven 会自动为它打上一个时间戳,有了这个时间戳后,当依赖该构件的项目进行构建时,Maven 就能从仓库中找到最新的 SNAPSHOT 版本文件。

默认情况下对于快照本本的构件,Maven 会每天从仓库中获取一次更新,用户也可以在任何 Maven 命令中使用 -U 参数强制 Maven 检查更新。命令如下:mvn clean package -U

SNAPSHOT 版本 VS RELEASE 版本

Maven 仓库分为两种,Snapshot 快照仓库和 Release 发行仓库。Snapshot 快照仓库用于保存开发过程中的不稳定 SNAPSHOT 版本,Release 发行仓库则用来保存稳定的 RELEASE 版本。Maven 会根据模块的版本号(pom.xml 文件中的 version 元素)中是否带有 -SNAPSHOT 来判断是 SNAPSHOT 版本还是正式 RELEASE 版本。带有 -SNAPSHOT 是SNAPSHOT(快照)版本,不带 -SNAPSHOT 的就是正式 RELEASE(发布)版本。

九、项目当中配置Nexus上传依赖

首先找到本地maven的setting.xml(在maven安装目录的conf目录下),打开后找到servers标签。加入以下内容

<servers><!-- 这是配置访问私有仓库的用户名密码 --><server><!-- id标签可以随便填,只需要在servers中唯一即可,后面很多地方会使用该id --><id>self-maven</id><username>deplyment</username><password>deplyment123</password></server>
</servers>    

maven配置好了,接下来去maven项目中设置:

在你想上传的模块的pom文件中,写入:

<distributionManagement><repository><!--注意这个id一定要填写我们maven的setting.xml当中配置的id--><id>self-maven</id><url>http://ip:port/repository/maven-releases/</url></repository><snapshotRepository><!--注意这个id一定要填写我们maven的setting.xml当中配置的id--><id>self-maven</id><url>http://ip:port/repository/maven-snapshots/</url></snapshotRepository>
</distributionManagement>
  • distributionManagement:负责将指定的构件部署到 Nexus 指定的仓库中。
  • repository:代表上传release版本存储的仓库地址
  • snapshotRepository:代表上传snapshot版本存储的仓库地址
  • 标签中的 id,就是上面我们配置的server id,maven会通过这个id去server中拿用户名密码去访问私服仓库。
  • 标签中的url,就是对应仓库的地址:仓库的url复制即可,注意对应仓库,弄反了是传不上去的

会根据该模块的版本进行自动选择,如果你的版本号带有SNAPSHOT如:<version>0.0.1-SNAPSHOT</version>,那么会上传到SNAPSHOT仓库,release也是这个道理,如果版本号不存在这两个单词,如1.0.0,那么会选择release仓库上传。

(1)接下来我们进行测试,首先第一步准备一个不是web工程的项目,如下:

(2)然后进行以下步骤:

当然也可以直接运行maven命令:mvn clean deploy -DskipTests

(3)deploy执行完不报错的话就上传成功了。

(4)由于我的项目设置的是1.0-SNAPSHOT,也就是SNAPSHOT版本,所以他会自动上传到maven-snapshots仓库当中,如下:

十、项目当中配置Nexus下载依赖

接下来,配置本地maven。还是打开setting.xml,然后添加一个如下配置:

<profiles><profile><id>nexus</id><!--声明一个或多个远程仓库  --><repositories><!-- 声明一个 Nexus 私服上的仓库  --><repository><!--仓库id,这个id就是上面配置的账号密码id  --><id>self-maven</id><!-- 仓库的名称 --><name>nexus</name><!--仓库的地址  --><url>http://localhost:8081/repository/maven-public/</url><!-- 是否开启该仓库的 release 版本下载支持 --><releases><enabled>true</enabled></releases><!-- 是否开启该仓库的 snapshot 版本下载支持 --><snapshots><enabled>true</enabled></snapshots></repository></repositories><!-- 声明一个或多个远程插件仓库 --><pluginRepositories><!--声明一个 Nexus 私服上的插件仓库  --><pluginRepository><!--插件仓库 id --><id>self-maven</id><!--插件仓库 名称 --><name>nexus</name><!-- 配置的插件仓库的地址 --><url>http://localhost:8081/repository/maven-public/</url><!-- 是否开启该插件仓库的 release 版本下载支持 --><releases><enabled>true</enabled></releases><!-- 是否开启该插件仓库的 snapshot 版本下载支持 --><snapshots><enabled>true</enabled></snapshots></pluginRepository></pluginRepositories><properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion></properties><!-- 默认该profile生效 --><activation><activeByDefault>true</activeByDefault></activation></profile>
</profiles>       

以上配置中使用了一个 id 为 nexus 的 profile,这个 profile 中包含了与仓库相关的配置,同时配置中activeByDefault为true。当本机有 Maven 项目构建时,profile 中的仓库配置就会应用到项目中。配置当中的url就配置我们的仓库组地址即可:

(1)接下来进行测试下载依赖,首先让一个web工程引用该项目坐标

(2)紧接着我们需要找到本地maven仓库当中的introduce包给删除掉

根据坐标就可以在本地仓库找到进行删除,删除前要保证引用该依赖的工程不是启动状态,不然删除不了

(3)再次测试web工程看看能否获取到依赖,需要刷新该工程,让他再次去获取依赖。

(4)刷新过后查看仓库已经存在了该依赖jar,我们并没有手动去install该项目,那也就意味着他是通过私服进行下载的。

(5)假如缺少依赖,除了上面通过idea当中的刷新,也可以选择执行命令来下载依赖,mvn clean install的时候也会自动下载仓库当中缺少的依赖,通过下载依赖的信息我们可以知道他从哪个仓库进行下载依赖的:

Nexus 私服通常会与镜像(mirror)结合使用,使 Nexus 成为所有远程仓库的私服,这样不仅可以从 Nexus 中获取所有所需构件,还能将配置集中到 Nexus 私服中,简化 Maven 本身的配置。

我们可以创建一个匹配任何仓库的镜像,镜像的地址为 Nexus 中仓库的地址,这样 Maven 对于任何构件的下载请求都会被拦截跳转到 Nexus 私服中,在maven的setting.xml当中配置,其具体配置如下。

<mirrors><mirror><id>self-maven</id><name>nexus name</name><mirrorOf>*</mirrorOf><url>http://localhost:8081/repository/maven-public/</url></mirror>
</mirrors>

之前阿里的镜像可以注释了,添加的镜像标签解释:

  • id:之前server的id,访问仓库组也要拿用户名密码
  • mirrorOf:*代表所有的依赖都从私服找
  • url:就是仓库组的,还是去仓库组右边copy即可

这样的话项目就完全依赖于nexus仓库了,假如一旦nexus挂了,整个项目都没办法下载包了,这时候可以将镜像替换为阿里云,这样一来除了公司内部包无法下载,最起码中央仓库的包还是可以下载的。

<mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf>
</mirror>

十一、测试SNAPSHOT版本

我们基于上面提到的introduce工程和demo工程再顺便测一下SNAPSHOT版本。一般SNAPSHOT版本是为了解决多个人同时开发所产生的问题,而我没有多台电脑,所以模拟起来也比较费劲。

(1)我们需要手动保留一份仓库当中修改前的代码。

(2)修改一下introduce工程,然后将该工程重新deploy到仓库。

(3)删除本地仓库的introduce工程,将刚刚备份的introduce1改为introduce。这时候introduce1的工程代码当中那个输出的还是1111111。

(4)看看demo工程通过mvn clean install -DskipTests -U(-U是强制更新)是否会更新

(5)成功更新了

十二、Nexus构件搜索

十三、手动上传构件

有些 Jar 文件(如 Oracle 的 JDBC 驱动)由于许可证等原因,无法存放在公开仓库中。此外,还有一些小型的开源项目,它们没有将自己的构件分发到公共仓库中,也没有维护自己的仓库,因此这些构件是无法从公共仓库中获得的。若 Maven 项目中需要这类构件,我们就需要将构件下载到本地,然后手动上传到 Nexus 私服。

(1)准备一个项目,版本号不要是SNAPSHOT版本的
(2)mvn clean install,进行打包

(3)在 Nexus 界面的upoad上传,默认是只允许上传releases仓库。

生成的就是一个带有该项目坐标的pom。

如果该jar包还有其他依赖,那么需要手动上传pom.xml文件,就不能点击上面的generate生成了,通过点击add another asset 增加,操作如下

手动上传jar需要注意:

  • 首先,打包要打成不可执行jar包;
  • 其次,jar如果有其他依赖,一定要单独上传pom.xml文件,否则关联依赖无法拉取

十四、关于nexus代理仓库状态

  • online-remote available:表示该被代理仓库可用
  • online-ready to connect:并不是代理仓库用不了。而是你根本还没有一个依赖去访问这个被代理仓库,nexus也不知道这个被代理仓库能不能用,所以它只能展示为待连接状态。

新建的代理仓库都是 online-ready to connect状态。

代理仓库还有一个如下配置:

在这里插入图片描述

  • Blocked:假如选中相相当于禁用该代理仓库。
  • Auto blocking:该配置:表示代理仓库会根据每次请求被代理仓库的响应来决定是否暂停请求这个被代理仓库,请求无响应就会block。

相关文章:

Maven私服仓库配置-Nexus详解

目录 一、什么是Maven私服&#xff1f;二、Maven 私服优势三、Maven 私服搭建四、Sonatype Nexus介绍五、Nexus仓库属性和分类六、Nexus仓库配置以及创建仓库七、Nexus配置用户角色八、Maven SNAPSHOT(快照)九、项目当中配置Nexus上传依赖十、项目当中配置Nexus下载依赖十一、测…...

Systrace系列10 —— Binder 和锁竞争解读

本文主要是对 Systrace 中的 Binder 和锁信息进行简单介绍,简单介绍了 Binder 的情况,介绍了 Systrace 中 Binder 通信的表现形式,以及 Binder 信息查看,SystemServer 锁竞争分析等。 Binder 概述 Android 的大部分进程间通信都使用 Binder,这里对 Binder 不做过多的解释…...

React Hooks中使用useState异步回调获取不到最新值的问题

ReactHook中useState异步回调获取不到最新值及解决⽅案 预先了解 setState 的两种传参⽅式 1、直接传⼊新值 setState(options); 列如&#xff1a; const [state, setState] useState(0); setState(state 1); 2、传⼊回调函数 setState(callBack); 例如&#xff1a; …...

JavaScript 高级 (完结)

目录 深浅拷贝 浅拷贝 深拷贝 递归实现深拷贝 js库lodash里面cloneDeep内部实现了深拷贝 JSON序列化 异常处理 throw 抛异常 try /catch 捕获异常 debugg 处理this this指向 普通函数 箭头函数 改变this call() apply() bind() call apply bind 总结 性能优化…...

【P30】JMeter 事务控制器(Transaction Controller)

文章目录 一、事务控制器&#xff08;Transaction Controller&#xff09;参数说明二、测试计划设计2.2.1、勾选 Generate parent sample2.2.1、勾选 Include duration of timer and pre-post processors in generated sample 一、事务控制器&#xff08;Transaction Controlle…...

【MySQL】MySQL的事务原理和实现?

文章目录 MySQL事务的底层实现原理一、事务的目的可靠性和并发处理 二、实现事务功能的三个技术2.1 redo log 与 undo log介绍2.1.1 redo log2.1.2undo log 2.2 mysql锁技术2.2.1 mysql锁技术 2.3 MVCC基础 三、事务的实现3.1 原子性的实现3.1.1 undo log 的生成3.1.2 根据undo…...

S7-300Smart1200的ISO on TCP通信

1、西门子PLC的通信资源 1.1 S7-1200 的PROFINET 通信口 S7-1200 CPU 本体上集成了一个 PROFINET 通信口,支持以太网和基于 TCP/IP 的通信标准。使用这个通信口可以实现 S7-1200 CPU 与编程设备的通信,与HMI触摸屏的通信,以及与其它 CPU 之间的通信。这个PROFINET 物理接口…...

Spark写入Hive报错Mkdir failed on :com.alibaba.jfs.JindoRequestPath

1. 报错内容 23/05/31 14:32:13 INFO [Driver] FsStats: cmdmkdirs, srcoss://sync-to-bi.[马赛克].aliyuncs.com/tmp/hive, dstnull, size0, parameterFsPermission:rwx-wx-wx, time-in-ms32, version3.5.0 23/05/31 14:32:13 ERROR [Driver] ApplicationMaster: User class …...

分布式id解决方法--雪花算法

uuid&#xff0c;jdk自带&#xff0c;但是数据库性能差&#xff0c;32位呀。 mysql数据库主键越短越好&#xff0c;Btree产生节点分裂&#xff0c;大大降低数据库性能&#xff0c;所以uuid不建议。 redis的自增&#xff0c;但是要配置维护redis集群&#xff0c;就为了一个id&a…...

5年经验之谈:月薪3000到30000,测试工程师的变“行”记

自我介绍下&#xff0c;我是一名转IT测试人&#xff0c;我的专业是化学&#xff0c;去化工厂实习才发现这专业的坑人之处&#xff0c;化学试剂害人不浅&#xff0c;有毒&#xff0c;易燃易爆&#xff0c;实验室经常用丙酮&#xff0c;甲醇&#xff0c;四氯化碳&#xff0c;接触…...

PMP考试都是什么题?

PMP新版大纲加入了ACP敏捷管理的内容&#xff0c;说是敏捷混合题型占到了 50%&#xff0c;但是这次318的考试&#xff0c;敏捷题占了大半&#xff0c;都说敏捷和情景快要占到80%-90%。 所以有友友说开了四个小时盲盒&#xff0c;题目读不懂&#xff0c;或者觉得4个选项都不对或…...

macbook2023系统清理软件cleanmymac中文版

cleanmymac x 中文版基本都是大家首选Mac清理软件了。它集各种功能于一身&#xff0c;几乎满足用户所有的清理需求。它可以清理&#xff0c;优化&#xff0c;保养和监测您的电脑&#xff0c;确保您的Mac运行畅通无阻&#xff01;支持一键快速清理Mac&#xff0c;快速检查并安全…...

基于Python+AIML+Tornado的智能聊天机器人(NLP+深度学习)含全部工程源码+语料库 适合个人二次开发

目录 前言总体设计系统整体结构图系统流程图 运行环境Python 环境Tornado 环境 模块实现1. 前端2. 后端3. 语料库4. 系统测试 其它资料下载 前言 本项目旨在利用AIML技术构建一个聊天机器人&#xff0c;实现用户通过聊天界面与机器人交互的功能。通过提供的工程源代码&#xf…...

算法Day15 | 层序遍历,102,107,199,637,429,515,116,117,104,111,226,101

Day15 层序遍历102.二叉树的层序遍历107.二叉树的层次遍历 II199.二叉树的右视图637.二叉树的层平均值429.N叉树的层序遍历515.在每个树行中找最大值116.填充每个节点的下一个右侧节点指针117.填充每个节点的下一个右侧节点指针II104.二叉树的最大深度111.二叉树的最小深度 226…...

Prometheus+Grafana学习(十一)安装使用pushgateway

Pushgateway允许短暂和批量作业将其指标暴露给 Prometheus。由于这些工作的生命周期可能不足够长&#xff0c;不能够存在足够的时间以让 Prometheus 抓取它们的指标。Pushgateway 允许它们可以将其指标推送到 Pushgateway&#xff0c;然后 Pushgateway 再将这些指标暴露给 Prom…...

深入理解C/C++预处理器指令#pragma once以及与ifndef的比较

#pragma once用法总结 为了防止重复引用造成二义性 在C/C中&#xff0c;在使用预编译指令#include的时候&#xff0c;为了防止重复引用造成二义性&#xff0c;通常有两种方式 第一种是#ifndef指令防止代码块重复引用&#xff0c;比如说 #ifndef _CODE_BLOCK #define _CODE_BLO…...

git 环境配置 + gitee拉取代码

好嘛 配环境的时候 老是忘记这个命令行 干脆自己写一个记录一下 也不用搜了 1.先从git官网下载git 安装 2.然后从gitee拉取代码的时候提示 这是因为换了新电脑没有加入新的公钥啦 哎 所以老是记不住命令行 first &#xff1a; git config --global user.name “Your Name” …...

港联证券|港股拥抱特专科技企业 内资券商“修炼内功”蓄势而为

港股市场新一轮改革举措渐次落地。特别是港交所推出特专科技公司上市机制&#xff0c;吸引符合资格的科技企业申请赴港上市&#xff0c;成为这一轮港股市场改革的“重头戏”。 作为香港资本市场的重要参与者&#xff0c;内资券商立足香港、背靠内地、辐射全球&#xff0c;走出一…...

多项创新技术加持,实现零COGS的Microsoft Editor语法检查器

编者按&#xff1a;Microsoft Editor 是一款人工智能写作辅助工具&#xff0c;其中的语法检查器&#xff08;grammar checker&#xff09;功能不仅可以帮助不同水平、领域的用户在写作过程中检查语法错误&#xff0c;还可以对错误进行解释并给出正确的修改建议。神经语法检查器…...

Python编程环境搭建:Windows中如何安装Python

在 Windows 上安装 Python 和安装普通软件一样简单&#xff0c;下载安装包以后猛击“下一步”即可。 Python 安装包下载地址&#xff1a;https://www.python.org/downloads/ 打开该链接&#xff0c;可以看到有两个版本的 Python&#xff0c;分别是 Python 3.x 和 Python 2.x&…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生&#xff0c;小白用户&#xff0c;想学习知识的 有点基础&#xff0c;想要通过项…...