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

GitLab CI/CD的原理及应用详解(一)

本系列文章简介:

        在当今快速变化的软件开发环境中,持续集成(Continuous Integration, CI)和持续交付(Continuous Delivery, CD)已经成为提高软件开发效率、确保代码质量以及快速响应市场需求的重要手段。GitLab CI/CD,作为GitLab平台提供的一套强大的自动化工具集,为开发团队带来了极大的便利和价值。

        GitLab CI/CD通过自动化构建、测试、部署等流程,使得开发团队能够实时地监测代码变更,及时发现并修复问题,保持代码库的稳定性和可靠性。它基于GitLab平台,与版本控制系统紧密集成,使得CI/CD流程更加自然和高效。

        在GitLab CI/CD中,.gitlab-ci.yml文件是配置CI/CD流程的关键。通过这个文件,开发团队可以定义自动化流程中的各个阶段,包括构建、测试、部署等,以及每个阶段所需执行的命令和脚本。GitLab Runner是执行这些自动化流程的工具,它根据.gitlab-ci.yml文件中的配置,在指定的环境中执行相应的命令和脚本。

        GitLab CI/CD的应用场景非常广泛,无论是小型的初创团队还是大型的企业级项目,都可以从中受益。它可以帮助开发团队实现自动化的代码合并、构建、测试和部署,提高开发效率,减少人为错误,缩短产品上市时间。同时,GitLab CI/CD还可以与各种工具和平台集成,如Docker、Kubernetes等,为开发团队提供更多的灵活性和可扩展性。

        然而,GitLab CI/CD也面临着一些挑战。随着项目的不断发展和变化,CI/CD流程的复杂度和依赖性也会不断增加,需要开发团队进行持续的维护和优化。此外,如何确保CI/CD流程的稳定性和可靠性,也是开发团队需要重点关注的问题。

        本系列文章旨在详细介绍GitLab CI/CD的原理、应用以及优势和挑战,帮助大家更好地理解和使用GitLab CI/CD。通过具体的案例和实战经验分享,希望能够帮助大家掌握GitLab CI/CD的精髓,提高开发效率和质量。

        欢迎大家订阅《Java技术栈高级攻略》专栏,一起学习,一起涨分!

目录

一、引言

1.1 CI/CD概述

1.2 GitLab CI/CD简介

二、GitLab CI/CD原理

2.1 版本控制

2.1.1 Git基础

2.1.2 GitLab作为版本控制工具

2.2 持续集成(CI)

2.2.1 CI的概念

2.2.2 GitLab CI的工作流程

2.2.3 自动化构建和测试

2.3 持续交付(CD)

2.4 配置文件(.gitlab-ci.yml)

三、GitLab CI/CD应用

四、GitLab CI/CD的优势与挑战

五、GitLab CI/CD的未来发展

六、总结与展望

七、结语


一、引言

1.1 CI/CD概述

CI/CD是持续集成(Continuous Integration,CI)和持续交付/部署(Continuous Delivery/Deployment,CD)的简称。这是一种软件开发流程模型,旨在通过自动化和持续性的构建、测试、部署和交付过程,来提高软件开发和发布的效率和质量。

具体来说,持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次。这意味着每天可能会发生多次集成,从而确保代码库的稳定性和可靠性。在这个过程中,开发团队需要确保他们的变更不会破坏主分支,这通常要求有一个自动化测试的机制来验证每次提交。

持续交付则确保软件可以被快速安全地部署到生产环境中。它的关键在于部署过程被自动化,包括基础设施与服务的配置,以及部署启动等步骤都是无人工干预的。这允许团队更频繁地发布新版本,并快速响应市场需求。

持续部署是持续交付的一个扩展,它指的是将构建产物自动部署到生产环境,实现自动化的部署和发布,从而实现快速的交付和迭代。

CI/CD管道是包括构建、测试和部署的一个永无止境的循环。它允许开发团队在每次代码更改时自动运行测试,并自动将更改部署到生产环境。这可以大大减少人为错误,提高部署效率,使团队能够更加专注于产品的开发和改进。

1.2 GitLab CI/CD简介

GitLab CI/CD是一个内置在GitLab中的工具,用于通过持续方法进行软件开发,主要包括Continuous Integration(CI)持续集成、Continuous Delivery(CD)持续交付和Continuous Deployment(CD)持续部署。这个工具可以帮助您更快地发布高质量的软件,并在团队中实现自动化和标准化。

GitLab CI/CD的工作原理是将小的代码块推送到Git仓库中托管的应用程序代码库中,并且每次推送时,都会运行一系列脚本来构建、测试和验证代码更改,然后再将其合并到主分支中。持续交付和部署相当于更进一步的CI,可以在每次推送到仓库默认分支的同时将应用程序部署到生产环境。这种方法有助于在开发周期的早期发现bug和错误,从而确保部署到生产环境的所有代码都符合为应用程序建立的代码标准。

GitLab CI/CD的特点包括:

  1. 多平台:它可以在Unix、Windows、macOS和任何其他支持Go的平台上执行构建。
  2. 多语言:构建脚本是命令行驱动的,并且可以与Java、PHP、Ruby、C等语言一起使用。
  3. 稳定构建:构建在与GitLab不同的机器上运行,确保构建过程的稳定性。
  4. 并行构建:GitLab CI/CD可以在多台机器上拆分构建,以实现快速执行。
  5. 实时日志记录:合并请求中的链接将您带到动态更新的当前构建日志,方便跟踪和监控构建过程。
  6. 灵活的管道:您可以在每个阶段定义多个并行作业,并且可以触发其他构建。
  7. 版本管道:一个.gitlab-ci.yml文件包含您的测试、整个过程的步骤,使每个人都能贡献更改,并确保每个分支获得所需的管道。
  8. 自动缩放:您可以自动缩放构建机器,以确保立即处理您的构建并将成本降至最低。

GitLab CI/CD的配置文件是.gitlab-ci.yml,该文件位于仓库的根目录下,用于定义构建、测试和部署等阶段的脚本和配置。文件中指定的脚本由GitLab Runner执行。

此外,GitLab CI/CD还支持多种语言和框架,包括Java、Python、Ruby、Node.js、Docker和Kubernetes等。您可以根据自己的需求选择适合的工具和技术,并利用它们来加速您的开发工作流。同时,GitLab CI/CD还可以与GitLab的其他功能无缝集成,如代码审查、合并请求和部署等,从而提高团队协作和沟通的效率。

二、GitLab CI/CD原理

2.1 版本控制

2.1.1 Git基础

GitLab CI/CD 是基于 Git 的版本控制系统,因此,理解 Git 的基础是理解 GitLab CI/CD 的关键。Git 是一种分布式版本控制系统,用于跟踪和管理项目中的文件变化。以下是 Git 的基础概述:

  1. 分布式版本控制:Git 是一个分布式版本控制系统,这意味着它不需要一个中心化的服务器来存储所有的版本信息。每个开发者都可以在自己的本地机器上克隆一个完整的 Git 仓库,包含所有的历史记录。这种分布式特性使得开发者能够更灵活地进行工作,例如,即使在没有网络连接的情况下,也可以进行代码提交和版本控制。
  2. 工作区、暂存区和本地仓库:Git 的工作区是指你进行项目开发的目录。当你对工作区的文件进行修改后,这些修改并不会立即被 Git 跟踪。你需要将这些修改添加到暂存区(stage 或 index),然后才能提交到本地仓库。暂存区是一个中间区域,用于存放你将要提交到本地仓库的修改。通过 git add 命令,你可以将工作区的文件添加到暂存区。然后,使用 git commit 命令,你可以将暂存区的修改提交到本地仓库。
  3. 分支:Git 的分支功能是其强大的一个方面。分支允许你在开发过程中创建多个并行的代码线。例如,你可以创建一个分支来开发新功能,而同时保持主分支的稳定。使用 git branch 命令可以创建新的分支,git checkout 命令可以切换分支,git merge 命令可以将一个分支的修改合并到另一个分支。
  4. 远程仓库:虽然 Git 是一个分布式版本控制系统,但在实际开发中,我们通常会使用一个远程仓库来存储和共享代码。远程仓库可以是一个公共的代码托管平台(如 GitHub、GitLab 等),也可以是一个私有的服务器。通过 git clone 命令,你可以从远程仓库克隆一个完整的 Git 仓库到本地。使用 git push 和 git pull 命令,你可以将本地的修改推送到远程仓库,或者从远程仓库拉取最新的代码。

以上就是 Git 的基础概述。理解这些基本概念对于理解 GitLab CI/CD 的工作原理和如何有效地使用它进行软件开发至关重要。

2.1.2 GitLab作为版本控制工具

GitLab作为一个版本控制工具,它在Git的基础上,提供了一个更加全面和集成的解决方案。以下是GitLab作为版本控制工具的主要特点和工作原理:

  1. 基于Git的分布式版本控制:GitLab的核心仍然是Git,因此它继承了Git的分布式版本控制特性。每个开发者都可以在自己的本地机器上克隆一个完整的Git仓库,包括所有的版本历史记录。这使得开发者可以更加灵活地进行工作,无需依赖于中央服务器。
  2. Web界面和协作工具:GitLab提供了一个易于使用的Web界面,使得开发者可以更方便地浏览代码、提交更改、创建分支、合并代码等。此外,GitLab还提供了丰富的协作工具,如问题跟踪、代码审查、合并请求等,这些工具可以帮助团队成员更好地协作和沟通。
  3. 代码托管和共享:GitLab作为一个代码托管平台,允许开发者将他们的代码存储在一个远程仓库中,并与其他人共享。这使得团队成员可以轻松地访问和修改代码,同时也方便了代码的备份和恢复。
  4. 权限管理和安全性:GitLab提供了强大的权限管理功能,可以确保只有授权的用户才能访问和修改代码。此外,GitLab还提供了多种安全特性,如HTTPS加密、SSH密钥访问等,以确保代码的安全性和隐私性。
  5. 与CI/CD的集成:GitLab不仅是一个版本控制工具,它还集成了CI/CD(持续集成/持续交付)功能。通过GitLab CI/CD,开发者可以自动化构建、测试和部署应用程序,从而提高开发效率和质量。GitLab CI/CD的工作原理是基于配置文件的,开发者可以在项目中定义一个名为“.gitlab-ci.yml”的配置文件,其中包含了构建、测试和部署的具体步骤和规则。

总的来说,GitLab作为一个版本控制工具,不仅提供了Git的核心功能,还通过其丰富的Web界面、协作工具、代码托管和共享、权限管理和安全性以及CI/CD集成等功能,为开发者提供了一个更加全面和集成的解决方案。这使得开发者可以更加高效地进行版本控制、协作开发和自动化构建、测试和部署。

2.2 持续集成(CI)

2.2.1 CI的概念

持续集成(CI)是一种软件开发实践,要求开发团队经常性进行系统集成

具体来说,CI指的是在开发过程中,团队成员定期(如每天至少一次)将代码合并到共享存储库(如Git仓库)中,并自动进行构建和测试。这个过程包括编译代码、运行自动化测试、进行代码质量检查等,以确保新代码与现有代码能够正确集成,并且不会引入新的错误。

在GitLab CI/CD中,持续集成的工作原理是基于配置文件的。用户可以在项目中定义一个名为".gitlab-ci.yml"的配置文件,其中包含了构建、测试和部署的具体步骤和规则。当团队成员提交代码更改并推送到共享存储库时,GitLab CI/CD将自动触发构建和测试流程。这个过程包括从存储库中拉取最新的代码、执行在配置文件中定义的构建和测试步骤、生成构建产物等。

通过持续集成,开发团队可以更早地发现和修复错误,提高代码质量,同时减少集成和部署的复杂性。此外,持续集成还可以帮助团队更好地协作和沟通,因为每个成员都可以看到最新的代码更改和构建结果,从而更容易地理解项目的状态和进展。

2.2.2 GitLab CI的工作流程

GitLab CI/CD 中的持续集成(CI)是软件开发流程中的关键步骤,旨在确保代码变更的质量,并在早期阶段发现潜在的问题。GitLab CI 的工作流程主要基于以下几个步骤:

  1. 代码提交:开发者将修改后的代码推送到 GitLab 仓库中。每次代码提交都会触发一个与项目关联的 CI/CD 管道。
  2. CI 管道配置:在 GitLab 项目中,开发者会定义一个名为 .gitlab-ci.yml 的配置文件。这个文件包含了 CI/CD 管道的所有配置信息,如构建、测试、部署等阶段的具体步骤和规则。
  3. Runner 分配:GitLab Runner 是执行 CI/CD 管道中任务的工具。当一个新的 CI/CD 管道被触发时,GitLab 会根据配置信息(如标签、特定 Runner 等)选择一个可用的 Runner 来执行任务。
  4. 构建阶段:Runner 从 GitLab 仓库中获取最新的代码,并在指定的环境中进行构建。这通常包括编译代码、生成构建产物等步骤。
  5. 测试阶段:在构建成功后,Runner 会执行测试任务,以确保代码的质量。这些测试可能包括单元测试、集成测试、功能测试等。如果测试失败,Runner 会停止执行后续的步骤,并将错误信息返回给 GitLab。
  6. 部署阶段(可选):如果测试通过,Runner 可以执行部署任务,将构建产物部署到指定的环境中。这可以是开发环境、测试环境或生产环境等。
  7. 结果反馈:无论 CI/CD 管道的执行结果如何,Runner 都会将结果返回给 GitLab,并在项目的 CI/CD 页面上显示出来。这样,开发者就可以随时查看 CI/CD 管道的执行情况和结果。

总的来说,GitLab CI 的工作流程是一个自动化的过程,通过配置 .gitlab-ci.yml 文件来定义 CI/CD 管道的具体步骤和规则。当开发者提交代码时,GitLab 会自动触发 CI/CD 管道的执行,并在各个阶段中执行相应的任务。这样,开发者就可以更加高效地进行持续集成,确保代码的质量,并在早期阶段发现潜在的问题。

2.2.3 自动化构建和测试

GitLab CI/CD在持续集成(CI)方面,通过自动化构建和测试流程,极大地提高了软件开发的效率和质量。以下是GitLab CI/CD在自动化构建和测试方面的主要原理和应用:

  1. 配置文件(.gitlab-ci.yml):GitLab CI/CD的工作流程是基于配置文件的。在GitLab项目中,开发者会定义一个名为.gitlab-ci.yml的配置文件,其中包含了自动化构建和测试的具体步骤和规则。这个文件定义了CI/CD管道的各个阶段(stage),每个阶段可以包含多个任务(job)。
  2. Runner执行:当代码提交到GitLab仓库时,会触发一个与项目关联的CI/CD管道。GitLab Runner是执行这个管道中任务的工具。Runner会根据.gitlab-ci.yml配置文件中的定义,自动执行相应的构建和测试任务。
  3. 自动化构建:在构建阶段,Runner会按照配置文件中的指示,从GitLab仓库中获取最新的代码,并在指定的环境中进行构建。这通常包括编译代码、生成构建产物等步骤。通过自动化构建,开发者可以确保每次代码变更后都能够快速生成可运行的应用程序或库。
  4. 自动化测试:在测试阶段,Runner会执行配置文件中定义的测试任务。这些测试任务可以包括单元测试、集成测试、功能测试等。Runner会运行指定的测试脚本或工具,对构建产物进行全面的测试,以确保代码的质量。如果测试失败,Runner会停止执行后续的步骤,并将错误信息返回给GitLab。通过自动化测试,开发者可以在早期阶段发现潜在的问题,并及时进行修复。
  5. 结果反馈:无论构建和测试的结果如何,Runner都会将结果返回给GitLab,并在项目的CI/CD页面上显示出来。这样,开发者就可以随时查看CI/CD管道的执行情况和结果。如果构建或测试失败,开发者可以根据返回的错误信息快速定位问题并进行修复。

GitLab CI/CD的自动化构建和测试功能为开发者带来了很多便利。它使得开发者可以更加高效地进行软件开发,减少人为错误和干预。同时,通过自动化的测试和反馈机制,开发者可以更加及时地发现和修复问题,确保代码的质量和稳定性。

2.3 持续交付(CD)

        详见《GitLab CI/CD的原理及应用详解(二)

2.4 配置文件(.gitlab-ci.yml)

        详见《GitLab CI/CD的原理及应用详解(二)

三、GitLab CI/CD应用

        详见《GitLab CI/CD的原理及应用详解(三)

四、GitLab CI/CD的优势与挑战

        详见《GitLab CI/CD的原理及应用详解(四)

五、GitLab CI/CD的未来发展

        详见《GitLab CI/CD的原理及应用详解(五)

六、总结与展望

        详见《GitLab CI/CD的原理及应用详解(五)

七、结语

         文章至此,已接近尾声!希望此文能够对大家有所启发和帮助。同时,感谢大家的耐心阅读和对本文档的信任。在未来的技术学习和工作中,期待与各位大佬共同进步,共同探索新的技术前沿。最后,再次感谢各位的支持和关注。您的支持是作者创作的最大动力,如果您觉得这篇文章对您有所帮助,请分享给身边的朋友和同事!

相关文章:

GitLab CI/CD的原理及应用详解(一)

本系列文章简介: 在当今快速变化的软件开发环境中,持续集成(Continuous Integration, CI)和持续交付(Continuous Delivery, CD)已经成为提高软件开发效率、确保代码质量以及快速响应市场需求的重要手段。Gi…...

Python混淆矩阵用例

📜用例 📜Python社群纽带关系谱和图神经 | 📜多标签混淆矩阵模型 | 📜二元分类分层混淆矩阵模型 | 📜混淆矩阵评估特征归因 ✒️梗概 混淆矩阵是评估分类模型性能的有用工具。 该矩阵通过将预测值与实际值进行比较&…...

【负载均衡式在线OJ项目day6】源文件路由功能及文件版题库构建

一.前言 前文讲到了OJ模块的设计思路,毫无疑问这是一个网络服务,我们先使用httplib,将源文件的路由功能实现,先把框架写好,后续再更改回调方法。 随后计划编写Modify模块,提供增删查改题库的功能(主要是查…...

841.钥匙和房间

841.钥匙和房间 题目链接&#xff1a;841.钥匙和房间 代码如下&#xff1a; class Solution { public:bool canVisitAllRooms(vector<vector<int>>& rooms) {vector<bool> visited(rooms.size(),false);dfs(rooms,visited,0);// bfs(rooms,visited,0)…...

【OceanBase 系列】—— 什么是冻结和转储

文章出处&#xff1a;OceanBase分布式数据库-海量数据 笔笔算数 本文主要介绍什么是冻结和转储。 适用版本 OceanBase 数据库所有版本。 冻结 冻结是指将 Active MEMTable 转化为 Frozen MEMTable 的过程。 冻结的触发方式 手动触发&#xff1a;alter system minor freeze…...

智慧园区能耗管控系统,3D可视化开发都需要哪些技术栈?

数据可视化&#xff1a; 数据可视化是将数据通过图表、图形、地图等可视化方式展示&#xff0c;使得数据更加直观、易于理解和分析。在智慧园区能耗管控系统中&#xff0c;可以使用各种图表库&#xff08;如Echarts、Highcharts&#xff09;和可视化工具&#xff08;如Tableau…...

Spring之推断构造方法源码解析

Spring之推断构造方法源码解析 简介 在Spring框架中&#xff0c;构造方法注入是一种常见的依赖注入方式。而在构造方法注入中&#xff0c;推断构造方法是一种特殊的方式&#xff0c;它可以根据参数类型自动选择合适的构造方法进行注入。本文将深入解析Spring框架中推断构造方…...

【计算机网络】计算机网络的定义和分类

&#x1f6a9;本文已收录至专栏&#xff1a;计算机网络学习之旅 一.定义 计算机网络并没有一个精确和统一的定义&#xff0c;在计算机网络发展的不同阶段&#xff0c;人们对计算机网络给出了不同的定义&#xff0c;这些定义反映了当时计算机网络技术的发展水平。 例如计算机…...

天机学堂—学习辅助功能(含场景问答和作业)

我的课表 需求分析 原型图 管理后台 用户端 流程图 数据设计 接口设计 支付成功报名课程后, 加入到我的课表(MQ)分页查询我的课表查询我正在学习的课程根据id查询指定课程的学习状态删除课表中的某课程 代码实现 数据表设计 添加课程到课表&#xff08;非标准接口&#x…...

Stable Diffusion AI绘画

我们今天来了解一下最近很火的SD模型 ✨在人工智能领域&#xff0c;生成模型一直是研究的热点之一。随着深度学习技术的飞速发展&#xff0c;一种名为Stable Diffusion的新型生成模型引起了广泛关注。Stable Diffusion是一种基于概率的生成模型&#xff0c;它可以学习数据的潜…...

linux性能监控之sar

1.sar命令介绍 sar是一个非常全面的分析工具&#xff0c;可以对文件的读写&#xff0c;系统调用的使用情况&#xff0c;磁盘IO&#xff0c;CPU相关使用情况&#xff0c;内存使用情况&#xff0c;进程活动等都可以进行有效的分析。 sar工具将对系统当前的状态进行取样&am…...

react框架对Excel文件进行上传和导出

1.首先需要安装xlsx第三方的库库 引入插件 npm install xlsx在react引入 import * as XLSX from xlsx;1&#xff0c;首先设置jsx部分的 以下代码包含有导入excel文件和导出excel文件&#xff0c;读着可以根据需要&#xff0c;自己选择想要实现的功能 代码如下&#xff0…...

【前端】-【前端文件操作与文件上传】-【前端接受后端传输文件指南】

目录 前端文件操作与文件上传前端接受后端传输文件指南 前端文件操作与文件上传 一、前端文件上传有两种思路&#xff1a; 二进制blob传输&#xff1a;典型案例是formData传输&#xff0c;相当于用formData搭载二进制的blob传给后端base64传输&#xff1a;转为base64传输&…...

【IC前端虚拟项目】验证环境env与base_teat思路与编写

【IC前端虚拟项目】数据搬运指令处理模块前端实现虚拟项目说明-CSDN博客 上一篇里解决了最难搞的axi_ram_model,接下来呢就会简单又常规一些了,比如这一篇要说的env和base_test的搭建。在这里我用了gen_uvm_tb脚本: 【前端验证】验证自动化脚本的最后一块拼图补全——gen_t…...

使用Remix部署智能合约到币安链(Remix的操作介绍 币安链合约的部署) 点赞收藏哦

大家好&#xff0c;我是程序员大猩猩呀。 据我所知&#xff0c;很多人进入币圈之后&#xff0c;想要通过炒币一夜暴富&#xff01;另一部分人呢他们希望自己能创建一个项目&#xff0c;然后发行自己的数字货币然后暴富。 不管是什么方式吧&#xff0c;只要不违法&#xff0c;…...

为什么Redis6.0引入了多线程

Redis 6.0引入了多线程&#xff0c;主要原因有以下几点&#xff1a; 提高网络I/O的吞吐量&#xff1a;多线程可以更有效地处理大量的并发连接和请求&#xff0c;特别是在多核心服务器上。通过使用多线程来处理读写网络套接字&#xff0c;Redis能够更充分地利用系统资源&#x…...

速盾:高防ip和高防cdn有什么相同点?

高防IP&#xff08;Dedicated IP&#xff09;和高防CDN&#xff08;Content Delivery Network&#xff09;都是用来保护网站免受各种网络攻击的技术手段&#xff0c;它们在一定程度上具有相同的作用和效果。下面将详细介绍它们的相同点。 首先&#xff0c;高防IP和高防CDN都能…...

设计模式之拦截过滤器模式

想象一下&#xff0c;在你的Java应用里&#xff0c;每个请求就像一场冒险旅程&#xff0c;途中需要经过层层安检和特殊处理。这时候&#xff0c;拦截过滤器模式就化身为你最可靠的特工团队&#xff0c;悄无声息地为每一个请求保驾护航&#xff0c;确保它们安全、高效地到达目的…...

【联通支付注册/登录安全分析报告】

联通支付注册/登录安全分析报告 前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨…...

c++ - 在循环中使用迭代器删除 unordered_set 中的元素

标签 c unordered-set 请考虑以下代码: Class MyClass 为自定义类:class MyClass { public:MyClass(int v) : Val(v) {}int Val; };然后下面的代码将在调用 it T.erase(it); 之后在循环中导致 Debug Assertion Failed: unordered_set<MyClass*> T; unordered_set<…...

深入了解哈希映射(HashMap)

一、哈希映射&#xff08;HashMap&#xff09;简介 在计算机科学中&#xff0c;哈希映射&#xff08;HashMap&#xff09;是一种基于键值对&#xff08;Key-Value pair&#xff09;存储数据的数据结构&#xff0c;它提供了高效的数据查找、插入和删除操作。哈希映射的核心思想…...

Public Key Retrieval is not allowed

Public Key Retrieval is not allowed 最近使用 JDBC 连接 MySQL 频繁出现如下报错&#xff1a; java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowe 这段代码是一个 Java 异常错误信息&#xff0c;其中包含了以下关键信息&#xff1a; 错误类…...

iphone进入恢复模式怎么退出?分享2种退出办法!

iPhone手机莫名其妙的进入到了恢复模式&#xff0c;或者是某些原因需要手机进入恢复模式&#xff0c;但是之后我们不知道如何退出恢复模式怎么办&#xff1f; 通常iPhone进入恢复模式的常见原因主要是软件问题、系统升级失败、误操作问题等导致。那iphone进入恢复模式怎么退出&…...

Leetcode 107:二叉树的层次遍历II

给你二叉树的根节点 root &#xff0c;返回其节点值 自底向上的层序遍历 。 &#xff08;即按从叶子节点所在层到根节点所在的层&#xff0c;逐层从左向右遍历&#xff09;。 思路&#xff1a;翻转title102的结果即可。 //层次遍历二叉树public static List<List<Integ…...

LNMP一键安装包

LNMP一键安装包是什么? LNMP一键安装包是一个用Linux Shell编写的可以为CentOS/RHEL/Fedora/Debian/Ubuntu/Raspbian/Deepin/Alibaba/Amazon/Mint/Oracle/Rocky/Alma/Kali/UOS/银河麒麟/openEuler/Anolis OS Linux VPS或独立主机安装LNMP(Nginx/MySQL/PHP)、LNMPA(Nginx/MySQ…...

[机器学习-05] Scikit-Learn机器学习工具包进阶指南:协方差估计和交叉分解功能实战【2024最新】

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a; C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &…...

多线程的情况下 AopContext.currentProxy()切面代理失效问题

多线程的情况下 AopContext.currentProxy()切面代理失效问题 在多线程环境下&#xff0c;AopContext.currentProxy() 可能会遇到问题&#xff0c;特别是在某些情况下&#xff0c;它无法正确地获取到当前线程的代理对象。这通常发生在以下几种情况&#xff1a; 线程不是由Spri…...

https://是怎么实现的?

默认的网站建设好后都是http访问模式&#xff0c;这种模式对于纯内容类型的网站来说&#xff0c;没有什么问题&#xff0c;但如果受到中间网络劫持会让网站轻易的跳转钓鱼网站&#xff0c;为避免这种情况下发生&#xff0c;所以传统的网站改为https协议&#xff0c;这种协议自己…...

Linux无root配置Node,安装nvm

1. 安装NVM&#xff1a; curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash # 或者&#xff0c;如果你使用wget wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash 对于bash用户&#xff0c;可以运行&…...

蛋糕店做配送小程序的作用是什么

蛋糕烘焙除了生日需要&#xff0c;对喜吃之人来说往往复购率较高&#xff0c;除线下实体店经营外&#xff0c;更多的商家选择线上多种方式获客转化、持续提高生意营收&#xff0c;而除了进驻第三方平台外&#xff0c;构建品牌私域自营店铺也同样重要。 运用【雨科】平台搭建蛋…...