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

自动化发布工具CI/CD实践Jenkins部署与配置教程

1. 前言背景

  其实一直想把jenkins 的笔记整理下,介于公司这次升级jenkins2.0 ,根据自己部署的一些经验,我把它整理成笔记。 之前我们的jenkins1.0 时代 还一直停留在 free style 或者 maven 风格的项目,随着项目的日益增多,环境越来越复杂,需求多,差异化的配置错综复杂,公司产品线大升级;是想着好好的把jenkins 平台给规划下做下升级,兼容更多的场景;

  于是,就有了jenkins2.0 的一个探索,截止发文前,已投入生产实践中,本文我更多的还是来阐述分享点jenkins2.0 中带来的一些好的功能点,想法;同时也给大家规避类一些问题。

古代治学总结有人生三境界,在我看来,jenkins 使用接入亦有三个阶段,这也是每一个运维人员应用 jenkins 所必须要经历的。

第一阶段:初接触,有很多不熟悉不了解,应用场景也大多是依赖手工点点点维护的 free style 或者 maven 风格的项目,通过配置一些参数,结合脚本进行项目的构建与发布。这种维护方式其实也是 jenkins 在 1.0 时代的普遍使用姿势。它的最大弊端在于一切参数都要配置化,当维护的项目数量增多的时候,又遇到某些普遍性需要更改的地方,那么维护起来就是一场灾难了。

第二阶段:慢慢往后深入,接触越来越多,逐渐开始了解 pipeline,亦即 jenkins 在 2.0 时代提出的一个新概念:配置即代码,或者说代码即配置。我们可以不必点点点勾选过多地配置项,只需通过代码定义即可实现相同的效果。只不过据我了解,很多人在这个阶段,因为对流水线基础语法掌握程度不够,因此还有很多人是手工配置参数,然后再结合 jenkinsfile 来进行构建发布的,其实这种方式,并没有真正体悟到 2.0 的设计精髓,自然也无法吃到这波技术红利了。

第三阶段:你不应该满足于维护大量 jenkinsfile 的现状中,过多的 jenkinsfile 就像一个又一个肥大的肿块儿一般,对于后期的二次维护,都是极大的挑战。你可能听过共享库,渐渐你开始了解共享库,尝试共享库,最后将同一个类别的 jenkinsfile 进行逻辑抽象,每个项目都变成了另外一种变相的参数化构建,从而接入项目只需配置对应的 引导文件 即可,这种方式能够极大地简化 jenkins 的运维使用难度,对项目交付效率的提升有极大的帮助。

image-20230605124250267

 上图,是我司CI/CD 的一个发展阶段,在jenkins2.0 时候,我们做了一个大的变动,使用共享库,将同一个类别的 jenkinsfile 进行逻辑抽象,每个项目都变成了另外一种变相的参数化构建,只需要维护每个项目各自的参数,也就是引导文件, 即可对项目进行交付,另外jenkins2.0 上涉及的一切配置、环境、基础设施、数据变更都纳入版本控制范围。一切皆代码,这也是GitOps的理念

2.部署条件

2.1 官网及下载

jenkins官方网站:Jenkins

image-20230605131908560

Stable (LTS) : 稳定版本,长期支持 (LTS) 发布基线每 12 周从常规版本流中选择一次。每 4 周发布一次稳定版本
Regular releases (Weekly) : 定期发布(每周) 该发布线可快速向需要它们的用户和插件开发人员提供错误修复和新功能。它通常每周提供一次

image-20230605133013629

2.1 软件要求

官网: jenkins requires Java 11 or 17 since jenkins 2.357 and LTS 2.361.1

Java11

2.2 服务器硬件要求

  • 小型团队的推荐硬件配置:
    • 4 GB+ of RAM
    • 50 GB+ of drive space 50 GB+ 驱动器空间

3. 安装部署

3.1 本次安装环境信息

名称版本
Centos7Centos7.9 【8核16g500G 】
jenkinsjenkins 2.401.1 LTS
JavaOpenjdk11.0.2

3.2 部署jdk

  • 下载地址 https://repo.huaweicloud.com/java/jdk/11.0.2+9/jdk-11.0.2_linux-x64_bin.tar.gz

image-20230605160125095

#建立软件工作目录
[root@localhost /]# mkdir -p /home/application/#下载软件包
[root@localhost /]# wget  https://repo.huaweicloud.com/java/jdk/11.0.2+9/jdk-11.0.2_linux-x64_bin.tar.gz#解压软件包
[root@localhost /]# tar -xf jdk-11.0.2_linux-x64_bin.tar.gz  -C /home/application/
[root@localhost /]# rm -rf jdk-11.0.2_linux-x64_bin.tar.gz[root@localhost /]# ls -l /home/application/jdk-11.0.2/
total 32
drwxr-xr-x  2 root root 4096 Jun  5 04:07 bin
drwxr-xr-x  4 root root 4096 Jun  5 04:07 conf
drwxr-xr-x  3 root root 4096 Jun  5 04:07 include
drwxr-xr-x  2 root root 4096 Jun  5 04:07 jmods
drwxr-xr-x 72 root root 4096 Jun  5 04:07 legal
drwxr-xr-x  6 root root 4096 Jun  5 04:07 lib
-r--r--r--  1  668  668  160 Jan 18  2019 README.html
-rw-r--r--  1  668  668 1256 Jan 18  2019 release

Copy

3.3 部署jenkins

3.3.1 创建jenkins软件工作目录,并下载最近的LTS war包
#建立jenkins软件工作目录
[root@localhost application]#  mkdir -p /home/application/jenkins#下载最近的LTS war包
[root@localhost application]# wget http://get.jenkins.io/war-stable/2.401.1/jenkins.war -P /home/application/jenkins

Copy

3.3.2 创建jenkins 主目录

如果不指定jenkins 主目录的话,默认是在 /root/.jenkins 目录下 ; 因为咱这里给jenkins 单独创建了/home/application/jenkins工作目录,就需要指定下

官方阐述了更改主目录的三种方法:

jenkins储存所有的数据文件在这个目录下. 你可以通过以下几种方式更改:

  1. 使用你Web容器的管理工具设置jenkins_HOME环境参数.
  2. 在启动Web容器之前设置jenkins_HOME环境变量.
  3. (不推荐)更改jenkins.war(或者在展开的Web容器)内的web.xml配置文件

这里我们使用systemd 去管理jenkins 的启动停止,在Environment 中添加 JENKINS_HOME=/home/application/jenkins

3.3.3 使用systemd管理jenkins,并添加开机自启动
#使用systemd管理jenkins,并添加开机自启动
[root@localhost ~]# vim /etc/systemd/system/jenkins.service
[Unit]
Description=Jenkins Agent
After=network.target[Service]
User=root
Environment="JENKINS_HOME=/home/application/jenkins"
ExecStart=/home/application/jdk-11.0.2/bin/java -jar /home/application/jenkins/jenkins.war -Djava.awt.headless=true
Restart=always
RestartSec=3[Install]
WantedBy=multi-user.target[root@localhost jenkins]# chmod +x /etc/systemd/system/jenkins.service
#添加开机自启动
[root@localhost jenkins]# systemctl enable jenkins

Copy

3.3.4 启动jenkins
[root@localhost ~]# systemctl start jenkins[root@localhost ~]# systemctl status jenkins
● jenkins.service - jenkins AgentLoaded: loaded (/etc/systemd/system/jenkins.service; enabled; vendor preset: disabled)Active: active (running) since Mon 2023-06-05 05:01:48 EDT; 3s agoMain PID: 27603 (java)CGroup: /system.slice/jenkins.service└─27603 /home/application/jdk-11.0.2/bin/java -jar /home/application/jenkins/jenkins.war -Djava.awt.headless=trueJun 05 05:01:48 localhost.localdomain systemd[1]: Started jenkins Agent.
Jun 05 05:01:49 localhost.localdomain bash[27603]: Running from: /home/application/jenkins/jenkins.war
Jun 05 05:01:49 localhost.localdomain bash[27603]: webroot: /root/.jenkins/war
Jun 05 05:01:49 localhost.localdomain bash[27603]: 2023-06-05 09:01:49.735+0000 [id=1]        INFO        winstone.Logger#logInternal: Beginning extraction from war file
Jun 05 05:01:52 localhost.localdomain bash[27603]: 2023-06-05 09:01:52.031+0000 [id=1]        WARNING        o.e.j.s.handler.ContextHandler#setContextPath: Empty contextPath
Jun 05 05:01:52 localhost.localdomain bash[27603]: 2023-06-05 09:01:52.127+0000 [id=1]        INFO        org.eclipse.jetty.server.Server#doStart: jetty-10.0.13; built: 2022-12-07T20:13:20.134Z; git: 1c2636ea05c0ca8de1ffd6ca7f3a98ac084c766d; jvm 11.0.2+9-LTS
Hint: Some lines were ellipsized, use -l to show in full.

Copy

3.3.5 启动解锁jenkins

大概一两分钟后,可以看到日志输出,jenkins已经初始化安装成功,并且给出了管理员admin的登陆密码为946312e6f67746aba40950417e9c70b4

当然也可在/root/.jenkins/secrets/initialAdminPassword 文件中看到密码

[root@localhost ~]#  systemctl status jenkins
● jenkins.service - jenkins AgentLoaded: loaded (/etc/systemd/system/jenkins.service; enabled; vendor preset: disabled)Active: active (running) since Mon 2023-06-05 05:01:48 EDT; 2min 53s agoMain PID: 27603 (java)CGroup: /system.slice/jenkins.service└─27603 /home/application/jdk-11.0.2/bin/java -jar /home/application/jenkins/jenkins.war -Djava.awt.headless=trueJun 05 05:01:55 localhost.localdomain bash[27603]: Please use the following password to proceed to installation:
Jun 05 05:01:55 localhost.localdomain bash[27603]: 946312e6f67746aba40950417e9c70b4
Jun 05 05:01:55 localhost.localdomain bash[27603]: This may also be found at: /root/.jenkins/secrets/initialAdminPassword
Jun 05 05:01:55 localhost.localdomain bash[27603]: *************************************************************
Jun 05 05:01:55 localhost.localdomain bash[27603]: *************************************************************
Jun 05 05:01:55 localhost.localdomain bash[27603]: *************************************************************
Jun 05 05:02:13 localhost.localdomain bash[27603]: 2023-06-05 09:02:13.107+0000 [id=35]        INFO        jenkins.InitReactorRunner$1#onAttained: Completed initialization
Jun 05 05:02:13 localhost.localdomain bash[27603]: 2023-06-05 09:02:13.124+0000 [id=23]        INFO        hudson.lifecycle.Lifecycle#onReady: jenkins is fully up and running
Jun 05 05:02:14 localhost.localdomain bash[27603]: 2023-06-05 09:02:14.052+0000 [id=49]        INFO        h.m.DownloadService$Downloadable#load: Obtained the updated data file for hudson.tasks.Maven.MavenInstaller
Jun 05 05:02:14 localhost.localdomain bash[27603]: 2023-06-05 09:02:14.053+0000 [id=49]        INFO        hudson.util.Retrier#start: Performed the action check updates server successfully at the attempt #1[root@localhost ~]# cat /root/.jenkins/secrets/initialAdminPassword
946312e6f67746aba40950417e9c70b4

Copy

4. 安装后配置

4.1 登录jenkins平台

如果没有指定端口的话,默认是8080; 如果要指定端口的话,需要再启动文件里 加上 --httpPort=8888

贴入密码

image-20230605170749503

4.2 安装jenkins插件

选择 安装jenkins社区推荐的插件;安装过程可能会有点问题,安装失败啥的,重复安装就行,如果实在安装不下去,可以跳过,等进入到jenkins 设置界面设置代理地址即可

image-20230605170931162

image-20230605171530830

4.3 创建用户,配置实例

  • 在这里创建一个管理员账号,到此jenkins的初始化配置已完成。

     

    image-20230605171711196

     

    image-20230605171727183

     

    image-20230605171746303

     

    image-20230605171900076

4.4 配置更新站点

  • 由于使用官方的站点速度相对很慢,这里采用清华大学的jenkins更新站点。

  • 站点地址: https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

  • image-20230605172048680

image-20230605172136772

image-20230605172208228

image-20230605172232042

到这里安装基本上就完成了

相关文章:

自动化发布工具CI/CD实践Jenkins部署与配置教程

1. 前言背景 其实一直想把jenkins 的笔记整理下,介于公司这次升级jenkins2.0 ,根据自己部署的一些经验,我把它整理成笔记。 之前我们的jenkins1.0 时代 还一直停留在 free style 或者 maven 风格的项目,随着项目的日益增多&#x…...

kubernet在prometheus+alertmanager+grafana框架下新增部署loki模块

整个框架拓扑图 #mermaid-svg-OK7jgNZ2I7II8nJx {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-OK7jgNZ2I7II8nJx .error-icon{fill:#552222;}#mermaid-svg-OK7jgNZ2I7II8nJx .error-text{fill:#552222;stroke:#552…...

Ubuntu下UEFI安全启动安装Nvdia驱动

简介 众所周知,Ubuntu默认使用Nouveau开源驱动,其性能受限,因此我们需要安装Nvidia专用驱动。 安装专用驱动的一般方法非常简单,只需要sudo ubuntu-drivers devices && sudo ubuntu-drivers autoinstall即可&#xff0c…...

Java多线程与高并发专题—— CyclicBarrier 和 CountDownLatch 有什么异同?

引入 上一篇我们了解CountDownLatch的原理和常见用法,在CountDownLatch的源码注释中,有提到: 另一种典型用法是将一个问题分解为 N 个部分,用一个Runnable描述每个部分,该Runnable执行相应部分的任务并对闭锁进行倒计…...

【深度学习】不管理论,入门从手写数字识别开始

1. 环境安装 学习深度学习,开发语言是Python。Python开发工具有很多。其中 anaconda vscode的Python开发环境很好用,建议使用这个组合。 编写手写数字识别测试代码,需要在使用Anaconda安装以下4个库: NumpyScipymatplotlibsci…...

Docker使用ubuntu

1. 更换源 sudo nano /etc/docker/daemon.json //daemon.conf查找最新可用的源1、2,手动查找会不断更新! 1.1 添加DNS sudo nano /etc/resolv.confnameserver 8.8.8.8 nameserver 8.8.4.4 2. 修改配置文件后重新加载 sudo systemctl daemon-relo…...

Windows 系统下多功能免费 PDF 编辑工具详解

IceCream PDF Editor是一款极为实用且操作简便的PDF文件编辑工具,它完美适配Windows操作系统。其用户界面设计得十分直观,哪怕是初次接触的用户也能快速上手。更为重要的是,该软件具备丰富多样的强大功能,能全方位满足各类PDF编辑…...

影响HTTP网络请求的因素

影响 HTTP 网络请求的因素 1. 带宽 2. 延迟 浏览器阻塞:浏览器会因为一些原因阻塞请求,浏览器对于同一个域名,同时只能有4个连接(这个根据浏览器内核不同可能会有所差异),超过浏览器最大连接数限制&…...

OpenGL —— 流媒体播放器 - ffmpeg解码rtsp流,opengl渲染yuv视频(附源码,glfw+glad)

🔔 OpenGL 相关技术、疑难杂症文章合集(掌握后可自封大侠 ⓿_⓿)(记得收藏,持续更新中…) 效果 说明 FFMpeg和OpenGL作为两大技术巨头,分别在视频解码和图形渲染领域发挥着举足轻重的作用。本文将综合两者实战视频播放器,大概技术流程为:ffmpeg拉取rtsp协议视频流,并…...

Java + LangChain 实战入门,开发大语言模型应用!

在 Baeldung 上看到了一篇介绍基于 Java LangChain 开发大语言模型应用的基础入门文章,写的非常不错,非常适合初学者。于是,我抽空翻译了一下。 原文地址:https://www.baeldung.com/java-langchain-basics翻译: Java…...

【目标检测】【深度学习】【Pytorch版本】YOLOV1模型算法详解

【目标检测】【深度学习】【Pytorch版本】YOLOV1模型算法详解 文章目录 【目标检测】【深度学习】【Pytorch版本】YOLOV1模型算法详解前言YOLOV1的模型结构YOLOV1模型的基本执行流程YOLOV1模型的网络参数YOLOV1模型的训练方式 YOLOV1的核心思想前向传播阶段网格单元(grid cell)…...

软考《信息系统运行管理员》- 6.2 信息系统硬件的安全运维

硬件安全运行的概念 硬件安全运行的含义是保护支撑信息系统业务活动的信息系统硬件资产免遭自然灾害、人 为因素及各种计算机犯罪行为导致的破坏。硬件安全通常包括环境安全、设备安全和介质安全。 硬件安全运行的影响因素 硬件安全运行的影响因素主要有: (1)自然…...

SQL 视图

SQL 视图 引言 SQL(结构化查询语言)视图是数据库管理系统中的一种重要概念。它提供了一个虚拟的表,该表由一个或多个基本表的数据组成,用户可以通过视图查询数据,而不需要直接操作基本表。本文将详细介绍SQL视图的定…...

Chrome 开发环境快速屏蔽 CORS 跨域限制!

Chrome 开发环境快速屏蔽 CORS 跨域限制【详细教程】 ❓ 为什么需要临时屏蔽 CORS? 在前后端开发过程中,我们经常会遇到 跨域请求被浏览器拦截 的问题。例如,你在 http://localhost:3000 调用 https://api.example.com 时,可能会…...

数值稳定性 + 模型初始化和激活函数

数值稳定性 神经网络的梯度 考虑如下有 d 层的神经网络 h t f t ( h t − 1 ) and y ℓ ∘ f d ∘ … ∘ f 1 ( x ) \mathbf{h}^t f_t(\mathbf{h}^{t-1}) \quad \text{and} \quad y \ell \circ f_d \circ \ldots \circ f_1(\mathbf{x}) htft​(ht−1)andyℓ∘fd​∘…∘…...

【消息队列】几个mq组件的对比: redis stream/rabbitmq/rocketmq/kafka

1. 消息队列 几个组件: Redis Stream:适用于对性能要求高、可靠性要求不高的场景Rocket MQ:可靠性高,性能优秀,但官方对 go 不太友好,sdk 缺少很多功能支持Rabbit MQ:性能适中,使用…...

TCP协议与wireshark抓包分析

一、tcp协议格式 1. 源端口号 : 发送方使用的端口号 2. 目的端口号 : 接收方使用的端口号 3. 序号: 数据包编号 , tcp 协议为每个数据都设置编号,用于确认是否接收到相应的包 4. 确认序列号 : 使用 tcp 协议接收到数据包&#xff0c…...

深度学习四大核心架构:神经网络(NN)、卷积神经网络(CNN)、循环神经网络(RNN)与Transformer全概述

目录 📂 深度学习四大核心架构 🌰 知识点概述 🧠 核心区别对比表 ⚡ 生活化案例理解 🔑 选型指南 📂 深度学习四大核心架构 第一篇: 神经网络基础(NN) 🌰 知识点概述…...

springcloud 整合 Redis_Redisson

springcloud 整合 Redis 、Redisson Redis-x64-5.0.14.1 版本 https://blog.csdn.net/wojiubugaosuni12/article/details/134452665 https://www.123pan.com/s/8EpMjv-MTjBv.html spring cloud 整合 redis Redis 5.0.14 Springcloud 2021.0.5 Redis启动 redis-server.exe 点击…...

Windows模仿Mac大小写切换, 中英文切换

CapsLock 功能优化脚本部署指南 部署步骤 第一步:安装 AutoHotkey v2 访问 AutoHotkey v2 官网下载并安装最新版本安装时勾选 "Add Compile Script to context menus" 第二步:部署脚本 直接运行 (调试推荐) 新建文本文件,粘贴…...

基于Spring Boot的木里风景文化管理平台的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...

【银河麒麟系统常识】命令:uname -m(查看系统架构)

命令: uname -m 功能 常用的 Linux/Unix 终端命令,用于显示当前系统的硬件架构; 返回 返回系统的CPU架构类型,用于判断软件兼容性; 输出结果架构说明常见设备x86_64Intel/AMD 64位 CPU主流 PC、服务器aarch64ARM 64位 …...

网络原理-TCP/IP

网络原理学习笔记:TCP/IP 核心概念 本文是我在学习网络原理时整理的笔记,主要涵盖传输层、网络层和数据链路层的核心协议和概念,特别是 TCP, UDP, IP, 和以太网。 一、传输层 (Transport Layer) 传输层负责提供端到端(进程到进…...

【银河麒麟高级服务器操作系统 】虚拟机运行数据库存储异常现象分析及处理全流程

更多银河麒麟操作系统产品及技术讨论,欢迎加入银河麒麟操作系统官方论坛 https://forum.kylinos.cn 了解更多银河麒麟操作系统全新产品,请点击访问 麒麟软件产品专区:https://product.kylinos.cn 开发者专区:https://developer…...

AI-Sphere-Butler之如何使用腾讯云ASR语音识别服务

环境: AI-Sphere-Butler WSL2 英伟达4070ti 12G Win10 Ubuntu22.04 腾讯云ASR 问题描述: AI-Sphere-Butler之如何使用腾讯云ASR语音识别服务,本地硬件配置不高的情况,建议使用云服务商的ASR 解决方案: 1.登…...

Dify 0.15.3版本 本地部署指南

目录 背景 一、单机部署机器配置最低要求 二、系统Python环境安装 安装需要的python依赖 使用pyenv官方安装脚本 安装poetry 三、中间件部署 PostgreSQL本地部署 添加PG官方仓库 安装pg 16 检查pg版本 修改密码为dify默认 创建数据库dify 安装pg vector插件 修改…...

全书测试:《C++性能优化指南》

以下20道多选题和10道设计题, 用于本书的测试。 以下哪些是C性能优化的核心策略?(多选) A) 优先优化所有代码段 B) 使用更高效的算法 C) 减少内存分配次数 D) 将所有循环展开 关于字符串优化,正确的措施包括&#xff…...

Oracle数据库数据编程SQL<递归函数详解>

递归函数是一种在函数体内直接或间接调用自身的函数。这种函数通过将复杂问题分解为更小的相同问题来解决特定类型的编程任务。 目录 一、递归函数基本概念 1. 递归定义 2. 递归工作原理 二、递归函数示例 1. 经典阶乘函数 2. 斐波那契数列 3. 计算数字位数 三、递归查…...

Burp Suite从入门到实战之配置启动

目录 1.Burp Suite配置启动 1.1安装Burp Suite jar包 1.2JDK,JDK包含JRE(Java运行时环境) 1.2.1配置JDK11环境变量配置 1.2.2系统变量里添加JAVA_HOME​编辑 1.2.3找到Path变量进行编辑添加bin 1.2.4命令行查看是否配置成功 1.3激活j…...

【力扣hot100题】(016)缺失的第一个正数

题目里这么多条条框框……先不按条条框框做了两下。 第一个思路&#xff1a;你不仁我不义&#xff0c;先排序后遍历&#xff08;时间不符题意&#xff09; class Solution { public:int firstMissingPositive(vector<int>& nums) {sort(nums.begin(),nums.end());i…...

(undone) MIT6.824 Lecture 02 - RPC and Threads

知乎专栏&#xff1a;https://zhuanlan.zhihu.com/p/641105196 原视频&#xff1a;https://www.bilibili.com/video/BV16f4y1z7kn?spm_id_from333.788.videopod.episodes&vd_source7a1a0bc74158c6993c7355c5490fc600&p2 看知乎专栏 一、Why we choose go&#xff1f…...

红宝书第二十一讲:详解JavaScript的模块化(CommonJS与ES Modules)

红宝书第二十一讲&#xff1a;详解JavaScript的模块化&#xff08;CommonJS与ES Modules&#xff09; 资料取自《JavaScript高级程序设计&#xff08;第5版&#xff09;》。 查看总目录&#xff1a;红宝书学习大纲 一、模块化的意义&#xff1a;分而治之 模块化解决代码依赖混…...

输入百分比校验(数字非负数保留2位不四舍五入)

场景用于输入百分比&#xff0c;限制只能输入非负数&#xff0c;保留2位小数&#xff0c;且不四舍五入 以下举例环境 vue2 element-ui 请自行根据实际场景使用 html部分 <el-inputv-model"item.percentage"placeholder"请输入"maxlength"5"…...

Python----机器学习(KNN:决策边界,决策边界计算,交叉验证步骤)

一、KNN算法简介 1.1、定义 KNN&#xff08;K-Nearest Neighbor&#xff09;算法是一种基于实例的学习方法&#xff0c;通过测量数据点之间的距离进行分类或回归分析。它是一种简单易懂的多分类技术&#xff0c;依赖于距离最近的邻居来推断数据点的类别或数值&#xff0c;为许…...

SpringBoot 3+ Lombok日志框架从logback改为Log4j2

r要将Spring Boot 3项目中的日志框架从Logback切换到Log4j2&#xff0c;并配置按日期滚动文件和控制台输出&#xff0c;请按照以下步骤操作&#xff1a; 步骤 1&#xff1a;排除Logback并添加Log4j2依赖 在pom.xml中修改依赖&#xff1a; <dependencies><!-- 排除默…...

实战篇Redis

黑马程序员的Redis的笔记&#xff08;后面补一下图片&#xff09; 【黑马程序员Redis入门到实战教程&#xff0c;深度透析redis底层原理redis分布式锁企业解决方案黑马点评实战项目】https://www.bilibili.com/video/BV1cr4y1671t?p72&vd_source001f1c33a895eb5ed820b9a4…...

c++-函数增强

一、编译器对函数名的处理 1. C与C的差异 C编译器&#xff1a;保留原始函数名&#xff0c;无额外处理。例如&#xff1a; int add(int a, int b) { return a b; } 在汇编代码中仍为add。 C编译器&#xff1a;通过name mangling&#xff08;名称修饰&#xff09;生成唯一函数…...

BKA-CNN-GRU、CNN-GRU、GRU、CNN四模型多变量时序预测(Matlab)

BKA-CNN-GRU、CNN-GRU、GRU、CNN四模型多变量时序预测&#xff08;Matlab&#xff09; 目录 BKA-CNN-GRU、CNN-GRU、GRU、CNN四模型多变量时序预测&#xff08;Matlab&#xff09;预测效果基本介绍程序设计参考资料 预测效果 基本介绍 BKA-CNN-GRU、CNN-GRU、GRU、CNN四模型多…...

css基础之浮动相关学习

一、浮动基本介绍 在最初&#xff0c;浮动是用来实现文字环绕图片效果的&#xff0c;现在浮动是主流的页面布局方式之一。 效果/代码 图片环绕 代码 div {width: 600px;height: 400px;background-color: skyblue;}img {width: 200px;float: right;margin-right: 0.5em;}<…...

告别分库分表,时序数据库 TDengine 解锁燃气监控新可能

达成效果&#xff1a; 从 MySQL 迁移至 TDengine 后&#xff0c;设备数据自动分片&#xff0c;运维更简单。 列式存储可减少 50% 的存储占用&#xff0c;单服务器即可支撑全量业务。 毫秒级漏气报警响应时间控制在 500ms 以内&#xff0c;提升应急管理效率。 新架构支持未来…...

1.3 斐波那契数列模型:LeetCode 746. 使用最小花费爬楼梯

动态规划解最小花费爬楼梯问题&#xff1a;LeetCode 746. 使用最小花费爬楼梯 1. 题目链接 LeetCode 746. 使用最小花费爬楼梯 题目要求&#xff1a;给定一个整数数组 cost&#xff0c;其中 cost[i] 是从楼梯第 i 阶向上爬所需支付的费用。你可以从下标 0 或 1 的台阶开始爬&a…...

8.4考研408简单选择排序与堆排序知识点深度解析

考研408「简单选择排序与堆排序」知识点全解析 一、简单选择排序 1.1 定义与核心思想 简单选择排序&#xff08;Selection Sort&#xff09;是一种选择排序算法&#xff0c;其核心思想是&#xff1a; 每趟选择&#xff1a;从待排序序列中选择最小&#xff08;或最大&#x…...

【个人笔记】用户注册登录思路及实现 springboot+mybatis+redis

基本思路 获取验证码接口 验证码操作用了com.pig4cloud.plugin的captcha-core这个库。 AccountControl的"/checkCode"接口代码&#xff0c;通过ArithmeticCaptcha生成一张验证码图片&#xff0c;通过text()函数得到验证码的答案保存到变量code&#xff0c;然后把图…...

LiteDB 数据存储与检索效率优化的最佳实践指导

一、引言 在当今数字化时代,数据处理和存储变得至关重要。对于小型项目或者嵌入式系统而言,需要一种轻量级、高效且易于使用的数据库解决方案。LiteDB 作为一款嵌入式的 NoSQL 数据库,因其零配置、易于集成等特点,受到了开发者的青睐。然而,若要充分发挥其性能优势,就需…...

WEB安全--RCE--RCE的绕过

一、回调函数的绕过&#xff08;PHP&#xff09; 1.1、回调函数 1.1.1、原理&#xff1a; 回调函数&#xff08;Callback Function&#xff09;指的是将函数名或匿名函数作为参数传递给另一个函数&#xff0c;从而在特定条件下调用该函数。 以一个常见的回调函数为例&#…...

uni-app:指引蒙层

组件说明 指引蒙层组件: 通过id标签,突出对应id中的模块; 可以自定义提示词。 点击任意位置关闭蒙层 效果展示和使用示例 切换id之后的效果: 代码实现 <template><view class="guide-mask" v-if="showMask" @click="hideMask"&g…...

什么是CMS?常用CMS有哪些?

一、内容管理系统&#xff08;Content Management System&#xff09;‌ ‌什么是CMS‌&#xff1a;位于 Web 前端&#xff08;服务器&#xff09;和后端办公系统之间的软件系统&#xff0c;用于内容创建、编辑、审批和发布。支持文本、图片、视频、数据库等各类数字内容的管理…...

【Es】基础入门:开启全文搜索的大门

文章目录 一、Elasticsearch 是什么​二、核心概念解读​索引&#xff08;Index&#xff09;​文档&#xff08;Document&#xff09;​映射&#xff08;Mapping&#xff09;​分片&#xff08;Shard&#xff09;​副本&#xff08;Replica&#xff09;​ 三、基本操作入门​安…...

74. Linux设备树详解

一、什么是设备树 1、uboot启动内核用到zImage&#xff0c;imx6ull-alientek-emmc.dtb。bootz 80800000 – 83000000. 80800000 —zImage 83000000—dtb 2、设备树&#xff1a;设备和树。 设备树(Device Tree)&#xff0c;将这个词分开就是“设备”和“树”&#xff0c;描述设…...

从责任链模式聊到aware接口

从责任链模式聊到aware接口 责任链是什么&#xff1f; 责任链模式是一种行为型设计模式&#xff0c;将多个对象连接成一条链&#xff0c;并且沿着这条链传递请求&#xff0c;让多个对象都有机会处理这个请求&#xff0c;请求会顺着链传递&#xff0c;直到某个对象处理它为止。…...