Jenkins三种构建类型

目录

  • 传送门
  • 前言
  • 一、概念
  • 二、前置处理(必做)
    • 1、赋予777权限
    • 2、让jenkins用户拥有root用户的kill权限
    • 3、要运行jar包端口号需要大于1024
  • 三、自由风格软件项目(FreeStyle Project)(推荐)
  • 三、Maven项目(Maven Project)
  • 四、流水线项目(Pipeline Project)
    • 1、概念
    • 2、拉取代码
    • 3、编译打包
    • 4、项目部署
    • 5、Jenkinsfile文件
  • 五、常见报错分析
    • 1、路径错误
    • 2、kill没有权限
    • 3、项目启动报错
  • 六、jenkins清除构建历史防止磁盘爆满(非常重要)
  • 七、jenkins的另一种日志磁盘爆满(非常重要)
  • 八、jenkins重启项目全部丢失

传送门

SpringMVC的源码解析(精品)
Spring6的源码解析(精品)
SpringBoot3框架(精品)
MyBatis框架(精品)
MyBatis-Plus
SpringDataJPA
SpringCloudNetflix
SpringCloudAlibaba(精品)
Shiro
SpringSecurity
java的LOG日志框架
Activiti(敬请期待)
JDK8新特性
JDK9新特性
JDK10新特性
JDK11新特性
JDK12新特性
JDK13新特性
JDK14新特性
JDK15新特性
JDK16新特性
JDK17新特性
JDK18新特性
JDK19新特性
JDK20新特性
JDK21新特性
其他技术文章传送门入口

前言

承接 Jenkins的jdk和maven配置一文,
以CentOS7上面的支持JDK8的Jenkins2.346-1的LTS版本和支持JDK17的Jenkins 2.440.1的LTS版本综合介绍Jenkins三种构建类型,默认按照高版本Jenkins2.440.1讲解,有不一样的地方会特别指出低版本Jenkins。

下面文章不定期更新中。。。

Linux安装JDK17(精品)
Linux安装MySQL(精品)
Linux安装Nginx(精品)
Linux安装Maven(精品)
运行一个jar包(精品)
java -jar提示jar中没有主清单属性(no main manifest attribute)(精品)

Jenkins安装启动(JDK8/11/17)(精品)
Jenkins配置(插件/角色/凭证)(精品)
Jenkins的jdk和maven配置(精品)
Jenkins三种构建类型(精品)

一、概念

Jenkins中自动构建项目说白了,就是让java项目自动更新代码,自动打包,自动kill之前的java项目,自动发版新打包的java项目。可以配置纯Linux操作,也可以配置Docker方式的。

Jenkins中自动构建项目的类型有很多,常用的有以下三种:

自由风格软件项目(FreeStyle Project)
Maven项目(Maven Project)
流水线项目(Pipeline Project)

默认只有第一个自由风格软件项目,我们主要用的也是这个,其他的需要Maven等插件支持。
在这里插入图片描述
点击New Items
在这里插入图片描述
默认就是第一个自由风格软件项目(FreeStyle Project)。笔者接下来主要讲解常用的三种。

二、前置处理(必做)

1、赋予777权限

在依赖脚本处理的时候,需要放权。

# 不可以偷懒直接给var文件夹赋权,会导致很多错误。有些文件夹不能有太高的权限。
chmod 777 -R /var/lib/jenkins
chmod 777 -R /var/cache/jenkins
chmod 777 -R /var/log/jenkins

2、让jenkins用户拥有root用户的kill权限

# gpasswd -a  jenkins  root  # jenkins用户加入到root组,这个命令可以先不管,如果一直报错,可尝试
sudo visudo  # 修改sudoers文件,在最后一行加入下面内容
jenkins ALL=(ALL) NOPASSWD: /bin/kill  #  让jenkins拥有root的kill权限
sudo -k   #  该命令来清除sudo缓存

注意:重启jenkins!!!

3、要运行jar包端口号需要大于1024

比如笔者的feBackEnd-1.jar,里面的端口号是81,实际操作,由于jenkins用户操作的,java -jar权限不够,会导致启动报错,所以读者jar包的端口号最好是改成大于1024的。另一种就是不用jenkins用户操作,将jenkins配置文件里面的jenkins用户和jenkins组都改成root。见下面文章的五、常见报错分析-kill没有权限,有相关操作教程。

三、自由风格软件项目(FreeStyle Project)(推荐)

输入我们的软件项目名称,这个可以随便自定义名称,但是多个微服务的时候,建议还是用微服务名称,这样很多个的时候,很好区分。

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

例如笔者后端项目叫feBackEnd,打包为feBackEnd-1.jar,在Jenkins这边就写入feBackEnd。
在这里插入图片描述

输入项目名称后点击FreeStyle Project,然后再点击ok。

注意:长时间不操作Jenkins,会超时的,会导致一些报错。这个时候重新登录一下Jenkins就好了。

在这里插入图片描述
笔者这边默认都设置为3个,强烈建议设置好。后面文章会单独提到这块为什么要设置这些。
在这里插入图片描述

Source Code Management这块,如果没有看到Git和Subversion,则是需要重新去装插件(就是Git和Subversion两个单词,不扩展不省略),然后重启。插件安装可以参考笔者之前的文章,Jenkins配置(插件/角色/凭证)
在这里插入图片描述
在这里插入图片描述
输入地址提示错误,是笔者Jenkins所在的Linux服务器没有安装Git导致的,SVN报错同理。
在这里插入图片描述
在这里插入图片描述

笔者服务器为CentOS,用下面指令安装git,如果是svn则把git单词换成subversion即可。用svn --version检查。

sudo yum install git  # 一路y就可以了
git --version  #  检查gitgit ls-remote -h https://gitee.com/zangtie/feproject.git  # 显示远程仓库https://gitee.com/zangtie/feproject.git中的引用列表,通常我们说的Head,也就是最新提交的版本。如果显示了像我下面截图9f5b.....a91ac之类的字符串,那说明Jenkins所在服务器的git配置OK了。

在这里插入图片描述

如果是下图这种提示,那么配置的账户和密码肯定是不对的。查看zangtie的git账户密码。
在这里插入图片描述
下面这个指令,马上就可以验证密码。

git ls-remote -h https://gitee.com/zangtie/feproject.git  # 显示远程仓库https://gitee.com/zangtie/feproject.git中的引用列表,通常我们说的Head,也就是最新提交的版本。如果显示了像我下面截图9f5b.....a91ac之类的字符串,那说明Jenkins所在服务器的git配置OK了。

然后我们重新登录Jenkins看下配置,注意,还是不行的话,可以重启jenkins查看。
在这里插入图片描述
点击刚刚没有配置完成的feBackEnd
在这里插入图片描述

点击左侧的Configure,后面反复配置一个项目,都是从这里点进来。
在这里插入图片描述

这下红字提示没有了。

接下来是最重要的一步

在这里插入图片描述

Build Steps这步选择Execute shell,我们通过执行脚本来更新jar包,打包jar包,kill 旧的jar进程id,发版新的jar包。

先看一个纯净版shell

fileName=feBackEnd-1.jar
pathName=feBackEnd
logFile=fe.txt
cd ./$pathName
echo "开始编译和打包"
mvn clean package -Dmaven.test.skip=true
echo "编译和打包结束"
PID=$(ps -ef | grep $fileName | grep -v grep | awk '{ print $2 }')
if [ ${PID} ]; 
thenecho 'Application is stoping...'echo kill $PID DONEsudo kill -9 $PID
elseecho 'Application is already stopped...'
fi
mv /var/lib/jenkins/workspace/$pathName/$pathName/target/$fileName     /java/$fileName
cd /java
BUILD_ID=dontKillMe nohup java -Xms512m -Xmx512m -jar  $fileName > $logFile  2>&1 &
echo "启动项目"
if [[ ! -f $logFile ]]; thensleep 2
fi
sleep 20
tail -n 20 $logFile
aaa=`grep "Started" $logFile | awk '{print $10}'`
if [[ -n "${aaa}" ]];thenecho "启动成功"exit 0
elseecho "启动失败"exit 1
fi

下面解释一下这个sheel的大概意思(强烈建议认真看一下,脚本是重中之重,后面报错的排错也基本在脚本这边)

fileName=feBackEnd-1.jar  #  定义一个变量fileName
pathName=feBackEnd # 定义一个变量pathName
logFile=fe.txt  # 定义一个变量logFile
cd ./$pathName # Jenkins执行脚本的默认工作目录会在控制台打印输出,笔者这儿测试的时候是/var/lib/jenkins/workspace/feBackEnd,注意这里面有大坑。后面文章会具体说明。
echo "开始编译和打包"  # 这个是在jenkins控制台打印输出的,给我们自己看的,看进行到哪一步了
mvn clean package -Dmaven.test.skip=true # 我们打包发版,基本是先clean旧的calss文件,然后重新打包jar包或者war包。如果是聚合模块,mvn clean package -Dmaven.test.skip=true -pl economic-auth-server/auth-server -am;其中economic-auth-serve是总模块,auth-server 是子模块,这样就可以只clean package 子模块。笔者后面文章Maven项目的案例就是聚合模块的。
echo "编译和打包结束" # 控制台输出
PID=$(ps -ef | grep $fileName | grep -v grep | awk '{ print $2 }') # 找到feBackEnd.jar对应的进程id
if [ ${PID} ]; # 如果存在进程id。
thenecho 'Application is stoping...'# 控制台输出,应用程序正在被停止echo kill $PID DONE   # 控制台输出kill 进程id  字样sudo kill -9 $PID  # kill杀掉进程,结束之前运行的jar或者war包进程
else # 不存在进程id,说明之前jar包已经被结束了echo 'Application is already stopped...'# 控制台输出,应用程序已经停止
fi
mv /var/lib/jenkins/workspace/$pathName/$pathName/target/$fileName     /java/$fileName #这个是将新打的包移动到自己Linux服务器的一个工作目录下。前面路径是jenkins帮你打包的工作目录,后面目录是我自己在Linux新建的一个目录,就是想看到jenkins工作没有。熟悉打包的读者,可以忽略这步,直接就在jenkins的工作目录搞。
# 特别注意1:很多读者没有成功,就是这边的路径配置错误了,因为Jenkins版本不同,所以jenkins帮你打包的工作目录也不同。一定要到自己服务器的工作目录看看,真实路径是怎么样的。比如笔者这个高版本Jenkins的工作目录是这样的:/var/lib/jenkins/workspace/feBackEnd/feBackEnd  ,所以上面指令就对应的配置即可。
# 特别注意2:之前的前置处理一定要做好。否则会有很多访问权限问题。
cd /java # 进入我在Linux新建的那个目录里面,如果是Jenkins工作目录直接搞,这里就是 cd  /var/lib/jenkins/workspace/feBackEnd/feBackEnd
BUILD_ID=dontKillMe nohup java -Xms512m -Xmx512m -jar  $fileName > $logFile  2>&1 & #  发版指令,堆内存大小读者根据自己需要调整大小
echo "启动项目" # 控制台输出
if [[ ! -f $logFile ]]; then # 这步其实可以忽略。就是没有日志文件的时候,给了一个创建日志文件的时间sleep 2 # 2秒
fi
sleep 20 # 这个时间可以根据项目启动的时间灵活调整,我jar包启动很快,所以20秒足够了,如果Linux的respository仓库还没有任何jar包,那么这个时间根据读者jar包的体量,第一次还是弄特别大些,等Linux的respository仓库该有的jar包都有了以后,再把时间改小。笔者建议还是拷贝本地win电脑的respository仓库到Linux上最好。
tail -n 20 $logFile # 这个是为了查看启动的时候打印日志,查看是否启动成功,启动报错的信息显示出来
aaa=`grep "Started" $logFile | awk '{print $10}'` # 指令的解释:|前面为 在整个日志文件里面去找 Started这个单词,如果找到了,就print这个单词出来,print $10就是打印10个字符长度。aaa=就是给赋值了。实际就是 aaa=Started了。如果没有找到,aaa=“”了。这个是抓捕了jar包启动成功的一个标志,比如springboot启动成功后,里面日志里面包含了  Started这个单词,读者也可以根据自己的转有单词抓捕。
if [[ -n "${aaa}" ]];then # aaa不为空串的时候echo "启动成功" # 输出启动成功exit 0 # 退出并返回0
elseecho "启动失败" # 输出失败exit 1 # 退出并返回1
fi

配置脚本后点击保存,整个配置完成。

在这里插入图片描述

接下来就是激动人心的时刻了,点击Build Now
在这里插入图片描述
然后点击左下角的进度条
在这里插入图片描述
在这边的Console Output可以看到打印出的一些东西。像我们idea本地开发一样,一览无余。顺利的话,启动完成。自动化发版就构建完成了。
在这里插入图片描述

三、Maven项目(Maven Project)

这边以聚合项目,并且是笔者汉化包的对应jdk8的低版本Jenkins讲解。如果自由风格软件项目很熟悉了,这边操作起来就很简单了。

首先 安装Maven Integration插件,安装失败就看下插件那边教程。
在这里插入图片描述
安装插件重启Jenkins以后,可以看到多了maven项目的选择。我们选择maven项目。
在这里插入图片描述

在这里插入图片描述

这个是笔者的一个聚合项目,根pom.xml下面有很多子模块
在这里插入图片描述

clean install -Dmaven.test.skip=true -pl economic-auth-server/auth-server -am

这条指令就是解决聚合模块最关键的指令。其他类似自由风格软件项目,增加脚本就可以了。

纯净版脚本,读者可以根据自己真实情况,修改下面的变量,以及注意工作目录这些基本信息的脚本修改。

fileName=auth-server-0.0.1-SNAPSHOT.jar
pathName=economic-auth-server/economic-auth-server/auth-server
logFile=auth-server.txt
PID=$(ps -ef | grep $fileName | grep -v grep | awk '{ print $2 }')
if [ ${PID} ]; 
thenecho 'Application is stoping...'echo kill $PID DONEkill -9 $PID
elseecho 'Application is already stopped...'
fi
mv /var/lib/jenkins/workspace/$pathName/target/$fileName     /java/$fileName
cd /java
BUILD_ID=dontKillMe nohup java -Xms512m -Xmx512m -jar  $fileName > $logFile  2>&1 &
echo "启动项目"
if [[ ! -f $logFile ]]; thensleep 2
fi
sleep 20
tail -n 20 $logFile
aaa=`grep "Started" $logFile | awk '{print $10}'`
if [[ -n "${aaa}" ]];thenecho "启动成功"exit 0
elseecho "启动失败"exit 1
fi

四、流水线项目(Pipeline Project)

流水线项目,笔者这边参考了黑马程序员的一些方案

1、概念

在这里插入图片描述
比其他的类型多了一个流水线,点击流水线语法
在这里插入图片描述

2、拉取代码

在这里插入图片描述
拉取代码
在这里插入图片描述
点击这个按钮,就生成了代码,把这个代码拷贝到前面截图中的流水线中。

在这里插入图片描述
拷贝
在这里插入图片描述
这个才是正确截图,其他截图少个 agent any。

3、编译打包

在这里插入图片描述
编译打包,用的脚本命令
在这里插入图片描述
将生成的代码拷贝过来

4、项目部署

在这里插入图片描述
项目部署
在这里插入图片描述
将生成的代码拷贝过去
在这里插入图片描述
拷贝

5、Jenkinsfile文件

在这里插入图片描述
项目跟目录下穿件Jenkinsfile文件,在流水线定义这边选择截图的,可以直接读取到这个文件的配置。这个文件配置就是把上面的3步代码放进去,这样做是为了让git等工具管理起Jenkins代码的迭代。

五、常见报错分析

1、路径错误

错误如下:
在这里插入图片描述

下面截图是默认工作目录
在这里插入图片描述
下面截图是可以看到pom.xml也就是src文件夹所在目录
在这里插入图片描述

可以看到笔者这边默认工作路径是/var/lib/jenkins/workspace/feBackEnd,而实际上,还得加一层目录才能看到pom.xml,因为我们打包都是依赖Maven,而Maven则主要靠项目中的pom.xml去工作,所以真正的干活儿目录应该 /var/lib/jenkins/workspace/feBackEnd/feBackEnd
在这里插入图片描述
在这里插入图片描述
如果读者在/var/lib/jenkins/workspace/feBackEnd下面就可以看到pom.xml了,那么就不能像笔者那样再进入一层,反正就是以pom.xml所在的目录去clean package才对。

2、kill没有权限

在这里插入图片描述
脚本里面执行kill操作的时候,提示没有权限。

ps -ef |grep java 

在这里插入图片描述
可以发现jenkins启动的时候并不是root用户,而是jenkins用户。笔者尝试脚本里面的kill -9 前面加个sudo ,变成 sudo kill -9 ,这种也不行的,会有新的错误,不过sudo一定要加上。
在这里插入图片描述
这种时候有三个思路。

思路一:脚本里面增加su 去切换到root用户,但是需要输入root密码,这样脚本里面有暴露root用户密码的风险,不太推荐。

思路二(推荐):修改jenkins权限,让jenkins用户执行kill命令时候有root权限

sudo visudo  # 修改sudoers文件,在最后一行加入下面内容
jenkins ALL=(ALL) NOPASSWD: /bin/kill  #  让jenkins拥有root的kill权限
# jenkins ALL=(ALL:ALL) ALL  # 让jenkins拥有root的所有权限(推荐,可以一劳永逸解决很多问题)

在这里插入图片描述

sudo -k   #  该命令来清除sudo缓存

然后建议重启jenkins,重新Build Now。注意sheel脚本是 sudo kill -9 $PID,是包含sudo单词的。不然也会报错。

思路三:直接将Jenkins的配置文件中的用户和组对应的值jenkins修改为root。这种是最简单的办法,直接用root启动Jenkins,所有权限问题都不存在了。但是企业级开发中,很多时候是禁用root账户的。所以笔者才推荐思路二。其实思路三可以一劳永逸的解决很多潜在问题。

# 直接换成root
vim /etc/sysconfig/jenkins # 如果有就修改,比如低版本Jenkins会有vim /etc/init.d/jenkins  # 如果有就修改vim /usr/lib/systemd/system/jenkins.service   # 将User和Group都修改为rootsystemctl daemon-reload chown -R root:root  /var/lib/jenkins  # 原来是jenkins用户启动的,这些文件权限属于jenkins组jenkins用户,现在修改为root组root用户。
chown -R root:root /var/cache/jenkins # 同上
chown -R root:root /var/log/jenkins # 同上

在这里插入图片描述

在这里插入图片描述
注意:重启jenkins!!!重新Build Now,可以发现问题解决了。

3、项目启动报错

在编译报错、kill报错都解决以后,发现好好的项目,启动居然报错了。这个时候,最简单的方式就是,先不用Jenkins,直接java -jar feBackEnd.jar,先看下直接启动,能否启动成功。有些时候,一些中间件没有启动起来,会导致jar包启动失败,比如redis、MySQL等等。笔者这边遇到个很坑的东西,就是笔者的Linux服务器运行了太多东西,导致笔者内存不够用了,也会导致jar包启动不了,这种时候就得kill些其他程序了。

在直接java -jar feBackEnd.jar启动不报错以后,内存够用以后,我们再来细看Jenkins报错的问题。

首先还是权限问题,比如如果是阿里云服务器,开启了,阿里云很多的权限规则或者防病毒监控的一些功能,会导致jenkins用户的权限不够,出一些莫名其妙的问题。
在这里插入图片描述

sudo chmod 777 -R /java

在这里插入图片描述

会发现,修改/java的指令不被容许了。我们来看下ChatGPT的回答,接下来跟着ChatGPT给的思路来解决。笔者这边将81端口改成了8081,一下子就好了,读者可以根据实际情况,最好一个一个都过一下。最后第5条,就是笔者指出的阿里云的防病毒之类的一些东西,可以关闭试一下。如果是华为云、青云、腾讯云等,也是类似的操作。如果是企业级的则慎重关闭。
在这里插入图片描述

六、jenkins清除构建历史防止磁盘爆满(非常重要)

笔者的自由风格软件项目高版本案例已经处理了。但是这边还是单独提一下,这边案例是低版本Jenkins案例。
在这里插入图片描述
/var/log/jenkins/jenkins.log 这个jenkins的日志,一般不会太大,删除需要先关闭jenkins的进程,然后再物理删除。这个不是本篇重点。
/var/lib/jenkins/jobs 在这个jobs下面会发现我们大量的构建项目,占用大量空间,在我们给项目配置的地方,勾选上 丢弃旧的构建,把高级也设置上,本次设置3。
在这里插入图片描述
设置丢弃旧的构建前,这边文件非常多,构建一次一个文件夹,非常占用硬盘
在这里插入图片描述
设置以后,发版一次,会自动删除多余的构建,very nice

七、jenkins的另一种日志磁盘爆满(非常重要)

/var/lib/jenkins/logs 文件夹下面的一种日志,主要是csp里面的日志,我直接手动删除了这个文件夹,没什么问题。硬盘直接释放出70%的硬盘空间。

后面是网上找到的一种功能,是否有效待验证。在/etc/logrotate.d/jenkins或/etc/logrotate.d/jenkins-oc中找到
设置为每天轮换并仅保留一周(轮换为7),或者根据maxsize或组合设置特定的限制.
在这里插入图片描述

/var/log/jenkins/jenkins.log /var/log/jenkins/access_log {weeklycopytruncatemissingokrotate 52compressdelaycompressnotifempty
}

八、jenkins重启项目全部丢失

笔者之前搞前端项目放进jenkins 的时候,发生了一次事故,这里记录一下
在这里插入图片描述
原因:更新前端node.js插件后重启导致所有项目丢失,但是前端项目还在。网上查找发现
vim /etc/profile
export JENKINS_HOME=/var/lib/jenkins
这些都是配置好的,根本不是这个问题。由于提前在百度网盘备份了插件,将更新后的两个插件还原,重启以后解决了。后面就把全部jenkins插件都备份了,太吓人了。

总结:大家最好是把jenkins插件都备份,尤其是低版本的对应JDK8的Jenkins,有时候操作设置的时候,真的很容易出问题。到此Jenkins的讲解完成了,祝大家用Jenkins用的愉快。

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

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

相关文章

金融科技:推动保险行业数字化转型的引擎

随着科技的飞速发展,金融科技(FinTech)已经成为推动金融行业变革的重要力量。特别是在保险行业,金融科技正引领着一场深刻的数字化转型,为保险公司带来了前所未有的机遇与挑战。本文将探讨金融科技如何推动保险行业的数…

UDP 协议详解与实战

目录 简介什么是 UDP?UDP 与 TCP 的区别 UDP 数据传输方式单播 - Unicast(1:1)广播 - Broadcast(1:n)有限广播 - Limited Broadcast直接广播 - Directed Broadcast 组/多播 - Multicast(n:m)任播…

屹晶微EG3002 单通道功率MOSFET驱动芯片 贴片SOP8

EG3002作为一款功率MOSFET驱动芯片,它的应用领域主要取决于其技术参数和性能特点。根据之前提供的信息,EG3002可能适用于以下领域: 1. 电源管理:用于高效率电源转换器,如开关电源(SMPS)、电池充…

栈的实现详解

目录 1. 栈1.1 栈的概念及结构1.2 栈的实现方式1.3 栈的应用场景 2. 栈的实现2.1 结构体2.2 初始化2.3 销毁2.4 入栈2.5 出栈2.6 获取栈顶元素2.7 判空2.8 获取个数 3. test主函数4. Stack.c文件5. Stack.h文件6. 运行展示 1. 栈 1.1 栈的概念及结构 栈:一种特殊的…

【YashanDB知识库】PHP使用OCI接口使用数据库绑定参数功能异常

【问题分类】驱动使用 【关键字】OCI、驱动使用、PHP 【问题描述】 PHP使用OCI8连接yashan数据库,使用绑定参数获取数据时,出现报错 如果使用PDO_OCI接口连接数据库,未弹出异常,但是无法正确获取数据 【问题原因分析】 开启O…

张艺兴step新专开启自由驾驶新纪元

张艺兴《Step》新专,开启自由驾驶新纪元!当音乐与驾驶相遇,会碰撞出怎样的火花?当实力派艺人张艺兴遇上全新英文专辑《Step》,便为我们解锁了一种前所未有的出行体验!这不仅仅是一张音乐专辑,更…

Pandas AI:最棒的大模型数据分析神器!

暑期实习基本结束了,校招即将开启。 不同以往的是,当前职场环境已不再是那个双向奔赴时代了。求职者在变多,HC 在变少,岗位要求还更高了。 最近,我们又陆续整理了很多大厂的面试题,帮助一些球友解惑答疑&…

Java Opencv识别图片上的虫子

最近有个需求,希望识别图片上的虫子,对于java来说,图像识别不是很好做。在网上也搜索了很多,很多的代码都是不完整,或者下载下载报错,有的写的很长看不懂。所以自己试着用java的opencv写了一段代码。发现识…

Django+Vue.js怎么实现搜索功能

一.前言 类似这样的搜索功能 二.前端代码 <div class"form-container"><div class"form-group"><label for"departure-city">出发城市</label><select v-model"departureCity" id"departure-city&q…

把Vue项目从Window系统迁移到Mac系统的方案

不能启动vue ui 直接运行&#xff0c;会报错如下&#xff1a; failed to load config from /Users/xiaochen/IdeaProjects/ChatViewer-frontend/vite.config.tserror when starting dev server: Error: You installed esbuild for another platform than the one youre curre…

C++:STL容器-->set

使用set容器时需要导入头文件&#xff1a;#include <set> set和multiset区别&#xff1a; set不允许容器中有重复的元素 multiset允许容器中有重复的元素 1. 构造函数 set<T> st; set s(const &st); void printSet(set<int>& s) {for (set<int>…

Integer溢出问题

0. 背景 在刷 LeetCode 时&#xff0c;代码的执行结果与预期出现了偏差&#xff0c;原因是 Int 值超过了允许范围 [ − 2 31 , 2 31 − 1 ] [-2^{31},2^{31}-1 ] [−231,231−1]。工作中从来没有遇到过这种情况&#xff0c;之前的认知是如果 Int 中存储的值超过了允许范围也许…

【FreeRTOS】ARM架构汇编实例

目录 ARM架构简明教程1. ARM架构电脑的组成1.2 RISC1.2 提出问题1.3 CPU内部寄存器1.4 汇编指令 2. C函数的反汇编 学习视频 【FreeRTOS入门与工程实践 --由浅入深带你学习FreeRTOS&#xff08;FreeRTOS教程 基于STM32&#xff0c;以实际项目为导向&#xff09;】 https://www.…

Unity制作背包的格子

1.新建一个面板 2.点击面板并添加这个组件 3.点击UI创建一个原始图像&#xff0c;这样我们就会发现图像出现在了面板的左上角。 4.多复制几个并改变 Grid Layout Group的参数就可以实现下面的效果了

GraogGNSSLib学习

GraogGNSSLib学习 程序编译环境版本项目编译结果问题 程序编译 GraphGNSSLib 环境版本 程序开源是在ubuntu16.04-kinetic环境跑通的&#xff0c;但是我的环境是UBUNTU20.04&#xff0c;所以&#xff0c;先进行了ROS的安装&#xff0c;因为我的系统是ubuntu20.04所以&#xf…

Linux--MQTT(一)简介

一、简介 MQTT &#xff08; Message Queuing Telemetry Transport&#xff0c;消息队列遥测传输&#xff09;&#xff0c; 是一种基于客户端服务端架构的发布/订阅模式的消息传输协议。 与 HTTP 协议一样&#xff0c; MQTT 协议也是应用层协议&#xff0c;工作在 TCP/IP 四…

MOS开关电路应用于降低静态功耗

本文主要讲述MOS开关电路的应用,过了好久突然想整理一下&#xff0c;有错误的地方请多多指出&#xff0c;在做电池类产品&#xff0c;需要控制产品的静态功耗&#xff0c;即使让芯片进入休眠状态&#xff0c;依旧功率很大&#xff0c;所以在电路中加一组软开关&#xff0c;防止…

HTML静态网页成品作业(HTML+CSS)—— 零食商城网页(1个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有1个页面。 二、作品演示 三、代…

LeetCode 230.二叉搜索树中第K小的元素

各位看官们&#xff0c;大家好啊&#xff0c;今天这个题我用的方法时间复杂度比较高&#xff0c;但也是便于便于理解的一种方法&#xff0c;大家如果觉得的好的话&#xff0c;就给个免费的赞吧,谢谢大家了^ _ ^ 题目要求如图所示: 题目步骤&#xff1a; 1.我们可以一维数组来接…

使用Unsloth微调Llama3-Chinese-8B-Instruct中文开源大模型

微调Llama3-Chinese-8B-Instruct 微调是指在大规模预训练的基础模型上,使用特定领域或任务数据集进行少量迭代训练,以调整模型参数,提升其在特定任务上的表现。这种方法可以充分利用预训练模型的广泛知识,同时针对特定应用进行优化,达到更精准高效的效果。 Llama-3-Chinese-8B-…