Java+Github+Jenkins部署
Java项目—Jenkins部署笔记
一,准备
- 一台服务器
- 操作系统,示例为ubuntu 22.0.4 可运行
lsb_release -a
查看
二,安装
-
docker
- 更新软件包列表:
sudo apt update
- 安装必要的软件包,以便使用HTTPS通过APT下载软件包:
bashCopy code sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
- 添加Docker的官方GPG密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
- 添加Docker APT存储库:
echo "deb [signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
- 更新软件包列表以包括Docker存储库:
sudo apt update
- 安装Docker引擎:
sudo apt install -y docker-ce
- 启动Docker服务:
sudo systemctl start docker
- 将Docker添加到启动时自动启动:
sudo systemctl enable docker
- 验证Docker是否正确安装:
sudo docker --version
现在,Docker已经成功安装在您的Ubuntu系统上。您可以使用
docker
命令来管理和运行容器。 -
git
-
打开终端:可以通过按下
Ctrl
+Alt
+T
键组合,或者在应用程序搜索中找到“终端”。 -
运行以下命令以更新软件包列表:
sudo apt update
-
安装Git:
sudo apt install git
-
安装完成后,可以通过运行以下命令来验证安装是否成功,并显示安装的Git版本:
git --version
现在,你已经成功在Ubuntu系统上安装了Git。你可以使用
git
命令来管理代码库、版本控制和其他Git操作。如果你还不熟悉Git的使用,可以查阅Git的文档或教程,以便更好地理解和利用其功能。 -
-
jdk
-
自行下载,这里举例为 jdk-17_linux-x64_bin.tar.gz Java Downloads | Oracle 中国
-
sudo tar -zxvf jdk-17_linux-x64_bin.tar.gz -C /usr/local
-
然后就可以通过 "cd /usr/local"和“pwd”查看具体路径,以便后面配置,这里给出示例的路径:
-
/usr/local/jdk-17.0.8
-
-
maven
-
自行下载,这里举例为 apache-maven-3.9.4-bin.tar.gz Maven – Download Apache Maven
-
sudo tar -zxvf apache-maven-3.9.4-bin.tar.gz -C /usr/local
-
然后就可以通过 "cd /usr/local"和“pwd”查看具体路径,以便后面配置,这里给出示例的路径:
-
/usr/local/apache-maven-3.9.4
-
-
jenkins
-
jenkins的安装可以在这个地址下载链接Jenkins download and deployment
-
后台运行 Jenkins:
使用以下命令在后台运行 Jenkins:
java -jar jenkins.war --httpPort=8080
这将在 8080 端口启动 Jenkins。如果您希望使用不同的端口,请更改
--httpPort
参数的值。 -
访问 Jenkins Web 界面:
在浏览器中输入
http://localhost:8080
,然后按照 Jenkins 配置向导中的指示进行设置。在需要输入管理员密码时,请查找 Jenkins 日志中的初始密码,并在配置向导中使用它。 -
将 Jenkins 配置为服务(可选):
如果您希望将 Jenkins 配置为系统服务,以便在系统启动时自动运行,您可以创建一个 Systemd 服务单元。您可以创建一个名为
/etc/systemd/system/jenkins.service
的文件,并在其中添加以下内容:plaintextCopy code[Unit] Description=Jenkins Server After=network.target[Service] User=<your_username> ExecStart=/usr/bin/java -jar /path/to/jenkins.war --httpPort=8080 Restart=always[Install] WantedBy=multi-user.target
请将
<your_username>
替换为您的用户名,并将/path/to/jenkins.war
替换为您实际下载的 Jenkins WAR 文件的路径。然后,使用以下命令启用和启动服务:bashCopy codesudo systemctl enable jenkins sudo systemctl start jenkins
-
三,Jenkins配置
1.基础插件安装
打开页面后会有一些基础的配置和插件的安装记得选默认的(因为,你也不知道需要什么插件,当然我也不知道),自行安装一下,如果要查看管理员密码的话,可以使用
cat命令+[页面提示的路径]
进入后,打开点击系统管理,在其中找到插件管理,在第二个选项中安装Docker相关的插件
这个是我已经安装的(OS:因为不知道哪个对应哪个,所以全点啦)
所有的插件安装完成后,继续回服务器中重启jenkins
sudo systemctl restart jenkins
2.全局工具配置
还是回到系统管理中,找到全局工具配置打开,看图配置吧,只要路径对就行了
- Maven
- JDK
- Git
这些配置好后,保存退出,同样在系统管理中找到凭证管理
进来后,直接点击到最后出现这界面即可
点击新增,选择如下
输入Github用户名和本地的私钥,大概在C:\Users\Administrator.ssh中的 id_rsa中
其他的描述可以输入:ssh key 这个随意,其他的不用输入,点击创建即可
然后再次新建一个凭证,选择
这里只需要输入Secret即可,这个值是Github的访问密钥,大概生成步骤为:
进入Github,点击头像,选择Settings,滑到最后选择Developer Settings,点击Personal access tokens下第一个直接生成,然后填写就行。
然后备注写成token,点击创建
好,现在凭证配置完毕,到时候需要用到的时候,可以来此查看。
接下来还是系统管理中点开系统配置,找到GitHub的位置,进行连接测试
这个名称就是你的GitHub的用户名,记得替换,凭证,选择token凭证,进行测试,如果不行,请重新配置token,或重新生成token (tnnd,这苦不能我一个受!)
好!很有精神!现在所有配置就完成了,到这里就可以新建一个Job来搭建部署了!
四,构建部署
好,到这里,就可以进行构建部署了,为了演示方便,我将使用下面的Java项目来当做示例:
ZhMenX的测试项目,可以下载下来调试一下。如果,我记得绑定了资源,可以查看下。
然后就是把这个项目放到你的github上面了
之后就是新建任务了
我们这里选择流水线(小声BB:目前只尝试过这个)命名为Test
这里就是配置的地方,选择Github项目的选项,然后输入自己的github项目地址
然后就是触发器的构建
这里我使用了轮询(我也想使用Github hook,但是不会,有会的大神,请教教我,我找不到那个jenkins的URL)
最后就是定义流水钱的脚本了,这里我提供一个示例:
pipeline {agent anytools {// 指定使用的JDK工具jdk 'jdk17'}environment {JDK_VERSION = '17'MAVEN_VERSION = '3.9.4'DOCKER_IMAGE_NAME = 'test_java'MAVEN_HOME = '/usr/local/apache-maven-3.9.4' // 设置Maven的路径DOCKER_HOME = '/usr/bin/docker' // 设置Docker的路径PATH = "${tool 'jdk17'}/bin:${MAVEN_HOME}/bin:${DOCKER_HOME}:${env.PATH}"}stages {stage('Checkout') {steps {// 检出代码库到工作目录checkout([$class: 'GitSCM',branches: [[name: '*/master']], // 指定主分支名称userRemoteConfigs: [[url: 'git@github.com:ZhMenX/Test.git', // GitHub仓库URL需要替换为自己的credentialsId: '' // 您的凭证ID 替换为自己的,这个就是ssh那个]]])}}stage('Build and Test') {steps {// 构建和测试Spring Boot项目sh 'mvn clean install'}}stage('Dockerize') {steps {script {def dockerImageTag = "${DOCKER_IMAGE_NAME}:${BUILD_NUMBER}"// 检查是否存在同名容器并停止def existingContainerId = sh(script: "docker ps -aq -f name=${DOCKER_IMAGE_NAME}", returnStdout: true).trim()if (existingContainerId) {echo "Stopping existing container: ${existingContainerId}"sh "docker stop ${existingContainerId}"}// 检查是否存在同名镜像def existingImageId = sh(script: "docker images -q ${DOCKER_IMAGE_NAME}", returnStdout: true).trim()if (existingImageId) {echo "Deleting existing image: ${existingImageId}"// 停止使用镜像的容器def runningContainers = sh(script: "docker ps -aq -f ancestor=${existingImageId}", returnStdout: true).trim()if (runningContainers) {sh "docker stop ${runningContainers}"}// 删除镜像sh "docker rmi -f ${existingImageId}"}sh "docker build -t ${dockerImageTag} ." // 构建 Docker 镜像sh "docker run -d -p 8090:8090 ${dockerImageTag}" // 运行 Docker 容器}}}}
}
最后补充一下:当需要修改端口时,测试项目中dockerfile和application.yml都需要修改,以及流水线脚本。
OK,到这里就完成了,当然,很大概是运行不成功的,哈哈哈哈哈哈哈哈,感受痛苦吧!
五,Bug扫荡
1,拉取代码失败
原因,主机密钥的配置问题2
解决方案:
ssh -T git@github.com
ssh-keyscan github.com >> ~/.ssh/known_hosts
2,docker权限问题
当前用户没有docker权限,这个不管事的话,只能试试重启大法了
sudo usermod -aG docker $USER
作为经历过docker 权限错误洗礼的我来说,我也没啥其他办法,擦…
六,我的问题(球球了)
- 我有尝试过把jenkins当容器来运行也就是DinD,比如
docker run -d --name jenkins-dind --privileged --user root -v /var/run/docker.sock:/var/run/docker.sock jenkins/jenkins:lts
,但是这样并不能解决jenkins执行docker在脚本中执行docker run
等命令,提示docker:not found的问题 - 我尝试过实现提交代码到远程库就触发构建的操作,但是在配置hook的时候,找不到jenkins的hook地址,点击那个选项GitHub hook trigger for GITScm polling不会弹出,hook的连接,是需要其他的插件来实现嘛,求指教
相关文章:
Java+Github+Jenkins部署
Java项目—Jenkins部署笔记 一,准备 一台服务器操作系统,示例为ubuntu 22.0.4 可运行lsb_release -a查看 二,安装 docker 更新软件包列表: sudo apt update安装必要的软件包,以便使用HTTPS通过APT下载软件包&#x…...
vue使用命令npm install 报错 cb() never called!
一.错误说明,npm本身下载就慢,有可能是网络的问题。 二.解决方案,把npm设置成淘宝镜像后,再重新npm install npm config set registry https://registry.npm.taobao.org 三.还是不行,还会出现同样的问题,那接下来先清理一下npm缓存 npm cache…...
什么是LatexEasy及其在数学排版中的作用
LatexEasy是一种强大的排版系统,特别擅长处理数学公式和科技文档。它基于 TeX,是由计算机科学家 Donald Knuth 开发的。LaTeX 可以让你专注于内容,而不必过多关心排版细节,特别适用于数学家、工程师和科学研究者。 什么是 LaTeX&…...
axios 和fetch的取舍,以及比较
废话不多说,直接直捣黄龙: 区别 相同点 都是一种基于promise的异步解决方案。都可以解决回调地狱问题 不同点 axios是一个封装好的库,需要npm进行安装,fetch是es6新增的api 语法: fetch(url, { method: GET, // o…...
K-Means(K-均值)聚类算法理论和实战
目录 K-Means 算法 K-Means 术语 K 值如何确定 K-Means 场景 美国总统大选摇争取摆选民 电商平台用户分层 给亚洲球队做聚类 编辑 其他场景 K-Means 工作流程 K-Means 开发流程 K-Means的底层代码实现 K-Means 的评价标准 K-Means 算法 对于 n 个样本点来说&am…...
Python-pyqt不同窗口数据传输【使用静态函数】
文章目录 前言程序1:caogao1.py输入数据界面程序2:caogao2.py接收数据界面 程序3 :将输入数据界面和接收数据界面组合成一个总界面讲解 总结 前言 在编写pyqt 页面时有时候需要不同页面进行数据传输。本文讲解静态函数方法。直接看示例。 程…...
百度垂类离线计算系统发展历程
作者 | 弘远君 导读 本文以百度垂类离线计算系统的演进方向为主线,详细描述搜索垂类离线计算系统发展过程中遇到的问题,以及对应的解决方案。架构演进过程中一直奉行“没有最好的架构,只有最合适的架构”的宗旨,面对不同阶段遇到的…...
ubuntu 安装 指定版本:nodejs
通过 PPA 安装指定或最新版本的 nodejs 那么就需要使用 nodesource 来安装指定版本的 nodejs 了。其需要下载一个脚本,运行此脚本会在 ubuntu 里添加一个 nodejs 源,然后用 apt 就可以下载指定的 nodejs 了。 PPA 的全称为 personal package archive 。要…...
16.CSS菜单悬停特效
效果 源码 <!DOCTYPE html> <html> <head> <title>Creative Menu Item Hover Effects</title> <link rel="stylesheet" type="text/css" href="style.css"> </head> <body><section><…...
恒运资本:市盈率怎么算?
市盈率(P/E ratio)是判别一家公司股票价格合理性的一个重要目标,也是投资者评估公司股票投资价值的重要参阅目标。市盈率越高,表明相对于公司的收益来说,该公司的股票定价越高。市盈率越低,则表明该股票被低…...
Docker运维中常见错误以及解决方法汇总1
1.报错如下: Another app is currently holding the yum lock; waiting for it to exit... 另一个应用程序是:PackageKit 原因:另一个APP正在锁定yum,等待其退出! 解决:执行指令 rm -f /var/run/yum.pid 2.CentOS7设置静态的IP且可以上网...
Maven - 使用maven-release-plugin规范化版本发布
文章目录 Maven Release plugin – IntroductionMaven Release plugin – Plugin DocumentationMaven Release plugin – Usage实战案例 Maven Release plugin – Introduction Maven Release Plugin(Maven 发布插件)是一个用于帮助在Maven项目中执行版…...
2023.8.29 关于性能测试
目录 什么是性能测试? 性能测试常见术语及其性能测试衡量指标 并发 用户数 响应时间 事务 点击率 吞吐量 思考时间 资源利用率 性能测试分类 基准性能测试 负载性能测试 压力性能测试 可靠性性能测试 性能测试执行流程 什么是性能测试? 性…...
基于MATLAB的径向基函数插值(RBF插值)(一维、二维、三维)
基于MATLAB的径向基函数插值(RBF插值)(一维、二维、三维) 0 前言1 RBF思路2 1维RBF函数2.1 参数说明2.1.1 核函数选择2.1.2 作用半径2.1.3 多项式拟合2.1.4 误差项(光滑项) 3 2维RBF函数4 3维RBF函数 惯例声…...
flume拦截器
flume拦截器代码 1.依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apach…...
vue、elementui控制前一级选择后,后一级才会有数据
<el-form-item label"废物类型:"><el-select clearable v-model"queryForm.hswCateType" placeholder"请选择" change"industryCategoryChange" focus"industryCategoryFocus"><el-option v-for&…...
亲测influxdb安装为window后台服务
InfluxDB 安装 64bit:https://dl.influxdata.com/influxdb/releases/influxdb-1.7.4_windows_amd64.zip 解压安装包 修改配置文件 [meta]# Where the metadata/raft database is storeddir "D:/influxdb/meta"...[data]# The directory where the TSM…...
【LeetCode - 每日一题】823. 带因子的二叉树 (2023.08.29)
823. 带因子的二叉树 题意 元素都大于1,元素不重复。计数满足要求的二叉树(每个非叶结点的值应等于它的两个子结点的值的乘积)的数量。元素可以重复使用。 代码 自上而下动态规划。 所有元素大于1,所以不会有 自己自己自己 的…...
flutter 上传图片并裁剪
1.首先在pubspec.yaml文件中新增依赖pub.dev image_picker: ^0.8.75 image_cropper: ^4.0.1 2.在Android的AndroidManifest.xml文件里面添加权限 <activityandroid:name"com.yalantis.ucrop.UCropActivity"android:screenOrientation"portrait"andro…...
一台服务器上部署 Redis 伪集群
哈喽大家好,我是咸鱼 今天这篇文章介绍如何在一台服务器(以 CentOS 7.9 为例)上通过 redis-trib.rb 工具搭建 Redis cluster (三主三从) redis-trib.rb 是一个基于 Ruby 编写的脚本,其功能涵盖了创建、管…...
ealtek高清晰音频管理器(realtek高清晰音频管理器怎么设置win10)
本文为大家介绍realtek高清晰音频管理器(realtek高清晰音频管理器怎么设置win10),下面和小编一起看看详细内容吧。 我们都使用电脑来听音乐、看电影或者进行其他操作,但是如果我们觉得电脑产生的音效不够立体,我们就会想要去Realtek来设置音…...
微信小程序 scroll-view 组件的 bindscroll 不触发不生效
使用微信小程序基础组件中的scroll-view,但是滑动的时候 bindscroll 一直不生效。 <view class"container log-list"><scroll-view scroll-y style"height:100%;white-space:nowrap;" scroll-into-view"{{toView}}" enable…...
datax 删除分区数据,再写入MySQL脚本
#! /bin/bashDATAX_HOME/opt/module/datax#1、判断参数是否传入 if [ $# -lt 1 ] thenecho "必须传入all/表名..."exit fi #2、判断日期是否传入 [ "$2" ] && datestr$2 || datestr$(date -d -1 day %F)#DataX导出路径不允许存在空文件,…...
hyperf 十四 国际化
一 安装 composer require hyperf/translation:v2.2.33 二 配置 1、设置语言文件 文件结构: /storage/languages/en/messages.php /storage/languages/zh_CH/messages.php // storage/languages/en/messages.php return [welcome > Welcome to our applicat…...
C语言_初识C语言指针
文章目录 前言一、指针 ... 一个内存单元多大比较合适?二、地址或者编号如何产生?三、指针变量的大小 前言 内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的。 所以为了有效的使用内存,就把内存划分成一个个…...
EMQX启用双向SSL/TLS安全连接以及java连接
作为基于现代密码学公钥算法的安全协议,TLS/SSL 能在计算机通讯网络上保证传输安全,EMQX 内置对 TLS/SSL 的支持,包括支持单/双向认证、X.509 证书、负载均衡 SSL 等多种安全认证。你可以为 EMQX 支持的所有协议启用 SSL/TLS,也可…...
4399面试总结C/C++游戏开发
主要流程 首先询问了C/C知识点 然后询问操作系统,计算机组成,数据结构,计算机网络哪两门熟悉 涉及的相关问题 多态的概念 tcp,udp? tcp,udp区别 tcp可靠,udp不可靠 tcp这个链接的过程? 一个TCP连接必须要经过三次“…...
hashlib 模块学习
hashlib 是 Python 标准库中用于散列和摘要算法的模块。散列算法将输入数据转换为固定长度的散列值(也称为摘要),并且对于相同的输入始终生成相同的散列值。这对于存储密码、数字签名、数据完整性验证等领域非常有用。以下是对 hashlib 模块的…...
大模型开发05:PDF 翻译工具开发实战
大模型开发实战05:PDF 翻译工具开发实战 PDF-Translator 机器翻译是最广泛和基础的 NLP 任务 PDF-Translator PDF 翻译器是一个使用 AI 大模型技术将英文 PDF 书籍翻译成中文的工具。这个工具使用了大型语言模型 (LLMs),如 ChatGLM 和 OpenAI 的 GPT-3 以及 GPT-3.5 Turbo 来…...
LeetCode 43题:字符串相乘
题目 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。 注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整数。 示例 1: 输入: num1 "2", num2 "3&…...
基于java Swing 和 mysql实现的飞机订票系统(源码+数据库+ppt+ER图+流程图+架构说明+论文+运行视频指导)
一、项目简介 本项目是一套基于java Swing 和 mysql实现的飞机订票系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含:项目源码、项目文档、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过…...
Jmeter性能综合实战 —— 签到及批量签到
提取性能测试的三个方面:核心、高频、基础功能 签 到 请 求 步 骤 1、准备工作: 签到线程组n HTTP请求默认值n HTTP cookie 管理器n 首页访问请求n 登录请求n 查看结果树n 调试取样器l HTTP代理服务器 (1)创建线程组 …...
燃气管网监测系统,提升城市燃气安全防控能力
燃气是我们日常生活中不可或缺的能源,但其具有易燃易爆特性,燃气安全使用、泄漏监测尤为重要。当前全国燃气安全事故仍呈现多发频发态势,从公共安全的视角来看,燃气已成为城市安全的重大隐忧!因此,建立一个…...
【SQL】1731. 每位经理的下属员工数量 ( 新思想:确定左表,依次添加后续字段)
leetcode题目链接 注意点 确定左表(即,确定result表中的主键),依次添加后续字段。注意:主键可能是一个字段,也可能是多个字段COUNT(DISTINCT()),一般为了防止重复,使用COUNT计数时,…...
AMD Radeon RX 7000/6000系列显卡安装ROCm 调用CUDA
A卡用户画图炼丹、跑大模型甚至是跑机器学习、深度学习的有福了~ 注意:ROCm目前仅限在Linux系统下可用,Windows暂不支持 1. 安装ROCm RX6000系列及以下显卡使用ROCm 5.4.2稳定版本命令 【支持包括桌面级AMD Radeon RX6950XT、RX6900XT、RX6800XT、RX6…...
钉钉小程序引用阿里巴巴图标
2.打开的界面如图,先建一个iconfont.acss文件,全选浏览器打开的样式代码,复制粘贴进新建的iconfont.acss文件中 3.使用...
深入了解Nginx:高性能的开源Web服务器与反向代理
一、Nginx是什么 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,也可以作为负载均衡器和HTTP缓存服务器使用。它采用事件驱动、异步非阻塞的处理方式,能够处理大量并发连接和高流量负载ÿ…...
vue3 自定义显示内容
vue3 自定义显示内容 vue3 自定义显示内容示例uni-app封装自定义内容组件 vue3 自定义显示内容 在 Vue 3 中,你可以通过插槽(Slot)来自定义组件的显示内容。 插槽允许你将额外的内容插入到组件的特定位置,从而实现更灵活的组件…...
视频行为分析——视频图像转换与ffmpeg相关操作
工具类说明 1. 图像视频转换 1.1 视频输出gif from moviepy.editor import VideoFileClip # 设置输入视频文件路径和输出GIF文件路径 input_video video.avi output_gif output.gif # 读取视频文件 video VideoFileClip(input_video) # 将视频保存为GIF文件 video.write_…...
Bean 生命周期
Bean 生命周期 一、Bean 实例化的基本流程 Spring容器在进行初始化时,会将xml配置的的信息封装成一个BeanDefifinition对象,所有的BeanDefifinition存储到一个名为beanDefifinitionMap的Map集合中去,Spring框架在对该Map进行遍历࿰…...
JavaScript原型链污染
前言 在浏览某个论坛的时候,第一次看到了JavaScript原型链污染漏洞。当时非常的好奇,当时我一直以为js作为一种前端语言,就算存在漏洞也是针对前端,不会危害到后端,因此我以为这种漏洞危害应该不大。可当我看到他的漏…...
【Java】设计模式之单例模式与工厂模式
1、设计模式概念及分类 简单来说设计模式是被广大程序员们总结并认可的编码套路,其中最常用的莫过于单例模式与工厂模式,而单例模式也有更加细的分类,一起来学习一下这些模式的用法和特点吧。 2、单例模式 一个类只能被实例化出来一个对象…...
web自动化框架:selenium学习使用操作大全(Python版)
目录 一、浏览器驱动下载二、selenium-python安装(打开网站、操作元素)三、网页解析(HTML、xpath)四、selenium基本操作1、元素定位八种方法2、元素动态定位3、iframe切换4、填充表单_填充文本框5、填充表单_单选按钮6、填充表单_…...
boringssl EVP_aes_128_ecb实现
最近学习boringssl,发现没找到EVP_aes_128_ecb在哪里实现的 饶了一大圈,发现它的定义很无语 #define EVP_CIPHER_FUNCTION(keybits, mode) \const EVP_CIPHER *EVP_aes_##keybits##_##mode(void) { \return aes_##keybits##_##mode##_gene…...
vxe-table中树形结构
如图,同事让帮忙实现一个需求 从二级树节点开始,同时选中的只能有一个二级树节点,选中的二级树节点之下的子节点都可以被选中。否则不能被选中 直接上代码 需要注意的是,文中树状图传递的数据是打平的数据,设置代码是…...
Linux命令查看CPU、内存、IO使用情况简单介绍
文章目录 1. CPU相关介绍1.1 物理CPU1.2 物理CPU内核1.3 逻辑CPU1.4 几核几线程1.5 CPU设计图 2. top 查看系统负载、CPU使用情况2.1 系统整体的统计信息2.2 进程信息2.3 top命令使用 3. lscpu 显示有关 CPU 架构的信息4. free 查看内存信息5. iostat 查看io信息 1. CPU相关介绍…...
RPC框架的核心是什么
文章目录 什么是 RPC封装的艺术(如何隐藏底层逻辑)协议的实现序列化和反序列化(编解码)总结 什么是 RPC 首先思考这样一个问题,假设你不知道任何框架,现在有两台机器,每台机器上有一个服务&…...
直播、AI赋能,美团披着荆棘前行
随着互联网流量红利逐渐消退,阿里、抖音、腾讯、拼多多、快手、小红书等各赛道玩家,为了寻求新的增量,纷纷“卷”向本地生活,开始入侵美团的腹地。然而,哪怕巨头环伺,美团仍然展现出了其独特的竞争力&#…...
提升代码逻辑的感觉——python循环语句
提升代码逻辑的感觉——python循环语句 简介 循环是编程中的一个非常重要的概念,它用于处理重复性任何和迭代草错,通过循环我们能优化并简化代码,提高代码的可维护性,在Python中循环是一种控制结构,允许我们重复执行…...
【ARM Coresight 系列文章 20 -- linux perf 与 ARM coresight】
文章目录 1.1 Perf Introduction1.1.1 Perf 架构图1.1.2 Perf Tools 介绍1.1.3 Perf 命令介绍1.2 Events1.2.1 Perf 与 PMU 的关系1.2.2 Hardware events1.2.1.1 linux perf 事件分类1.2.2 Software Events1.2.3 Tracepoint Events1.3 Perf 工具使用1.4 用户态开发1.4.1 用户态…...