28.<Spring博客系统⑤(部署的整个过程(CentOS))>
引入依赖
Spring-boot-maven-plugin
用maven进行打包的时候必须用到这个插件。看看自己pom.xml中有没有这个插件
并且看看配置正确不正常。
注:我们这个项目打的jar包在30MB左右。
<plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring-boot.version}</version><executions><execution><id>repackage</id><goals><goal>repackage</goal></goals></execution></executions></plugin>
部署前的准备
1.linux环境搭建
(我使用的是腾讯云服务器)
Xshell、finalshell只是客户端。通过一些SSH协议等等连接上了云服务器。
通过这个客户端连接服务器。我们的服务器在腾讯的机房。我们的机器大概率是虚拟机的一小块。
Linux发行版:
通用用途(适合个人和企业用户):Ubuntu、Debian、Fedora、openSUSE
企业级发行版(稳定性和支持性强):RHEL、CentOS、AlmaLinux & Rocky Linux、Oracle Linux
我的是CentOS
cat /etc/centos-release
2.Java环境搭建
我们部署Spring项目,只需要JDK和MySQL就行了。
2.1安装MySQL
在 CentOS 上使用 yum 安装 MySQL
1.CentOS 通常默认安装 MariaDB,需先卸载以避免冲突:
sudo yum remove mariadb* -y
2. 添加 MySQL 官方 Yum Repository
MySQL 不在默认的 CentOS 软件仓库中,需要手动添加 MySQL 官方仓库。
sudo yum install https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm
3. 启用所需的 MySQL 版本
MySQL 官方仓库默认启用的是 MySQL 8.x。如果需要其他版本(如 MySQL 5.7),可以切换仓库。
查看可用仓库:
yum repolist all | grep mysql
启用 MySQL 5.7(示例):
通过这两行命令。我们再次查看可用仓库发现5.7被启用
sudo yum-config-manager --disable mysql80-community sudo yum-config-manager --enable mysql57-community
默认仓库:
mysql80-community
表示 MySQL 8.xmysql57-community
表示 MySQL 5.74. 安装 MySQL
运行以下命令安装 MySQL Server:
sudo yum install mysql-community-server
如果安装不了就
如果你确认源可信,可以使用
--nogpgcheck
跳过 GPG 签名检查:sudo yum install mysql-community-server --nogpgcheck
5. 启动 MySQL 服务
安装完成后,启动 MySQL 服务并设置为开机自启动:
sudo systemctl start mysqld sudo systemctl enable mysqld
6. 获取初始密码
安装完成后,MySQL 会生成一个随机的 root 用户初始密码:
查看密码:
sudo grep 'temporary password' /var/log/mysqld.log
使用随机生成的密码登录 MySQL 并配置安全选项
7.登录 MySQL:
mysql -u root -p
登录成功!
修改密码: 登录成功后,建议尽快修改
root
用户的密码。你可以使用以下命令来修改密码:ALTER USER 'root'@'localhost' IDENTIFIED BY '@Qyy2024!';
修改密码成功
刷新权限: 修改密码后,执行以下命令使权限生效:
FLUSH PRIVILEGES;
8. 验证安装
查看 MySQL 服务状态:
sudo systemctl status mysqld
登录 MySQL 检查版本:
mysql -u root -p mysql> SELECT VERSION();
退出mySQL
exit;
2.2安装JDK
1.更新软件包列表
首先,确保你的系统软件包是最新的:
sudo yum update -y
2. 安装 JDK 8
使用 Yum 安装
CentOS 7 默认的软件仓库中可以找到 OpenJDK 8。你可以使用以下命令来安装:
sudo yum install java-1.8.0-openjdk-devel -y
这将安装 OpenJDK 8(开发工具包)。安装完成后,使用以下命令检查 JDK 版本:
java -version
一、部署 Web 项目到 Linux
1.1部署简介
工作中涉及到的 "环境"
开发环境:开发人员写代码用的机器。
测试环境:测试人员测试程序使用的机器。
生产环境(线上环境):最终项目发布时所使用的机器,对稳定性要求很高。把程序安装到生产环境上,这个过程称为“部署”,也叫“上线”。
一旦程序部署成功,那么这个程序就能被外网中千千万万的普通用户访问到。
换句话说,如果程序有 BUG,这个 BUG 也就被千千万万的用户看到了。部署过程至关重要,属于程序开发中最重要的一环。一旦部署出现问题,极有可能导致严重的事故(服务器不可用之类的)。
为了防止部署出错,一般公司内部都有一些自动化部署工具(如 Jenkins 等)。当前我们先使用手工部署的方式来完成部署。
1.2环境配置
程序正常运行,需要保证环境和程序都正确。我们需要先设置环境。
下面内容都算是在配置环境
二、数据准备
按照之前的数据库建表脚本,在服务器上运行,建立相同的表结构。
2.1进入MySQL
使用下面命令
mysql -u root -p
然后输入你设定的数据库密码。
进入MySQL
2.2查看所有数据库
SHOW DATABASES;
2.2建立项目数据库
create database if not exists spring_blog charset utf8mb4;
2.3创建并插入用户表的数据
创建用户表
DROP TABLE IF EXISTS spring_blog.user;
CREATE TABLE spring_blog.user(`id` INT NOT NULL AUTO_INCREMENT,`user_name` VARCHAR ( 128 ) NOT NULL,`password` VARCHAR ( 128 ) NOT NULL,`github_url` VARCHAR ( 128 ) NULL,`delete_flag` TINYINT ( 4 ) NULL DEFAULT 0,`create_time` DATETIME DEFAULT now(),`update_time` DATETIME DEFAULT now(),
PRIMARY KEY ( id ),
UNIQUE INDEX user_name_UNIQUE ( user_name ASC )) ENGINE = INNODB DEFAULT
CHARACTER SET = utf8mb4 COMMENT = '⽤⼾表';
插入数据
INSERT INTO spring_blog.user (id, user_name, password, github_url, delete_flag, create_time, update_time) VALUES (1, '祁洋洋', 'd320f77068b94c09917527a01e66641237df2f24979a5640223d68eda19db72f', 'https://gitee.com/Bwindmill', 0, '2024-11-11 18:06:02', '2024-11-11 18:06:02');
INSERT INTO spring_blog.user (id, user_name, password, github_url, delete_flag, create_time, update_time) VALUES (2, 'lisi', '0f1aa87de7264681bedd1a93ec2a1c7e03f98725955d67127895a573aa54eeea', 'https://gitee.com/Bwindmill', 0, '2024-11-11 18:06:02', '2024-11-11 18:06:02');
INSERT INTO spring_blog.user (id, user_name, password, github_url, delete_flag, create_time, update_time) VALUES (3, 'wangwu', '9462b4c2bc2a400fae42215063b0da7a8afef7e4684de09de9158af4454a7066', 'https://gitee.com/Bwindmill', 0, '2024-11-11 18:06:02', '2024-11-11 18:06:02');
INSERT INTO spring_blog.user (id, user_name, password, github_url, delete_flag, create_time, update_time) VALUES (4, 'luliu', '809a42b7834c42bcbf0344112766947d3c8f106803baf19a0736febd045afe55', 'https://gitee.com/Bwindmill', 0, '2024-11-11 18:06:02', '2024-11-11 18:06:02');
2.4创建并插入博客表的数据
drop table if exists spring_blog.blog;
CREATE TABLE spring_blog.blog (`id` INT NOT NULL AUTO_INCREMENT,`title` VARCHAR(200) NULL,`content` TEXT NULL,`user_id` INT(11) NULL,`delete_flag` TINYINT(4) NULL DEFAULT 0,`create_time` DATETIME DEFAULT now(),`update_time` DATETIME DEFAULT now(),PRIMARY KEY (id))ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '博客表';
INSERT INTO spring_blog.blog (id, title, content, user_id, delete_flag, create_time, update_time) VALUES (1, '第⼀篇博客', '1111111', 1, 0, '2024-11-12 18:09:29', '2024-11-12 18:09:29');
INSERT INTO spring_blog.blog (id, title, content, user_id, delete_flag, create_time, update_time) VALUES (2, '代码测试', '你好我是测试的正文', 2, 1, '2024-11-12 18:09:29', '2024-11-12 18:09:29');
INSERT INTO spring_blog.blog (id, title, content, user_id, delete_flag, create_time, update_time) VALUES (3, '我是第三篇博客', '你好你好我是第三篇博客的正文', 2, 0, '2024-11-12 18:14:53', '2024-11-12 18:14:53');
INSERT INTO spring_blog.blog (id, title, content, user_id, delete_flag, create_time, update_time) VALUES (4, '这是我今天写的博客11/13', '我真的服了,今天我太坏了了,我大黑阿辉阿訇后哦ID除外反馈就问你打开几句话ID号呕吼后欧欧尼哦i就哦ID哦ijoin1io囧', 1, 0, '2024-11-13 21:31:54', '2024-11-13 21:31:54');
INSERT INTO spring_blog.blog (id, title, content, user_id, delete_flag, create_time, update_time) VALUES (5, '测试一下', '##在这里写下一篇博客
咋回事呀我回答我i啊好ID
#带娃地哦啊哦判定为', 1, 0, '2024-11-13 21:50:37', '2024-11-13 21:50:37');
INSERT INTO spring_blog.blog (id, title, content, user_id, delete_flag, create_time, update_time) VALUES (6, '今天是什么日子', '#一、今天
##1.1今天是什么
今天是个好日子。好呀好日子。
##1.2今天能干什么
今天我吃饭了,写了博客系统的好多内容。我还准备早点睡觉呢红红火火恍恍惚惚哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈', 1, 0, '2024-11-13 22:09:02', '2024-11-13 22:09:02');
INSERT INTO spring_blog.blog (id, title, content, user_id, delete_flag, create_time, update_time) VALUES (7, '今天的博客日记', '##一、这是我新发布的一篇博客
今天我要做的内容有很多。首先上完课。再利用课余时间好好的学习Java呀红红火火恍恍惚惚哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈', 1, 0, '2024-11-14 11:18:29', '2024-11-14 11:18:29');
INSERT INTO spring_blog.blog (id, title, content, user_id, delete_flag, create_time, update_time) VALUES (8, '哈达', '##在这里写下一篇博客
这是待删除博客', 1, 1, '2024-11-14 22:24:24', '2024-11-14 22:24:24');
INSERT INTO spring_blog.blog (id, title, content, user_id, delete_flag, create_time, update_time) VALUES (9, '这是我LiSi的文章', '##在这里写下一篇博客
这是我发布的文章,希望大家支持!!!', 2, 0, '2024-11-16 14:02:19', '2024-11-16 14:02:19');
INSERT INTO spring_blog.blog (id, title, content, user_id, delete_flag, create_time, update_time) VALUES (10, '我是第三篇博客', '你好你好我是第三篇博客的正文', 2, 0, '2024-11-16 22:11:53', '2024-11-16 22:11:53');
2.5查看我们创建的数据库以及数据表
博客中的数据太多了就不截图了。自此数据准备工作完成。
三、(打prod版本的Jar包)程序配置文件修改
实际工作中,开发环境、测试环境以及生产环境的配置都是不一样的,例如 MySQL 的用户名和密码。
我们可以针对不同的环境,设置不同的配置文件。3.1创建application-dev.yml文件
写入我们原本的配置文件
# 应用服务 WEB 访问端口 server:port: 1208spring:datasource:url: jdbc:mysql://127.0.0.1:3306/spring_blog?characterEncoding=utf8&useusername: rootpassword: 12345678driver-class-name: com.mysql.cj.jdbc.Driver mybatis:configuration:map-underscore-to-camel-case: true #配置驼峰⾃动转换 #user_id转userIdlog-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句mapper-locations: classpath:mapper/**Mapper.xml#设置⽇志⽂件的⽂件名 logging:file:name: spring-blog.log
3.2创建application-prod.yml文件
写入部署到linux环境中的配置文件
# 应用服务 WEB 访问端口 server:port: 1208spring:datasource:url: jdbc:mysql://127.0.0.1:3306/spring_blog?characterEncoding=utf8&useusername: rootpassword: "@Qyy2024!"driver-class-name: com.mysql.cj.jdbc.Driver mybatis:configuration:map-underscore-to-camel-case: true #配置驼峰⾃动转换 #user_id转userId # log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql语句mapper-locations: classpath:mapper/**Mapper.xml#设置⽇志⽂件的⽂件名 logging:file:name: spring-blog.log
在pom.xml添加如下代码
3.3自定义配置pom.xml
<profiles><profile><id>dev</id><properties><!--自定义配置--><profile.name>dev</profile.name></properties></profile><profile><id>prod</id><properties><!--自定义配置--><profile.name>prod</profile.name></properties></profile></profiles>
maven中上面会出现一个配置文件。
我们在原本的配置文件
3.4application.yml文件
中写入
spring:profiles:active: ${profile.name} // active: @profile.name@
这样我们就可以勾选。便于我们引用不同配置文件了
我们打一个prod版本的jar包。
多平台文件配置
在多平台部署时,可能需要为不同的操作系统或平台配置不同的文件。根据平台的不同,配置文件的内容也需要做相应调整,确保程序能够在所有目标平台上正确运行。
四、正式部署
4.1创建部署目录
我们将项目部署在
Production-deployment/spring_blog目录下面
4.2将jar包放到部署目录中
拖动jar包。到这个目录中(由于我使用的是finalshell不支持拖拽方式将
.jar
文件从 Windows 本地环境传输到服务器。)
我使用
SCP
从 Windows 上传.jar
文件到 CentOS 服务器:下载并安装 WinSCP。
- 输入你的服务器 IP 地址、SSH 登录用户名、以及密码。
- 连接到你的 CentOS 服务器。
然后我就可进行拖拽了
放置成功!
4.3开放端口号
参考链接:
Centos防火墙设置与端口开放的方法
如何还不行就
云服务器上看 安全组 开放1208端口
4.4启动项目!!!
4.4.1通过 java -jar jar包全名(非后台启动方式)
这种方式当我们把启动的窗口关掉。进程也就被杀掉了。
示例:
java -jar spring-blog-0.0.1-SNAPSHOT.jar
启动成功!
不过
4.4.2 nohup .... & (后台启动方式)
完整命令
nohup java -jar spring-blog-0.0.1-SNAPSHOT.jar &
这样启动之后。即便我们关掉启动窗口。服务依然是启动的
这样启动敲空格后是可以直接输入命令的。看错误日志也可以直接在这里看
检查日志输出
默认情况下,
nohup
会将日志输出到nohup.out
文件。查看该文件内容:cat nohup.out
如果内容过多,使用tail
命令查看最新的日志:tail -n 50 nohup.out
eg:
tail -100f spring-blog.log
查看下面100行日志
坑点:
通过后台部署。如果 项目进行更新了。我们启动新的jar包。
我们以为更新部署成功。实际上么有。一定要通过
cat nohup.out
看日志
这时候会发现
报错了。端口号已经被使用了。项目部署失败。
解决办法:
1.杀死进程(推荐)
首先查看进程Id.如下图14723就是我们spring_blog系统的进程Id
ps -ef|grep java
使用kill -9 杀掉进程
kill -9 14723
如上图,进程已经被杀死。此时我们就可以发布新的jar包了
2.修改端口号
nohup java -jar spring-blog-0.0.1-SNAPSHOT.jar --server.port=9090 &
不过此时我们就启动了两个程序了。
不过此时日志混在了一起。我们也可以进行指定日志。
4.5启动项目时遇到的问题
4.5.1要我将@profile.name@修改为${profile.name}
spring:profiles:active: @profile.name@
修改为
spring:profiles:active: ${profile.name}
不过这样修改之后还是有点问题。因此我直接
spring:profiles:active: prod
自此项目终于启动成功!!!!!
4.5.2无法访问
考虑原因
1.服务未启动
2.端口未开放
看服务是否启动的方法
1.通过命令
ps -ef|grep java
ps -ef 拿到所有程序
grep java 查询进程里面有java的东西
如图并没有查询到我们的java程序。 这个查出来的只是grep命令。
然后我们启动服务再次查询
2.通过curl
curl http://127.0.0.1:1208/blog_login.html
若能得到Html代码,说明服务已经启动。那么就是端口号未开放了。只需要去开放端口号就行了
注意事项:
1.在配置文件中 IP 地址依然是:127.0.0.1
2.部署后打开项目的 IP 地址填云服务器的公网IP地址。也就是主机。
我的是 150.158.148.151
3.错误日志跟踪命令
tail -f spring.log | grep "ERROR"
相关文章:
28.<Spring博客系统⑤(部署的整个过程(CentOS))>
引入依赖 Spring-boot-maven-plugin 用maven进行打包的时候必须用到这个插件。看看自己pom.xml中有没有这个插件 并且看看配置正确不正常。 注:我们这个项目打的jar包在30MB左右。 <plugin><groupId>org.springframework.boot</groupId><artif…...
mongodb多表查询,五个表查询
需求是这样的,而数据是从mysql导入进来的,由于mysql不支持数组类型的数据,所以有很多关联表。药剂里找药物,需要药剂与药物的关联表,然后再找药物表。从药物表里再找药物与成分关联表,最后再找成分表。 这里…...
服务器端渲染 (SSR) 与客户端渲染 (CSR)
嘿程序员!我们都知道,新时代的 Javascript 已经彻底改变了现代网站的结构和用户体验。如今,网站的构建更像是一个应用程序,伪装成一个能够发送电子邮件、通知、聊天、购物、支付等的网站。今天的网站是如此先进、互动,…...
【已解决】“EndNote could not connect to the online sync service”问题的解决
本人不止一次在使用EndNote软件时遇到过“EndNote could not connect to the online sync service”这个问题。 过去遇到这个问题都是用这个方法来解决: 这个方法虽然能解决,但工程量太大,每次做完得歇半天身体才能缓过来。 后来再遇到该问…...
HTML5拖拽API学习 托拽排序和可托拽课程表
文章目录 前言拖拽API核心概念拖拽式使用流程例子注意事项综合例子🌰 可拖拽课程表拖拽排序 前言 前端拖拽功能让网页元素可以通过鼠标或触摸操作移动。HTML5 提供了标准的拖拽API,简化了拖放操作的实现。以下是拖拽API的基本使用指南: 拖拽…...
sed使用扩展正则表达式时, -i 要写在 -r 或 -E 的后面
sed使用扩展正则表达式时, -i 要写在 -r 或 -E 的后面 前言 -r 等效 -E , 启用扩展正则表达式 -E是新叫法,更统一,能增强可移植性 , 但老系统,比如 CentOS-7 的 sed 只能用 -r ### Ubuntu24.04-E, -r, --regexp-extendeduse extended regular expressions in the script(fo…...
CSS中Flex布局应用实践总结
① 两端对齐 比如 要求ul下的li每行四个,中间间隔但是需要两段对齐,如下图所示: 这是除了基本的flex布局外,还需要用到:nth-of-type伪类来控制每行第一个与第四个的padding。 .hl_list{width: 100%;display: flex;align-items…...
【前端】CSS修改div滚动条样式
示例 分别是滚动条默认样式和修改后的样式 代码 <div class"video-list"><div class"list-item" onclick"videoinfo(100)"><img src"/index/images/coverimg/方和谦.png"><div class"txt">国医大…...
鸿蒙多线程开发——线程间数据通信对象02
1、前 言 本文的讨论是接续鸿蒙多线程开发——线程间数据通信对象01的讨论。在上一篇文章中,我们讨论了常规的JS对象(普通JSON对象、Object、Map、Array等)、ArrayBuffer。其中讨论了ArrayBuffer的复制传输和转移传输方式。 下面,我们将讨论SharedArra…...
Kotlin的data class
在 Kotlin 中,data class 是一种专门用来存储数据的类。与普通类相比,data class 提供了简化数据存储的语法,并且自动生成了一些常用的方法,例如 toString()、equals()、hashCode() 和 copy()。 1. 定义 data class data class …...
Proxy 在 JavaScript的用法
Proxy 是 JavaScript 提供的一个构造函数,用于创建一个“代理对象”。这个代理对象可以拦截目标对象的基本操作,例如读取属性、赋值、删除、调用函数等。通过它,我们可以修改或扩展对象的默认行为。 Proxy 的基本语法 const proxy = new Proxy(target, handler);target:被…...
vue3的attr透传属性详解和使用法方式。以及在css样式的伪元素中实现
在 Vue 3 和 TypeScript 中,属性透传(attr pass-through)是指将组件的属性传递到其根元素或某个子元素中。这个概念在开发可复用的组件时非常有用,尤其是当你希望将父组件的属性动态地传递给子组件的某个 DOM 元素时。 在 Vue 3 …...
《人工智能深度学习的基本路线图》
《人工智能深度学习的基本路线图》 基础准备阶段 数学基础: 线性代数:深度学习中大量涉及矩阵运算、向量空间等概念,线性代数是理解和处理这些的基础。例如,神经网络中的权重矩阵、输入向量的运算等都依赖于线性代数知识。学习内容…...
Matlab 答题卡方案
在现代教育事业的飞速发展中,考试已经成为现代教育事业中最公平的方式方法,而且也是衡量教与学的唯一方法。通过考试成绩的好与坏,老师和家长可以分析出学生掌握的知识多少和学习情况。从而老师可以了解到自己教学中的不足来改进教学的方式方…...
[Unity]TileMap开发,TileMap地图缝隙问题
环境: windows11 unity 2021.3.14f1c1 tilemap使用的图是美术已经拼接到一起的整图,块与块之间没有留缝隙 问题: TileMap地图直接在Unity中使用时,格子边缘会出现缝隙,移动或缩放地图时较明显。 解决方案&#x…...
pnpm : 无法加载文件 D:\Tool\environment\NodeAndNvm\node\pnpm.ps1,因为在此系统上禁止运行脚本。
问题 在终端(cmd)输入 pnpm -v,报错如下 pnpm : 无法加载文件 D:\Tool\environment\NodeAndNvm\node\pnpm.ps1,因为在此系统上禁止运行脚本。解决 1. 在终端输入get-ExecutionPolicy(查看执行策略/权限) 输出如下: # (受限的) Restricte…...
redis的map底层数据结构 分别什么时候使用哈希表(Hash Table)和压缩列表(ZipList)
在Redis中,Hash数据类型的底层数据结构可以是压缩列表(ZipList)或者哈希表(HashTable)。这两种结构的使用取决于特定的条件: 1. **使用ZipList的条件**: - 当Hash中的数据项(即f…...
通达OA前台submenu.php存在SQL注入漏洞(CVE-2024-10600)
通达OA前台submenu.php存在SQL注入漏洞(CVE-2024-10600) pda/appcenter/submenu.php 未包含inc/auth.inc.php且 $appid 参数未用’包裹导致前台SQL注入 影响范围 v2017-v11.6 fofa app"TDXK-通达OA" && icon_hash"-759108386"poc http://url…...
Flutter:photo_view图片预览功能
导入SDK photo_view: ^0.15.0单张图片预览,支持放大缩小 import package:flutter/material.dart; import package:photo_view/photo_view.dart;... ...class _MyHomePageState extends State<MyHomePage>{overrideWidget build(BuildContext context) {return…...
C++结构型设计模式之使用抽象工厂来创建和配置桥接模式的例子
下面是一个使用抽象工厂模式来创建和配置桥接模式的示例,场景是创建不同操作系统的窗口(Window)及其对应的实现(WindowImpl)。我们将通过抽象工厂来创建不同操作系统下的窗口和实现。 代码示例 #include <iostrea…...
智能合约运行原理
点个关注吧!! 用一句话来总结,智能合约就像是一个自动售货机:你投入硬币(触发条件),选择商品(执行合约),然后机器就会自动给你商品(执行结果&…...
Unity3D基于ECS的游戏逻辑线程详解
前言 Unity3D是一款非常流行的游戏开发引擎,其采用的是组件实体系统(ECS)架构,这种架构可以让游戏开发者更加高效地管理游戏逻辑线程。本文将详细介绍Unity3D基于ECS的游戏逻辑线程,并给出技术详解以及代码实现。 对…...
GIT 操作
全局设置 git config --global user.name "用户名" git config --global user.email "用户邮箱" 创建仓库 mkdir 项目目录 cd 项目目录 git init touch README.md git add README.md git commit -m "first commit" git remote add origin GIT…...
佛山三水戴尔R740服务器黄灯故障处理
1:佛山三水某某大型商场用户反馈一台DELL PowerEdge R740服务器近期出现了黄灯警告故障,需要冠峰工程师协助检查故障灯原因。 2:工程师协助该用户通过笔记本网线直连到服务器尾部的IDRAC管理端口,默认ip 192.168.0.120 密码一般在…...
系统性能优化方法论详解:从理解系统到验证迭代
在当今的企业级和云计算环境中,系统性能优化已成为提升竞争力的关键因素。本文将对系统优化的步骤进行深入解析,帮助读者系统化地进行性能优化,从而显著提升系统的整体表现。 流程概述: 系统性能优化的流程可以分为以下几个关键步骤&#x…...
241120学习日志——[CSDIY] [InternStudio] 大模型训练营 [09]
CSDIY:这是一个非科班学生的努力之路,从今天开始这个系列会长期更新,(最好做到日更),我会慢慢把自己目前对CS的努力逐一上传,帮助那些和我一样有着梦想的玩家取得胜利!!&…...
MySQL创建和管理触发器
1.在教务管理系统数据库d_eams的course表中,创建一个插入事件触发器tr_course,添加一条课程信息时,显示提示信息。 delimiter %% create trigger tr_course after insert on course for each row begin set tr_i 操作成功!; end…...
uniapp rpx兼容平板
问题: 使用uniapp开发平板端时, rpx/upx 内容过小, 没有适应屏幕 原因: uniapp 默认支持最大设备宽度为960px 而平板宽度超出了960 uniapp官方文档https://uniapp.dcloud.io/collocation/pages?idglobalstyle 解决: // pages.json 文件: {//..."globalSt…...
mysql 唯一键
在数据库中,唯一键(Unique Key)是一种约束条件,用于确保表中的某一列或多列组合的数据具有唯一性。这意味着在这列或这些列中不能有两个相同的值。唯一键的主要目的是保证数据的完整性和准确性,防止重复记录的插入。 …...
C++设计模式行为模式———迭代器模式
文章目录 一、引言二、迭代器模式三、总结 一、引言 迭代器模式是一种行为设计模式, 让你能在不暴露集合底层表现形式 (列表、 栈和树等) 的情况下遍历集合中所有的元素。C标准库中内置了很多容器并提供了合适的迭代器,尽管我们不…...
Flutter:SlideTransition位移动画,Interval动画延迟
配置vsync,需要实现一下with SingleTickerProviderStateMixinclass _MyHomePageState extends State<MyHomePage> with SingleTickerProviderStateMixin{// 定义 AnimationControllerlate AnimationController _controller;overridevoid initState() {super.…...
Ruby Socket 编程
Ruby Socket 编程 Ruby 是一种动态、开放源代码的编程语言,以其简洁明了的语法和强大的功能而受到许多开发者的喜爱。在 Ruby 中,Socket 编程是一种重要的网络编程技术,它允许程序员创建可以在网络中通信的程序。本文将详细介绍 Ruby Socket 编程的基础知识,包括如何创建 …...
内容安全与系统构建加速,助力解决生成式AI时代的双重挑战
内容安全与系统构建加速,助力解决生成式AI时代的双重挑战 0. 前言1. PRCV 20241.1 大会简介1.2 生成式 Al 时代的内容安全与系统构建加速 2. 生成式 AI2.1 生成模型2.2 生成模型与判别模型的区别2.3 生成模型的发展 3. GAI 内容安全3.1 GAI 时代内容安全挑战3.2 图像…...
基于Vue的微前端架构实现与挑战
引言 微前端架构作为一种新兴的前端开发方案,能够有效解决大型应用的复杂性问题。本文将详细探讨基于Vue实现微前端的具体方案及其面临的挑战。 什么是微前端? 微前端是一种将前端应用分解成一系列更小、更易管理的独立应用的架构模式。每个子应用可以…...
UE5 DownloadImage加载jpg失败的解决方法
DownloadImage加载jpg失败的解决方法 现象解决方案具体方法 现象 用UE自带的 DownloadImage 无法下载成功,从 failure 引脚出来。 接入一个由监控器自动保存起的图像,有些可以正常加载成功,有些无法加载成功。 经调查问题出现在,…...
Consumer Group
不,kafka-consumer-groups.sh 脚本本身并不用于创建 Consumer Group。它主要用于管理和查看 Consumer Group 的状态和详情,比如列出所有的 Consumer Group、查看特定 Consumer Group 的详情、删除 Consumer Group 等。 Consumer Group 是由 Kafka 消费者…...
[开源] SafeLine 好用的Web 应用防火墙(WAF)
SafeLine,中文名 “雷池”,是一款简单好用, 效果突出的 Web 应用防火墙(WAF),可以保护 Web 服务不受黑客攻击 一、简介 雷池通过过滤和监控 Web 应用与互联网之间的 HTTP 流量来保护 Web 服务。可以保护 Web 服务免受 SQL 注入、XSS、 代码注…...
vue3 路由守卫
在Vue 3中,路由守卫是一种控制和管理路由跳转的机制。它允许你在执行导航前后进行一些逻辑处理,比如权限验证、数据预取等,从而增强应用的安全性和效率。路由守卫分为几种不同的类型,每种类型的守卫都有其特定的应用场景。 其实路…...
unigui 登陆界面
新建项目,因为我的Main页面做了其他的东西,所以我在这里新建一个form File -> New -> From(Unigui) -> 登录窗体 添加组件:FDConnection,FDQuery,DataSource,Unipanel和几个uniedit,…...
Ubuntu,openEuler,MySql安装
文章目录 Ubuntu什么是Ubuntu概述Ubuntu版本简介桌面版服务器版 部署系统新建虚拟机安装系统部署后的设置设置root密码关闭防火墙启用允许root进行ssh安装所需软件制作快照 网络配置Netplan概述配置详解配置文件DHCP静态IP设置 软件安装方法apt安装软件作用常用命令配置apt源 d…...
LLM( Large Language Models)典型应用介绍 1 -ChatGPT Large language models
ChatGPT 是基于大型语言模型(LLM)的人工智能应用。 GPT 全称是Generative Pre-trained Transformer。-- 生成式预训练变换模型: Generative(生成式):可以根据输入生成新的文本内容,例如回答问题…...
deepin系统下载pnpm cnpm等报错
deepin系统下载pnpm cnpm等报错 npm ERR! request to https://registry.npm.taobao.org/pnpm failed, reason: certificate has expired 报错提示证书过期,执行以下命令 npm config set registry https://registry.npmmirror.com下载pnpm npm install pnpm -g查…...
RPC-健康检测机制
什么是健康检测? 在真实环境中服务提供方是以一个集群的方式提供服务,这对于服务调用方来说,就是一个接口会有多个服务提供方同时提供服务,调用方在每次发起请求的时候都可以拿到一个可用的连接。 健康检测,能帮助从连…...
数据结构-二叉树_堆
目录 1.二叉树的概念 编辑1.1树的概念与结构 1.2树的相关语 1.3 树的表示 2. ⼆叉树 2.1 概念与结构 2.2 特殊的⼆叉树 2.2.2 完全⼆叉树 2.3 ⼆叉树存储结构 2.3.1 顺序结构 2.3.2 链式结构 3. 实现顺序结构⼆叉树 3.2 堆的实现 3.2.2 向下调整算法 1.二叉树的概…...
“无关紧要”的小知识点:“xx Packages Are Looking for Funding”——npm fund命令及运行机制
“无关紧要”的小知识点:“xx Packages Are Looking for Funding”——npm fund 命令及运行机制 在 Node.js 和 npm 生态系统中,开源项目的持续发展和维护常常依赖于贡献者的支持和资助。为了让开发者更容易了解他们依赖的项目哪些有资金支持选项&#…...
【案例】---Hutool提取excel文档
目录 一、前言二、提取excel文档2.1、核心代码一、前言 引用jar包 <!--hutool--><dependency><groupId>cn.hutool</groupId>...
GPT-1.0、GPT-2.0、GPT-3.0参数对比
以下是 GPT-1.0、GPT-2.0、GPT-3.0 的模型参数对比表格: 模型GPT-1.0GPT-2.0GPT-3.0参数数量117M1.5B175B层数12 层12 - 48 层96 层嵌入维度768768 - 160012,288注意力头数1212 - 2596上下文长度51210242048词汇表大小约 40,00050,00050,000训练数据BooksCorpus (约…...
鸿蒙网络编程系列48-仓颉版UDP回声服务器示例
1. UDP回声服务器简介 回声服务器指的是这样一种服务器,它接受客户端的连接,并且把收到的数据原样返回给客户端,本系列的第2篇文章《鸿蒙网络编程系列2-UDP回声服务器的实现》中基于ArkTS语言在API 9的环境下实现了UDP回声服务器,…...
110. UE5 GAS RPG 实现玩家角色数据存档
在这篇,我们实现将玩家数据保存到存档内。 增加保存玩家属性 玩家属性默认的等级,经验值,可分配的技能点和属性点。还有一些角色基础属性也需要保存,回忆一下,我们是如何实现玩家的属性的,我们是通过多个…...
Excel - VLOOKUP函数将指定列替换为字典值
背景:在根据各种复杂的口径导出报表数据时,因为关联的表较多、数据量较大,一行数据往往会存在三个以上的字典数据。 为了保证导出数据的效率,博主选择了导出字典code值后,在Excel中处理匹配字典值。在查询百度之后&am…...