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

瑞吉外卖Linux

文章目录

  • 💒 Linux
    • 🚏 1、Linux常用命令
      • 🚀 Linux命令初体验
      • 🚄 Linux命令使用技巧
      • 🚒 Linux命令格式 command [-options] [parameter]
      • 🚤 文件目录操作命令
        • 🚬 ls
        • 🚬 cd
        • 🚬 cat
        • 🚬 more
        • 🚬 tail
        • 🚬 mkdir
        • 🚬 rmdir
        • 🚬 rm
      • 🚗 拷贝移动命令
        • 🚬 cp
        • 🚬 mv
      • 🚲 打包压缩命令
        • 🚬 tar
      • 🛴 文本编辑命令
        • 🚬 vi/vim
        • 🚬 vim
      • 🛹 查找命令
        • 🚬 find
        • 🚬 grep
    • 🚏 2、Linux软件安装
    • 🚏 3、项目部署
      • 🚀 手工部署项目
      • 🚄 通过shell脚本自动部署项目
      • 🚬 1、在Linux中安装Git
      • 🚬 2、在Linux中安装maven
      • 🚬 3、编写Shell脚本(拉取代码、编译、打包、启动)
      • 🚬 4、为用户授予执行Shell脚本的权限
      • 🚬 5、设置静态ip
      • 🚬 6、重启网络服务
      • 🚬 Linux链接到Gitee(Gitee设置私有仓库)重点

😹 作者: gh-xiaohe
😻 gh-xiaohe的博客
😽 觉得博主文章写的不错的话,希望大家三连(✌关注,✌点赞,✌评论),多多支持一下!!

💒 Linux

🚏 1、Linux常用命令

  • 🚀 Linux命令初体验

    • ls 查看当前目录下的文件
    • pwd 查看当前所在目录
    • cd [目录名] 切换目录
    • touch [文件名] 如果文件不存在。新建文件
    • mkdir [目录名] 创建目录
    • rm [文件名] 删除指定文件
      • rm -rf [文件名]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LeOYi7Kf-1662014921086)(%E7%91%9E%E5%90%89%E5%A4%96%E5%8D%96.assets/image-20220901113036345.png)]

echo ‘LANG=“en_US.UTF-8”’ >> /etc/profile 追加在/etc/profile 目录下
source /etc/profile 立即重新加载一下

  • 🚄 Linux命令使用技巧

    • Tab键自动补全
    • 连续两次Tab键,给出操作提示
    • 使用上下箭头快速调出曾经使用过的命令
    • 使用clear命令或者Ctrl+L快捷键实现清屏
  • 🚒 Linux命令格式 command [-options] [parameter]

  • 说明:

    • command:命令名
    • [-options]:选项,可用来对命令进行控制,也可以省略
    • [parameter]:传给命令的参数,可以是零个、一个或者多个
  • 注意:[]代表可选命令名、选项、参数之间有空格进行分隔

  • 🚤 文件目录操作命令

    • 🚬 ls

      • 作用:显示指定目录下的内容
      • 语法:ls [-al] [dir]
      • 说明:
        • -a显示所有文件及目录(.开头的隐藏文件也会列出)
        • -l除文件名称外,同时将文件型态(d表示目录,-表示文件)、权限、拥有者、文件大小等信息详细列出
      • 注意:由于我们使用ls命令时经常需要加入-l选项,所以Linux为ls-l命令提供了一种简写方式,即ll
    • 🚬 cd

      • 作用:用于切换当前工作目录,即进入指定目录
      • 语法:cd [dirName]
      • 特殊说明:
        • ~表示用户的home目录
        • 。表示目前所在的目录
        • 。。表示目前目录位置的上级目录
    • 🚬 cat

      • 作用:用于显示文件内容
      • 语法:cat[-n] fileName
      • 说明:-n:由1开始对所有输出的行数编号
      • 举例:
        • cat /etc/profile 查看/etc目录下的profile文件内容
        • cat -n /etc/profile 查看/etc目录下的profile文件内容 显示行号
    • 🚬 more

      • 作用:以分页的形式显示文件内容
      • 语法:more fileName
      • 操作说明:
        • 回车键 向下滚动一行
        • 空格键 向下滚动一屏
        • b 返回上一屏
        • q或者Ctrl+C 退出more
      • 举例:more /etc/profile 以分页方式显示/etc目录下的profile文件内容
    • 🚬 tail

      • 作用:查看文件末尾的内容:
      • 语法:tail[-f] fileName
      • 说明:
        • -f:动态读取文件末尾内容并显示,通常用于日志文件的内容输出
      • 举例:
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uqyTjvAU-1662014921088)(%E7%91%9E%E5%90%89%E5%A4%96%E5%8D%96.assets/image-20220901142226850.png)]
    • 🚬 mkdir

      • 作用:创建目录
      • 语法:mkdir[-p] dirName
      • 说明:
        • -p:确保目录名称存在,不存在的就创建一个。通过此选项,可以实现多层目录同时创建
      • 举例:
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cOp146Jq-1662014921089)(%E7%91%9E%E5%90%89%E5%A4%96%E5%8D%96.assets/image-20220901142315282.png)]
    • 🚬 rmdir

      • 作用:删除空目录
      • 语法:rmdir [-p] dirName
      • 说明:
        • -p:当子目录被删除后使父目录为空目录的话,则一并删除
      • 举例:
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NNvDvRlp-1662014921089)(%E7%91%9E%E5%90%89%E5%A4%96%E5%8D%96.assets/image-20220901142134060.png)]
    • 🚬 rm

      • 作用:删除文件或者目录
      • 语法:rm [ -rf ] name
      • 说明:
        • -r:将目录及目录中所有文件(目录)逐一删除,即递归删除
        • -f:无需确认,直接删除
  • 🚗 拷贝移动命令

    • 🚬 cp

      • 作用:用于复制文件或目录
      • 语法:cp [-r] source dest
      • 说明:
      • -r:如果复制的是目录需要使用此选项,此时将复制该目录下所有的子目录和文件
      • 举例:
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a7dycBOi-1662014921089)(%E7%91%9E%E5%90%89%E5%A4%96%E5%8D%96.assets/image-20220901142103184.png)]
    • 🚬 mv

      • 作用:为文件或目录改名、或将文件或目录移动到其它位置
      • 语法:mv source dest
      • 举例:
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cEjTTwAu-1662014921090)(%E7%91%9E%E5%90%89%E5%A4%96%E5%8D%96.assets/image-20220901142042945.png)]
  • 🚲 打包压缩命令

    • 🚬 tar

      • 作用:对文件进行打包、解包、压缩、解压
      • 语法:tar[-zcxvf] fileName[files]
      • 包文件后缀为==.tar==表示只是完成了打包,并没有压缩
      • 包文件后缀为==.tar.gz==表示打包的同时还进行了压缩
      • 说明:
        • -z: z代表的是gzip,通过gzip命令处理文件,gzip可以对文件压缩或者解压
        • -c: c代表的是create,即创建新的包文件
        • -x: x代表的是extract,实现从包文件中还原文件
        • -v: v代表的是verbose,显示命令的执行过程
        • -f: f代表的是file,用于指定包文件的名称
        • c 和 x 是互斥的,解压和压缩不能同时进行
      • 解压 :tar -zxvf 文件.tar.gz 没有压缩 tar -xvf 文件.tar
      • 压缩 :tar -zcvf 文件名称 目录名称
      • 举例 :
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-udHlIRTP-1662014921090)(%E7%91%9E%E5%90%89%E5%A4%96%E5%8D%96.assets/image-20220901143253629.png)]
  • 🛴 文本编辑命令

    • 🚬 vi/vim

    • 作用:vi命令是Linux系统提供的一个文本编辑工具,可以对文件内容进行编辑,类似于windows中的记事本

    • 语法:vi fileName

    • 说明:

      • 1、vim是从vi发展来的一个功能更加强大的文本编辑工具,在编辑文件时可以对文本内容进行着色,方便我们对文件进行编辑处理,所以实际工作中vim更加常用。
      • 2、要使用vim命令,需要我们自己完成安装。可以使用下面的命令来完成安装:yum install vim
    • 🚬 vim

      • 作用:对文件内容进行编辑,vim其实就是一个文本编辑器
      • 语法:vim fileName
      • 说明:
        • 1、在使用vim命令编辑文件时,如果指定的文件存在则直接打开此文件。如果指定的文件不存在则新建文件。
        • 2、vim在进行文本编辑时共分为三种模式,分别是命令模式(Command mode),插入模式(Insert mode)和底行模式(Last line mode)。这三种模式之间可以相互切换。我们在使用vim时一定要注意我们当前所处的是哪种模式。
      • 针对vim中的三种模式说明如下:
        • 1、命令模式
          • 命令模式下可以查看文件内容、移动光标(上下左右箭头、gg(开头)、G(末尾))
          • 通过vim命令打开文件后,默认进入命令模式
          • 另外两种模式需要首先进入命令模式,才能进入彼此
        • 2、插入模式
          • 插入模式下可以对文件内容进行编辑
          • 在命令模式下按下[i,a,o]任意一个,可以进入插入模式。进入插入模式后,下方会出现【insert】字样
          • 在插入模式下按下ESC键,回到命令模式
        • 3、底行模式
        • 底行模式下可以通过命令对文件内容进行查找、显示行号、退出等操作
        • 在命令模式下按下[:,/]任意一个,可以进入底行模式
        • 通过 / 方式进入底行模式后,可以对文件内容进行查找
        • 通过 : 方式进入底行模式后,可以输入wq(保存并退出)、q!(不保存退出)、set nu(显示行号)
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lO53HSrf-1662014921090)(%E7%91%9E%E5%90%89%E5%A4%96%E5%8D%96.assets/image-20220901143722996.png)]
  • 🛹 查找命令

    • 🚬 find

      • 作用:在指定目录下查找文件

      • 语法:find dirName -option fileName 目录名称 -option 一般指定 -name (根据文件名称来查找)文件名称(可以使用通配符的方式)

      • 举例:

      • find / -name helloworld.log 在所有文件夹下查找helloworld.log文件
        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CNVEUWhn-1662015839014)(%E7%91%9E%E5%90%89%E5%A4%96%E5%8D%96.assets/image-20220901145908431.png)]

    • 🚬 grep

      • 作用:从指定文件中查找指定的文本内容
      • 语法:grep word fileName 查找的文本 从哪个文件中种找
      • 举例:
      • 在这里插入图片描述

🚏 2、Linux软件安装

    请观看个人博客Linux软件安装,链接。

🚏 3、项目部署

🚀 手工部署项目

  • 1、在IDEA中开发SpringBoot项目并打成jar包

  • 2、将jar包长传到Linux服务器

    • mkdir /usr/local/app 创建项目,将jar包放入到此目录
  • 3、启动SpringBoot程序

    • java -jar 项目名.jar
  • 4、确认防火墙的端口开放

  • 5、改为后台运行SpringBoot程序,并将日志输出到日志文件

    • 目前程序运行的问题

      • 线上程序不会采用控制台霸屏的形式运行程序,而是将程序在后台运行

      • 线上程序不会将日志输出到控制台,而是输出到日志文件,方便运维查阅信息

      • nohup命令:英文全称no hang up(不挂起),用于不挂断地运行指定命令,退出终端不会影响程序的运行

        语法格式:nohup Command [Arg …][&]

        参数说明:

        Command:要执行的命令

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

        &:让命令在后台运行

        举例:

        • nohup java -jar demo6-1.0.0.jar &> 瑞吉外卖.log & 后台运行java-jar命令,并将日志输出到瑞吉外卖文件
  • 6、提示SpringBoot程序

    • ps -ef |grep ‘java -jar’
    • kill -9 进程号

🚄 通过shell脚本自动部署项目

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Fjj3CNXf-1662172403197)(%E7%91%9E%E5%90%89%E5%A4%96%E5%8D%96.assets/image-20220902152431238.png)]

🚬 1、在Linux中安装Git

[root@localhost ~]# yum list git  # 列出git安装包
[root@localhost ~]# yum install git # 在线安装git

使用git克隆代码

[root@localhost ~]# cd /usr/local # 放置目录
[root@localhost ~]# git clone https://gitee.com/gh987/reggie-linux-test.git  

# 输入账号和密码 

🚬 2、在Linux中安装maven

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sCruby7h-1662172403198)(%E7%91%9E%E5%90%89%E5%A4%96%E5%8D%96.assets/image-20220902152705576.png)]

[root@localhost 瑞吉]# tar -zxvf apache-maven-3.5.4-bin.tar.gz -C /usr/local

vim /etc/profile

# 添加到文件末尾
export MAVEN_HOME=/usr/local/apache-maven-3.5.4
export PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH

source /etc/profile 								 # 重新加载
mvn -version 										 # 查看maven 的版本信息
vim /usr/local/apache-maven-3.5.4/conf/settings.xml  # 修改配置文件内容如下
mkdir /usr/local/repo								 # 在 usr/local 下创建 repo目录 	
<localRepository>/usr/local/repo</localRepository>   # repo目录作为maven 的本地仓库目录

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WAPMjRLR-1662172403199)(%E7%91%9E%E5%90%89%E5%A4%96%E5%8D%96.assets/image-20220902215805254.png)]

🚬 3、编写Shell脚本(拉取代码、编译、打包、启动)

    Shell脚本(shell script),是一种Linux系统中的脚本程序。

    使用Shell脚本编程跟JavaScript、Java编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。

    对于Shell脚本编写不作为本课程重点内容,直接使用课程资料中提供的脚本文件bootStart.sh即可。

    存放脚本目录:/usr/local/sh;    文件名:bootStart.sh

#!/bin/sh
echo =================================
echo  自动化部署脚本启动
echo ================================= # 类似于java中System.out.println();

echo 停止原来运行中的工程
# 如果原先 reggie-linux-test 程序是运行状态 需要先停止 在从git仓库中拉取最新的数据,在重新编译打包
APP_NAME=reggie-linux-test # 定义了一个变量叫APP_NAME
 
# 查找进程 赋值 tpid
tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then 		# 找到 执行then后面的代码
    echo 'Stop Process...'  # 现在控制台输出 Stop Process...(准备结束进程)
    kill -15 $tpid			# 结束掉这个进程号 -15 和-9相比 相对温柔一些 -9强制
fi
sleep 2 					# 睡眠 2s钟
# 再一次查询 双保险 强制结束
tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
    echo 'Kill Process!'
    kill -9 $tpid
else
    echo 'Stop Success!'
fi

echo 准备从Git仓库拉取最新代码
cd /usr/local/reggie-linux-test  # 拉取文件的位置

echo 开始从Git仓库拉取最新代码
git pull
echo 代码拉取完成

echo 开始打包
output=`mvn clean package -Dmaven.test.skip=true` # 先清理 之后在打包 跳过单元测试

cd target # 进入 target 目录

echo 启动项目
nohup java -jar reggie-linux-test.jar &> helloworld.log &
echo 项目启动完成

🚬 4、为用户授予执行Shell脚本的权限

    chmod(英文全拼:change mode)命令是控制用户对文件的权限的命令

    Linux中的权限分为:读(r)、写(w)、执行(x)三种权限

    Linux的文件调用权限分为三级:文件所有者(Owner)、用户组(Group)、其它用户(Other Users)

    只有文件的所有者和超级用户可以修改文件或目录的权限

    要执行Shell脚本需要有对此脚本文件的执行权限,如果没有则不能执行

[root@localhost sh]# ll # 查看一下权限
total 4
-rw-r--r--. 1 root root 1206 Sep  2 07:13 bootStart.sh
[root@localhost sh]# ./bootStart.sh # 可以看出没有执行的权限
-bash: ./bootStart.sh: Permission denied

[root@localhost sh]# chmod 777 bootStart.sh # 权限授权(读写可执行)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oo3izz1O-1662172403199)(%E7%91%9E%E5%90%89%E5%A4%96%E5%8D%96.assets/image-20220902221926543.png)]

在这里插入图片描述

🚬 5、设置静态ip

[root@localhost /]# cd etc/sysconfig/network-scripts/

[root@localhost network-scripts]# vim ifcfg-ens33

BOOTPROTO=“static”

IPADDR=“192.168.138.100”

NETMASK=“255.255.255.0”

GATEWAY=“192.168.138.2”

DNS1=“192.168.138.2”

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8tyL13wY-1662191432429)(%E7%91%9E%E5%90%89%E5%A4%96%E5%8D%96.assets/image-20220903154740621.png)]

🚬 6、重启网络服务

[root@localhost ~]# systemctl restart network

[root@localhost ~]#

注意:重启完网络服务后ip地址已经发生了改变,此时XShell已经连接不上Linux系统,需要创建一个新连接才能连接到Linux。

🚬 Linux链接到Gitee(Gitee设置私有仓库)重点

    公开仓库可以直接拉取

    解决私有仓库拉取输入Gitee账号密码问题

# 1、配置本地账户密码:
[root@localhost /]# git config --global user.name "xxxx"
[root@localhost /]# git config --global user.email "xxxxxxxqq.com"
# 2、查看
[root@localhost /]# git config --list --global
user.name=xxxx
user.email=xxxxxxxqq.com

# 3、配置公钥,输入如下,邮箱和刚才一致即可
[root@localhost /]# ssh-keygen -t ed25519 -C "xxxxxxxqq@qq.com"
# 4、按回车三次
Generating public/private ed25519 key pair.
Enter file in which to save the key (/root/.ssh/id_ed25519): 
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_ed25519.
Your public key has been saved in /root/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:hinumxXNbmjHmbeeWCjyuiP/NQ/62hKS+lbBN4BYr7Y 2495140780@qq.com
The key's randomart image is:
+--[ED25519 256]--+
|   o..           |
|  . ...          |
|     ...         |
|     .o=o        |
|    +.+oS.       |
|   oooo* +       |
|   .Eo=.% o      |
|  o.o*.B B o     |
|   =O*=++.=      |
+----[SHA256]-----+
[root@localhost /]# 

# 5、查看公钥目录
[root@localhost /]# cat /root/.ssh/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIhoL0tnX1vQrbqMDyagLUMeYwAYZa2DMvKFgeg2CRcA 2495140780@qq.com

# 6、把公钥复制到仓库里,添加ssh公钥

# 7、测试能否链接上
[root@localhost /]# ssh -T git@gitee.com
The authenticity of host 'gitee.com (212.64.63.215)' can't be established.
ECDSA key fingerprint is SHA256:FQGC9Kn/eye1W8icdBgrQp+KkGYoFgbVr17bmjey0Wc.
ECDSA key fingerprint is MD5:27:e5:d3:f7:2a:9e:eb:6c:93:cd:1f:c1:47:a3:54:b1.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'gitee.com,212.64.63.215' (ECDSA) to the list of known hosts.
Hi gonghe! You've successfully authenticated, but GITEE.COM does not provide shell access.

# 8、创建一个目录用于接收
[root@localhost ~]# mkdir reggie-linux-test 

# 9、进入这个目录,输入如下,初始化这个目录。
[root@localhost ~]# cd reggie-linux-test
[root@localhost reggie-linux-test]# git init

# 10、开始绑定远程仓库,输入如下,这里使用ssh绑定,也有https绑定方法
git remote add origin + ssh下载地址
[root@localhost reggie-linux-test]# git remote add origin git@gitee.com:gh987/reggie-linux-test.git

# 11、拉取分支最新代码。
[root@localhost reggie-linux-test]# git pull origin master

# 12、关联本地master和远程master,简化命令
[root@localhost reggie-linux-test]# git branch --set-upstream-to=origin/master master
Branch master set up to track remote branch master from origin. # 分支主机设置为从起点跟踪远程分支主机

# 13、如果不小心本地目录误删操作,可以使用如下命令,回退到当前版本。
[root@localhost reggie-linux-test]# git reset --hard HEAD

在这里插入图片描述

相关文章:

  • 准备去「技术出海峰会」看看
  • Java毕设项目-OA办公系统
  • C# Post请求上传文件_C#Post请求带文件
  • Flutter:文本组件
  • ANSYS2021安装过程问题总结
  • 洛谷 P3119【分层图】【tarjan】
  • Reggie外卖项目 —— 项目开发整体介绍
  • git -- 回退版本(两个版本之间来回切)
  • Non-nullable instance field must be initialized
  • C++中的struct和class基本没啥区别,唯一的区别如下
  • 【考研线代】五. 特征值和特征向量
  • 申请免费域名 + SSL 证书的方法
  • java基于ssm+vue+elementui的宠物用品商城管理系统 毕设
  • 从Z世代消费需求洞察文旅新业态
  • 华为方舟编译器开源项目编译第二弹
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • 【347天】每日项目总结系列085(2018.01.18)
  • android图片蒙层
  • iOS 系统授权开发
  • JS实现简单的MVC模式开发小游戏
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • rabbitmq延迟消息示例
  • underscore源码剖析之整体架构
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 创建一种深思熟虑的文化
  • 从tcpdump抓包看TCP/IP协议
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 如何在 Tornado 中实现 Middleware
  • 算法---两个栈实现一个队列
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • 如何用纯 CSS 创作一个货车 loader
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #Z2294. 打印树的直径
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (07)Hive——窗口函数详解
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (论文阅读11/100)Fast R-CNN
  • (南京观海微电子)——I3C协议介绍
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (十六)串口UART
  • (一)WLAN定义和基本架构转
  • (转)【Hibernate总结系列】使用举例
  • .java 9 找不到符号_java找不到符号
  • .net和php怎么连接,php和apache之间如何连接
  • .Net下使用 Geb.Video.FFMPEG 操作视频文件
  • @Async注解的坑,小心
  • @AutoConfigurationPackage的使用
  • @JsonSerialize注解的使用
  • @ModelAttribute注解使用
  • [1127]图形打印 sdutOJ
  • [⑧ADRV902x]: Digital Pre-Distortion (DPD)学习笔记
  • [AI]文心一言爆火的同时,ChatGPT带来了这么多的开源项目你了解吗