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.x
  • mysql57-community 表示 MySQL 5.7

4. 安装 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 'Qyy@2024!'; 

修改密码成功

刷新权限: 修改密码后,执行以下命令使权限生效:

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"

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

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

相关文章

C++Primer学习(2.2)

2.2 变量 变量提供一个具名的、可供程序操作的存储空间。C中的每个变量都有其数据类型,数据类型决定着变量所占内存空间的大小和布局方式、该空间能存储的值的范围&#xff0c;以及变量能参与的运算。对C程序员来说,“变量(variable)”和“对象(object)”一般可以互换使用。 术…

电脑开机提示按f1原因分析及终极解决方法来了

经常有网友问到一个问题&#xff0c;我电脑开机后提示按f1怎么解决&#xff1f;不管理是台式电脑&#xff0c;还是笔记本&#xff0c;都有可能会遇到开机需要按F1&#xff0c;才能进入系统的问题&#xff0c;引起这个问题的原因比较多&#xff0c;今天小编在这里给大家列举了比…

Linux系统命令无法使用(glib库相关问题)

1.背景描述 Yum强制安装了一些软件&#xff0c;安装软件成功无报错&#xff0c;完成后不久突然发现系统出问题了&#xff0c;所有的命令无法使用了&#xff0c;如ls、mv、cat等基本命令报错。 relocation error&#xff1a; /lib64/libpthread.so.0: symbol_libc_dl_error_tsd …

Jupyter Notebook自动保存失败等问题的解决

一、未生成配置文件 需要在命令行中&#xff0c;执行下面的命令自动生成配置文件 jupyter notebook --generate-config 执行后会在 C:\Users\用户名\.jupyter目录中生成文件 jupyter_notebook_config.py 二、在网页端打开Jupyter Notebook后文件保存失败&#xff1b;运行代码…

【含文档+PPT+源码】基于Python校园跑腿管理系统设计与实现

项目介绍 本课程演示的是一款基于Python校园跑腿管理系统设计与实现&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Python学习者。 1.包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套系统 3.…

TypeScript 中的联合类型:灵活的类型系统

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

WebStorm设置Vue Component模板

下载vue.js插件 下面有模板样例 Composition API&#xff1a;这是 Vue 3 的一项新特性&#xff0c;允许通过 setup 函数来组织组件逻辑。Options API&#xff1a;这是 Vue 2 和 Vue 3 都支持的传统方式&#xff0c;通过定义组件的 data、methods、computed 等来组织逻辑。 Comp…

解锁AI语音魅力——yoyo鹿鸣在线语音合成器,让创意声音即刻绽放!

yoyo鹿鸣-在线语音合成 人工智能语音克隆生成&#xff0c;二次元&#xff5e; AI工具 | AI探金 可以在AI探金社区来找我&#xff5e; yoyo鹿鸣 - 在线语音生成器 需求人群&#xff1a; 有语音合成需求的用户。 使用场景示例&#xff1a; 合成yoyo鹿鸣语音 等等 产品特色&a…

基于STM32的智能鱼缸水质净化系统设计

&#x1f91e;&#x1f91e;大家好&#xff0c;这里是5132单片机毕设设计项目分享&#xff0c;今天给大家分享的是智能鱼缸水质净化系统。 目录 1、设计要求 2、系统功能 3、演示视频和实物 4、系统设计框图 5、软件设计流程图 6、原理图 7、主程序 8、总结 1、设计要求…

t113-qt

修改QT配置: # # qmake configuration for building with arm-linux-gnueabi-g ## MAKEFILE_GENERATOR UNIX # CONFIG incremental # QMAKE_INCREMENTAL_STYLE sublib# include(../common/linux.conf) # include(../common/gcc-base-unix.conf) # inc…

apisix的real-ip插件使用说明

k8s集群入口一般都需要过负载均衡&#xff0c;然后再到apisix。 这时候如果后台业务需要获取客户端ip&#xff0c;可能拿到的是lb或者网关的内网ip。 这里一般要获取真实ip需要做几个处理。 1. 负载均衡上&#xff0c;一般支持配置获取真实ip参数&#xff0c;需要配置上。然…

[Meet DeepSeek] 如何顺畅使用DeepSeek?告别【服务器繁忙,请稍后再试。】

文章目录 [Meet DeepSeek] 如何顺畅使用DeepSeek&#xff1f;告别【服务器繁忙&#xff0c;请稍后再试。】引言使用渠道一&#xff1a;硅基流动 Chatbox AI【推荐】硅基流动 Chatbox AI的优势 使用渠道二&#xff1a;秘塔AI搜索秘塔AI搜索的优势 其它方案1. DeepSeek官网2. 纳…

四模型消融实验!DCS-CNN-BiLSTM-Attention系列四模型多变量时序预测

四模型消融实验&#xff01;DCS-CNN-BiLSTM-Attention系列四模型多变量时序预测 目录 四模型消融实验&#xff01;DCS-CNN-BiLSTM-Attention系列四模型多变量时序预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 基于DCS-CNN-BiLSTM-Attention、CNN-BiLSTM-Attention…

索引(MySQL)

1. 没有索引&#xff0c;可能会有什么问题 索引&#xff1a;提高数据库的性能&#xff0c;索引是物美价廉的东西了。不用加内存&#xff0c;不用改程序&#xff0c;不用调sql&#xff0c;只要执行 正确的 create index &#xff0c;查询速度就可能提高成百上千倍。但是天下没有…

Windows 实用设置工具 v3.6.5:一键优化系统设置

这款 Windows 实用设置工具 v3.6.5 是一款功能强大的系统优化软件&#xff0c;由 kernel 开发。它提供了丰富的系统设置选项&#xff0c;帮助用户轻松管理和优化 Windows 系统。以下是该工具的主要功能和特点&#xff1a; 主要功能 隐藏电脑文件夹 视频、文档、图片、音乐、下…

快速上手Vim的使用

Vim Linux编辑器-vim使用命令行模式下所有选项都可以带数字底行模式可视块模式&#xff08;ctrlV进入&#xff09; Linux编辑器-vim使用 Vim有多种模式的编辑器。能帮助我们很快的进行代码的编辑&#xff0c;甚至完成很多其他事情。 默认情况下我们打开vim在命令模式下&#x…

334递增的三元子序列贪心算法(思路解析+源码)

文章目录 题目思路解析源码总结题目 思路解析 有两种解法:解法一:动态规划(利用dp找到数组最长递增序列长度,判断是否大于3即可)本题不适用,因为时间复杂度为O(n^2),超时。 解法二:贪心算法:解法如上图,题目要求长度为三,设置第一个元素为长度1的值,是指长度二的…

sqli-labs靶场实录(二): Advanced Injections

sqli-labs靶场实录: Advanced Injections Less21Less22Less23探测注入点 Less24Less25联合注入使用符号替代 Less25aLess26逻辑符号绕过and/or过滤双写and/or绕过 Less26aLess27Less27aLess28Less28aLess29Less30Less31Less32&#xff08;宽字节注入&#xff09;Less33Less34Le…

Websocket从原理到实战

引言 WebSocket 是一种在单个 TCP 连接上进行全双工通信的网络协议&#xff0c;它使得客户端和服务器之间能够进行实时、双向的通信&#xff0c;既然是通信协议一定要从发展历史到协议内容到应用场景最后到实战全方位了解 发展历史 WebSocket 最初是为了解决 HTTP 协议在实时…

Java 大视界 -- Java 大数据在智能供应链中的应用与优化(76)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…