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

从零开始:使用Jenkins实现高效自动化部署

在这篇文章中我们将深入探讨如何通过Jenkins构建高效的自动化部署流水线,帮助团队实现从代码提交到生产环境部署的全流程自动化。无论你是Jenkins新手还是有一定经验的开发者,这篇文章都会为你提供实用的技巧和最佳实践,助你在项目部署中走得更远、更快。

目录

初识持续集成

Jenkins安装教程

Jenkins安装

更改工作目录

插件安装

中文设置

Jenkins基本使用

新建Job任务

初识持续集成

持续集成:指的是频繁地(一天多次)将代码集成到主干,它的好处注意有一下两个

1)快速发现错误:没完成一点更新就集成到主干,可以快速发现错误定位错误也比较容易

2)防止分支大幅偏离主干:如果不是经常集成主干又在不断更新,会导致以后集成的难度变大,甚至难以集成

持续集成强调开发人员提交了新代码之后,立即进行构建、单元测试,根据测试结果我们可以确定新代码和原有代码能否正确地集成在一起,如下图所示:

持续交付:指的是频繁地将软件的新版本交付给质量团队或者用户以供评审,如果评审通过代码就进入生产阶段,持续交付可以看作持续集成的下一步。它强调的是不管怎么更新软件是随时随地可以交付的。持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的「类生产环境」(production-likeenvironments)中,比如我们完成单元测试后可以把代码部署到连接数据库的Staging环境中更多的测试,如果代码没有问题可以继续手动部署到生产环境中。

持续部署:持续交付的下一步指的是代码通过评审以后自动部署到生产环境,持续部署的目标是代码在任何时刻都是可部署的,可以进入生产阶段。持续部署的前提是能自动化完成测试、构建、部署等步骤。

持续集成操作流程:根据持续集成的设计,代码从提交到生产整个过程有以下几步:

1)提交:流程的第一步是开发者向代码仓库提交代码,所有后面的步骤都始于本地代码的一次提交(commit)

2)测试(第一轮):代码仓库对commit操作配置了钩子(hook)只要提交代码或者合并进主干就会跑自动化测试,测试的种类主要有以下几种,第一轮至少要跑单元测试:

单元测试:针对函数或模块的测试

集成测试:针对整体产品的某个功能的测试,又称功能测试

端对端测试:从用户界面直达数据库的全链路测试

3)构建:通过第一轮测试代码就可以合并进主干就算可以交付了,交付后就先进行构建(build)再进入第二轮测试,所谓构建指的是将源码转换为可以运行的实际代码,比如安装依赖,配置各种资源(样式表、JS脚本、图片)等等,常见构建工具如下所示:

Jenkins;Travis;Codeship;Strider,其中Jenkins和Strider是开源软件,Travis和Codeship对于开源项目可以免费使用。它们都会将构建和测试,在一次运行中执行完成

4)测试(第二轮):构建完成就要进行第二轮测试,如果第一轮已经涵盖了所有测试内容第二轮可以省略,当然这时构建步骤也要移到第一轮测试前面,第二轮是全面测试,单元测试和集成测试都会跑,有条件的话也要做端对端测试。所有测试以自动化为主,少数无法自动化的测试用例就要人工跑。需要强调的是新版本的每一个更新点都必须测试到,如果测试的覆盖率不高,进入后面的部署阶段后很可能会出现严重的问题。

5)部署:通过了第二轮测试当前代码就是一个可以直接部署的版本(artifact),将这个版本的所有文件打包(tarfilename.tar*)存档,发到生产服务器,生产服务器将打包文件解包成本地的一个目录,再将运行路径的符号链接(symlink)指向这个目录然后重新启动应用,这方面的部署工具有Ansible,Chef,Puppet等

6)回滚:一旦当前版本发生问题就要回滚到上一个版本的构建结果,最简单的做法就是修改一下符号链接指向上一个版本的目录

Jenkins安装教程

Jenkins:原名Hudson,2011年改为现在的名字,它是一个开源的实现持续集成的软件工具且能实施监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象地展示项目构建的趋势和稳定性,其官方网址:官网 以及其插件地址:插件 ,如下图所示:

其主要特点如下所示:

1)开源和免费的:Jenkins是完全开源的,任何人都可以自由下载、使用和修改源代码。这使得它在开发者社区中非常受欢迎。

2)支持多种插件:Jenkins拥有庞大的插件生态系统,支持与各种工具和平台的集成,比如 Git、Docker、Kubernetes、Maven、Gradle 等,极大地扩展了其功能。

3)自动化构建与部署:Jenkins可以自动化整个构建、测试和部署过程,确保每次代码提交都能经过完整的质量检查,并自动部署到指定环境中,从而减少了人工干预和错误。

4)可扩展性强:通过插件机制和分布式构建架构,Jenkins可以轻松地扩展到多个节点适应不同规模的团队和项目。

5)易于配置和使用:Jenkins提供了友好的图形用户界面(GUI)和Web界面,用户可以通过简单的配置界面创建和管理流水线,无需复杂的命令行操作。

6)支持多种编程语言和平台:Jenkins不依赖于特定的编程语言或平台,支持Java、Python、Ruby、Node.js等多种开发语言,几乎可以与任何开发环境兼容。

7)强大的社区支持:由于其广泛的使用,Jenkins拥有一个活跃的开发者社区,提供了大量的文档、教程和技术支持,帮助用户解决问题。

8)持续集成与持续交付(CI/CD):Jenkins在持续集成和持续交付方面非常出色,能够自动化从代码集成到最终交付的整个流程,有助于提高开发效率和软件质量。

Jenkins安装

接下来我们开始正式的安装Jenkins,来到官网点击下载然后安装文档版本即可,根据自身情况选择不同的安装平台,这里我就以windows平台举例,如下选择该平台进行下载安装即可:

下载完文件之后,我们双击文件进行下载,这里推荐非系统盘(C盘)文件路径进行下载即可:

接下来进入账户选择界面,没有账户的直接选择第一个即可,然后点击下一步:

然后下一步来到端口的选择,默认是8080,可以点击下面的测试端口按钮校验是否端口被占用:

下一步来到了jdk版本的选择,请先确保你电脑上是有jdk版本的,如果没有得提前安装配置一下:

选择完jdk版本之后,这里直接默认下一步然后点击Install进行安装即可:

然后完成之后我们来到浏览器,输入localhost:8080就会进行到一个默认的界面如下,界面中告诉了我们初始密码已经被保存到本地的某个文件当中,我们找到该密码然后粘贴到输入框中即可:

输入完密码之后来到了插件选择的界面, 因为在安装插件的过程中可能由于插件过大导致页面卡住,所以这里我们选择第二个自定义插件的安装:

然后接下来开始创建第一个管理员账户,因为是本地操作,账户密码简单来就行:admin和123456

接下来开始进入到实例配置中,因为是本地安装所以域名就是默认的localhost,后期如果要安装到服务器的话,在服务器中域名直接设置服务器的ip地址即可:

点击保存继续之后,接下面就会进入到我们的Jenkins操作控制台了,如下所示:

更改工作目录

上面的安装过程中,默认我们的Jenkins工作目录安装到C盘了,这里我们需要重新更改其工作目录,如下找到我们原本设置安装Jenkins的目录当中,找到下面的文件,然后将原本的C盘的工作目录更改为我们自定义的D盘目录:

然后来到我们之前找输入密码的C盘文件的那个目录当中,将这个目录下的所有文件全部copy到我们设置的工作目录当中:

然后我们打开任务管理器,搜索Jenkins服务,对该服务进行重新启动:

然后重新在浏览器中打开我们的Jenkins平台,输入账户密码之后来到管理系统界面,可以看到外面的工作目录已经生效了:

插件安装

之前我们是没有安装插件然后进行安装Jenkins的,这是因为如果我们直接安装插件是特别的卡的,需要我们配置一下安装的国内镜像源才可以流畅的下载插件,镜像源如下所示:

https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

配置镜像源:然后我们在Jenkins平台中安装如下目录找到配置镜像源的地方,进行保存即可:

修改服务器配置:接下来还需要修改一下对应的服务器配置,进行jenkins工作目录下的/updates/default.json,将其中的文件内容进行一些替换,如下所示:

updates.jenkins-ci.org/download替换为mirrors.tuna.tsinghua.edu.cn/jenkins
有些jenkins版本当中,是将
updates.jenkins.io/download替换为mirrors.tuna.tsinghua.edu.cn/jenkins

然后把www.google.com换成www.baidu.com,如下所示:

重新启动服务:接下来我们就需要重新启动Jenkins服务,重新登录Jenkins之后,进入插件管理中心就可以爽快的安装各种插件了:

点击安装之后可以看到我们的安装速度是非常快的, 几秒钟之后相关的依赖就已经安装成功了:

中文设置

接下来我们可以安装一个语言的插件,然后对我们的平台进行中文设置,插件安装如下所示,安装完插件之后进行重启即可,重启方法在URL的后面加上restart,例如http://localhost:8080/restart,然后选择Configure System找到Locale选项输入zh_CN勾选下面的选项,点击Apply和save即可:

如果上述方法没有效果,直接安装下面的这个插件,重启即可:

可以看到我们的平台已经部分实现中文化了,还是可以的:

Jenkins基本使用

Jenkins中有3大重要概念:

1)Job(任务/工程):在Jenkins平台中都是以Job(任务/工程)为单位去完成一件事情的。

2)plugin(插件):Jenkins提供平台集成各种插件来完成一个Job,想用jenkins平来做什么先找找有没有相应的插件,比如windows命令、Linux命令的支持、SVN和Git代码获取、邮件发送,测试报告集成等都需要安装相应的插件才能够在jenkins当中使用这些功能

3)workspace(工作空间):Jenkins是通过文件形式来存储和管理数据的,在安装Jenkins要指定一个Jenkins_Home目录,所有Jenkins相关的数据都存放在此目录下,workspace即给jenkins指定一个专门的目录来存储其所有的配置和数据。Jenkins的workspace是根目录,其下每个Job都有属于自己的workspace,每个job的workspace当中用来存放本任务涉及到的数据/文件,以及任务执行完成后生成的数据/文件,相当于给每一个job开辟了一个独立的文件夹

新建Job任务

接下来我们新建一个Job任务来实现一个前端编译打包的功能:

下面选择任务的类型,第一个就是自定义项目配置,其他配置是按照安装的插件进行设置的,这里我没有安装插件就只有一个自定义配置,那我们选择它好了:

然后我们点击确定之后,创建的任务主要分为以下六个步骤进行:

1)General(常规):在这个部分设置任务的一些基本信息,为任务添加描述通常用于说明这个任务的功能和用途,以及设置一些包的保存情况:

2)源码管理(Source Code Management):配置该Job需要从哪里获取源代码,可以选择不同的源码管理工具,通常Git是最常用的,配置Git仓库的URL和认证信息可以指定分支、标签或提交,还可以设置是否在构建之前执行拉取代码操作或是通过定时更新源代码:

3)Triggers(构建触发器):设置任务触发的条件可以选择多种触发方式,例如每周、每天或每小时运行一次,通常使用Cron表达式,当Git仓库中的代码发生变动(如推送代码时)自动触发构建,通过其他系统的API或脚本触发该任务 

这里我们可以选择按照日期定时发送任务,例如:

定时任务:
分钟:0-59
小时:0-23
一月的天数:1-31
月份:1-12
一周的天数:0-7(0和7表示周天)例如:
1)每天晚上20点整自动执行
0 20 ***2)一周1,3,5晚上20点整执行
0 20 ** 1,3,53)每周周1 —— 周5晚上20点整执行
0 20 ** 1-54)一周内每2天,晚上20点整执行
0 20 *** /2

4)Environment(环境变量):在这里可以为构建设置环境变量供后续的构建步骤使用,可以为构建过程设置一些环境变量(例如路径、版本信息等),配置代理、身份验证、代理服务器等环境信息,确保构建能够顺利执行:

5)Build Steps(构建步骤):定义任务在执行过程中要进行的具体操作,可以选择多种构建工具和构建方式,根据需要选择其他的构建工具,执行构建、打包、发布等操作:

6)构建后操作(Post-build Actions):构建完成后执行的一系列操作,通常是部署、通知等,比如触发其他 Jenkins 任务,或者执行外部脚本:

相关文章:

从零开始:使用Jenkins实现高效自动化部署

在这篇文章中我们将深入探讨如何通过Jenkins构建高效的自动化部署流水线,帮助团队实现从代码提交到生产环境部署的全流程自动化。无论你是Jenkins新手还是有一定经验的开发者,这篇文章都会为你提供实用的技巧和最佳实践,助你在项目部署中走得…...

机器学习 - 线性回归(最大后验估计)

最大似然估计的一个缺点是当训练数据比较少时会发生过拟合,估计的参数可能不准确.为了避免过拟合,我们可以给参数加上一些先验知识. 一、先从最大似然估计的一个缺点入手 最大似然估计(MLE)在处理小样本数据时,容易发…...

Web前端开发--HTML

HTML快速入门 1.新建文本文件&#xff0c;后缀名改为.html 2.编写 HTML结构标签 3.在<body>中填写内容 HTML结构标签 特点 1.HTML标签中不区分大小写 2.HTML标签属性值中可以使用单引号也可使用双引号 3.HTML语法结构比较松散&#xff08;但在编写时要严格一点&…...

Linux | 系统调用

文章目录 Linux | 系统调用open 系统调用功能头文件和函数原型参数解释返回值示例代码 其他常用系统调用read 系统调用write 系统调用close 系统调用lseek 系统调用stat 系统调用 Linux | 系统调用 前言&#xff1a;在Linux系统中&#xff0c;系统调用是用户空间程序与内核进行…...

用easyExcel如何实现?

要使提供的 ExcelModelListener 类来解析 Excel 文件并实现批量存储数据库的功能&#xff0c;需要结合 EasyExcel 库来读取 Excel 数据。具体来说&#xff0c;可以使用 EasyExcel.read() 方法来读取 Excel 文件&#xff0c;并指定 ExcelModelListener 作为事件监听器。 下面是…...

ASP.NET Core SignalR身份验证

在需要登录才能访问的集线器类上或者方法上添加[Authorize]。也支持角色等设置&#xff0c;可以设置到Hub或者方法上。 配置好User、Role、MyDbContext、JWTSettings、IdentityHelper Program.cs using SignaIR的基本使用; using Scalar.AspNetCore; using Identity框架; us…...

查询语句来提取 detail 字段中包含 xxx 的 URL 里的 commodity/ 后面的数字串

您可以使用以下 SQL 查询语句来提取 detail 字段中包含 oss.kxlist.com 的 URL 里的 commodity/ 后面的数字串&#xff1a; <p><img style"max-width:100%;" src"https://oss.kxlist.com//8a989a0c55e4a7900155e7fd7971000b/commodity/20170925/20170…...

linux本地部署deepseek

目录 安装ollama安装open-webui网页客户端界面本地安装open-webui直接安装在裸机上安装在docker中 外部服务器安装open-webui&#xff0c;并链接本地的ollama服务直接安装在外部服务器裸机上配置systemd启动open-webui 安装在docker中 最后更新时间2024-05-24 安装ollama olla…...

ESP32_H2(IDF)学习系列-蓝牙基础学习(上)

一、简介 参考&#xff1a;[乐鑫-蓝牙] Bluetooth LE 的分层架构 Bluetooth LE 协议定义了三层软件结构&#xff0c;自上而下分别是 应用层 (Application Layer) 应用层&#xff08;Application Layer&#xff09; 主机层 (Host Layer) 控制器层 (Controller Layer) 应用…...

防御综合实验

需求一 配置vlan [SW2]int g 0/0/2 [SW2-GigabitEthernet0/0/2]port link-type access [SW2-GigabitEthernet0/0/2]port default vlan 10 [SW2-GigabitEthernet0/0/2]int g0/0/3 [SW2-GigabitEthernet0/0/3]port link-type access [SW2-GigabitEthernet0/0/3]port default vl…...

Blazor-<select>

今天我们来说说<select>标签的用法&#xff0c;我们还是从一个示例代码开始 page "/demoPage" rendermode InteractiveAuto inject ILogger<InjectPage> logger; <h3>demoPage</h3> <select multiple>foreach (var item in list){<…...

zy.21

PHP(续) PHP代码执行漏洞 1.PHP中代码漏洞的概念 代码执行漏洞就是在代码中若存在eval、assert等能将所接收的参数作为代码去执行,并且拼接的内容可被访问者控制,也就是把传入的参数给拼接进去了,造成了额外的代码执行,也就造成了代码执行漏洞。&#xff08;大概原理&#x…...

【c++】四种类型转换形式

【c】四种类型转换形式 编译时: static_cast&#xff08;静态转换&#xff09; const_cast&#xff08;去常性转换&#xff09; reinterpret_cast&#xff08;重新解释转换&#xff0c;直接转换地址&#xff09; 运行时: dynamic_cast&#xff08;动态转换&#xff0c;运行时类…...

在npm上传属于自己的包

最近在整理代码&#xff0c;上传到npm方便使用&#xff0c;所以学习了如何在npm发布一个包&#xff0c;整理写成一篇文章和大家一起交流。 1、注册npm账号 npm | Home 2、确保是登录状态 &#xff08;在包目录下&#xff0c;终端执行 npm login) 按enter键自动打开页面&…...

关系型数据库主备高可用方案对比笔记

目录标题 数据库高可用性解决方案对比Oracle Data GuardMySQL 主从复制SQL Server AlwaysOnPG Patroni 流复制达梦 DMDataWatch人大金仓 repmgr 备库故障是否影响主库&#xff1f;表格关系型数据库主备高可用方案对比笔记 数据库高可用性解决方案对比 Oracle Data Guard Orac…...

怎么查看电脑显存大小(查看电脑配置)

这里提供一个简单的方法查看 winr打开cmd 终端输入dxdiag进入DirectX 点击显示查看设备的显示内存&#xff08;VRAM&#xff09; 用这个方法查看电脑配置和显存是比较方便的 dxdiag功能 Dxdiag是Windows的DirectX诊断工具&#xff0c;其主要作用包括但不限于以下几点&#…...

深入理解指针(二)

深入理解指针&#xff08;二&#xff09; 前言&#xff1a;一、const修饰指针1.const修饰变量2.const修饰的指针变量 二、野指针1.野指针的成因(1).指针的未初始化(2).指针的越界访问(3).指针的空间释放 2.如何规避野指针(1).指针初始化(2).小心访问越界(3)指针不再使用的时候&…...

非华为电脑制作一碰传NFC贴纸

前提&#xff1a; 在笔记本上安装好华为电脑管家&#xff0c;可以在 github 上下载&#xff0c;并测试可以正常和手机或平板连接步骤&#xff1a; 1、打开电脑华为电脑管家&#xff0c;点【快捷服务】&#xff0c;记录下序列号&#xff0c;一般安装后会生成16位的序列号 2、…...

Wpf美化按钮,输入框,下拉框,dataGrid

Wpf美化按钮&#xff0c;输入框&#xff0c;下拉框&#xff0c;dataGrid 引用代码后 引用资源 <ControlTemplate x:Key"CustomProgressBarTemplate" TargetType"ProgressBar"><Grid><Border x:Name"PART_Track" CornerRadius&q…...

Office/WPS接入DeepSeek等多个AI工具,开启办公新模式!

在现代职场中&#xff0c;Office办公套件已成为工作和学习的必备工具&#xff0c;其功能强大但复杂&#xff0c;熟练掌握需要系统的学习。为了简化操作&#xff0c;使每个人都能轻松使用各种功能&#xff0c;市场上涌现出各类办公插件。这些插件不仅提升了用户体验&#xff0c;…...

【深度学习】多目标融合算法(四):多门混合专家网络MMOE(Multi-gate Mixture-of-Experts)

目录 一、引言 二、MMoE&#xff08;Multi-gate Mixture-of-Experts&#xff0c;多门混合专家网络&#xff09; 2.1 技术原理 2.2 技术优缺点 2.3 业务代码实践 2.3.1 业务场景与建模 2.3.2 模型代码实现 2.3.3 模型训练与推理测试 2.3.4 打印模型结构 三、总结 一、…...

git submodule使用

git submodule 用于关联其他独立的仓库。 它有着几点好处&#xff1a; 代码复用&#xff1a;可以将工具代码放到单独的仓库&#xff0c;再通过 submodule 关联。模块化开发&#xff1a;可以将项目拆分成多个模块&#xff0c;每个模块设置单独仓库独立开发&#xff0c;再通过 su…...

朝天椒USB服务器:解决加密狗远程连接

本文探讨朝天椒USB服务器用Usb Over Network技术&#xff0c;解决加密狗在虚拟机、云主机甚至异地的远程连接问题。 在企业数字化转型的浪潮中&#xff0c;加密狗作为防止软件盗版的重要手段&#xff0c;广泛应用于各类软件授权场景。然而&#xff0c;随着企业超融合进程不断加…...

[笔记.AI]deepseek-r1的不同版本(满血版、蒸馏版、量化)

满血版&#xff1a;是原始的高性能模型&#xff1b; 蒸馏版&#xff08;Distill&#xff09;&#xff1a;是指将大型模型&#xff08;教师模型&#xff09;的知识转移到较小的模型&#xff08;学生模型&#xff09;中&#xff0c;以保持性能的同时减少计算资源的需求&#xff1…...

Kokoro 开源文本转语音引擎上线!多语言支持,无需联网,浏览器内极速运行

Kokoro 是一款轻量级的开源文本转语音(TTS)引擎,凭借其高效能和轻量化设计,迅速在技术社区中引起关注。本文将详细介绍 Kokoro 的主要特点,并提供在浏览器和 Python 环境中的代码示例,帮助您快速上手。 1. Kokoro:可在浏览器中运行的 TTS 引擎 1.1 简介 Kokoro 是一个…...

Unity 基础编程

在这个练习中将新建unity脚本&#xff0c;控制player的运动与转动&#xff0c;实现用代码检测碰撞与删除物体。 该练习将应用附件中的项目文件&#xff0c;该文件与Unity快速练习的文件是同一个项目文件。 一、构建Player运动脚本 该部分将构建一个在场景中由玩家控制游戏物…...

CTFHub-RCE系列wp

目录标题 引言什么是RCE漏洞 eval执行文件包含文件包含php://input读取源代码远程包含 命令注入无过滤过滤cat过滤空格过滤目录分隔符过滤运算符综合过滤练习 引言 题目共有如下类型 什么是RCE漏洞 RCE漏洞&#xff0c;全称是Remote Code Execution漏洞&#xff0c;翻译成中文…...

基于YoloV11和驱动级鼠标模拟实现Ai自瞄

本文将围绕基于 YoloV11 和驱动级鼠标实现 FPS 游戏 AI 自瞄展开阐述。 需要着重强调的是&#xff0c;本文内容仅用于学术研究和技术学习目的。严禁任何个人或组织将文中所提及的技术、方法及思路应用于违法行为&#xff0c;包括但不限于在各类游戏中实施作弊等违规操作。若因违…...

基于微信小程序的博物馆预约系统的设计与实现

hello hello~ &#xff0c;这里是 code袁~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的在校大学生…...

R语言LCMM多维度潜在类别模型流行病学研究:LCA、MM方法分析纵向数据

全文代码数据&#xff1a;https://tecdat.cn/?p39710 在数据分析领域&#xff0c;当我们面对一组数据时&#xff0c;通常会有已知的分组情况&#xff0c;比如不同的治疗组、性别组或种族组等&#xff08;点击文末“阅读原文”获取完整代码数据&#xff09;。 然而&#xff0c;…...

python卷积神经网络人脸识别示例实现详解

目录 一、准备 1&#xff09;使用pytorch 2&#xff09;安装pytorch 3&#xff09;准备训练和测试资源 二、卷积神经网络的基本结构 三、代码实现 1&#xff09;导入库 2&#xff09;数据预处理 3&#xff09;加载数据 4&#xff09;构建一个卷积神经网络 5&#xff0…...

如何把邮件批量导出到本地

最近遇到邮箱满了的问题&#xff0c;需要把邮件批量导出到本地&#xff0c;然后清空邮箱。 问题是这个邮箱的官网&#xff0c;没有批量导出按钮&#xff0c;比较麻烦&#xff1b;总不能一封一封下载到本地&#xff0c;上万的。 找到了一个好用的工具&#xff0c;Mozilla Thun…...

C++智能指针的使用

文章目录 智能指针的使用和原理智能指针的使用场景RAII和智能指针C标准库智能指针的使用 智能指针的使用和原理 智能指针的使用场景 1. 下面的程序中&#xff0c;new了以后&#xff0c;我们也delete了&#xff0c;但是因为抛异常导致后面的delete没有得到执行&#xff0c;所以…...

Docker安装Redis

一、保证Docker提起来了 systemctl status docker想这没有启动要先启动一下 systemctl status docke二、拉取Redis&#xff08;默认拉最新版&#xff09; sudo docker pull redis检查一下拉成功没有 docker images三、创建相关目录 mkdir -p /home/redis/{conf,data}四、…...

深入理解MySQL索引底层数据结构

文章目录 前言一、MySQL索引是什么&#xff1f;二、索引的核心需求三、MySQL为什么选择BTree做为数据结构1.如果使用的是Hash 做为数据结构2.如果使用二叉树做为数据结构3.使用红黑树做为数据结构4.使用B-Tree做为数据结构5.BTree做为数据结构 4.BTree深度剖析结构特性与 B-Tre…...

udp和tcp的区别

目录 UDP 和 TCP 的区别 1. 连接性 2. 可靠性 3. 数据传输顺序 4. 流量控制和拥塞控制 5. 效率 6. 应用场景 UDP 和 TCP 的 C/C 代码实现区别 1. TCP 服务器端和客户端 TCP 服务器端&#xff08;Server&#xff09; TCP 客户端&#xff08;Client&#xff09; 2. U…...

VMware 虚拟机 ubuntu 20.04 扩容工作硬盘

一、关闭虚拟机 关闭虚拟机参考下图&#xff0c;在vmware 调整磁盘容量 二、借助工具fdisk testubuntu ~ $ df -h Filesystem Size Used Avail Use% Mounted on udev 1.9G 0 1.9G 0% /dev tmpfs 388M 3.1M 385M 1% /run /dev/sda5 …...

MapReduce是什么?

MapReduce 是一种编程模型&#xff0c;最初由 Google 提出&#xff0c;旨在处理大规模数据集。它是分布式计算的一个重要概念&#xff0c;通常用于处理海量数据并进行并行计算。MapReduce的基本思想是将计算任务分解为两个阶段&#xff1a;Map 阶段和 Reduce 阶段。 Map 阶段&a…...

跨越边界,大模型如何助推科技与社会的完美结合?

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 概述 2024年&#xff0c;大模型技术已成为人工智能领域的焦点。这不仅仅是一项技术进步&#xff0c;更是一次可能深刻影响社会发展方方面面的变革。大模型的交叉能否推动技术与社会的真正融合&#xff1f;2025年…...

计算机毕业设计SpringBoot校园二手交易小程序 校园二手交易平台(websocket消息推送+云存储+双端+数据统计)(源码+文档+运行视频+讲解视频)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

RK3568平台开发系列讲解(ConfigFS篇)ConfigFS核心数据结构

🚀返回专栏总目录 文章目录 一、数据结构二、结构体关系三、案例3.1、configfs_subsystem 实例3.2、config_group 实例化四、属性和方法五、config_item实例化沉淀、分享、成长,让自己和他人都能有所收获!😄 理解 ConfigFS 的核心数据结构对于深入使用和定制 ConfigFS 非…...

【04】RUST特性

文章目录 隐藏shadowing所有权ownership堆区&栈区所有权规则变量&数据Copy Trait与Drop TraitCopy TraitDrop Trait移动克隆函数参数与返回值的所有权参数引用可变引用悬垂引用slice生命周期隐藏shadowing 有点像同名覆盖 let mut guess = String::new();let guess: u3…...

c语言函数学习

C语言函数学习笔记&#xff1a;从入门到实践 一、什么是函数&#xff1f; 函数是C语言中用于封装特定功能的代码块&#xff0c;是模块化编程的核心。通过函数可以实现&#xff1a; 代码复用&#xff1a;避免重复编写相同逻辑 逻辑清晰&#xff1a;将复杂程序分解为多个小模块…...

LSTM的介绍

网上一些描述LSTM文章看的云里雾里&#xff0c;只是介绍LSTM 的结构&#xff0c;并没有说明原理。我这里用通俗易懂的话来描述一下。 我们先来复习一些RNN的核心公式&#xff1a; h t t a n h ( W h h t − 1 W x x t b h ) h_t tanh(W_h h_{t-1} W_x x_t b_h) ht​tan…...

XML DOM

XML DOM XML DOM(Document Object Model)是一种用于访问和操作XML文档的标准方式。它提供了一种树形结构来表示XML文档,使得开发者能够方便地对XML数据进行读取、修改和操作。本文将详细介绍XML DOM的基本概念、结构、操作方法以及应用场景。 一、XML DOM的基本概念 XML …...

认识网络安全

一 网络攻击链 踩点-工具准备-载荷投递-漏洞利用-释放载荷-建立通道-目标达成 简化下&#xff1a; 目标侦察&#xff1a;准确识别目标&#xff0c;收集目标详细信息&#xff0c;比如 网络、 邮箱、员工、社会关系、对外提供服务、漏洞 信息等&#xff0c;为 后续攻击做准备。…...

华为支付-免密支付接入签约代扣场景开发步骤

一、预签约&#xff08;服务器开发&#xff09; 1.开发者按照商户模型调用预直连商户预签约或服务商预签约接口获取preSignNo构建签约信息参数contractStr。 为保证支付订单的安全性和可靠性需要对请求body和请求头PayMercAuth对象内的入参排序拼接进行签名。请参考排序拼接和…...

9.JVM-方法区

前言 这次所讲述的是运行时数据区的最后一个部分 从线程共享与否的角度来看 ThreadLocal&#xff1a;如何保证多个线程在并发环境下的安全性&#xff1f;典型应用就是数据库连接管理&#xff0c;以及会话管理 栈、堆、方法区的交互关系 下面就涉及了对象的访问定位 Person&a…...

【Linux Oracle】杂货铺 日常实用2024

1.跨服务器移动文件 passwd=^T^bxxxx `/usr/bin/expect <<-EOF set timeout -1 spawn scp -r ${BATCH_TIME} sxnhtc@192.168.3.x:${EXP_MCRO_DIR}/ expect "*password:" send "$passwd\r" interact expect eof EOF` curl -k -X GET https://192.16…...

深入理解指针初阶:从概念到实践

一、引言 在 C 语言的学习旅程中&#xff0c;指针无疑是一座必须翻越的高峰。它强大而灵活&#xff0c;掌握指针&#xff0c;能让我们更高效地操作内存&#xff0c;编写出更优化的代码。但指针也常常让初学者望而生畏&#xff0c;觉得它复杂难懂。别担心&#xff0c;本文将用通…...