5 项目部署

news2025/1/18 13:51:28

5.1 Linux-项目部署


5.1.1 环境

5.1.1.1 开发环境(dev)

外部用户无法访问,开发人员使用,版本变动很大
平时大家大多是在Windows或者Mac操作系统下去编写代码进行开发.
在开发环境中安装大量的软件,这样会导致环境的稳定性和安全性降低,因此项目部署环境一般采取linux系统,如本例使用的为centos 7版本

5.1.1.2 流程

产品经理 – 客户-- 搭建项目模型 – 大前端 – UI画图

可行性分析→需求分析→详细分析→开发阶段→测试阶段→试运行→正式上线

5.1.1.3 生产环境(prod)

面向外部用户的环境,连接上互联网即可访问的正式环境
是将程序运行在此环境中,供用户去使用。这个环境是有专业的人员去维护,一般人是没有权限去操做生产环境的.
三个环境也可以说是系统开发的三个阶段:开发 --> 测试 --> 上线,其中生产环境也就是通常说的真实环境。

5.1.2 目录结构

请添加图片描述

/ 根目录

/bin:是Binary的缩写, 这个目录存放着最经常使用的命令。

/boot:存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。

/dev :是Device(设备)的缩写, 该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。

/etc:用来存放所有的系统管理所需要的配置文件和子目录。

/home:用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。

/lib:放着系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。

/lost+found:这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。

/media:linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。

/mnt:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。

/opt:主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。

/proc:是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。

/root:为系统管理员,也称作超级权限者的用户主目录。

/sbin:s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。

/selinux:是Redhat/CentOS所特有的目录,Selinux是一个安全机制,类似于windows的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。

/srv:存放一些服务启动之后需要提取的数据。

/sys:linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs,sysfs文件系统集成了下面3种文件系统的信息:针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。

/tmp:是用来存放一些临时文件的。share/applications

/usr:用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。

/usr/bin:系统用户使用的应用程序。

/usr/sbin:超级用户使用的比较高级的管理程序和系统守护程序。

/usr/src:内核源代码默认的放置目录。

/var:这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件

5.1.3 Linux的命令


Ctrl + C 停止当前进程

目录切换命令

cd切换目录

​ cd /usr 切换到usr目录

​ cd … 切换到上一层目录

​ cd …/… 跳到目前目录的上上两层

​ cd / 切换到系统根目录

​ cd ~ 切换到用户主目录(root)

​ cd - 切换到上一个所在目录

目录操作命令

​ pwd 显示当前目录

​ ls 查看该目录下的所有的目录和文件

​ ls -a 查看该目录下的所有文件和目录,包括隐藏目录

​ ls -l 查看该目录下的所有目录和文件的详细信息(ls -l 可以缩写成ll)

​ ls -al 查看该目录下的所有目录(包括隐藏目录)和文件的详细信息

​ ls -l |grep xxx 查看筛选后的目录和文件的详细信息

**vi/vim编辑器

​ 首先切换到桌面:[root@localhost ~]# cd /root/桌面

​ 拷贝系统中的文件做练习:[root@localhost 桌面]# cp /etc/kdump.conf a.conf

​ 分别使用vi和vim测试,vim对文件中注释的内容会改变其颜色,退出改文件编辑输入 :q 然后回车即可

​ [root@localhost 桌面]# vi a.conf

​ [root@localhost 桌面]# vim a.conf

vim的三种模式:命令模式 输入模式 底线命令模式

进入到文件中以后默认就是命令模式

:set nu 显示行号

:set nonu 隐藏行号

dd 删除当前行

u 撤销当前操作

yy 复制

p 粘贴

shift+g 光标移动至文件末尾

输入N,然后shift+g 光标移动到第N行

进入到文件中以后输入i/a/o进入输入模式

i 光标前编辑

a 光标后编辑

o 光标移至下一行编辑

[Esc] 退出编辑模式

编辑完成之后,点击[Esc],然后 shift+: 进入底线命令模式

:q! 强制退出(修改了内容,不保存)

:wq 保存并退出

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O1ATLiEl-1671930851920)(Pictures\4.png)]

常用命令

Ctrl+L 清屏 (clear)

ifconfig 查看ip地址

Tap 补全

man 查看手册

man ls 查看ls相关命令手册(按q退出当前手册)

ls --help 查看ls相关命令手册

date 日期

cal 日历

mkdir xxx 创建目录

mkdir -p x/y/z 创建多级目录

touch xxx 创建文件

vim xxx 创建文件并编辑

rmdir xxx 删除空目录

rm xxx 删除子目录或文件

rm -r xxx 会询问,递归删除,可以删除子目录

rm -rvf xxx 不会询问,显示已删除信息

rm -rf xxx 不会询问,不显示已删除信息

cp xxx(被复制文件) xxx(复制到某个位置) 拷贝文件

cp -rv xxx xxx 连同子目录一起拷贝,并显示信息

mv xxx(源文件名) xxx(新文件名) 重命名

mv xxx /目录名 移动xxx文件到某个位置(如果只有一个目录不用加 / )

cat xxx 查看文件,一般查看较小的文件

more xxx 查看文件,一般查看较大的文件 //回车 和 空格 (显示百分比)

less xxx 和more类似,操作键不同 // 上下键(显示底行命令,q直接退出)

tail xxx 从尾部开始查看

tail -N xxx 从尾部查看N行

tail -f xxx 跟随查看,一般用于查看日志( 可以通过echo命令进行测试:echo 内容 >> 文件 )

history 查看历史命令

find 查找文件或目录

如果没有指定搜索路径,默认从当前目录查找

-name 按名称查找,精准查找

-iname 按名称查找,忽略大小写

*:匹配所有

?:匹配单个字符

比如find /etc -name “init???”在目录/etc中查找以init开头的,且后面有三位的文件

tar -zcvf xx.tar.gz xxx.txt 压缩文件

-z 使用gzip压缩

-c 创建压缩文件

-x 解开压缩文件

-v 显示文件信息

-f 指定压缩后的文件名

-C /路径名:表示将压缩包解压到指定路径

tar -zxvf xxx.tar.gz 解压缩

ps -aux 查看系统中的进程信息

-a 显示所有进程信息

-u 以用户格式显示进程信息

-x 显示后台进程运行参数

ps -aux|grep xxx 筛选进程

ps -ef 以全格式显示当前所有进程

kill pid 通过进程pid杀死当前进程

kill -9 pid 强行杀死进程(常用)

例如:在vm上的虚拟机桌面上右键打开终端,然后在Xshell上找到 bash 对应的进程pid

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0TuBCn0T-1671930851921)(Pictures\5.png)]

​ 使用 kill 3577 和 kill -9 3577 进行测试

systemctl start 服务名(xxx.service) 启动该服务

systemctl restart 服务名(xxx.service) 重启该服务

systemctl stop 服务名(xxx.service) 停止该服务

​ systemctl disable 服务名(xxx.service)该服务不可用

systemctl status 服务名(xxx.service) 查看该服务

例如:

systemctl status firewalld.service 查看防火墙

systemctl stop firewalld.service 关闭防火墙

因为防火墙会随着虚拟机开机自动运行,避免麻烦,我们可以永久关闭防火墙

[root@localhost 桌面]# systemctl list-unit-files |grep firewalld 找到防火墙

[root@localhost 桌面]# systemctl disable firewalld.service 关闭防火墙

netstat -anp |grep 8080 查看8080端口是否被占用

useradd xxx(用户名) 新增用户(创建成功后会在home目录下创建对应文件夹)

passwd xxx(用户名) 设置该用户密码

su - xxx(用户名) 切换至该用户

whoami/who am i 查看当前用户

id xxx(用户名) 查看当前用户

userdel [-r] xxx(用户名) 删除用户,-r表示删除该用户的home目录

groupadd xxx(组名) 新增用户组

usermod -g xxx(组名) yyy(用户名) 修改用户的用户组

useradd -g xxx(组名) yyy(用户名) 新增用户时直接添加组

groups xxx(用户名) 查看当前用户所在的组

cat /etc/passwd 可以查看系统中的所有用户

cat /etc/shadow 可以查看系统中的所有用户的密码

cat /etc/group 可以查看系统中的所有用户组

文件权限管理:执行ls -l(ll)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nSxEEiVj-1671930851922)(Pictures\6.png)]

第0位:文件类型(d 目录,- 普通文件,l 链接文件)

第1-3位:所属用户(所有者)权限,用u(user)表示

第4-6位:所属组权限,用g(group)表示

第7-9位:其他用户(其他人)权限,用o(other)表示

r:代表权限是可读,r也可以用数字4表示

w:代表权限是可写,w也可以用数字2表示

x:代表权限是可执行,x也可以用数字1表示

修改文件/目录的权限的命令:chmod

示例:

修改a.txt的权限为属主有全部权限,属主所在的组有读写权限,其他用户只有读的权限

chmod u=rwx,g=rw,o=r a.txt 或者 chmod 764 a.txt(常用)

注意:root用户是超级用户,不管有没有权限,root都能进行更改, 用普通用户测试权限

RPM(Red-Hat Package Manager) Red-Hat软件包管理

rpm –qa 查看已安装软件

rpm –qa|grep xxx 筛选查看已安装软件

rpm -e xxx 卸载已安装软件

rpm -ivh xxx 安装软件

​ -i 安装(install)

​ -v 查看信息

​ -h 查看进度条

例如:可以使用自带的火狐浏览器进行测试

[root@localhost 桌面]# rpm -qa|grep firefox

[root@localhost 桌面]# rpm -e firefox

再次查看

[root@localhost 桌面]# rpm -qa|grep firefox

再次安装,需要下载 firefox对应的版本的 *.rpm 文件(但是需要环境,比较麻烦,一般使用yum方式安装)

[root@localhost Packages]# rpm -ivh firefox-6.0.1-1.2.mga1.x86_64.rpm

[root@localhost Packages]# rpm -qa|grep firefox

YUM(yellowdog updater modified)软件包管理工具

应用yum的好处:

自动解决软件包依赖关系(类似MAVEN)

方便的软件包升级

[root@localhost Packages]# yum list|grep firefox 自动联网查看firefox可用安装包

[root@localhost Packages]# yum install firefox 自动选择安装firefox

5.1.4 Linux软件安装【重点


5.1.4.1 JDK安装

[root@localhost 桌面]# rpm -qa | grep java 查看系统中默认安装的jdk

java-1.8.0-openjdk-1.8.0.102-4.b14.el7.x86_64

javapackages-tools-3.4.1-11.el7.noarch

java-1.8.0-openjdk-headless-1.8.0.102-4.b14.el7.x86_64

tzdata-java-2016g-2.el7.noarch

python-javapackages-3.4.1-11.el7.noarch

java-1.7.0-openjdk-headless-1.7.0.111-2.6.7.8.el7.x86_64

java-1.7.0-openjdk-1.7.0.111-2.6.7.8.el7.x86_64

我们需要将opjdk都删除(1.7和1.8各有两个),后缀为.noarch的文件可以不用删除

[root@localhost 桌面]# rpm -e --nodeps java-1.8.0-openjdk-1.8.0.102-4.b14.el7.x86_64

[root@localhost 桌面]# rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.102-4.b14.el7.x86_64

[root@localhost 桌面]# rpm -e --nodeps java-1.7.0-openjdk-headless-1.7.0.111-2.6.7.8.el7.x86_64

[root@localhost 桌面]# rpm -e --nodeps java-1.7.0-openjdk-1.7.0.111-2.6.7.8.el7.x86_64

[root@localhost 桌面]# java -version

bash: java: 未找到命令…

把下载好的jdk安装包拷贝到当前虚拟机root目录下,一般我们解压到/usr/local目录下

[root@localhost ~]# tar -zxvf jdk-8u151-linux-x64.tar.gz -C /usr/local

配置环境变量

[root@localhost ~]# vim /etc/profile

shift+g 跳到 文件末尾 o(另起一行)

在该文件中添加如下信息:

export JAVA_HOME=/usr/local/jdk1.8.0_151
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

ESC

:wq

立即生效

[root@localhost ~]# source /etc/profile(如果不行可重启虚拟机再次尝试)

再次测试

[root@localhost ~]# java -version

java version “1.8.0_151”

Java™ SE Runtime Environment (build 1.8.0_151-b12)

Java HotSpot™ 64-Bit Server VM (build 25.151-b12, mixed mode)

5.1.4.2 Tomcat安装

把下载好的tomcat安装包拷贝到当前虚拟机root目录下,一般我们解压到/usr/local目录下

[root@localhost ~]# tar -zxvf apache-tomcat-8.5.23.tar.gz -C /usr/local

在启动tomcat之前记得关闭防火墙

[root@localhost ~]# systemctl stop firewalld.service

切换到tomcat的bin目录

[root@localhost ~]# cd /usr/local

[root@localhost local]# cd apache-tomcat-8.5.23/bin

启动tomcat

[root@localhost bin]# ./startup.sh

关闭tomcat

[root@localhost bin]# ./shutdown.sh

5.1.4.3 Mysql安装

CentOS中默认安装的是MariaDB,安装完MySQL之后会覆盖MariaDB,由于安装MySQL需要添加很多依赖关系,所以这里使用yum安装.

下载MySQL源安装包

[root@localhost ~]# wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm

2019-10-17 14:37:41 (230 KB/s) - 已保存 “mysql57-community-release-el7-10.noarch.rpm”

[25548/25548])

-c: 没有那个文件或目录

在 -c 中找不到 URL。

FINISHED --2019-10-17 14:37:41–

Total wall clock time: 7.4s

Downloaded: 1 files, 25K in 0.1s (230 KB/s)

安装MySQL源(如果无法安装,先执行该命令:rm -f /var/run/yum.pid)

[root@localhost ~]# yum -y install mysql57-community-release-el7-10.noarch.rpm

Running transaction

正在安装 : mysql57-community-release-el7-10.noarch 1/1

验证中 : mysql57-community-release-el7-10.noarch 1/1

已安装:

mysql57-community-release.noarch 0:el7-10

完毕!

更新密钥:

[root@localhost ~]# rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

安装MySQL

[root@localhost ~]# yum -y install mysql-community-server

作为依赖被安装:

mysql-community-client.x86_64 0:5.7.28-1.el7 mysql-community-common.x86_64 0:5.7.28-1.el7

作为依赖被升级:

openssl.x86_64 1:1.0.2k-19.el7 openssl-libs.x86_64 1:1.0.2k-19.el7

postfix.x86_64 2:2.10.1-7.el7

替代:

mariadb-libs.x86_64 1:5.5.52-1.el7

完毕!

启动MySQL

[root@localhost ~]# systemctl start mysqld.service

查看MySQL运行状态

[root@localhost ~]# systemctl status mysqld.service

mysqld.service - MySQL Server

Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)

Active: active (running) since 四 2019-10-17 15:00:59 CST; 26s ago

设置MySQL自启动

[root@localhost ~]# systemctl enable mysqld

配置MySQL

[root@localhost ~]# vim /etc/my.cnf

在/etc/my.cnf的[mysqld]中增加如下内容:

#粘贴到[mysqld]之后
validate_password=off
character_set_server=utf8
skip-name-resolve

#不添加则在设置MySQL新密码时会错
#用于设置MySQL的字符集
#用于设置MySQL的远程连接
validate_password=off
character_set_server=utf8
skip-name-resolve

重新启动MySQL

[root@localhost ~]# systemctl restart mysqld.service

此时MySQL已经开始正常运行,不过要想进入MySQL还得先找出此时root用户的密码,通过如下命令可以在日志文件中找出密码:

[root@localhost ~]# grep “password” /var/log/mysqld.log

2019-10-17T07:00:52.740835Z 1 [Note] A temporary password is generated for root@localhost: l0hN)kEXugYv

2019-10-17T07:14:54.867706Z 3 [Note] Access denied for user ‘root’@‘localhost’ (using password: YES)

登录MySQL

[root@localhost ~]# mysql -uroot -p

输入:jnZrN0dhfF.r进入到MySQL

输入初始密码,此时不能做任何事情,因为MySQL默认必须修改密码之后才能操作数据库:

mysql> ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘新密码’;

​ mysql> ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘root’;

设置MySQL可以远程访问

mysql>grant all privileges on . to ‘root’@‘%’ identified by ‘你的密码’ with grant option;

grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;

此时可以使用我们的数据库客户端工具进行远程连接,如果连接不上,重启MySQL后再测试

测试成功后,退出MySQL

mysql> exit;

Bye

卸载Yum Repository,否则每次yum操作都会自动更新

[root@localhost ~]# yum -y remove mysql57-community-release-el7-10.noarch

已加载插件:fastestmirror, langpacks

正在解决依赖关系

–> 正在检查事务

—> 软件包 mysql57-community-release.noarch.0.el7-10 将被 删除

–> 解决依赖关系完成

依赖关系解决

=========================================================================================

Package 架构 版本 源 大小

=========================================================================================

正在删除:

mysql57-community-release noarch el7-10 installed 30 k

事务概要

=========================================================================================

移除 1 软件包

安装大小:30 k

Downloading packages:

Running transaction check

Running transaction test

Transaction test succeeded

Running transaction

正在删除 : mysql57-community-release-el7-10.noarch 1/1

验证中 : mysql57-community-release-el7-10.noarch 1/1

删除:

mysql57-community-release.noarch 0:el7-10

完毕!

测试远程连接,连接未成功,需要再次关闭防火墙,重启MySQL

关闭防火墙:

systemctl stop firewalld.service

5.1.5 部署SSM工程


部署项目到Linux中需要注意一下内容:

  • 项目要保证在Windows下是没有问题的,再部署到Linux。

  • 连接线上的数据库,代码需要修改成线上数据库的地址

  • 将Maven项目打包

  • 在部署到Linux操作系统中后,测试时查看日志。

    [root@localhost ~]# cd /usr/local
    [root@localhost local]# cd apache-tomcat-8.5.23/
    [root@localhost apache-tomcat-8.5.23]# cd logs
    [root@localhost logs]# tail -f catalina.out

装大小:30 k

Downloading packages:

Running transaction check

Running transaction test

Transaction test succeeded

Running transaction

正在删除 : mysql57-community-release-el7-10.noarch 1/1

验证中 : mysql57-community-release-el7-10.noarch 1/1

删除:

mysql57-community-release.noarch 0:el7-10

完毕!

测试远程连接,连接未成功,需要再次关闭防火墙,重启MySQL

关闭防火墙:

systemctl stop firewalld.service

项目要保证在Windows下是没有问题的,再部署到Linux。

1.连接线上的数据库,代码需要修改成线上数据库的地址

2.将Maven项目打包

在 \项目名称\target\ 目录下有生成的war包
ss_crud.war

3.把war包部署到到linux系统的tomcat/webapps目录下
ss_crud.war
在这里插入图片描述
在这里插入图片描述

在部署到Linux操作系统中后,测试时查看日志。

[root@localhost ~]# cd /usr/local
[root@localhost local]# cd apache-tomcat-8.5.23/
[root@localhost apache-tomcat-8.5.23]# cd logs
[root@localhost logs]# tail -f catalina.out

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2022 年度盘点 | 更成熟的 AI,更破圈的技术狂欢

By 超神经内容一览:2022 年 AI 领域发展不断提速,新技术成果纷纷落地,模型迭代加速升级。本文总结了 2022 年 AI 领域各大公司的技术成就。关键词:年终盘点 大厂 技术创新2022 年在此起彼伏的咳嗽声中接近尾声,这一…

onCreate、onSaveInstanceState、onRestoreInstance一个参数和两个参数

Android Studio移动应用开发——onCreate、onSaveInstanceState、onRestoreInstance一个参数和两个参数_dear_jing的博客-程序员宅基地 - 程序员宅基地 在做Android生命周期实验过程中,把 Log.i(TAG, "(1) onCreate()") 写到了含有两个参数的函数 onSave…

HTML5 元素拖放

文章目录HTML5 元素拖放概述触发事件实现元素拖放功能dataTransfer元素拖动效果垃圾箱效果HTML5 元素拖放 概述 在HTML5中,我们只需要给元素添加一个draggable属性,然后设置该属性值为true,就能实现元素的拖放。 拖放,指的是“…

【Python】Numpy分布函数总结

文章目录总表均匀分布和三角分布幂分布与正态分布相关的分布与Gamma相关的分布极值分布总表 np.random中提供了一系列的分布函数,用以生成符合某种分布的随机数。下表中,如未作特殊说明,均有一个size参数,用以描述生成数组的尺寸…

【综合笔试题】难度 1.5/5,常规二叉树爆搜题

题目描述 这是 LeetCode 上的 95. 不同的二叉搜索树 II ,难度为 中等。 Tag : 「树」、「二叉搜索树」、「BST」、「DFS」、「递归」、「爆搜」 给你一个整数 n,请你生成并返回所有由 n 个节点组成且节点值从 1 到 n 互不相同的不同 二叉搜索树 。可以…

2022出圈的ML研究:爆火的Stable Diffusion、通才智能体Gato,LeCun转推

这些机器学习领域的研究你都读过吗? 2022 年即将步入尾声。在这一年里,机器学习领域涌现出了大量有价值的论文,对机器学习社区产生了深远的影响。 今日,ML & NLP 研究者、Meta AI 技术产品营销经理、DAIR.AI 创始人 Elvis S.…

CSRF漏洞渗透与攻防(一)

目录 前言 什么是CSRF漏洞 CSRF实现流程 CSRF漏洞危害 XSS漏洞危害 CSRF与XSS区别 CSRF分类 GET型: POST型: CSRF漏洞案列模拟 CSRF常用Payload: CSRF漏洞挖掘 检测工具 CSRF漏洞防御 防御思路 我们该如何去防御CSRF漏洞…

LeetCode动态规划—打家劫舍从平板板到转圈圈(198、213)

打家劫舍平板板打家劫舍转圈圈打家劫舍(进阶版)平板板打家劫舍 转化子问题: 按顺序偷n间房子,就是考虑偷前n-1间房子还是偷前n-2间房子再偷第n间房子。 列出公式: res[n] max{ res[n-1] , 数组中最后一个数据res[n-…

企业信息化之源代码防泄密场景分析

场景描述 随着企业信息化发展迅速,越来越多的无形资产面临着被泄露,被盗取的,或员工无意导致的数据泄密风险。尤其是有源码开发的企业,源代码的安全更是重中之重,一旦泄密,有可能给企业带来不可估量的损失…

全程数字化的企业电子招标采购管理系统源码

全程数字化的采购管理 智能化平台化电子化内外协同 明理满足采购业务全程数字化, 实现供应商管理、采购需求、全网寻源、全网比价、电子招 投标、合同订单执行的全过程管理。 传统采购模式面临的挑战 如何以最合适的价格,找到最优的供应商,购买到最好的产品和服务?…

程序员必备网站,建议收藏!

俗话说的好,一个程序员,20%靠知识储备,80%靠网络搜索。 打开代码,打开Google,开始工作。 那么常用的写码软件,你知道几个呢? 下面我们来一起看一下常用的写码软件吧~ 建议收藏本文&#xff…

【算法】面试题 - 链表

链表相关面试题141. 环形链表问题:快慢指针为什么一定会相遇142. 环形链表 II问题:如何确认入口160. 相交链表237. 删除链表中的节点19. 删除链表的倒数第 N 个结点21. 合并两个有序链表23. 合并K个升序链表(两种解法)扩展&#x…

国产手机扬眉吐气,终于打击了苹果的嚣张气焰

苹果在9月份、10月份都取得了快速增长,而国产手机品牌持续下滑,但是11月份终于让国产手机捡回了主动权,11月份的数据显示有国产手机品牌的出货量大幅增长,而苹果的出货量却大幅下滑,国产手机成功反击了苹果。分析机构给…

Vue + SpreadJS 实现高性能数据展示与分析

Vue SpreadJS 实现高性能数据展示与分析 在前端开发领域,表格一直都是一个高频使用的组件,尤其是在中后台和数据分析场景下。但当一屏展示数据超过1000条数据记录时,会出现浏览器卡顿等问题,严重影响客户体验。为解决这些性能问…

Seay代码审计系统审计实战

今天继续给大家介绍渗透测试相关知识,本文主要内容是Seay代码审计系统审计实战。 免责声明: 本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负! 再次强调:严禁对未…

【算法题解】5. 删除有序数组中的重复项 + 移动零

文章目录删除有序数组中的重复项题目解题思路代码实现复杂度分析移动零题目解题思路代码实现复杂度分析删除有序数组中的重复项 题目 给你一个 升序排列 的数组 nums ,请你原地删除重复出现的元素,使每个元素只出现一次 ,返回删除后数组的新…

Python 并发编程实战,用多线程、多进程、多协程加速程序运行

Python 并发编程实战,用多线程、多进程、多协程加速程序运行 文章目录Python 并发编程实战,用多线程、多进程、多协程加速程序运行1、什么是CPU密集型计算、IO密集型计算?2、多线程、多进程、多协程的对比3、怎么根据任务选择对应技术&#x…

达梦数据成功过会!信创浪潮中如何成就一家国产龙头?

‍‍数据智能产业创新服务媒体——聚焦数智 改变商业2022年12月22日,上海证券交易所科创板上市委员会发布《2022年第110次审议会议结果公告》,武汉达梦数据股份有限公司(首发)符合发行条件、上市条件和信息披露要求。该公告标志着…

5.4 迭代语句

文章目录while语句使用while循环传统for语句传统for循环的执行过程for语句头中的多重定义省略for语句头的某些部分范围for语句do while语句迭代语句通常称为循环,它重复执行操作直到满足某个条件才停下来。while和for语句在执行循环体之前检查条件,do while 语句先执…

MATLAB算法实战应用案例精讲-【连接分析】PageRank(补充篇)(附Python代码实现)

前言 PageRank算法在1998年4月举行的第七届国际万维网大会上由Sergey Brin和Larry Page提出。PageRank是通过计算页面链接的数量和质量来确定网站重要性的粗略估计。算法创立之初的目的是应用在Google的搜索引擎中,对网站进行排名。 随着国内外学者的深入研究,PageRank算法…