Jenkins(超详细的Docker安装Jenkins教程!!!)

Jenkins

Jenkins,原名 Hudson,2011 年改为现在的名字。它是一个开源的实现持续集成的软件工具。

官方网站:https://www.jenkins.io/

中文文档:https://www.jenkins.io/zh/

为什么需要Jenkins?

我们以前写完代码,如果要将项目部署到服务器中,那么我们需要经过一系列的更改、打包、上传等繁杂的操作。这些操作很浪费我们的时间,并且基本没什么技术含量。那么jenkins应运而生。jenkins只需要我们将写好的项目上传到我们的代码管理仓库中,例如gitlab,然后jenkins会自动进行拉取,打包,上传一系列操作,这样就让我们的工作量大大减少,我们只需要专注于业务的操作即可

什么是CI/CD?

CI、CD 其实是三个概念,包含了一个 CI 和两个 CD,CI全称 Continuous Integration,表示持续集成,CD包含 Continuous Delivery和 Continuous Deployment,分别是持续交付和持续部署。这三个概念之间是有前后依赖关系的。
CI/CD 并不是一个工具,它是一种软件开发实践,核心是通过引入自动化的手段来提高软件交付效率。CI/CD 最终目的:让工程师更快 & 更高质量 & 更简单的交付软件!

具体大家可以看这篇文章:什么是 CI/CD ?

安装Jenkins

环境需要:Linux虚拟机硬盘20G,内存4G以上

安装JDK

官网下载地址:https://www.oracle.com/cn/java/technologies/javase/javase8u211-later-archive-downloads.html

现在下载java8JDK需要注册Oracle账户,下载即可,或者联系博主可以给安装包

我们Linux下记得一定要下载类似这样的包:jdk-8u261-linux-x64.tar.gz

  1. 将下载好的tar包上传到Linux中/usr/java目录中,如果没有java文件夹,请创建一个

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  2. 使用解压命令解压我们的tar包

    tar -zxvf jdk-8u261-linux-x64.tar.gz
    
  3. 创建一个挂载目录,用于存放jenkins数据

    //创建目录
    mkdir -p /usr/docker/jenkins_datamkdir /var/jenkins_home
    //授权权限
    chmod 777 jenkins_home
    
  4. 将我们刚才解压的jdk移动到jenkins_home目录下并且改一个比较简短的名字(也可以不改)

    mv /usr/java/jdk1.8.261 /var/jenkins_home/jdk1.8
    
  5. 配置JAVA_HOME环境变量

    // 打开profile文件
    vim /etc/profile// 配置java环境
    JAVA_HOME=/var/jenkins_home/jdk1.8
    CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    PATH=$JAVA_HOME/bin:$PATH
    export JAVA_HOME CLASSPATH PATH
    :wq保存退出
    // 使用更新配置文件
    source /etc/profile
    
  6. 执行java -version命令,出现以下内容即成功

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

安装Maven

下载官网:https://maven.apache.org/download.cgi

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 将下载后的tar包一样上传到我们的Linux的/usr/local/中,这块的目录大家可以自己定,也可以为了省事和博主一样

  2. 解压我们的tar

    tar -zxvf apache-maven-3.9.6-bin.tar.gz
    
  3. 将解压后的文件夹移到jenkins_home目录下并且改一个比较简短的名字(也可以不改)

    mv /usr/local/apache-maven-3.9.6 /var/jenkins_home/apache-maven-3.9.6
    
    1. 进入到/var/jenkins_home/apache-maven-3.9.6/conf中找到settings.xml文件,将镜像源换成国内的,这是为了保证我们拉取依赖的速度

      <?xml version="1.0" encoding="UTF-8"?><!--
      Licensed to the Apache Software Foundation (ASF) under one
      or more contributor license agreements.  See the NOTICE file
      distributed with this work for additional information
      regarding copyright ownership.  The ASF licenses this file
      to you under the Apache License, Version 2.0 (the
      "License"); you may not use this file except in compliance
      with the License.  You may obtain a copy of the License athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing,
      software distributed under the License is distributed on an
      "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
      KIND, either express or implied.  See the License for the
      specific language governing permissions and limitations
      under the License.
      --><!--| This is the configuration file for Maven. It can be specified at two levels:||  1. User Level. This settings.xml file provides configuration for a single user,|                 and is normally provided in ${user.home}/.m2/settings.xml.||                 NOTE: This location can be overridden with the CLI option:||                 -s /path/to/user/settings.xml||  2. Global Level. This settings.xml file provides configuration for all Maven|                 users on a machine (assuming they're all using the same Maven|                 installation). It's normally provided in|                 ${maven.conf}/settings.xml.||                 NOTE: This location can be overridden with the CLI option:||                 -gs /path/to/global/settings.xml|| The sections in this sample file are intended to give you a running start at| getting the most out of your Maven installation. Where appropriate, the default| values (values used when the setting is not specified) are provided.||-->
      <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"><!-- localRepository| The path to the local repository maven will use to store artifacts.|| Default: ${user.home}/.m2/repository<localRepository>/path/to/local/repo</localRepository>--><localRepository>${user.home}/.m2/repository</localRepository><!-- interactiveMode| This will determine whether maven prompts you when it needs input. If set to false,| maven will use a sensible default value, perhaps based on some other setting, for| the parameter in question.|| Default: true<interactiveMode>true</interactiveMode>--><!-- offline| Determines whether maven should attempt to connect to the network when executing a build.| This will have an effect on artifact downloads, artifact deployment, and others.|| Default: false<offline>false</offline>--><!-- pluginGroups| This is a list of additional group identifiers that will be searched when resolving plugins by their prefix, i.e.| when invoking a command line like "mvn prefix:goal". Maven will automatically add the group identifiers| "org.apache.maven.plugins" and "org.codehaus.mojo" if these are not already contained in the list.|--><pluginGroups><!-- pluginGroup| Specifies a further group identifier to use for plugin lookup.<pluginGroup>com.your.plugins</pluginGroup>--><pluginGroup>org.mortbay.jetty</pluginGroup></pluginGroups><!-- proxies| This is a list of proxies which can be used on this machine to connect to the network.| Unless otherwise specified (by system property or command-line switch), the first proxy| specification in this list marked as active will be used.|--><proxies><!-- proxy| Specification for one proxy, to be used in connecting to the network.|<proxy><id>optional</id><active>true</active><protocol>http</protocol><username>proxyuser</username><password>proxypass</password><host>proxy.host.net</host><port>80</port><nonProxyHosts>local.net|some.host.com</nonProxyHosts></proxy>--></proxies><!-- servers| This is a list of authentication profiles, keyed by the server-id used within the system.| Authentication profiles can be used whenever maven must make a connection to a remote server.|--><servers><!-- server| Specifies the authentication information to use when connecting to a particular server, identified by| a unique name within the system (referred to by the 'id' attribute below).| | NOTE: You should either specify username/password OR privateKey/passphrase, since these pairings are |       used together.|<server><id>deploymentRepo</id><username>repouser</username><password>repopwd</password></server>--><!-- Another sample, using keys to authenticate.<server><id>siteServer</id><privateKey>/path/to/private/key</privateKey><passphrase>optional; leave empty if not used.</passphrase></server>--><server><id>releases</id><username>ali</username><password>ali</password></server><server><id>Snapshots</id><username>ali</username><password>ali</password></server></servers><!-- mirrors| This is a list of mirrors to be used in downloading artifacts from remote repositories.|| It works like this: a POM may declare a repository to use in resolving certain artifacts.| However, this repository may have problems with heavy traffic at times, so people have mirrored| it to several places.|| That repository definition will have a unique id, so we can create a mirror reference for that| repository, to be used as an alternate download site. The mirror site will be the preferred| server for that repository.|--><mirrors><!-- mirror| Specifies a repository mirror site to use instead of a given repository. The repository that| this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used| for inheritance and direct lookup purposes, and must be unique across the set of mirrors.|<mirror><id>mirrorId</id><mirrorOf>repositoryId</mirrorOf><name>Human Readable Name for this Mirror.</name><url>http://my.repository.com/repo/path</url></mirror>--><mirror><!--This sends everything else to /public --><id>nexus</id><mirrorOf>*</mirrorOf> <url>http://maven.aliyun.com/nexus/content/groups/public/</url></mirror><mirror><!--This is used to direct the public snapshots repo in the profile below over to a different nexus group --><id>nexus-public-snapshots</id><mirrorOf>public-snapshots</mirrorOf> <url>http://maven.aliyun.com/nexus/content/repositories/snapshots/</url></mirror><mirror><!--This is used to direct the public snapshots repo in the profile below over to a different nexus group --><id>nexus-public-snapshots1</id><mirrorOf>public-snapshots1</mirrorOf> <url>https://artifacts.alfresco.com/nexus/content/repositories/public/</url></mirror></mirrors><!-- profiles| This is a list of profiles which can be activated in a variety of ways, and which can modify| the build process. Profiles provided in the settings.xml are intended to provide local machine-| specific paths and repository locations which allow the build to work in the local environment.|| For example, if you have an integration testing plugin - like cactus - that needs to know where| your Tomcat instance is installed, you can provide a variable here such that the variable is| dereferenced during the build process to configure the cactus plugin.|| As noted above, profiles can be activated in a variety of ways. One way - the activeProfiles| section of this document (settings.xml) - will be discussed later. Another way essentially| relies on the detection of a system property, either matching a particular value for the property,| or merely testing its existence. Profiles can also be activated by JDK version prefix, where a| value of '1.4' might activate a profile when the build is executed on a JDK version of '1.4.2_07'.| Finally, the list of active profiles can be specified directly from the command line.|| NOTE: For profiles defined in the settings.xml, you are restricted to specifying only artifact|       repositories, plugin repositories, and free-form properties to be used as configuration|       variables for plugins in the POM.||--><profiles> <profile><id>development</id><repositories><repository><id>central</id><url>http://central</url><releases><enabled>true</enabled><updatePolicy>always</updatePolicy></releases><snapshots><enabled>true</enabled><updatePolicy>always</updatePolicy></snapshots></repository></repositories><pluginRepositories><pluginRepository><id>central</id><url>http://central</url><releases><enabled>true</enabled><updatePolicy>always</updatePolicy></releases><snapshots><enabled>true</enabled><updatePolicy>always</updatePolicy></snapshots></pluginRepository></pluginRepositories></profile><profile><!--this profile will allow snapshots to be searched when activated--><id>public-snapshots</id><repositories><repository><id>public-snapshots</id><url>http://public-snapshots</url><releases><enabled>false</enabled></releases><snapshots><enabled>true</enabled><updatePolicy>always</updatePolicy></snapshots></repository></repositories><pluginRepositories><pluginRepository><id>public-snapshots</id><url>http://public-snapshots</url><releases><enabled>false</enabled></releases><snapshots><enabled>true</enabled><updatePolicy>always</updatePolicy></snapshots></pluginRepository></pluginRepositories></profile></profiles><activeProfiles><activeProfile>development</activeProfile><activeProfile>public-snapshots</activeProfile></activeProfiles><!-- activeProfiles| List of profiles that are active for all builds.|<activeProfiles><activeProfile>alwaysActiveProfile</activeProfile><activeProfile>anotherAlwaysActiveProfile</activeProfile></activeProfiles>-->
      </settings>
  4. 配置maven环境

    // 打开profile文件
    vim /etc/profile// 配置java环境
    export MAVEN_HOME=/var/jenkins_home/apache-maven-3.9.6
    export PATH=${MAVEN_HOME}/bin:${PATH}
    :wq保存退出
    // 使用更新配置文件
    source /etc/profile
    
  5. 执行mvn -v命令,出现以下内容即成功

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Docker下载安装Jenkins

首先我们需要安装Docker,这里不再进行赘述,关于Docker的安装我在之前的博客中多次提到,不会的同学可以去看之前的文章,有详细的Docker教程

  1. docker拉取镜像,注意指定版本号,否则拉取的是比较旧的版本

    docker pull jenkins/jenkins:2.426.2-lts
    
  2. 我们刚才已经创建了挂载目录,所以这里直接执行创建容器

    docker run -d -p 8082:8080 -p 50000:50000 -v /usr/docker/jenkins_data:/var/jenkins_home  -v /etc/localtime:/etc/localtime -v /usr/bin/docker:/usr/bin/docker     -v /var/run/docker.sock:/var/run/docker.sock   --restart=on-failure  -u 0 --name myjenkins jenkins/jenkins:2.426.2-lts
    

    指令解析:

    • -d :后台运行容器

    • -p:端口映射, 左边是本地端口,右边是docker容器端口 ,8080是Jenkins Web 界面的工作端口,50000是JNLP(Java Network Launch Protocol)工作端口。这个端口用于 Jenkins 节点和主控节点之间的通信。

    • -v :目录挂载,将主机上的 /usr/docker/jenkins_data 目录挂载到容器内的 /var/jenkins_home 目录,用于持久化 Jenkins 的数据。/etc/localtime:/etc/localtime:将本地主机上的时区信息文件挂载到容器内的 /etc/localtime 文件中,确保容器内的时间与主机上的时间一致

    • -v /usr/bin/docker:/usr/bin/docker: 将主机上的 /usr/bin/docker 文件挂载到容器中的 /usr/bin/docker,这样容器内的 Jenkins 可以直接使用宿主机上的 Docker 命令。在使用 GitLab/Jenkins 等 CI 软件的时候需要使用 Docker 命令来构建镜像,需要在容器中使用 Docker 命令;通过将宿主机的 Docker 共享给容器

    • -v /var/run/docker.sock:/var/run/docker.sock: 将主机上的 Docker socket 文件挂载到容器中的相同位置,这样容器内的 Jenkins 可以与宿主机上的 Docker 引擎进行通信。

    • –restart=on-failure:设置容器的重启策略为在容器以非零状态退出(异常退出)时重启。

    • -u 0:将容器内进程的用户身份设置为 root 用户,等同于-u root。

    • –name myjenkins:给容器指定一个名称为 myjenkins。

  3. 极其重要!!!!!!!!!!刚才我们将jdk、maven放到了jenkins_home下,这里我们需要将其放到我们的数据卷中,也就是刚才创建的/usr/docker/jenkins_data目录下

    cp -r /var/jenkins_home/jdk1.8 /usr/docker/jenkins_data
    cp -r /var/jenkins_home/apache-maven-3.9.6 /usr/docker/jenkins_data
    

    这是因为docker和我们的主机是有环境隔离的,我们要将其映射到docker中,这样jenkins才能找到jdkmaven

  4. 验证Jenkins容器是否启动成功

    docker ps
    

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  5. 获取管理员密码

    查看日志

    docker logs myjenkins
    

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  6. 开始使用

    在浏览器中输入192.168.48.133:8082这里的ip地址是和自己的虚拟机ip地址一样的,端口号是刚才创建容器时指定的端口号

    然后稍等一会,就会出现以下样式,然后输入进去我们的密码

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    然后出现新手入门,选择推荐插件

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    等一会基本就下载完毕了,随后让我们创建一个账户,正常创建即可,然后就下一步最后我们的jenkins页面就出来了

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

温馨提示

为什么不去官网下载jenkins.war包进行安装?

这里我们下载的还是比较旧的jenkins,这样会导致我们在下载插件的时候,很多插件由于版本的问题,下载不了,会报错。经过多方面尝试,实际上我们用docker部署jenkins更为方便快捷

jenkins页面一直没有出现,为什么?

有可能你没有关闭防火墙,或者可以不关闭,开放8080端口即可,或者也有可能你此时此刻某一个进程占用了8080端口

# 关闭
systemctl stop firewalld
# 禁止开机启动防火墙
systemctl disable firewalld

使用Jenkins

因为我们要构建的是一个Maven项目,jenkins默认插件没有maven,所以我们需要去下载

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在这里搜索安装maven,选择第一个安装即可,这里因为我安装过了,所以无法再次安装

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Git安装

yum install -y git

随后回到首页,点击新建item

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

输入一个名称,选择maven项目,点击确定即可

Git配置

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果你是gitlab,接下来需要更换你的分支名称,因为gitlab默认分支名称是main

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Maven配置

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

JDK配置

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Build配置

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这里的Root POM中填写自己在代码仓库中项目中pom.xml文件在哪里,就填写哪里,我的就在java-project下,就直接pom.xml就可以了

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

注意

这里Git、Build配置都在创建的项目item中的配置中

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Maven、JDK配置在系统管理中的全局工具配置中

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

结果

都准备好,我们点击构建

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

可以在控制台看到输出效果

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这里可以看到是在/var/jenkins_home/workspace/first/target/下生成了一个jar包,但是这里这个目录是jenkins容器中的,实际上映射到了/usr/docker/jenkins_data/workspace/first/target

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

进入到jenkins容器中就可以看到日志上打印出来的结果

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

执行以下命令,在页面访问即可出现项目中的结果

java -jar SpringBootHelloWord-1.0-SNAPSHOT.jar

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/6378.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Excel中怎样把单元格里的数据拆分成多行?

时常会遇到这种情况&#xff0c;需要将一个单元格里的数据分拆到多行&#xff0c;可以使用公式&#xff0c;这里演示使用基础操作的办法。 按照excel使用经验&#xff0c;可以复制数据&#xff0c;粘贴到MS Word里&#xff0c;这个是excel的同族软件&#xff0c;兼容性好。 在…

Redis的面试

认识Redis 认识NoSQL SQL&#xff08;关系型数据库&#xff09; NoSQL&#xff08;非关系型数据库&#xff09; 1.结构化 非结构化 2.关联的 非关联的 3.SQL查询 非SQL 4.事务 …

[C++基础学习-07]----C++结构体详解

前言 结构体&#xff08;Struct&#xff09;是C中一种用户定义的复合数据类型&#xff0c;用于存储不同类型的数据项。结构体可以包含不同类型的数据成员&#xff0c;这些数据成员可以是基本类型&#xff08;如int、float、char等&#xff09;&#xff0c;也可以是数组、指针、…

【SSM进阶学习系列丨分页篇】PageHelper 分页插件导入集成实践

文章目录 一、说明什么是分页PageHelper介绍 二、导入依赖三、集成Spring框架中四、编写Service五、编写Controller六、编写queryAllByPage页面展示数据 一、说明 什么是分页 ​ 针对分页&#xff0c;使用的是PageHelper分页插件&#xff0c;版本使用的是5.1.8 。 ​ 参考文档…

第十三届蓝桥杯国赛真题 Java C 组【原卷】

文章目录 发现宝藏试题 A: 斐波那契与 7试题 B: 小蓝做实验试题 C: 取模试题 D: 内存空间试题 E \mathrm{E} E : 斐波那契数组试题 F: 最大公约数试题 G: 交通信号试题 I: 打折试题 J: 宝石收集 发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#x…

为什么 IP 地址通常以 192.168 开头?(精简版)

网络通讯的本质就是收发数据包。如果说收发数据包就跟收发快递一样。IP地址就类似于快递上填的收件地址和发件地址一样&#xff0c;路由器就充当快递员的角色&#xff0c;在这个纷繁复杂的网络世界里找到该由谁来接收这个数据包&#xff0c;所以说&#xff1a;IP地址就像快递里…

AG32 MCU在触摸屏的应用(AGM FPGA/MCU行业应用)

传统的屏驱MCU常见应用于洗衣机、空调、空调面板、仪器仪表等人机交互界面显示场景中&#xff0c;通常是以段码的形式显示设备运转的时间、温度、测量结果等简单运行数据&#xff0c;随着人机交互需求丰富化&#xff0c;智能家居设备、摩托车、电动车等产品也逐步增加了屏幕显示…

2024年第六届先进材料、机械和制造国际会议(AMMM 2024)即将召开!

2024年第六届先进材料、机械和制造国际会议&#xff08;AMMM 2024&#xff09;将于2024年9月6-8日在日本东京举行。AMMM 2024将以国际材料&#xff0c;机械和制造为主题&#xff0c;吸引到来自多个领域的研究人员和学者相聚在一起分享知识&#xff0c;讨论想法&#xff0c;并了…

Android 音视频播放器 Demo(一)—— 视频解码与渲染

本篇作为 Android 音视频实战系列的第二篇文章&#xff0c;主要介绍视频解码与渲染过程。本系列文章目录如下&#xff1a; Android 音视频基础知识 Android 音视频播放器 Demo&#xff08;一&#xff09;—— 视频解码与渲染 Android 音视频播放器 Demo&#xff08;二&#xff…

字符函数与字符串函数(2)

遇见她如春水映莲花 字符函数与字符串函数&#xff08;2&#xff09; 前言一、strcatstrncat 二、strcmpstrncmp在这里插入图片描述 三、strstr四、strtok五、strerror总结 前言 根据上期字符函数与字符串函数我们可以了解到字符函数与个别字符串函数的用法&#xff0c; 那么接…

STM32——GPIO篇

技术笔记&#xff01; 1. 什么是GPIO&#xff1f; GPIO是通用输入输出端口&#xff08;General-purpose input/output&#xff09;的英文简写&#xff0c;是所有的微控制器必不可少的外设之一&#xff0c;可以由STM32直接驱动从而实现与外部设备通信、控制以及采集和捕获的功…

当管道运算符遇上无限可能:探索数据流的奇妙之旅

文章目录 序言目的进程间通信的理解进程间通信的发展历史管道创建验证管道的大小管道的4种情况管道的5种特征 序言 通过该命令计算了在当前路径下一共有多少个文件夹的任务 进程虽然有独立性,但是进程并不孤僻,他们之间也会相互进行协作共同完成一件事 这个前提是他们之间的信…

嵌入式全栈开发学习笔记---C语言笔试复习大全7(编程题1~8)

目录 1、200&#xff5e;300之间能被3整除的数&#xff0c;5个一行输出&#xff1b; 2、求两个数的最大公约数、最小公倍数&#xff1b; 3、输入十个数&#xff0c;求出平均值&#xff1b; 4、通过编程实现,统计1~n有多少个9&#xff1b; 5、有1、2、3、4个数字&#xff0…

C#简单创建DLL文件并调用

DLL是Dynamic Link Library的缩写&#xff0c;意为动态链接库。动态链接库其实是由编译器将一系列相关的类型编译、链接并封装成一个独立的文件&#xff0c;与对其进行调用的程序分开。这样一个独立的文件相当于程序的一个模块&#xff0c;如果需要对程序进行更新&#xff0c;只…

ESP32-C3第二路串口(非调试)串口打通(1)

1. 概述与引脚复用 《ESP32-C3 系列芯片技术规格书》中提到&#xff0c;ESP32-C3系列芯片中有两路串口。 第1路串口就是常用的调试串口&#xff0c;在笔者使用的ESP32-C3-DevKitC-02开发板中&#xff0c;这一路串口通过CP2102 USB转UART桥芯片与电脑的USB口相连接&#xff0c;…

42 线程池

一种线程使用模式&#xff0c;线程过多会带来调度开销&#xff0c;进而影响缓存局部性和整体性能。线程池维护多个线程&#xff0c;等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价&#xff0c;线程池不仅能保证内核的充分利用&#xf…

redis中的双写一致性问题

双写一致性问题 1.先删除缓存或者先修改数据库都可能出现脏数据。 2.删除两次缓存&#xff0c;可以在一定程度上降低脏数据的出现。 3.延时是因为数据库一般采用主从分离&#xff0c;读写分离。延迟一会是让主节点把数据同步到从节点。 1.读写锁保证数据的强一致性 因为一般放…

数据结构------栈的介绍和实现

目录 1.栈的一些初步认识 2.栈的实现 3.相关的函数介绍 &#xff08;1&#xff09;栈的初始化 &#xff08;2&#xff09;栈的销毁 &#xff08;3&#xff09;栈的数据插入 &#xff08;6&#xff09;判断是否为空 &#xff08;7&#xff09;栈的大小 4.栈的实现完整…

【数据结构(邓俊辉)学习笔记】列表01——从向量到列表

文章目录 0.概述1. 从向量到列表1.1 从静态到动态1.2 从向量到列表1.3 从秩到位置1.4 列表 2. 接口2.1 列表节点2.1.1 ADT接口2.1.2 ListNode模板类 2.2 列表2.2.1 ADT接口2.2.2 List模板类 0.概述 学习了向量&#xff0c;再介绍下列表。先介绍下列表里的概念和语义&#xff0…

【HM】DevEco Studio如何使用代码编程AI助手

大家可能都有用过或了解过github copilot插件&#xff0c;确实为我们编码智能、提升开发效率有很大的帮助。推荐两款国产的ai编程插件&#xff0c;分别是华为的CodeArts Snap和阿里的通义灵码。 DevEco 中如何安装通义灵码&#xff1f; 一、下载通义灵码离线安装包 打开官网…