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

CICD 流程学习(五)Jenkins后端工程构建

案例1:数据库服务部署
MySQL部署
#安装MySQL服务
[root@Services ~]# yum clean all; yum repolist -v
...
Total packages: 8,265
[root@Services ~]# yum -y install mysql.x86_64 mysql-server.x86_64 mysql-devel.x86_64 
...
Complete!
[root@Services ~]# #启动MySQL服务
[root@Services ~]# systemctl enable mysqld      #设置MySQL服务开机自启动
[root@Services ~]# systemctl start mysqld       #启动MySQL服务
[root@Services ~]# ss -antpul | grep mysql      #确认3306端口被监听
tcp   LISTEN 0      70     *:33060  *:*    users:(("mysqld",pid=6875,fd=22)) 
tcp   LISTEN 0      128    *:3306   *:*    users:(("mysqld",pid=6875,fd=25)) 
[root@Services ~]# #初始化MySQL服务
[root@Services ~]# mysql
mysql> ALTER USER root@'localhost' IDENTIFIED BY 'Tarena';  #设置root用户密码
Query OK, 0 rows affected (0.00 sec)mysql> exit
Bye
[root@Services ~]# mysql -hlocalhost -uroot -p'Tarena' -e "STATUS;"
mysql: [Warning] Using a password on the command line interface can be insecure.
--------------
mysql  Ver 8.0.26 for Linux on x86_64 (Source distribution)Connection id:          9
Current database:
Current user:           root@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         8.0.26 Source distribution
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    utf8mb4
Db     characterset:    utf8mb4
Client characterset:    utf8mb4
Conn.  characterset:    utf8mb4
UNIX socket:            /var/lib/mysql/mysql.sock
Binary data as:         Hexadecimal
Uptime:                 2 min 0 secThreads: 2  Questions: 9  Slow queries: 0  Opens: 130  Flush tables: 3  Open tables: 46  Queries per second avg: 0.075
--------------[root@Services ~]# #创建HIS项目数据库
[root@Services ~]# mysql -hlocalhost -uroot -p'Tarena'
mysql> CREATE DATABASE his;                                         #创建his库
Query OK, 1 row affected (0.00 sec)mysql> CREATE USER 'his'@'192.168.88.60' IDENTIFIED BY 'hisadmin';  #创建his用户
Query OK, 0 rows affected (0.01 sec)mysql> GRANT ALL ON his.* TO 'his'@'192.168.88.60';                 #授权his用户
Query OK, 0 rows affected (0.00 sec)mysql> SHOW GRANTS FOR 'his'@'192.168.88.60';                       #查看his用户权限
+----------------------------------------------------------+
| Grants for his@192.168.88.60                             |
+----------------------------------------------------------+
| GRANT USAGE ON *.* TO `his`@`192.168.88.60`              |
| GRANT ALL PRIVILEGES ON `his`.* TO `his`@`192.168.88.60` |
+----------------------------------------------------------+
2 rows in set (0.00 sec)mysql> exit
Bye
[root@Services ~]# #导入HIS项目SQL
[root@Services ~]# ls his.sql 
his.sql
[root@Services ~]# mysql -hlocalhost -uroot -p'Tarena' his < his.sql 
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@Services ~]# mysql -hlocalhost -uroot -p'Tarena' -e "SHOW TABLES FROM his;"
mysql: [Warning] Using a password on the command line interface can be insecure.
+----------------------------------+
| Tables_in_his                    |
+----------------------------------+
| bms_bills_record                 |
| bms_invoice_exp                  |
| bms_invoice_record               |
| bms_operator_settle_record       |
| bms_settlement_cat               |
| dms_case_history                 |
| dms_case_model                   |
| dms_case_model_catalog           |
| dms_dise                         |
| dms_dise_catalog                 |
| dms_dosage                       |
| dms_drug                         |
| dms_drug_model                   |
| dms_drug_refund_item_record      |
| dms_herbal_item_record           |
| dms_herbal_model_item            |
| dms_herbal_prescription_record   |
| dms_medicine_item_record         |
| dms_medicine_model_item          |
| dms_medicine_prescription_record |
| dms_non_drug                     |
| dms_non_drug_item_record         |
| dms_non_drug_model               |
| dms_registration                 |
| pms_patient                      |
| sms_dept                         |
| sms_description                  |
| sms_frequent_used                |
| sms_login_log                    |
| sms_permission                   |
| sms_registration_rank            |
| sms_role                         |
| sms_role_permission_relation     |
| sms_skd                          |
| sms_skd_rule                     |
| sms_skd_rule_item                |
| sms_staff                        |
| sms_workload_record              |
+----------------------------------+
[root@Services ~]# 
Redis部署
#安装Redis服务
[root@Services ~]# yum -y install redis.x86_64 #配置Redis服务
[root@Services ~]# vim /etc/redis.conf 
[root@Services ~]# sed -rn '69p;88p;507p' /etc/redis.conf 
bind 0.0.0.0            #监听本地所有网络
protected-mode no       #关闭保护模式
requirepass hisadmin    #设置redis访问密码
[root@Services ~]# #启动Redis服务
[root@Services ~]# systemctl enable redis.service   #设置Redis服务开机自启动
[root@Services ~]# systemctl start redis.service    #启动Redis服务
[root@Services ~]# ss -antpul | grep redis          #确认6379端口被监听
tcp   LISTEN 0  128  0.0.0.0:6379 0.0.0.0:* users:(("redis-server",pid=7839,fd=6))
[root@Services ~]# #测试Redis服务
[root@Services ~]# redis-cli -h localhost -p 6379 -a hisadmin info
案例2:Jenkins全局工具配置
配置JDK环境

 

 配置Git工具

 配置Maven工具

#Jenkins主机安装Maven
[root@Jenkins ~]# ls apache-maven-3.6.3-bin.tar.gz 
apache-maven-3.6.3-bin.tar.gz
[root@Jenkins ~]# tar -xf apache-maven-3.6.3-bin.tar.gz         #解包
[root@Jenkins ~]# mv apache-maven-3.6.3 /usr/local/maven        #移动到指定目录
[root@Jenkins ~]# ls /usr/local/maven/              
bin  boot  conf  lib  LICENSE  NOTICE  README.txt
[root@Jenkins ~]# #配置Maven环境变量
[root@Jenkins ~]# vim /etc/bashrc                               #修改bash环境配置
[root@Jenkins ~]# tail -2 /etc/bashrc 
export MAVEN_HOME="/usr/local/maven/"   #声明MAVEN_HOME变量
export PATH=${MAVEN_HOME}/bin/:$PATH    #将MAVEN命令加入PATH
[root@Jenkins ~]# source /etc/bashrc                            #刷新bash环境
[root@Jenkins ~]# echo ${MAVEN_HOME}                            #测试变量声明
/usr/local/maven/
[root@Jenkins ~]# mvn -v                                        #测试mvn命令
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /usr/local/maven
Java version: 11.0.15, vendor: Red Hat, Inc., runtime: /usr/lib/jvm/java-11-openjdk-11.0.15.0.9-2.el8_5.x86_64
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "4.18.0-372.9.1.el8.x86_64", arch: "amd64", family: "unix"
[root@Jenkins ~]# #部署Maven本地仓库
[root@Jenkins ~]# ls repository.tar.gz 
repository.tar.gz
[root@Jenkins ~]# tar -xPpf repository.tar.gz -C /      #解压Maven仓库
[root@Jenkins ~]# ls /var/lib/jenkins/.m2/
repository
[root@Jenkins ~]# ls /var/lib/jenkins/.m2/repository/
aopalliance               classworlds  commons-beanutils    commons-io       de     joda-time  net
backport-util-concurrent  cn           commons-codec        commons-lang     io     junit      org
ch                        com          commons-collections  commons-logging  javax  mysql
[root@Jenkins ~]# 

配置邮件工具
#启动邮件服务
[root@Jenkins ~]# systemctl enable postfix.service 
[root@Jenkins ~]# systemctl start postfix
[root@Jenkins ~]# ss -antpul | grep master
tcp   LISTEN 0  100   127.0.0.1:25   0.0.0.0:*    users:(("master",pid=1203,fd=13))
tcp   LISTEN 0  100   [::1]:25       [::]:*    users:(("master",pid=1203,fd=14))
[root@Jenkins ~]# 

 

#确认邮件接收情况
[root@Jenkins ~]# yum -y install mailx              #安装邮件客户端命令
Complete!
[root@Jenkins ~]# mail -u root                      #查看root用户邮件
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/mail/root": 1 message 1 new
>N  1 没有配置邮箱地址      Fri Feb 24 12:04  18/640   "Test email #4"
& 1
Message  1:         #查看邮件内容
From nobody@nowhere  Fri Feb 24 12:04:20 2023
Return-Path: <nobody@nowhere>
X-Original-To: root
Delivered-To: root@Jenkins.localdomain
Date: Fri, 24 Feb 2023 12:04:20 +0800 (CST)
From: 没有配置邮箱地址  <nobody@nowhere>
To: root@Jenkins.localdomain
Subject: Test email #4
Content-Type: text/plain; charset=UTF-8
Status: RThis is test email #4 sent from Jenkins& quit
Held 1 message in /var/mail/root
[root@Jenkins ~]#
案例3:Jenkins后端工程构建
Jenkins中创建HIS-BACKEND工程

 

#Maven打包参数:Maven执行打包操作时需要调用pom.xml文件,所以需要指定pom.xml文件位置
clean package -Dmaven.test.skip=true    #清理旧文件、跳过测试直接打包

 测试HIS-BACKEND工程构建

 

#Jenkins主机确认HIS-BACKEND构建情况
[root@Jenkins ~]# ls /var/lib/jenkins/workspace/            #确认拉取HIS-BACKEND代码
HIS-BACKEND  HIS-FONTEND
[root@Jenkins ~]# ls /var/lib/jenkins/workspace/HIS-BACKEND/
HIS-api  HIS-common  HIS-demo  HIS-mbg  HIS-service  pom.xml
[root@Jenkins ~]# ls /var/lib/jenkins/workspace/HIS-BACKEND/HIS-api/
mvnw  mvnw.cmd  pom.xml  src  target
[root@Jenkins ~]# ls /var/lib/jenkins/workspace/HIS-BACKEND/HIS-api/target/ #确认打包
classes  generated-sources  HIS-api-1.0-SNAPSHOT.jar  HIS-api-1.0-SNAPSHOT.jar.original  maven-archiver  maven-status
[root@Jenkins ~]# #清理HIS-BACKEND本次构建
[root@Jenkins ~]# rm -rf /var/lib/jenkins/workspace/HIS-BACKEND/
[root@Jenkins ~]# 
案例4:Jenkins后端自动发布
添加SSH服务器

 

 

HIS-BACKEND工程配置自动发布

 

Backend主机部署
  • 部署OpenJDK环境
#安装OpenJDK-1.8
[root@Backend ~]# yum clean all; yum repolist -v
...
Total packages: 8,265
[root@Backend ~]# yum -y install java-1.8.0-openjdk-devel.x86_64    #安装jdk-1.8#配置JDK环境变量
[root@Backend ~]# ln -s /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.332.b09-1.el8_5.x86_64/ /usr/lib/jvm/jdk                        #制作软链接
[root@Backend ~]# vim /etc/bashrc                       #配置JAVA相关环境变量
[root@Backend ~]# tail -3 /etc/bashrc 
export JAVA_HOME="/usr/lib/jvm/jdk/"        #声明JAVA_HOME
export PATH=${JAVA_HOME}/bin/:$PATH         #将JAVA_HOME加入PATH
export CLASSPATH=.                          #声明类库路径
[root@Backend ~]# source /etc/bashrc        #刷新bash环境
[root@Backend ~]# echo ${JAVA_HOME}         #测试变量声明
/usr/lib/jvm/jdk/
[root@Backend ~]# java -version
openjdk version "1.8.0_332"
OpenJDK Runtime Environment (build 1.8.0_332-b09)
OpenJDK 64-Bit Server VM (build 25.332-b09, mixed mode)
[root@Backend ~]# 
  • 部署jar包运行配置文件
#HIS项目采用外置配置文件方式
[root@Backend ~]# mkdir /opt/his/
[root@Backend ~]# scp 192.168.88.10:/root/HIS/HIS-CONFIG/*.yml /opt/his/
application-prod.yml              100% 2690   912.9KB/s   00:00    
application.yml                   100%  257   374.1KB/s   00:00    
[root@Backend ~]# ls /opt/his/
application-prod.yml  application.yml
[root@Backend ~]# 
HIS-BACKEND工程自动发布测试

 

 

#Jenkins主机确认HIS-BACKEND打包成功
[root@Jenkins ~]# ls /var/lib/jenkins/workspace/HIS-BACKEND/HIS-api/target/HIS-api-1.0-SNAPSHOT.jar
/var/lib/jenkins/workspace/HIS-BACKEND/HIS-api/target/HIS-api-1.0-SNAPSHOT.jar
[root@Jenkins ~]##Backend主机确认jar包发布情况
[root@Backend ~]# ls /opt/his/
application-prod.yml  application.yml  HIS-api-1.0-SNAPSHOT.jar
[root@Backend ~]# #手工运行jar包测试HIS后端程序
[root@Backend his]# java -jar HIS-api-1.0-SNAPSHOT.jar      #前台进程
/opt/his/..   ____          _            __ _ _/\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/  ___)| |_)| | | | | || (_| |  ) ) ) )'  |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot ::        (v2.1.3.RELEASE)
...
2023-02-24 13:00:24.881  INFO 9629 --- [           main] com.neu.his.HisApiApplication            : Started HisApiApplication in 13.82 seconds (JVM running for 14.352)#另开终端验证
[root@Backend ~]# ss -antpu | grep :8888        #确认8888端口被监听
tcp   LISTEN    0      100      *:8888  *:*     users:(("java",pid=9629,fd=63))     
[root@Backend ~]# ss -antpu | grep java   #访问测试
[root@Backend ~]# curl http://localhost:8888
<!DOCTYPE html>
<html lang="cn">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><h1>HIS</h1>
</body>
</html>[root@Backend ~]# curl http://localhost:8888/actuator/health?pretty
{"status":"UP","details":{"rabbit":{"status":"UP","details":{"version":"3.11.5"}},"diskSpace":{"status":"UP","details":{"total":10725883904,"free":8431407104,"threshold":10485760}},"db":{"status":"UP","details":{"database":"MySQL","hello":1}},"elasticsearch":{"status":"UP","details":{"clusterName":"elasticsearch","numberOfNodes":1,"numberOfDataNodes":1,"activePrimaryShards":22,"activeShards":22,"relocatingShards":0,"initializingShards":0,"unassignedShards":20}},"elasticsearchRest":{"status":"UP","details":{"cluster_name":"elasticsearch","status":"yellow","timed_out":false,"number_of_nodes":1,"number_of_data_nodes":1,"active_primary_shards":22,"active_shards":22,"relocating_shards":0,"initializing_shards":0,"unassigned_shards":20,"delayed_unassigned_shards":0,"number_of_pending_tasks":0,"number_of_in_flight_fetch":0,"task_max_waiting_in_queue_millis":0,"active_shards_percent_as_number":52.38095238095239}},"redis":{"status":"UP","details":{"version":"5.0.3"}}}}[root@Backend ~]# 
案例5:HIS项目展示
配置Nginx前后端交互
#修改his.conf虚拟主机配置
[root@Fontend ~]# vim /etc/nginx/conf.d/his.conf 
[root@Fontend ~]# cat /etc/nginx/conf.d/his.conf 
server {listen 80 default_server;server_name __;access_log "/opt/his/log/$host.log";location / {root "/opt/his/web/";index index.html index.htm;}#配置api转发location /prod-api/ {proxy_pass http://192.168.88.60:8888/;}
}
[root@Fontend ~]# systemctl restart nginx.service   #重启nginx服务
[root@Fontend ~]# ss -antpul | grep nginx
tcp   LISTEN 0      128          0.0.0.0:80        0.0.0.0:*    users:(("nginx",pid=952,fd=6),("nginx",pid=951,fd=6),("nginx",pid=950,fd=6))
[root@Fontend ~]# 
HIS效果展示
#确保HIS后端程序正常运行
[root@Fontend ~]# curl http://192.168.88.60:8888/
<!DOCTYPE html>
<html lang="cn">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><h1>HIS</h1>
</body>
</html>
[root@Fontend ~]##浏览器访问HIS前端页面:http://192.168.88.70/

 

案例6:HIS项目全流程
清理Jenkins工作目录
#手工清理Jenkins工作目录
[root@Jenkins ~]# rm -rf /var/lib/jenkins/workspace/*
[root@Jenkins ~]# 
前端全流程
#更新HIS-FONTEND工程1、构建前清理/opt/his/web/下原有代码2、构建后自动解压fontend.tar.gz压缩包3、删除fontend.tar.gz压缩包#构建前操作
rm -rf /opt/his/web/*       #清理旧版本文件#构建后操作
cd /opt/his/web/            #切换到前端代码存放目录
tar -xf fontend.tar.gz      #解压fontend.tar.gz压缩包
rm -rf fontend.tar.gz       #清理fontend.tar.gz压缩包

 

 

 

 

 后端全流程

#更新HIS-FONTEND工程1、构建前终止HIS后端jar进程2、清理/opt/his/目录下原有jar包3、发送jar后远程启动jar包#构建前操作
jps | grep jar | awk '{print $1}' | xargs kill      #查找HIS后端jar包pid并杀死进程
rm -rf /opt/his/HIS-api-1.0-SNAPSHOT.jar            #清理旧版本jar包#构建后操作
cd /opt/his/                                                    #切换到jar包目录
nohup java -jar HIS-api-1.0-SNAPSHOT.jar > ./his.log 2>&1 &     #后台启动jar包

 

 

 

CI/CD全流程测试
  • 前端全流程测试
#查看现有首页内容,注意title内容为"东软云"
[root@Fontend ~]# vim /opt/his/web/index.html 
[root@Fontend ~]# #Programer主机更新前端代码,title更新为"达内云"
[root@Programer HIS-FONTEND]# vim index.html    #修改title内容
[root@Programer HIS-FONTEND]# [root@Programer HIS-FONTEND]# git add ./                        #添加修改到暂存区
[root@Programer HIS-FONTEND]# git commit -m "modify index.html" #生成新版本
[master 33da040] modify index.html1 file changed, 1 insertion(+), 1 deletion(-)
[root@Programer HIS-FONTEND]# git tag v2                        #打v2标签
[root@Programer HIS-FONTEND]# git push                          #推送分支到服务器
枚举对象中: 5, 完成.
对象计数中: 100% (5/5), 完成.
使用 2 个线程进行压缩
压缩对象中: 100% (3/3), 完成.
写入对象中: 100% (3/3), 345 字节 | 345.00 KiB/s, 完成.
总共 3(差异 1),复用 0(差异 0),包复用 0
To http://192.168.88.20/devops/HIS-FONTEND.git2c9f9bb..33da040  master -> master
[root@Programer HIS-FONTEND]# git push --tags                   #推送标签到服务器
总共 0(差异 0),复用 0(差异 0),包复用 0
To http://192.168.88.20/devops/HIS-FONTEND.git* [new tag]         v2 -> v2
[root@Programer HIS-FONTEND]# 

 

 

 

#Fontend主机验证构建结果
[root@Fontend ~]# ls /opt/his/web/              #确认fontend.tar.gz清理情况
favicon.ico  index.html  static
[root@Fontend ~]# vim /opt/his/web/index.html   #查看页面内title内容是否为"达内云"
[root@Fontend ~]# #Jenkins主机确认自动清理工作目录
[root@Jenkins ~]# ls /var/lib/jenkins/workspace/
[root@Jenkins ~]# 
  • 后端全流程测试
#此时HIS后端jar包应为之前的手工启动前台进程
[root@Fontend ~]# curl http://192.168.88.60:8888/
<!DOCTYPE html>
<html lang="cn">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><h1>HIS</h1>          #页面展示为HIS
</body>
</html>[root@Fontend ~]# #Programer主机更新HIS-BACKEND代码
[root@Programer ~]# cd HIS/HIS-BACKEND/
[root@Programer HIS-BACKEND]# vim HIS-api/src/main/resources/static/index.html 
[root@Programer HIS-BACKEND]# cat HIS-api/src/main/resources/static/index.html 
<!DOCTYPE html>
<html lang="cn">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><h1>医疗信息系统</h1>       #修改后端首页内容
</body>
</html>
[root@Programer HIS-BACKEND]# git add .                         #添加修改到暂存区
[root@Programer HIS-BACKEND]# git commit -m "modify index.html" #生成版本库
[master 8343263] modify index.html1 file changed, 2 insertions(+), 2 deletions(-)
[root@Programer HIS-BACKEND]# git tag v2                        #打v2标签
[root@Programer HIS-BACKEND]# git push --all                    #推送所有分支到服务器
枚举对象中: 15, 完成.
对象计数中: 100% (15/15), 完成.
使用 2 个线程进行压缩
压缩对象中: 100% (6/6), 完成.
写入对象中: 100% (8/8), 607 字节 | 607.00 KiB/s, 完成.
总共 8(差异 4),复用 0(差异 0),包复用 0
To http://192.168.88.20/devops/HIS-BACKEND.gitf582569..8343263  master -> master
[root@Programer HIS-BACKEND]# git push --tags                   #推送所有标签到服务器
总共 0(差异 0),复用 0(差异 0),包复用 0
To http://192.168.88.20/devops/HIS-BACKEND.git* [new tag]         v2 -> v2
[root@Programer HIS-BACKEND]#

 

 

#确认结果
2023-02-24 15:29:58.229  INFO 9629 --- [       Thread-5] AnnotationNacosInjectedBeanPostProcessor : class com.alibaba.nacos.spring.beans.factory.annotation.AnnotationNacosInjectedBeanPostProcessor was destroying!
[root@Backend his]#         #手工运行jar包的前台进程退出#确认jar包后台运行
[root@Backend his]# ss -antpu | grep :8888
tcp   LISTEN    0    100     *:8888    *:*     users:(("java",pid=9934,fd=63))     
[root@Backend his]# #测试访问后台首页
[root@Backend his]# curl http://localhost:8888/
<!DOCTYPE html>
<html lang="cn">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><h1>医疗信息系统</h1>
</body>
</html>
[root@Backend his]# 

 

相关文章:

CICD 流程学习(五)Jenkins后端工程构建

案例1&#xff1a;数据库服务部署 MySQL部署 #安装MySQL服务 [rootServices ~]# yum clean all; yum repolist -v ... Total packages: 8,265 [rootServices ~]# yum -y install mysql.x86_64 mysql-server.x86_64 mysql-devel.x86_64 ... Complete! [rootServices ~]# #启动…...

NSS [SWPUCTF 2021 新生赛]sql

NSS [SWPUCTF 2021 新生赛]sql 很明显是sql&#xff0c;有waf。 参数是wllm get型传参&#xff0c;有回显&#xff0c;单引号闭合&#xff0c;回显位3 跑个fuzz看看waf 过滤了空格 and 报错注入 空格->%09 ->like and->&&爆库&#xff1a;test_db -1%27uni…...

【Python机器学习】零基础掌握RandomTreesEmbedding集成学习

如何在高维数据中找到隐藏的结构? 面临大量复杂、高维的数据,例如社交网络分析、电子商务推荐系统或医疗诊断,如何有效地分析和解读这些数据成为一大挑战。一个有效的方法是使用嵌入技术将高维数据转化为低维形式,同时保留其内在结构。这次将介绍一种称为“随机树嵌入”(…...

【C++基础入门】42.C++中同名覆盖引发的问题

一、父子间的赋值兼容 子类对象可以当作父类对象使用&#xff08;兼容性) 子类对象可以直接赋值给父类对象子类对象可以直接赋值给父类对象父类指针可以直接指向子类对象父类引用可以直接引用子类对象 下面看一个子类对象兼容性的代码&#xff1a; #include <iostream>…...

【C++学习笔记】类和对象(上)

目录 1. 面向对象和面向过程的初步认识 2. 类的引入 3. 类的定义 3.1 类的两种定义方式 3.1.1声明和定义全部放在类体中 3.1.2.类声明放在.h文件中&#xff0c;成员函数定义放在.cpp文件中 4. 类的访问限定符及封装 4.1 访问限定符 4.2 面试题&#xff1a;C中struct…...

TinySnippet轻UI组件开发系列教程 — DataGrid选择事件

应用场景 DataGrid选择一条记录后&#xff0c;希望能够 调用纳流或者打开指定的页面 或者当鼠标悬停在一行时弱出一个指定的页面在右下角&#xff08;移开就关闭弹出页&#xff09; 这些都是我们能够实现的 实现过程 本文以调用纳流为例 下载UI组件 TinySnippet-v4.1.2导…...

热搜榜:最热门的话题文本排行榜API接口

近年来&#xff0c;随着社交媒体的兴起&#xff0c;热门话题的数量和更新速度都在不断增加&#xff0c;因此热门话题排行榜的需求也越来越大。在这篇文章中&#xff0c;我们将探讨如何使用#热搜榜# API接口获取最热门的话题文本排行榜&#xff0c;并给出相关代码示例。 一、API…...

vue中替换全局字体

一、背景 产品说项目要拿去展会展示&#xff0c;但现在项目字体是微软雅黑&#xff0c;不支持商用&#xff0c;需要全局替换思源字体。 二、下载字体 推荐一个网址&#xff0c;好用 字体天下&#xff0c;点击跳转 下载好的文件如下&#xff1a; 三、引入字体 1、在项目…...

【AGC】.p12证书文件如何获取MD5

近期在使用DevEco Studio3.1打包应用时遇到了一个问题&#xff0c;我使用Build—Generate Key and CSR创建了密钥库文件。 我这里需要获取到创建的.p12证书文件的MD5值&#xff0c;于是在控制台使用了keytool -list -v -keystore D:\myapp.p12命令获取证书指纹&#xff0c;但是…...

vue2 quill 视频上传 ,基于ruoyi vue,oss

包含两种上传方式&#xff0c;第一种点开弹新页面可选url和点击上传。本文中是第二种&#xff0c;自己拼的。像点击上传图片一样&#xff0c;直接传video文件&#xff0c;原创不易&#xff0c;纯纯踩坑&#xff1b; 因为现阶段能搜索到的内容&#xff0c;99.5%都是一样的内容&…...

YOLOv8改进实战 | 更换损失函数之MPDIOU(2023最新IOU)篇

前言 YOLOv8官方默认损失函数采用的是CIoU。本章节主要介绍如何将MPDIoU损失函数应用于目标检测YOLOv8模型。 目录 一、MPDIoU二、代码实现添加损失函数更换损失函数一、MPDIoU 论文链接:MPDIoU: A Loss for Efficient and Accurate Bounding Box Regression MPDIoU是一种基于…...

图的应用1.0-----最小生成树问题

目录 前言 生成树 1.基本概念 2.生成树的特点 3.生成树形成过程 最小生成树(Minimum Spanning Tree) 1.基本概念 2.构造方法&#xff08;MST&#xff09; 普里姆(Prime)算法 1.算法思想 2.代码实现 克鲁斯卡尔&#xff08;Kruskal&#xff09;算法 1.算法思想 2.代码…...

【计算机网络笔记】网络应用对传输服务的需求

系列文章目录 什么是计算机网络&#xff1f; 什么是网络协议&#xff1f; 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能&#xff08;1&#xff09;——速率、带宽、延迟 计算机网络性能&#xff08;2&#xff09;…...

IDEA启动报错:Command line is too long的解决办法

文章目录 1.报错现象2.解决办法验证3.最佳实践4.问题原因5.参考文献1.报错现象 在idea中启动一个spring cloud项目时,编译完成后直接报错,报错内容如下: Error running XXXApplication:Command line is too long. Shorten command line for XXXApplication or also for Sp…...

Android 中的 本地广播LocalBroadcastManager

Android 中的 本地广播LocalBroadcastManager 文章目录 Android 中的 本地广播LocalBroadcastManager一、LocalBroadcastManager 的基本作用二 、LocalBroadcastManager 的基本使用1、包的导入&#xff08;1&#xff09;Android 源码中bp文件的导入&#xff1a;&#xff08;2&a…...

题目 1120: C语言训练-“水仙花数“问题2python详解)——练气三层后期

✨博主&#xff1a;命运之光 &#x1f984;专栏&#xff1a;算法修炼之练气篇&#xff08;C\C版&#xff09; &#x1f353;专栏&#xff1a;算法修炼之筑基篇&#xff08;C\C版&#xff09; &#x1f352;专栏&#xff1a;算法修炼之练气篇&#xff08;Python版&#xff09; ✨…...

sheng的学习笔记-【中】【吴恩达课后测验】Course 3 - 结构化机器学习项目 - 第二周测验

课程3_第2周_测验题 目录&#xff1a;目录 要解决的问题 ① 为了帮助你练习机器学习的策略&#xff0c;本周我们将介绍另一个场景&#xff0c;并询问你将如何行动。 ② 我们认为这个在机器学习项目中工作的“模拟器”将给出一个任务&#xff0c;即领导一个机器学习项目可能…...

基于Pytorch的驾驶员分心行为实时检测

本文使用深度学习和Pytorch(PyTorch 2.0.1\Torchvision 0.15.2)实时检测驾驶员的分心行为,并附录完整代码。 检测分心驾驶是现代汽车中最重要的功能之一。无论是自动驾驶汽车还是其它高端汽车,都配备了驾驶员监控系统,以持续跟踪驾驶员的行为。这对确保驾驶员保持目光在道路…...

【uniapp】小程序开发7:自定义组件、自动注册组件

一、自定义轮播图组件、自动注册 以首页轮播图组件为例。 1、创建组件文件src/components/my-swipper.vue 代码如下&#xff1a; <template><view><view class"uni-margin-wrap"><swiper class"swiper" circular :indicator-dots…...

Modbus转MQTT以太网网关MQT-802主要特点和典型应用

随着社会的快速发展&#xff0c;物联网已经潜移默化地深入工控行业的各个领域&#xff0c;其高效的资源整合和强大的数据采集能力&#xff0c;深受客户的喜爱。上海泗博为实现客户在云端平台接收处理世界万物的信息以及实现远程控制&#xff0c;精心打造一款全新物联网产品&…...

Go学习第五章——函数与包

Go学习第五章——函数与包 1 函数1.1 基本语法1.2 函数多返回值1.3 函数的可见性和包级函数1.4 函数调用机制底层原理1.5 值类型和引用类型1.6 注意事项和细节1.7 逃逸机制&#xff08;补&#xff0c;可不看&#xff09; 2 包2.1 快速入门2.2 包的使用细节 3 函数详细讲解3.1 递…...

【Python 常用脚本及命令系列 5 -- 如何使用 BeautifulSoup 解析CSDN网页表格中的数据】

文章目录 Python BeautifulSoup 介绍CSDN 网页表格解析开发问题总结 Python BeautifulSoup 介绍 BeautifulSoup是一个Python库&#xff0c;用于解析HTML和XML文档。它常常用于网络爬虫来提取网页中的信息。 以下是BeautifulSoup的一些主要特性&#xff1a; 解析HTML&#xff…...

OpenFeign实现分析、源码解析

什么是openfeign? 是springcloud全家桶的组件之一&#xff0c;其核心作用是为Rest API提供高效简洁的rpc调用方式。 为什么只定义接口而没有实现类&#xff1f; 源码解读&#xff08;省略&#xff09; 总结&#xff1a; 源码分析&#xff1a;如何发送http请求&#xff1f; …...

2023 10月最新Vmd 下载安装教程,WindowsLinux

文章目录 下载Vmdwindows版本安装LINUX版本安装 下载Vmd 谷歌搜索VMD 点击左下角download VMD 可选择对应版本 注&#xff1a;点击后会出现输入用户名和密码&#xff0c;由于我已注册&#xff0c;界面不见了&#xff0c;所以直接描述一下。 输入用户名和密码然后会出现让登记…...

Photoshop(PS)安装教程(图文教程超详细)

目录 一.简介 二.安装步骤 软件&#xff1a;PS版本&#xff1a;2023语言&#xff1a;简体中文大小&#xff1a;3.20G系统要求&#xff1a;Win10&#xff08;1903&#xff09;及以上版本&#xff0c;64位操作系统硬件要求&#xff1a;CPU2.0GHz 内存8G(或更高&#xff0c;不支…...

C++模版进阶

一、非类型模版参数 之前学习的模版&#xff0c;参数一般是某种类型&#xff0c;但其实非类型的参数也可以定义在模版里面&#xff0c;但也有一定的限制&#xff0c;只可以定义整形家族的参数&#xff0c;而且具有常量性 注意&#xff1a; 1. 浮点数、类对象以及字符串是不允…...

CloudCompare

CloudCompare 源码编译Windows 功能格式转换 源码编译 Windows 源码编译出来的默认基本不带几个插件&#xff0c;包括保存为 .las 的功能 可以直接从 https://www.danielgm.net/cc/ 下载编译好的版本&#xff0c;插件比较多。也有免安装版本 cmake -B build -S . -G "Vi…...

【算法小课堂】深入理解前缀和算法

前缀和是指某序列的前n项和&#xff0c;可以把它理解为数学上的数列的前n项和&#xff0c;而差分可以看成前缀和的逆运算。合理的使用前缀和与差分&#xff0c;可以将某些复杂的问题简单化。 我们通过一个例子来理解前缀和算法的优势&#xff1a; 一维前缀和&#xff1a; ww…...

元对象系统功能

元对象系统功能 建立工程 布局页面 布局页面 修改原件名称 建立元对象 函数作为接口 增加一些固定的属性 #------------------------------------------------- # # Project created by QtCreator 2023-10-24T21:54:44 # #----------------------------…...

【2024秋招】小米中间件后端开发一面2023-9-13-base武汉

1 自我介绍 2 快手实习 2.1 讲讲你写的curd启动器&#xff0c;做了哪些工作呢 答&#xff1a; 2.2 网上也有一些开源的curd代码生成器&#xff0c;你为什么需要自研呢&#xff08;重要&#xff09; 答&#xff1a; &#xff08;1&#xff09;这个必须得自研&#xff0c;因…...