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

Linux 基本使用和程序部署

1. Linux 环境搭建

1.1 环境搭建方式

主要有 4 种:

  1. 直接安装在物理机上。但是Linux桌面使用起来非常不友好,所以不建议。[不推荐]。
  2. 使用虚拟机软件,将Linux搭建在虚拟机上。但是由于当前的虚拟机软件(如VMWare之类的)存在一些bug,会导致环境上出现各种莫名其妙的问题,比较折腾。[非常不推荐]。
  3. 使用WSL (Windows Subsystem for Linux)。这个是Windows近几年开发的新功能,在Windows系统内集成了一个Linux。但是目前这个技术还不够成熟。[暂时不推荐]。
  4. 使用云服务器,可以直接在 腾讯云、阿里云或华为云 等服务器厂商处直接购买一个云服务器。[推荐]

使用云服务器不仅环境搭建简单,避免折腾,同时还有一个最大的好处,部署在云服务器上的项目可以直接被外网访问到,这个时候就和一个公司发布一个正式的网站没有任何区别。也就能让我们自己写的程序真的去给别人去使用。

1.2 使用终端软件连接到 Linux

终端软件是一类工具软件,可以和远程的主机建立网络链接,从而对主机进行一些操作

常见的终端软件:

XShell、Putty、MobaXTerm、Iterm2、SecureCRT...

下面使用的是 XShell

官网:家庭/学校免费 - NetSarang Website

选择 家庭/教育 版即可,上面链接就是

1.3 使用 XShell 登录主机

在 XShell 终端下输入

ssh 服务器外网ip地址

此处的 ip 即为云服务器后台看到的外网 ip

如果网络畅通,将会提示输入用户名密码,输入即可登录


关于 XShell 下的复制粘贴

复制:Ctrl + Insert(有些电脑的 Insert 需要配合 Fn 来使用)

粘贴:Shift + Insert

直接使用 Ctrl+C 和 Ctrl+V 是不可以的,但是可以重新设置快捷键(工具 -> 选项 -> 键盘和鼠标 -> 编辑)

2. Linux 常用命令

ls

语法:ls [选项][目录或文件]

功能:对于目录,该命令列出该目录下的所有子目录与文件,对于文件,将列出文件名以及其他信息

常用选项:

  • -a 列出目录下的所有文件,包括以 . 开头的隐含文件
  • -d 将目录像文件一样显示,而不是显示其下的文件,如:ls -d 指定目录
  • -k 以 k 字节的形式表示文件的大小,如:ls -alk 指定文件
  • -l 列出文件的详细信息
  • -r 对目录反向排序
  • -t 以时间排序
  • -R 列出所有子目录下的文件(递归)

可以使用 命令 --help 来查看帮助文档,如下:

这些命令也可以相互组合,如下:


pwd

语法:pwd

功能:显示用户当前所在的目录


cd

Linux 系统中,磁盘上的文件和目录被组成一棵目录树,每个节点都是目录或文件

语法:cd 目录名

功能:改变工作目录,将当前工作目录改变到指定的目录下

示例:

# 返回上级目录
cd ..# 进入用户家目录
cd ~# 返回最近访问目录
cd -

Linux 目录结构

Linux 是一个树形目录结构

几个特殊的目录:

  • / 称为 根目录
  • . 称为 当前目录
  • .. 称为 当前目录的上级目录

绝对路径 & 相对路径

形如:/user/share/tomcat/logs/ 以根目录开头的,称为绝对路径

形如:./logs 以 . 或者 .. 开头的,称为相对路径

使用 Tab 键补全

我们敲的所有 Linux 命令,都可以使用 Tab 键来尝试补全,加快效率

例如:

但是当有两个都是 a 开头的文件时,按 Tab 键只能补充相同的部分,不同的部分仍需自己打,如:

当双击 Tab 后,它会将所有以 abc 为开头的文件显示出来

使用 Ctrl + C 重新输入

如果命令或目录敲错了,可以 Ctrl + C 取消当前的命令


touch

语法:touch [选项]...文件...

功能:touch 命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个不存在的文件

示例:

touch test.txt

rz & sz

rz 上传 sz 下载

有可能第一次使用,会出现未安装这两个指令的情况,提示如下:

只需要将它提示的安装命令运行一下即可使用:apt install lrzsz


cat

语法:cat [选项] [文件]

功能:查看目标文件的内容

常用选项:

-n 对输出的所有行编号

cat test.txt

cat 命令会将该文件全部显示出来,非常多:

若想要进行分页查看,可使用 more 命令:

可以只显示当前页,按空格,往后翻页;按 B 向上翻

想要结束查看,按 Ctrl + C

常用结束快捷键总结:

  • Ctrl + C
  • 两次 Ctrl + C
  • exit
  • :q!
  • :q

当使用 less 来查看文件时,Ctrl + C 和 exit 就结束不了了:

要使用 :q 来结束

使用 less 查看文件时,PgUp 和 PgDn 来翻页

使用 less 看完文件后,就消失了,而 cat 和 more 看完文件后,文件内容会留在屏幕上

使用 less 查看文件时,可以使用 / [要查询的关键字] 来查询(more 也是这样查找)


head 命令

默认查看前 10 行:

可以通过 head -数字 来设置查多少行:


tail 命令,从文件结尾查看(默认 10 行)

也可 tail -数字 来进行设置


mkdir

语法:mkdir [选项] dirname...

功能:在当前目录下创建一个名为“dirname”的目录

常用选项:

-p, --parents 可以是一个路径名称,此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多级目录

示例:

# 递归建立多个目录
mkdir -p test/test1

rm

语法:rm [-f-i-r-v] [dirName/dir]

功能:删除文件或目录

常用选项:

  • -f 即使文件属性为只读(即写保护),也能直接删除
  • -i 删除前逐一询问确认
  • -r 删除目录及其下所有文件

示例:

rm test.txt

重要注意事项:

千万不要运行 rm -rf /

尤其是在公司的生产服务器上

删除文件可以直接删除:

删文件夹不能直接删除:(需要加 -r)


cp

语法:cp [选项] 源文件或目录 目标文件或目录

功能:复制文件或目录

说明:cp 指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中;若同时指定多个文件或目录,而最后的目的地并非一个已经存在的目录,则会出现错误信息

常用选项:

  • -f 或 --force 强行复制文件或目录,不论目的文件或目录是否已经存在
  • -i 或 --interactive 覆盖文件之前先询问用户
  • -r 递归处理,将指定目录下的文件与子目录一并处理,若源文件或目录的形态,不属于目录或符号链接,则一律视为普通文件处理
  • -R 或 --recursive 递归处理,将指定目录下的文件及其子目录一并处理

示例:

cp test1.txt test2.txt

mv

语法:mv [选项] 源文件或目录 目标文件或目录

功能:

  1. 视 mv 命令中的第二个参数类型的不同(是目标文件还是目标目录),mv 命令将文件重命名或将其移至一个新的目录中
  2. 当第二个参数类型是文件时,mv 命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名
  3. 当第二个参数是已经存在的目录名称时,源文件或目录参数可以有多个,mv 命令将各参数指定的源文件均移至目标目录中

常用选项:

  • -f:force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖
  • -i:若目标文件(destination)已经存在时,就会询问是否覆盖

示例:

mv test1.txt test2.txt

tail

语法:tail [必要参数] [选择参数] [文件]

功能:用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理,常用于查看日志文件

选项:

  • -f 循环读取
  • -n<行数> 显示行数

示例:

tail -10 test1.txt

vim / vi

vim 是一个知名的文本编辑器,使用 vim 可以进行文本编辑

其相当于 Windows 的记事本,但功能比记事本要强大

1. 创建文件/打开文件

vim [文件名]

2. 进入插入模式

vim打开文件后默认是普通模式。普通模式下键盘的按键表示一些特殊功能的快捷键。(例如按下j并不 是输入字母"j",而是表示光标往下移动一行)。需要进入插入模式才能进行文本编辑。

使用 i 键可以进入到插入模式。(左下角提示--INSERT--)然后就可以像记事本一样正常编辑了。

3. 保存

在插入模式下不能保存文件,需要先回到 普通模式。按下 Esc 回到普通模式。

在普通模式下输入 :w,再按下回车,即可保存文件。

4. 退出 在插入模式下不能退出,需要先回到 普通模式。

退出时,分以下情况:

① 文件未修改:输入 :q,再按下回车,即可退出

② 文件修改并保存:使用 :wq 同时执行保存和退出。

③ 文件修改,但不希望保存:使用 :q! 进行强制退出


grep

语法:grep [参数]...[文件]...

功能:用于查找文件中是否包含指定字符串,并显示对应的行

选项:

  • -n<行数> 显示的行数
  • -w 全字匹配,要求整个单词都完全相同的结果才能匹配出来,而不仅仅是一个单词的一部分
  • -r 递归查找,可以搜索多级目录下的所有文件
  • --color 高亮查找到的结果
  • --include 指定查找某些文件
  • --exclude 指定排除某些文件

示例:

grep "hello" Hello.java

ps

语法:ps [参数]...

功能:用于查看当前系统上运行的进程

选项:

  • a 显示一个终端的所有进程
  • u 以用户为主的格式来显示程序状况
  • x 显示所有程序,不止是会话中的进程
  • e 显示所有进程,包括系统守护进程
  • f 显示完成格式输出

示例:

ps aux    # 显示系统上所有的进程
ps aux | grep "进程名"
ps aux | grep "进程id"ps -ef # 显示系统上所有的进程,但没有上面查的全(格式不一样)

netstat

语法:netstat [参数]...

功能:查看系统上的网络状态

选项:

  • -a 显示所有正在或不再侦听的套接字
  • -n 显示数字形式地址而不是去解析主机、端口或用户名
  • -p 显示套接字所属进程的 PID 和名称

示例:

netstat -anp
netstat -anp | grep "进程名"
netstat -anp | grep "端口号"

管道

管道是一种古老的“进程间通信”方式,在 Linux 指令中可以使用 | 作为管道标记

意思是将前一个指令标准输出的内容,作为第二个指令的标准输入内容

示例:

ps -ef|grep "java"
ps -ef|head -10
tail -f log.txt|grep "Exception"

3. 搭建 Java 部署环境

3.1 apt

apt(Advanced Packaging Tool),Linux 软件包管理工具。用于在 Ubuntu、Debian 和相关 Linux 发行版上安装、更新、删除和管理 deb 软件包。

大多数 apt 命令必须以具有 sudo 权限的用户身份运行。

tip:如果使用 CentOS 则使用 yum 软件包管理工具

apt 常用命令

列出所有软件包

sudo apt list

这个命令输出所有包的列表,内容比较多,可以使用 grep 命令过滤输出

sudo apt list|grep "java"

更新软件包数据库

sudo apt-get update

apt 实际上在可用软件包的数据库上工作,如果数据库没有更新,系统将不知道是否有更新的软件包可用,这就是为什么在安装任何 Linux 系统之后,第一件事应该是更新 apt 数据库

运行此命令将会看到从各种服务器检索到的软件包信息

安装软件包

sudo apt install package_name

移除软件包

sudo apt remove package_name

remove 命令将卸载给定的软件包,但可能会留下一些配置文件,如果要删除包含所有配置文件的软件包,需使用 purge

apt remove 和 apt purge 的区别

  • apt remove 删除包的二进制文件,它留下了残留的配置文件
  • apt purge 删除与包相关的所有内容,包括配置文件

3.2 JDK

1. 更新软件包

sudo apt-get update

2. 安装 openjdk

# 查找 jdk 包
apt list |grep "openjdk-17"# 安装 jdk
sudo apt install openjdk-17-jdk

安装完成后输入:

出现 jdk 版本即安装成功

tip:此处安装的是 OpenJDK,是一个开源版 JDK

卸载 OpenJDK

# 检查安装的是哪个 OpenJDK
dpkg --list | grep -i jdk# 移除 openjdk 包:
apt-get purge openjdk*# 卸载 OpenJDK 相关包:
apt-get purge icedtea-* openjdk-*# 检查所有 OpenJDK 包是否都已卸载完毕:
dpkg --list | grep -i jdk

3.3 MySQL

1. 使用 apt 安装 MySQL

# 查找安装包
apt list |grep "mysql-server"# 安装 mysql
sudo apt install mysql-server

2. 安装完成后,查看 MySQL 状态

sudo systemctl status mysql

执行结果:

root@hcss-ecs-55b8:~# sudo systemctl status mysql
● mysql.service - MySQL Community ServerLoaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)Active: active (running) since Mon 2024-12-23 16:42:03 CST; 25s agoProcess: 40526 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, statu>Main PID: 40545 (mysqld)Status: "Server is operational"Tasks: 38 (limit: 4326)Memory: 364.3MCPU: 850msCGroup: /system.slice/mysql.service└─40545 /usr/sbin/mysqldDec 23 16:42:02 hcss-ecs-55b8 systemd[1]: Starting MySQL Community Server...
Dec 23 16:42:03 hcss-ecs-55b8 systemd[1]: Started MySQL Community Server.
lines 1-14/14 (END)

3. MySQL 安装安全设置

默认的 MySQL 设置是不安全的,MySQL 安装提供了一个安全脚本,用于解决不太安全的默认选项,运行以下命令:

sudo mysql_secure_installation

接下来按照提示输入:

4. 设置密码

连接 MySQL 服务器

sudo mysql

 使用 alter user 命令修改密码

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '此处是密码';

当再次连接服务器时需要使用:

mysql -uroot -p

卸载 MySQL

# 停⽌ mysql
sudo systemctl stop mysql# 卸载 mysql
sudo apt-get remove --purge mysql-server mysql-client mysql-common# 删除 MySQL 配置⽂件和数据
sudo rm -rf /etc/mysql /var/lib/mysql# 清理残留⽂件和⽬录
sudo apt-get autoremove
sudo apt-get autoclean# 检查是否有残留
dpkg --list | grep -i mysql-*# 移除相关包
apt-get purge mysql*# 验证卸载结果
mysql --version

4. 部署 Web 项目到 Linux

4.1 环境配置

要想程序正常运行,需要保证环境和程序都要正确,我们需要先设置环境

数据准备

按照以下数据库建表脚本,在服务器上运行,建立表结构

-- 建表SQL
create database if not exists java_blog_spring charset utf8mb4;use java_blog_spring;
-- 用户表
DROP TABLE IF EXISTS java_blog_spring.user_info;
CREATE TABLE java_blog_spring.user_info(`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() ON UPDATE now(),PRIMARY KEY ( id ),
UNIQUE INDEX user_name_UNIQUE ( user_name ASC )) ENGINE = INNODB DEFAULT CHARACTER 
SET = utf8mb4 COMMENT = '用户表';-- 博客表
drop table if exists java_blog_spring.blog_info;
CREATE TABLE java_blog_spring.blog_info (`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() ON UPDATE now(),PRIMARY KEY (id))
ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '博客表';-- 新增用户信息
insert into java_blog_spring.user_info (user_name, password,github_url)values("zhangsan","123456","https://gitee.com/bubble-fish666/class-java45");
insert into java_blog_spring.user_info (user_name, password,github_url)values("lisi","123456","https://gitee.com/bubble-fish666/class-java45");insert into java_blog_spring.blog_info (title,content,user_id) values("第一篇博客","111我是博客正文我是博客正文我是博客正文",1);
insert into java_blog_spring.blog_info (title,content,user_id) values("第二篇博客","222我是博客正文我是博客正文我是博客正文",2);

程序配置文件修改

实际工作中,开发环境,测试环境以及生产环境的配置都是不一样的

比如 mysql 的用户名和密码

我们可以针对不同的环境,设置不同的配置

多平台文件配置

针对不同平台创建不同的配置文件,要求名字为 application-XXX.yml 或 application-XXX.properties

以下以 application-XXX.yml 为例:

固定格式,只有后面的字母可以改

在配置文件里写不同内容

application-dev.yml

spring:application:name: spring-boot-blogdatasource:url: jdbc:mysql://127.0.0.1:3306/java_blog_spring?characterEncoding=utf8&useSSL=falseusername: rootpassword: 本地数据库密码driver-class-name: com.mysql.cj.jdbc.Driver
mybatis-plus:configuration:map-underscore-to-camel-case: truelog-impl: org.apache.ibatis.logging.stdout.StdOutImpl
logging:file:name: spring-blog.log

application-prod.yml

spring:application:name: spring-boot-blogdatasource:url: jdbc:mysql://127.0.0.1:3306/java_blog_spring?characterEncoding=utf8&useSSL=falseusername: rootpassword: 云服务器数据库密码driver-class-name: com.mysql.cj.jdbc.Driver
mybatis-plus:configuration:map-underscore-to-camel-case: true
#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
logging:file:name: spring-blog.log

在主配置文件 application.yml 中指定配置文件,并删除数据库相关配置

spring:profiles:active: prod

tip:三种 application 生效情况

当把主配置文件注释掉后:

只会生效主配置文件,因此需要生效 dev 或 prod 时,需要在主配置文件中设置

这样很麻烦,每次需求变更都需要改代码,因此可以使用 Maven 将其变成一个变量,通过传递的方式来更改需求

从 Maven 中读取环境变量

    <profiles><profile><id>dev</id><!--自定义的属性--><properties><profile.name>dev</profile.name><mysql.password>开发环境数据库密码</mysql.password></properties><activation><!--默认使用 dev--><activeByDefault>true</activeByDefault></activation></profile><profile><id>prod</id><!--自定义的属性--><properties><profile.name>prod</profile.name><mysql.password>生产环境数据库密码</mysql.password></properties></profile></profiles>

4.2 构建项目并打包

在本地使用 maven 进行打包

tip:如果 Test 代码中有与环境配置相关的操作(比如数据库相关的操作),打包可能会失败,此时可点击下图红框处跳过测试

点击上图中的 package 运行如下:

4.3 上传 jar 包到服务器并运行

1. 上传 jar 包

直接拖动打好的 jar 包到 XShell 窗口即可完成文件的上传(上传速度取决于网络速度)

2. 运行程序

java -jar blog.jar

上面命令可以启动程序,但是当 XShell 窗口关掉后,博客系统也被关闭了,无法再登录

因此想要在后台运行程序,需要用到下面命令:

nohup java -jar blog.jar &

此时就算将电脑关掉,只要云服务器不关就可以一直访问

nohup:后台运行程序,用于在系统后台不挂断的运行命令,退出终端不会影响程序的运行

语法格式:

nohup Command [Arg...] [&]

参数说明:

Command:要执行的命令

Arg:一些参数,可以指定输出文件

&:让命令在后台执行,终端退出后命令仍旧执行

例子:

nuhup java -jar blog.jar >/logs &

Linux 可以通过 > 把需要输出的内容写到指定文件中,这样的操作称为“重定向”

3. 开放端口号

如果外网需要访问该服务,需要先从服务器防火墙开放对应的端口号

本着服务器安全的原则,云服务器上的端口非必要不开启

比如常见端口号:数据库3306,Redis 6379,尽可能不要开放,而是采用其他方式来连接,比如配置隧道的方式

以华为云服务器举例:

1) 进入 安全组 / 防火墙 管理页面

2) 添加规则

端口号写需要开放的端口号,多个端口号以逗号分隔

4.4 验证程序

使用 tail -f 来查看滚动日志

当尝试登录时,会发现密码错误,这是因为数据库的密码还没有加密,下面生成一些密文,放到数据库中

4.5 常见问题

服务不能正常访问的原因:

1. 确认程序是否启动

使用下面两个命令查看程序是否在运行

ps -ef|grep java
netstat -nltp|grep 8080

2. 确认端口号是否开放

3. 使用 curl http://127.0.0.1:8080/blog_login.html 看一下是否有返回 html 页面,如果有返回,说明程序启动成功了,应该考虑端口是否已开放

4. 确认防火墙是否打开(默认是关闭)

如果防火墙打开了,还需要再打开防火墙的端口号(如上面的 8080)

4.6 杀掉进程

如果需要重启服务,或者重新部署等,都需要先停止之前的服务

1. 查看当前服务的进程

ps -ef|grep java

上图中 46947 就是该服务的进程

2. 杀掉进程

kill -9 PID

相关文章:

Linux 基本使用和程序部署

1. Linux 环境搭建 1.1 环境搭建方式 主要有 4 种&#xff1a; 直接安装在物理机上。但是Linux桌面使用起来非常不友好&#xff0c;所以不建议。[不推荐]。使用虚拟机软件&#xff0c;将Linux搭建在虚拟机上。但是由于当前的虚拟机软件(如VMWare之类的)存在一些bug&#xff…...

uniapp微信小程序,使用fastadmin完成一个一键获取微信手机号的功能

前端部分 点击按钮&#xff0c;获取手机号 <button open-type"getPhoneNumber" getphonenumber"bindGetPhoneNumber" hover-class"none"class"btn-purity">一键获取</button> 传入openid和code bindGetPhoneNumber(e) …...

CSS系列(27)- 图形与滤镜详解

前端技术探索系列&#xff1a;CSS 图形与滤镜详解 &#x1f3a8; 致读者&#xff1a;探索CSS的艺术表现力 &#x1f44b; 前端开发者们&#xff0c; 今天我们将深入探讨 CSS 图形和滤镜效果&#xff0c;学习如何创建引人注目的视觉效果。 基础图形 &#x1f680; 几何形状…...

Docker 技术系列之安装多版本Mysql5.6和Mysql5.7

image 大家好&#xff0c;后面的就不是关于MAC专有的内容&#xff0c;基本是跟Java环境&#xff0c;基础技术方面有关。所以这个教程对于在linux系统还是macOS都是通用的&#xff0c;不用担心。 上一篇&#xff0c;我们安装好对应的Docker之后&#xff0c;感受到了它的便利。接…...

理解并使用Linux 内核中的 Tracepoint

理解并使用Linux 内核中的 Tracepoint 1. 引言 1.1 为什么需要 Tracepoint&#xff1f; 在内核调试与性能分析中&#xff0c;传统的 printk 方法虽然简单直接&#xff0c;但存在几个显著的局限性&#xff1a; 日志噪音&#xff1a;printk 会将所有输出无差别地记录到系统日…...

centos7中Gbase8s数据库安装,以及数据导入遇到的一系列问题

centos7中Gbase8s数据库安装&#xff0c;以及遇到的一系列问题 以下是我在centos7上安装gbase8s数据库遇到的一系列问题&#xff0c;包括数据库安装&#xff0c;数据导入&#xff0c;数据连接&#xff0c;不能完全作为标准&#xff0c;只可作为类似问题参考&#xff0c;有问题…...

AW36518芯片手册解读(3)

接前一篇文章&#xff1a;AW36518芯片手册解读&#xff08;2&#xff09; 二、详述 3. 功能描述 &#xff08;1&#xff09;上电复位 当电源电压VIN降至预定义电压VPOR&#xff08;典型值为2.0V&#xff09;以下时&#xff0c;该设备会产生复位信号以执行上电复位操作&#x…...

MySQL的REPEATABLE READ事务隔离级别

本文隔离级别&#xff1a; T1内读T2的update数据 首先开两个事务&#xff08;左二&#xff09; 事务1修改成李四,提交 事务2再读还是张三&#xff0c;也就是说&#xff0c;记录的数据从事务开始时一直到结束&#xff0c;读的都是同一个版本,读不到T2未提交的此条记录修改&…...

sqoop的参数有哪些?

Sqoop 是一款用于在 Hadoop 与关系型数据库之间进行数据传输的工具&#xff0c;它有很多参数&#xff0c;可分为通用参数、导入参数和导出参数等&#xff0c;以下是一些常见的参数介绍&#xff1a; 通用参数 --connect 说明&#xff1a;指定要连接的关系型数据库的 JDBC URL。…...

动态规划<四> 回文串问题(含对应LeetcodeOJ题)

目录 引例 其余经典OJ题 1.第一题 2.第二题 3.第三题 4.第四题 5.第五题 引例 OJ 传送门Leetcode<647>回文子串 画图分析&#xff1a; 使用动态规划解决 原理&#xff1a;能够将所有子串是否是回文的信息保存在dp表中 在使用暴力方法枚举出所有子串&#xff0c;是…...

跨模态知识迁移:基于预训练语言模型的时序数据建模

在NLP和CV领域&#xff0c;通常通过在统一的预训练模型上进行微调&#xff0c;能够在各自领域的下游任务中实现SOTA&#xff08;最先进&#xff09;的结果。然而&#xff0c;在时序预测领域&#xff0c;由于数据量相对较少&#xff0c;难以训练出一个统一的预训练模型来覆盖所有…...

重温设计模式--职责链模式

文章目录 职责链模式的详细介绍C 代码示例C示例代码2 职责链模式的详细介绍 定义与概念 职责链模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种行为型设计模式&#xff0c;它旨在将请求的发送者和多个接收者解耦&#xff0c;让多个对象都有机会处理请求&a…...

git冲突解决

git冲突解决 最近遇到了一次git冲突的问题 起因是因为最近公司数据推送部分重构&#xff0c;负责重构的同事就改动了我的一小部分推送的代码&#xff0c;然后等我开发完合并到远程master的时候&#xff0c;报了merge冲突。我对于git工具确实不是很熟练&#xff0c;只是学习了…...

Java学习笔记(14)--面向对象编程

面向对象基础 学习资料来自多态 - Java教程 - 廖雪峰的官方网站 目录 面向对象基础 Override 多态 举个例子 覆写Object方法 调用super final 练习 小结 Override 在继承关系中&#xff0c;子类如果定义了一个与父类方法签名完全相同的方法&#xff0c;被称为覆写&…...

《Swift 字面量》

《Swift 字面量》 介绍 在 Swift 编程语言中&#xff0c;字面量是一种表示源代码中固定值的表达方式。字面量可以直接表示数字、字符串、布尔值等基本数据类型&#xff0c;为编程提供了简洁和直观的方式。Swift 支持多种类型的字面量&#xff0c;包括整数字面量、浮点数字面量…...

数据库 SQL 常用语句全解析

数据库 SQL 常用语句全解析 在数据库领域&#xff0c;SQL&#xff08;Structured Query Language&#xff09;作为标准语言&#xff0c;掌控着数据的查询、插入、更新与删除等关键操作。无论是新手入门数据库&#xff0c;还是经验丰富的开发者日常工作&#xff0c;熟练掌握 SQ…...

SQLite 命令

关于《SQLite 命令》的文章&#xff0c;我可以为您概述一些关键点。SQLite是一个轻量级的数据库管理系统&#xff0c;它被广泛用于各种应用程序中。SQLite命令主要分为两类&#xff1a;一类是SQL命令&#xff0c;另一类是SQLite特定的点命令。 SQL命令&#xff1a;这些命令用于…...

本地如何启动casdoor

1、下载代码 GitHub - casdoor/casdoor at v1.777.0 下载对应tag的代码&#xff0c;我这里选择的时v1.777.0版本 通过网盘分享的文件&#xff1a;casdoor-1.777.0.zip 链接: https://pan.baidu.com/s/1fPNqyJYeyfZnem_LtEc0hw 提取码: avpd 2、启动后端 1、使用goland编译…...

目标检测-R-CNN

R-CNN在2014年被提出&#xff0c;算法流程可以概括如下&#xff1a; 候选区域生成&#xff1a;利用选择性搜索(selective search)方法找出图片中可能存在目标的候选区域(region proposal) CNN网络提取特征&#xff1a;对候选区域进行特征提取(可以使用AlexNet、VGG等网络) 目…...

【持续更新】Github实用命令

Intro 最近高强度使用github&#xff0c;遂小计于此作为备忘。 Basic github是一个代码管理软件&#xff0c;能够track文件变动并且管理版本&#xff0c;是当代coding必不可少的工具。当你安装好github在本地以后&#xff0c;你可以通过以下命令初始化当前文件夹&#xff08…...

docker 容器的基本使用

docker 容器 一、docker是什么&#xff1f; 软件的打包技术&#xff0c;就是将算乱的多个文件打包为一个整体&#xff0c;打包技术在没有docker容器之前&#xff0c;一直是有这种需求的&#xff0c;比如上节课我把我安装的虚拟机给你们打包了&#xff0c;前面的这种打包方式是…...

css让按钮放在最右侧

要将 el-button 按钮放在最右侧&#xff0c;可以使用多种方法&#xff0c;具体取决于使用的布局方式和样式库。以下是几种常见的解决方案&#xff1a; 方法 1&#xff1a;使用 CSS Flexbox Flexbox 是一种非常灵活的布局方式&#xff0c;可以轻松实现水平或垂直对齐。你可以将…...

8K+Red+Raw+ProRes422分享5个影视级视频素材网站

Hello&#xff0c;大家好&#xff0c;我是后期圈&#xff01; 在视频创作中&#xff0c;电影级的视频素材能够为作品增添专业质感&#xff0c;让画面更具冲击力。无论是广告、电影短片&#xff0c;还是品牌宣传&#xff0c;高质量的视频素材都是不可或缺的资源。然而&#xff…...

Linux网络——UDP的运用

Linux网络——UDP的运用 文章目录 Linux网络——UDP的运用一、引入二、服务端实现2.1 创建socket套接字2.2 指定网络接口并bind2.3 接收数据并处理2.4 整体代码2.5 IP的绑定的细节 三、用户端实现3.1 创建套接字3.2 指定网络接口3.3 发生数据并接收3.4 绑定问题 四、代码五、UD…...

项目亮点案例

其实对我来说是日常操作&#xff0c;但是如果在面试的时候面试者能把日常的事情总结好发出来&#xff0c;其实足矣。 想让别人认同项目&#xff0c;选取的示例需要包含以下要素&#xff1a; 亮点项目四要素&#xff1a;明确的目标&#xff0c;问题点&#xff0c;解决方法和结果…...

Retrofit源码分析:动态代理获取Api接口实例,解析注解生成request,线程切换

目录 一&#xff0c;Retrofit的基本使用 1.定义api接口 2.创建Retrofit实例 3.获取api接口实例发起请求 二&#xff0c;静态代理和动态代理 1&#xff0c;静态代理 2&#xff0c;动态代理 三&#xff0c;动态代理获取Api接口实例 四&#xff0c;解析接口方法注解&…...

范德蒙矩阵(Vandermonde 矩阵)简介:意义、用途及编程应用

参考&#xff1a; Introduction to Applied Linear Algebra – Vectors, Matrices, and Least Squares Stephen Boyd and Lieven Vandenberghe 书的网站: https://web.stanford.edu/~boyd/vmls/ Vandermonde 矩阵简介&#xff1a;意义、用途及编程应用 在数学和计算科学中&a…...

【中标麒麟服务器操作系统实例分享】java应用DNS解析异常分析及处理

了解更多银河麒麟操作系统全新产品&#xff0c;请点击访问 麒麟软件产品专区&#xff1a;https://product.kylinos.cn 开发者专区&#xff1a;https://developer.kylinos.cn 文档中心&#xff1a;https://document.kylinos.cn 情况描述 中标麒麟服务器操作系统V7运行在 ARM…...

网安瞭望台第17期:Rockstar 2FA 故障催生 FlowerStorm 钓鱼即服务扩张现象剖析

国内外要闻 Rockstar 2FA 故障催生 FlowerStorm 钓鱼即服务扩张现象剖析 在网络安全的复杂战场中&#xff0c;近期出现了一个值得关注的动态&#xff1a;名为 Rockstar 2FA 的钓鱼即服务&#xff08;PhaaS&#xff09;工具包遭遇变故&#xff0c;意外推动了另一个新生服务 Flo…...

玩转OCR | 探索腾讯云智能结构化识别新境界

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀ 玩转OCR 腾讯云智能结构化识别产品介绍服务应用产品特征行业案例总结 腾讯云智能结构化识别 腾讯云智能结构化OCR产品分为基础版与高级版&am…...