当前位置: 首页 > 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;精心打造一款全新物联网产品&…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...

【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论

路径问题的革命性重构&#xff1a;基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中&#xff08;图1&#xff09;&#xff1a; mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...

Redis:现代应用开发的高效内存数据存储利器

一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发&#xff0c;其初衷是为了满足他自己的一个项目需求&#xff0c;即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源&#xff0c;Redis凭借其简单易用、…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时&#xff0c;显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...