shell语法
概论
shell是我们通过命令行与操作系统沟通的语言
shell脚本可以直接在命令行中执行,也可以将一套逻辑组织成一个文件,方便复用。
DA Terminal中的命令行可以看成是一个“shell脚本在逐行执行”。
1.脚本示例
新建一个test.sh
文件,内容如下:
#! /bin/bash
echo "Hello World!"
2.运行方式
-
作为可执行文件
acs@9e0ebfcd82d7:~$ chmod +x test.sh # 使脚本具有可执行权限 acs@9e0ebfcd82d7:~$ ./test.sh # 当前路径下执行 Hello World! # 脚本输出 acs@9e0ebfcd82d7:~$ /home/acs/test.sh # 绝对路径下执行 Hello World! # 脚本输出 acs@9e0ebfcd82d7:~$ ~/test.sh # 家目录路径下执行 Hello World! # 脚本输出
-
用解释器执行
acs@9e0ebfcd82d7:~$ bash test.sh Hello World! # 脚本输出
注释
1.单行注释
-
每行中
#
之后的内容均是注释。# 这是一行注释 echo 'Hello World' # 这也是注释
2.多行注释
-
格式
:<<EOF 第一行注释 第二行注释 第三行注释 EOF
-
其中EOF可以换成其它任意字符串。例如:
:<<abc 第一行注释 第二行注释 第三行注释 abc:<<! 第一行注释 第二行注释 第三行注释 !
变量
1.定义变量
-
定义变量,不需要加
$
符号,例如:name1='abc' # 单引号定义字符串 name2="abc" # 双引号定义字符串 name3=abc # 也可以不加引号,同样表示字符串
2.使用变量
-
使用变量,需要加上 符号,或者 符号,或者 符号,或者{}符号。
-
花括号是可选的,主要为了帮助解释器识别变量边界。
name=zhangsan echo $name # 输出zhangsan echo ${name} # 输出zhangsan echo ${name}hello # 输出zhangsanhello
3.只读变量
-
使用
readonly
或者declare
可以将变量变为只读name=abc readonly name declare -r name # 两种写法均可name=def # 会报错,因为此时name只读
4.删除变量
-
unset
可以删除变量。name=abc unset name echo $name # 输出空行
5.变量类型
-
自定义变量(局部变量):子进程不能访问的变量
acs@9e0ebfcd82d7:~$ name=abc # 定义变量 acs@9e0ebfcd82d7:~$ export name # 第一种方法 acs@9e0ebfcd82d7:~$ declare -x name # 第二种方法
-
环境变量(全局变量):子进程可以访问的变量
acs@9e0ebfcd82d7:~$ export name=abc # 定义环境变量 acs@9e0ebfcd82d7:~$ declare +x name # 改为自定义变量
6.字符串
-
字符串可以用单引号,也可以用双引号,也可以不用引号
-
单引号与双引号的区别:
- 单引号中的内容会原样输出,不会执行、不会取变量;
- 双引号中的内容可以执行、可以取变量
name=abc # 不用引号 echo 'hello, $name \"hh\"' # 单引号字符串,输出 hello, $name \"hh\" echo "hello, $name \"hh\"" # 双引号字符串,输出 hello, abc "hh"
-
获取长度与提取子串
name="abc" echo ${#name} # 输出3name="hello, abc" echo ${name:0:5} # 提取从0开始的5个字符
7.文件参数变量
-
在执行shell脚本时,可以向脚本传递参数。
-
$1
是第一个参数,$2
是第二个参数,以此类推。特殊的,$0
是文件名(包含路径)。#! /bin/bashecho "文件名:"$0 echo "第一个参数:"$1 echo "第二个参数:"$2 echo "第三个参数:"$3 echo "第四个参数:"$4acs@9e0ebfcd82d7:~$ chmod +x test.sh acs@9e0ebfcd82d7:~$ ./test.sh 1 2 3 4 文件名:./test.sh 第一个参数:1 第二个参数:2 第三个参数:3 第四个参数:4
-
其他参数相关变量
参数 说明 $#
代表文件传入的参数个数,如上例中值为4 $*
由所有参数构成的用空格隔开的字符串,如上例中值为 "$1 $2 $3 $4"
$@
每个参数分别用双引号括起来的字符串,如上例中值为 "$1" "$2" "$3" "$4"
$$
脚本当前运行的进程ID $?
上一条命令的退出状态(注意不是stdout,而是exit code)。0表示正常退出,其他值表示错误 $(command)
返回 command
这条命令的stdout
(可嵌套)command
返回 command
这条命令的stdout
(不可嵌套)
8.数组
定义
-
数组用小括号表示,元素之间用空格隔开
array=(1 abc "def" hhh)
-
也可以直接定义数组中某个元素的值:
array[0]=1 array[1]=abc array[2]="def"
9.读取
-
读取数组中某个元素的值
${array[index]}array=(1 abc "def" hhh) echo ${array[0]} echo ${array[1]} echo ${array[2]}
-
读取整个数组
${array[@]} # 第一种写法 ${array[*]} # 第二种写法array=(1 abc "def" hhh) echo ${array[@]} # 第一种写法 echo ${array[*]} # 第二种写法
10.数组长度
-
类似于字符串
${#array[@]} # 第一种写法 ${#array[*]} # 第二种写法
expr
命令
shell中不可以直接通过表达式计算值,这时候就要用到 expr
命令
1.使用
-
格式
expr 表达式
-
表达式说明
- 用空格隔开每一项
- 用反斜杠放在shell特定的字符前面(发现表达式运行错误时,可以试试转义)
- 对包含空格和其他特殊字符的字符串要用引号括起来
expr
会在stdout
中输出结果。如果为逻辑关系表达式,则结果为真,stdout
为1
,否则为0
。
2.字符串表达式
-
length STRING
:返回字符串长度 -
index STRING CHARSET
:CHARSET
中任意单个字符在STRING
中最前面的字符位置,下标从1开始,依次寻找。- 找到则返回相应位置,到最后也找不到则返回0
-
substr STRING POSITION LENGTH
- 返回
STRING
字符串中从POSITION
开始,长度最大为LENGTH
的子串。如果POSITION
或LENGTH
为负数,0或非数值,则返回空字符串。
str="Hello World!"echo `expr length "$str"` # ``不是单引号,表示执行该命令,输出12 echo `expr index "$str" aWd` # 输出7,下标从1开始 echo `expr substr "$str" 2 3` # 输出 ell
- 返回
3.整数表达式
expr
支持普通的算术操作,算术表达式优先级低于字符串表达式,高于逻辑关系表达式
-
+ -
:加减运算。两端参数会转换为整数,如果转换失败则报错。 -
* / %
:乘,除,取模运算。两端参数会转换为整数,如果转换失败则报错。 -
()
:可以改变优先级,但需要用反斜杠转移a=3 b=4echo `expr $a + $b` # 输出7 echo `expr $a - $b` # 输出-1 echo `expr $a \* $b` # 输出12,*需要转义 echo `expr $a / $b` # 输出0,整除 echo `expr $a % $b` # 输出3 echo `expr \( $a + 1 \) \* \( $b + 1 \)` # 输出20,值为(a + 1) * (b + 1)
4.逻辑关系表达式
-
|
- 如果第一个参数非空且非0,则返回第一个参数的值,否则返回第二个参数的值
- 但要求第二个参数的值也是非空或非0,否则返回0。
- 如果第一个参数是非空或非0时,不会计算第二个参数。
-
&
- 如果两个参数都非空且非0,则返回第一个参数,否则返回0。
- 如果第一个参为0或为空,则不会计算第二个参数。
-
< <= = == != >= >
- 比较两端的参数,如果为true,则返回1,否则返回0。
- ”==”是”=”的同义词。
- ”expr”首先尝试将两端参数转换为整数,并做算术比较,如果转换失败,则按字符集排序规则做字符比较。
-
()
可以改变优先级,但需要用反斜杠转义a=3 b=4echo `expr $a \> $b` # 输出0,>需要转义 echo `expr $a '<' $b` # 输出1,也可以将特殊字符用引号引起来 echo `expr $a '>=' $b` # 输出0 echo `expr $a \<\= $b` # 输出1c=0 d=5echo `expr $c \& $d` # 输出0 echo `expr $a \& $b` # 输出3 echo `expr $c \| $d` # 输出5 echo `expr $a \| $b` # 输出3
read
命令
read命令用于从标准输入中读取单行数据。当读到文件结束符时,exit code为1,否则为0
1.参数说明
-
-p
: 后面可以接提示信息 -
-t
:后面跟秒数,定义输入字符的等待时间,超过等待时间后会自动忽略此命令DAs@9e0ebfcd82d7:~$ read name # 读入name的值 zhangsan # 标准输入 DAs@9e0ebfcd82d7:~$ echo $name # 输出name的值 zhangsan #标准输出 DAs@9e0ebfcd82d7:~$ read -p "Please input your name: " -t 30 name # 读入name的值,等待时间30秒 Please input your name: zhangsan # 标准输入 DAs@9e0ebfcd82d7:~$ echo $name # 输出name的值 zhangsan # 标准输出
echo
命令
此命令用于输出字符串
1.命令格式
echo STRING
2.不同显示
-
显示普通字符
echo "Hello" echo Hello # 引号可以省略
-
显示转义字符
echo "\"Hello\"" # 注意只能使用双引号,如果使用单引号,则不转义 echo \"Hello\" # 也可以省略双引号
-
显示变量
name=zhangsan echo "My name is $name" # 输出 My name is zhangsan
-
显示换行
echo -e "Hi\n" # -e 开启转义 echo "jony" Hi jony
-
显示不换行
echo -e "Hi \c" # -e 开启转义 \c 不换行 echo "jony"Hi jony
-
显示结果定向至文件
echo "Hello World" > output.txt # 将内容以覆盖的方式输出到output.txt中\\
-
原样输出
name=DAwing echo '$name\"'
-
显示命令执行结果
echo `date` Wed Sep 1 11:45:33 CST 2021
printf
命令
printf命令用于格式化输出,类似于C/C++中的printf函数。默认不会在字符串末尾添加换行符。
printf "%10d.\n" 123 # 占10位,右对齐
printf "%-10.2f.\n" 123.123321 # 占10位,保留2位小数,左对齐
printf "My name is %s\n" "zhangsan" # 格式化输出字符串
printf "%d * %d = %d\n" 2 3 `expr 2 \* 3` # 表达式的值作为参数123.
123.12 .
My name is zhangsan
2 * 3 = 6
test
命令与判断符号[]
1.逻辑运算符&&和||
- && 表示与,|| 表示
- 二者具有短路原则:
expr1 && expr2
:当expr1
为假时,直接忽略expr2
expr1 || expr2
:当expr1
为真时,直接忽略expr2
- 表达式的
exit code
为0
,表示真;为非零,表示假。(与C/C++中的定义相反)(可以理解为main
函数正常运行时返回0)
2.test
命令
-
在命令行中输入
man test
,可以查看test命令的用法。 -
test命令用于判断文件类型,以及对变量做比较。
-
test命令用
exit code
返回结果,而不是使用stdout。0表示真,非0表示假。test 2 -lt 3 # 为真,返回值为0 echo $? # 输出上个命令的返回值,输出0DAs@9e0ebfcd82d7:~$ ls # 列出当前目录下的所有文件 homework output.txt test.sh tmp DAs@9e0ebfcd82d7:~$ test -e test.sh && echo "exist" || echo "Not exist" exist # test.sh 文件存在 DAs@9e0ebfcd82d7:~$ test -e test2.sh && echo "exist" || echo "Not exist" Not exist # testh2.sh 文件不存在
3.关于文件
-
类型判断:
test -e filename # 判断文件是否存在
测试参数 代表意义 -e 文件是否存在 -f 是否为文件 -d 是否为目录 -
权限判断:
test -r filename # 判断文件是否可读
测试参数 代表意义 -r 文件是否可读 -w 文件是否可写 -x 文件是否执行 -s 是否为非空文件
4.比较与多重条件判定
-
整数间比较:
test $a -eq $b # a是否等于b
测试参数 代表意义 -eq 判断两数是否相等 -ne 判断两数是否不等 -gt 是否大于关系 -lt 是否小于关系 -ge 是否大于等于关系 -le 是否小于等于关系 -
字符串比较
测试参数 代表意义 test -z STRING 判断字符串是否为空 test -n STRING 判断字符串是否非空 test str1 == str2 断字符串是否相等 test str1 != str2 判断字符串是否不等 -
多重条件判定:
test -r filename -a -x filename
测试参数 代表意义 -a 两条件是否同时成立 -o 两条件是否至少成立一个 ! 取反,当文件不可执行时返回true
5.判断符号[]
**[]与test用法几乎一模一样,更常用于if语句中。另外[[]]是[]的加强版,支持的特性更多。 ** 前半括号后必须用空格隔开!
[ 2 -lt 3 ] # 为真,返回值为0
echo $? # 输出上个命令的返回值,输出0
DAs@9e0ebfcd82d7:~$ ls # 列出当前目录下的所有文件
homework output.txt test.sh tmp
DAs@9e0ebfcd82d7:~$ [ -e test.sh ] && echo "exist" || echo "Not exist"
exist # test.sh 文件存在
DAs@9e0ebfcd82d7:~$ [ -e test2.sh ] && echo "exist" || echo "Not exist"
Not exist # testh2.sh 文件不存在
-
注意
[]
内的每一项都要用空格隔开- 中括号内的变量,最好用双引号括起来
- 中括号内的常数,最好用单或双引号括起来
name="zhang san" [ $name == "zhang san" ] # 错误,等价于 [ zhang san == "zhang san" ],参数太多 [ "$name" == "zhang san" ] # 正确
判断语句
if…then
形式,类似于C/C++中的if-else语句
-
单层
if
if condition then语句1语句2... fia=3 b=4if [ "$a" -lt "$b" ] && [ "$a" -gt 2 ] thenecho ${a}在范围内 fi
-
单层
if-else
if condition then语句1语句2... else语句1语句2... fi
-
多层
if-elif-elif-else
if condition then语句1语句2... elif condition then语句1语句2 else语句1语句2... fi
-
case...esDA
形式case $变量名称 in值1)语句1语句2...;; # 类似于C/C++中的break值2)语句1语句2...;;*) # 类似于C/C++中的default语句1语句2...;; esDA
循环语句
-
for…in…do…done
命令格式for var in val1 val2 val3 do语句1语句2... done#输出1-10 for i in $(seq 1 10)#第一个数为1,最后一个数为10 doecho $i done#输出a-z for i in {a..z} doecho $i done
-
for ((…;…;…)) do…done
命令格式for ((expression; condition; expression)) do语句1语句2 done#类似于c语言的循环 for ((i=1; i<=10; i++)) doecho $i done
-
while…do…done循环
命令格式while condition do语句1语句2... done#示例,文件结束符为Ctrl+d,输入文件结束符后read指令返回false while read name doecho $name done
-
until…do…done循环
:当条件为真时结束until condition do语句1语句2... done#示例,当用户输入yes或者YES时结束,否则一直等待读入。 until [ "${word}" == "yes" ] || [ "${word}" == "YES" ] doread -p "Please input yes/YES to stop this program: " word done
-
break
命令与continue
命令break
:跳出当前一层循环,注意与C/C++不同的是:break不能跳出case语句continue
跳出当前循环
死循环的处理方式
- 如果DA Terminal可以打开该程序,则输入Ctrl+c即可
- 否则可以直接关闭进程:
- 使用
top
命令找到进程的PID
- 输入
kill -9 PID
即可关掉此进程
- 使用
函数
1.概要
-
return
的返回值,返回的是exit code
,取值为0-255,0表示正常结束。 -
如果想获取函数的输出结果,可以通过
echo
输出到stdout
中,然后通过$(function_name)
来获取stdout
中的结果 -
函数的
return
值可以通过$?
来获取。[function] func_name() { # function关键字可以省略语句1语句2... }
2.不获取return
值和stdout
值
func() {name=zhangsanecho "Hello $name"
}func#Hello zhangsan
3.获取return
值和stdout
值
- 不写return时,默认return 0。
func() {name=abcecho "Hello $name"return 123
}output=$(func)
ret=$?echo "output = $output"
echo "return = $ret"#output = Hello abc
#return = 123
4.函数的输入参数
- 在函数内,$1表示第一个输入参数,$2表示第二个输入参数,依此类推。
- 注意:函数内的$0仍然是文件名,而不是函数名。
func() { # 递归计算 $1 + ($1 - 1) + ($1 - 2) + ... + 0word=""while [ "${word}" != 'y' ] && [ "${word}" != 'n' ]doread -p "要进入func($1)函数吗?请输入y/n:" worddoneif [ "$word" == 'n' ]thenecho 0return 0fi if [ $1 -le 0 ] thenecho 0return 0fi sum=$(func $(expr $1 - 1))echo $(expr $sum + $1)
}echo $(func 10)
5.函数内的局部变量
- 可以在函数内定义局部变量,作用范围仅在当前函数内。
- 可以在递归函数中定义局部变量。
- 命令格式
local 变量名=变量值
#! /bin/bashfunc() {local name=abcecho $name
}
funcecho $name
exit
命令
-
exit
命令用来退出当前shell进程,并返回一个退出状态;使用$?
可以接收这个退出状态。 -
exit
命令可以接受一个整数值作为参数,代表退出状态。如果不指定,默认状态值是 0。 -
exit
退出状态只能是一个介于 0~255 之间的整数,其中只有 0 表示成功,其它值都表示失败。#! /bin/bashif [ $# -ne 1 ] # 如果传入参数个数等于1,则正常退出;否则非正常退出。 thenecho "arguments not valid"exit 1 elseecho "arguments valid"exit 0 fiacs@9e0ebfcd82d7:~$ chmod +x test.sh acs@9e0ebfcd82d7:~$ ./test.sh abc arguments valid acs@9e0ebfcd82d7:~$ echo $? # 传入一个参数,则正常退出,exit code为0 0 acs@9e0ebfcd82d7:~$ ./test.sh arguments not valid acs@9e0ebfcd82d7:~$ echo $? # 传入参数个数不是1,则非正常退出,exit code为1 1
文件重定向
1.概述
stdin
标准输入,从命令行读取数据,文件描述符为0stdout
标准输出,向命令行输出数据,文件描述符为1stderr
标准错误输出,向命令行输出数据,文件描述符为2
2.重定向命令列表
命令 | 说明 |
---|---|
command > file | 将stdout 重定向到file 中 |
command < file | 将stdin 重定向到file 中(从文件中写入) |
command >> file | 将stdout 以追加的方式重定向到file 中 |
command n > file | 将文件描述符n 重定向到file 中 |
command n >> file | 将文件描述符n 以追加方式重定向到file 中 |
3.输入和输出重定向
echo -e "Hello \c" > output.txt # 将stdout重定向到output.txt中
echo "World" >> output.txt # 将字符串追加到output.txt中read str < output.txt # 从output.txt中读取字符串echo $str # 输出结果:Hello World
4.同时重定io
acs@9e0ebfcd82d7:~$ chmod +x test.sh # 添加可执行权限
acs@9e0ebfcd82d7:~$ ./test.sh < input.txt > output.txt # 从input.txt中读取内容,将输出写入output.txt中
DAs@9e0ebfcd82d7:~$ cat output.txt # 查看output.txt中的内容
7
引入外部脚本
-
语法格式
. filename # 注意点和文件名之间有一个空格 #或 source filename
-
示例
#创建test1.sh #! /bin/bashname=abc # 定义变量name#创建test2.sh #! /bin/bashsource test1.sh # 或 . test1.shecho My name is: $name # 可以使用test1.sh中的变量
相关文章:
shell语法
概论 shell是我们通过命令行与操作系统沟通的语言 shell脚本可以直接在命令行中执行,也可以将一套逻辑组织成一个文件,方便复用。 DA Terminal中的命令行可以看成是一个“shell脚本在逐行执行”。 1.脚本示例 新建一个test.sh文件,内容如…...
JAXB的XmlAttribute注解
JAXB的XmlAttribute注解,将一个JavaBean属性映射到一个XML属性。 例如,下面的Java代码,将属性currency映射到了XML的属性currency: package com.thb;import jakarta.xml.bind.annotation.XmlAttribute; import jakarta.xml.bind…...

【代码】基于改进差分进化算法的微电网调度研究matlab
程序名称:基于改进差分进化算法的微电网调度研究 实现平台:matlab 代码简介:了进一步提升差分进化算法的优化性能,结合粒子群(PSO)算法的进化机制,提出一种混合多重随机变异粒子差分进化算法(DE-PSO)。所提算法不仅使用粒子群差分变异策略和…...

计算机基础知识63
Django的条件查询:查询函数 exclude exclude:返回不满足条件的数据 res Author.objects.exclude(pk1) print(res) # <QuerySet [<Author: Author object (2)>, <Author: Author object (3)>]> order_by 1、按照 id 升序排序 res …...

springboot虚拟请求——测试
springboot虚拟请求 表现层测试 web环境模拟测试 虚拟请求状态匹配——执行状态的匹配 Testvoid testStatus(Autowired MockMvc mvc) throws Exception { // //http://localhost:8080/books// 创建一个虚拟请求,当前访问的是booksMockHttpServletRequestBui…...
计算机视觉各个方向概述
计算机视觉发展很长时间了,由传统的计算机视觉到现在如火如荼的计算机视觉多模态,有很多的方向,每一个方向都是一个研究门类,有些已经比较成熟,有些还处于一个开始的阶段,相对于文本语言的处理,…...
AIGC: 关于ChatGPT中API接口调用相关准备工作
ChatGPT之API接口相关 通过页面和GPT交流获取信息相比直接调用GPT的API而言是非常有限的 页面上的GPT是比较封闭的,而且只允许我们去输入文本的信息 我们需要借助GPT的API开发来激发AI工具的无限可能,实现更多个性化需求 1 )使用API 使用A…...

【Java Web学习笔记】 1 - HTML入门
项目代码 https://github.com/yinhai1114/JavaWeb_LearningCode/tree/main/html 零、网页的组成 HTML是网页内容的载体。内容就是网页制作者放在页面上想要让用户浏览的信息,可以包含文字、图片视频等。 CSS样式是表现。就像网页的外衣。比如,标题字体、…...
基于windows系统使用Python对于pc当前的所有窗口的相关操作接口
对于windows系统的电脑使用Python可以对其当前的窗口进行宏观的查询等操作 派生博客1:python对pc的窗口进行操作(windows) 派生博客2python获取当前pc的分辨率(windows) 派生博客3使用uiautomation模块来对基于windows系统的pc中的前端界面进行自动化测试(查找控件ÿ…...

30秒搞定一个属于你的问答机器人,快速抓取网站内容
我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版,欢迎购买。点击进入详情 文章目录 简介运行效果GitHub地址 简介 爬取一个网站的内容,然后让这个内容变成你自己的私有知识库,并且还可以搭建一个基于私有知识库的问…...

JPA数据源Oracle异常记录
代码执行异常 ObjectOptimisticLockingFailureException org.springframework.orm.ObjectOptimisticLockingFailureException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1; nested exception is org.hibernate.StaleSta…...
抽奖送平板是骗局!!!
在街上被派传单,然后扫了码抽奖中了平板,被领到卖电器门店兑奖。他们给我在宜嘉商城上充值4980,我现场给他们付了4980元,签了他们的业务办理单,上面有违约者赔款30%违约金字样。我领走了荣耀畅玩40plus手机一台。第二天…...
json.decoder.JSONDecodeError: Extra data: line 1 column 332 (char 331)
项目场景: 提示:扩充数据集时,同步修改json标签中的"imagePath"字段的值,出现json文件读写不一致问题。 采用open函数读写模式修改json文件字段。open(jsonF.json, r)。 问题描述 运行修改json文件报错:j…...

rust持续学习 COW
COW我第一次看见还以为是奶牛 很奇怪是个啥 后来了解到是clone on write 缩写的,大乌龙啊 这个有两种enum,一种是borrow,一种是own rust中,数据读写经常涉及到所有权 这个borrow,很显然,就是不可变借用了 own就是可以写…...

【计算机网络】14、DHCP
文章目录 一、概述1.1 好处 二、概念2.1 分配 IP2.2 控制租赁时间2.3 DHCP 的其他网络功能2.4 IP地址范围和用户类别2.5 安全 三、DHCP 消息3.1 DHCP discover message3.2 DHCP offers a message 如果没有 DHCP,IT管理者必须手动选出可用的 ip,这太耗时了…...

【FPGA】Verilog:计数器 | 异步计数器 | 同步计数器 | 2位二进制计数器的实现 | 4位十进制计数器的实现
目录 Ⅰ. 实践说明 0x00 计数器(Counter) 0x01 异步计数器(Asynchronous Counter)...
IDEA常用快捷键
快捷键功能tab接受选择–选择的名称将覆盖带插入符号右侧的其它名称–而如果按shift或者enter,光标右边的内容会保留Ctrlshift空格智能匹配–查找当前上下文的方法和变量Ctrld对比文件–选中需要对比的文件shift滚动水平滚动Ctrlaltl格式化Ctrlk提交Ctrlaltz回滚类C…...
【2024秋招】2023-10-17 金山云文档服务端二面
1 实习 1.1 讲解一下curd启动器 1.2 数据同步的过程是怎么实现的,同步过程中的数据一致性怎么保证的 答:同步过程中会记录断点,表示每一批同步成功时的位置,如果对端出现问题,则下一次同步会继续从这个断点后开始同…...

一种excel多线程并发写sheet的方案
一、背景 有一次项目的需求要求导出excel,并且将不同的数据分别写到不同的sheet中。 二、 方案概述 首先一开始使用easyexcel去导出excel,结果发现导出时间需要3秒左右。于是想着能不能缩短excel导出时间,于是第一次尝试使用异步线程去查询数…...

深入了解接口测试:揭秘网络分层和数据处理!
网络分层和数据 上一小节中介绍了接口测试中一些必要重要的定义,这一节我们来讨论一下在学习接口测试过程中我们要关注的最重要的东西:网络分层和数据。 首先,我们来尝试理解一下,为什么网络是要分层的呢? 我们可以…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...

练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...

Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...

深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权
摘要 本文是《Spring Boot 实战派》系列的第四篇。我们将直面所有 Web 应用都无法回避的核心问题:安全。文章将详细阐述认证(Authentication) 与授权(Authorization的核心概念,对比传统 Session-Cookie 与现代 JWT(JS…...

恶补电源:1.电桥
一、元器件的选择 搜索并选择电桥,再multisim中选择FWB,就有各种型号的电桥: 电桥是用来干嘛的呢? 它是一个由四个二极管搭成的“桥梁”形状的电路,用来把交流电(AC)变成直流电(DC)。…...
加密通信 + 行为分析:运营商行业安全防御体系重构
在数字经济蓬勃发展的时代,运营商作为信息通信网络的核心枢纽,承载着海量用户数据与关键业务传输,其安全防御体系的可靠性直接关乎国家安全、社会稳定与企业发展。随着网络攻击手段的不断升级,传统安全防护体系逐渐暴露出局限性&a…...
6.计算机网络核心知识点精要手册
计算机网络核心知识点精要手册 1.协议基础篇 网络协议三要素 语法:数据与控制信息的结构或格式,如同语言中的语法规则语义:控制信息的具体含义和响应方式,规定通信双方"说什么"同步:事件执行的顺序与时序…...