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

Linux基础 ——tmux vim 以及基本的shell语法

Linux 基础

ACWING y总的Linux基础课,看讲义作作笔记。

tmux

tmux 可以干嘛?

tmux可以分屏多开窗口,可以进行多个任务,断线,不会自动杀掉正在进行的进程。

tmux – session(会话,多个) – window(多个) – pane(最小单位shell 对话框)

ps: 原本tmux默认操作的(前缀键)是 ctrl + b Y总的AC terminal里面改成了默认ctrl+a,下面的代码里特意加以区分 特此说明

操作

直接输入tmux 将进入一个session,其中包含1个Window,Window中包含了一个pane,pane中打开一个shell对话框

pane分屏

ctrl + b 组合 % //纵向分屏

ctrl + b 组合 " //横向分屏

挂起

ctrl + b 组合 d

关闭

ctrl + d

产看所有终端

tmux ls

恢复某个挂起终端

tmux a -t name //如果没有name参数则默认挂起那个最近一次挂起的终端

给某个终端重命名

tmux rename -t oldnam newname

tmux 切换session

tmux -s

某个pane全屏/退出全屏

ctrl + b 组合 z //也许是zoomin/zoomout

切换session 及 window

ctrl + b 组合 s/w //s–session w–window

tmux中的复制粘贴

首先选中操作需要按住shift键

选中之后,按住ctrl + insert 进行复制

粘贴 shift + insrt (windows)

vim

  1. vim是一个文本编辑器

  2. 可以根据文件扩展名自动识别编程语言,支持代码缩进,代码高亮等功能。

  3. 使用方式:

    vim filename

    1. 如果不存在,那么创建一个新的filename文件并打开。
    2. 如果存在,那么直接打开该文件并对齐进行编辑。

vim有三个模式

  1. 默认模式
    命令输入方式:按不同的操作字符,实现不同操作
  2. 编辑模式
    默认模式下按i或insert可以进入,进行文本,代码的编辑。
  3. 命令行模式
    在一般的命令模式下按下 : / ? 其中任意一个进入,可以进行查找,替换,保存,配置编辑器等等。

vim操作:

一般命令模式下

  1. i进入编辑模式
  2. hjkl 四个键分别向左,下,上,右四个方向移动光标
  3. n n表示数字,摁下数字再按空格,可以向右移动这一行的n个字符 移动到该字符的后一位
  4. 0 或者 [HOME] 回到这一行的开头
  5. $ 或者 [END] 光标移动到这一行的末尾
  6. G 光标移动到最后一行
  7. :n 或者 nG 表示光标移动到第n行
  8. gg 光标移动到第一行 相当于 1G
  9. n 光标向下移动n行
  10. /word 向光标之下查找第一个值为word的字符串
  11. ?word向光标之上查找第一个值为word的字符串
  12. n 重复前一个查找操作
  13. N 反向重复前一个查找操作
  14. :n1,n2s/word1/word2/g n1 n2为数字,意思是在n1行与n2行之间寻找word1这个单词并将该字符串替换为word2
  15. :1,$s/word1/word2/g 将全文的word1替换为word2
  16. :1,$s/word1/word2/gc 将全文的word1替换为word2 ,替换前需要用户确认
  17. v 选中文本
  18. d 删除选中文本
  19. dd 删除当前行
  20. y 复制选中的文本
  21. yy 复制当前行
  22. p 将复制的数据在光标的下一行粘贴,如果复制的是文本,那么粘贴在下一个位置;如果是yy复制的一行,那么将粘贴在下一行
  23. u 撤销
  24. ctrl + r 取消撤销
  25. shift + > 选中的文本整体右移
  26. :w 保存
  27. :w! 强制保存
  28. :set paste 设置成粘贴模式,取消代码自动缩进
  29. set nopaste 取消粘贴模式,开启代码自动缩进
  30. :set nu 显示行号
  31. :set nonu 关闭显示行号
  32. gg=G 将全文格式化,比如代码的缩进有问题,所以可以用来格式化 = 代表格式化
  33. ggdG 将全文删除 gg首先回到开头,d开启删除模式,G一直删除到最后一行
  34. :noh 关闭查找词高亮
  35. ctrl + q 当vim卡死的时候,可以取消当前在执行的命令

SHELL语法

SHELL是什么?

shell是用户通过命令行与操作系统进行沟通的语言

它可以直接在命令行中执行,也可以将一套逻辑组织成一个文件,方便复用。

可以把命令行中看作是一个shell脚本在逐行执行。

Linux系统中一般默认shell语言为bash

在文件的开头需要写#! /bin/bash 这一行的作用是指明将bash脚本作为脚本解释器

解释型语言,比如python,它们不需要编译,即写即用

#! /bin/bash
echo "Hello World!"

bash脚本的执行

  1. bash test.sh //如果用解释器来执行,那么无需权限
  2. ./bash.sh // 如果使用可执行文件来执行的话,那么需要具备可执行文件
  3. 可以用绝对路径执行,也可以在家目录下执行
注释

# 是bash文件中的注释 单行的

多行注释

:<<EOF
11
11 都是注释
11
EOF

EOF也是可以换成其他字符串的,比如abc

也可以使用!代替EOF

变量

定义变量

#变量一般都是字符串,定义变量不需要$符号
name1 = 'abc' #可以用''
name2 = "abc" #可以用""
name3 = abc #甚至可以不加任意引号

使用变量

使用变量需要加上$ 或者 ${} 花括号是可选的,主要作用是帮助解释器识别变量边界

name = abc
echo $name #输出abc
echo ${name} #输出abc
echo ${name}def #输出abcdef

只读变量

将一个变量声明为只读变量,这样后续就不可以再对它进行更改 类似c++ const的效果

name = abc
readonly name
declare -r name #两种写法均可name = abc #将报错,因为此时的name是只读的,不可做左值

删除变量

name = abc
unset name
echo $name #将输出空

变量类型

  1. 自定义变量(局部变量)

    子进程不能访问的变量

  2. 环境变量(全局变量)

    子进程可以访问的变量

自定义变量修改为全局变量

name = abc #定义变量
export name #方法一
declare -x name #方法二

环境变量变为自定义变量

export name = abc #定义 环境变量
declare +x name #改为自定义变量

字符串

字符串可以用单引号修饰,也可以用双引号修饰(也可以不用引号修饰,等同用双引号修饰)

单引号与双引号的区别

  1. 单引号中的内容将原样输出,不会转义,不会解释,取变量等
  2. 双引号中的内容将进行转义,取变量等操作
 name = abcecho 'hello , $name \"hh\"'  # 输出 hello , $name \"hh\"echo "hello , $name \"hh\""  #输出hello , abc hh

获取字符串的长度

name = "abc"
echo ${#name} #将输出3

提取子串

name = "hello , abc"
echo ${name:0:5} #题去从0开始的5个字符

默认变量

文件参数变量

在执行shell脚本时,可以向脚本传递参数,$1是第一个参数$2是第二个参数,以此类推,特殊的,$0是文件名(包含路径)

创建文件test.sh

#! /bin/bashecho "文件名:"$0
echo "第一个参数:"$1
echo "第二个参数:"$2
echo "第三个参数:"$3
echo "第四个参数:"$4

./test.sh 3 4 5 6

意为将3 4 5 6 作为脚本的第1 2 3 4个参数传递给脚本

类似latex语法,超过一位的数字应当用{}括起来,否则将引起歧义

参数说明
$#代表文件传入的参数个数(返回一个数字,这个数字是所有传入参数的个数)
$*由所有参数构成的用空格隔开的字符串 “$1 $2 $3 $4”
$@每个参数分别用双引号括起来的字符串"$1" “$2” “$3” “$4”
$$脚本您当前运行状态的进程ID
$?上一条命令的退出状态(不是stdout 而是exit code) 0代表正常退出,其他值都代表错误
$(command)返回command这条命令的stdout
`command`返回command这条命令的stdout

数组

数组中可以存放多个不同类型的值,只支持一维数组,在初始化时不需要知名数组大小。数组下标从0开始,但是注意,可以跳着赋值,比如只赋 0 1 5 但最终实际上数组的内容只有3个

定义

数组用小括号表示,元素之间用空格隔开

array = (1 abc "def" sss)

也可以直接定义数组中某个元素的值

array[0] = 1
array[1] = abc
array[2] = "def"
arrray[3] = sss

读取数组中某个元素的值

格式

${array[index]}

读取整个数组的值

实际上@ * 都是全部的意思

array = (1 abc "def" sss)
echo $(array[@])  #第一种写法
echo ${array[*]}  #第二种写法

数组的长度

也是类似字符串的 两种写法

echo{#array[@]}
echo{#array[*]}

expr命令

expr命令用户求表达式的值,格式为

expr 3+4

表达式说明

  • 表达式需要空格隔开每一项
  • 用反斜杠放在shell特定的字符前面进行转义,防止出错
  • 对包含空格和其他特殊字符的字符串要用引号括起来,因为你操作的字符串中本身可能含有空格,这些空格可能导致expr语义出现错误
  • expr 会在stdout 中输出结果,如果为逻辑关系表达式,则结果为真,则stdout为1,否则为0
  • 同时expr的exir code: 如果为逻辑关系表达式,且表达式结果为真,exit code为0,否则为1;如果为其他表达式,则exitcode为0

字符串表达式

表达式表达式释义
length STRING返回STRING的长度
index STRING CHARSETCHARSET中任意单个字符在STRING中最前面的字符位置,下标从1开始 如果STRING中完全不存在CHARSET中的字符,将返回0
substr STRING POSITION LENGTH返回STRING字符串中从POSITION开始长度最大为LENGTH的子串,如果POSITION或LENGTH为负数,0,或者非数值,则返回空字符串

整数表达式

expr支持普通的算数操作,算数表达式优先级低于字符串表达式,但高于逻辑关系式

  • + - 运算,两端的参数会转换为整数,如果转换失败将报错
  • * / % 乘除,取模运算,两端参数会线转化为整数,如果转换失败将报错
  • ()可以表示优先级,但是需要用反斜杠转义 \

逻辑表达式

或 和 与 两个

  • |

如果第一个参数非空且非0,则返回第一个参数的值,但要求第二个参数的值也是非空或非0的,否则将返回0。如果第一个参数非空且非0,那么将直接返回第一个值 ,这样的话第二个值就不参与计算(短路原则)

  • &

如果a b 都是非空且非0 那么返回第一个参数,否则将返回0。如果第一个参数为空或者0,将不会计算第二个参数

  • < <= = == != >= >

比较两端的参数,如果为true则返回1,否则返回0 “==” 是 "="的同义词,"expr"会先尝试将两端参数转换为整数,并做算数比较,如果转换失败,则按字符集排序规则做字符比较。有时候可以用 单引号’’ 将>=括在一起,避免bash将>认作关键字。

  • () 可以用来表示优先级 , 使用时记得使用转义字符 \ 来转义

SHELL最最主要的功能是用来处理文件的,所以数值运算并不是它的主场。功能拉跨也是可以想象的

READ命令

read命令用于从标准输入中读取单行数据

参数:

-p 后面可以接提示信息

-t 后面根秒数,定义输入字符的等待时间,当超过等待时间后会自动忽略此命令

read -p "this is prompt" var # 将输出提示字符串,并等待读入,被写入var中read -t 5 var #将等待5s读入,如果无操作,那么将忽略此命令

ECHO命令

echo 用于输出字符串

echo STRING
echo "Hello World!" # 输出普通字符串
echo Hello World! #双引号是可以忽略的(无双引号等同于双引号,双引号内的内容将转义,或取变量转换等;单引号内不会)echo "\"Hello World \"" # 显示转义字符串
echo \"Hello World\" #也可以省略双引号的name = abc
echo "My name is $name" #输出 My name is abc 双引号内进行了变量准换操作echo -e "Hi \n jl" #-e 开启转义(斜杠符号),Hi的最后会输出一个换行符echo -e "hello \c" 
echo there #这是因为echo指令的最后会默认附带一个换行符,所哟两行echo之间一定会换行,那么使用\c语句可以让此输入连续,不换行echo "Hello World" > output.txt #显示结果重定向,将内容以覆盖的形式输出到output.txt中name = abc
echo '$name\"' #由单引号引起,那么不会转义也不会读取变量,原样输出$name\"echo `date`  #显示命令的执行结果 输出当前时间日期
#`command`用法等同于$(command)

printf命令

printf命令用于格式化输出,类似于C/C++中的printf函数

默认不会再字符串末尾添加换行符

printf format -string [arguments...]printf "%10d\n" 123 #占十位,右对齐,如果不够10位的话在左边补空格
printf "%-10.2f!\n" 123.123321 #占十位,保留两位小数,左对齐(保留的时候是四舍五入)
printf "My name is %s\n" "abc" #格式化输出字符串
printf"%d * %d = %d\n" 2 3 `expr 2 \* 3` # 表达式的值作为参数

逻辑运算符&&和||

  • &&表示与 ||表示或

  • 二者都具备短路原则:

    expr1 && expr2 :若expr1为假,则忽略expr2

    expr1 || expr2 :若expr1为真,则忽略expr2

  • 表达式的exit code为0 表示真,非0 表示假

test命令

test用于判断文件类型,以及对变量做比较

test命令用exit code返回结果,而不是用stdout,0表示真,非0表示假

expr用的是stdout来返回结果

test 2 -lt 3 #为真,因为返回值为0
echo $? #输出上一个命令的返回值,将输出0test -e test.sh && echo "exist" || echo "Not exist" #若文件存在,&&左值返回0 为真,执行右边打印"exist",然后返回仍然为真,那么||左值为真,不再执行右边打印"Not exist"的命令
文件类型判断
测试参数代表意义
-e文件是否存在
-f是否为文件
-d是否为目录(文件夹)
文件权限判断
测试参数代表意义
-r文件是否可读
-w文件是否可写
-x文件是否可执行(当前用户)
-s是否为非空文件
整数间的比较
测试参数代表意义
-eq相等
-ne不等
-gt大于
-lt小于
-ge大于等于
-le小于等于
字符串比较
测试参数代表意义
test -z STRING若STRING为空,返回TRUE
test -n STRING若STRING非空,返回TRUE (-n可省略)
test str1 == str2str1 是否等于 str2
test str1 != str2str1 是否不等于 str2
多重条件判定
测试参数代表意义
-a两条件是否同时成立
-o两条件是否至少一个成立
!取反
判断符号

[] 用法与 test 几乎是一致的,更常用在if语句中,[[]] 是 [] 的加强版,能支持更多的特性

用方框把test的执行语句括起来就行

  • []中的每一项都要用空格隔开
  • 中括号中的变量最好都用双引号括起来
  • 中括号内的常数,最好用单或双引号括起来 (每次取$符号的时候,将进行变量名的替换,如果不用双引号括起来,如果有空格,可能会引起歧义)

判断语句

if … then 形式

类似 c++ if…else

单层if
if condition
then state1state2...
fi
a=3
b=4
if ["$a" -lt "$b"] && ["$a" -gt 2]
then echo ${a}在范围内
fi
单层if-else
if condition
then state1state2...
elsestate1state2...
fi
多层if-else-else
if condition
thenstate1state2...
elif condition
thenstate1state2...
elsestate1state2...
fi
case…esac 形式

类似switch语句

case $变量名称 in值1)state1state2...;; #类似 break值2)state1state2...;;*) #类似default语句state1state2...;;
esac

循环语句

for…in…do…done
#用var来枚举后续每个空格隔开的元素,并操作(范围for循环)
for var in val1 val2 val3
dostate1state2state3...
done#输出 a 2 cc 每个元素自占一行
for i  in a 2 cc
doecho $i
done#输出当前路径下的所有文件名,每个文件名占一行
for file in `ls`
doecho $file
done# 输出1~10
for i in $(seq 1 10)  # seq命令将返回由区间范围内的值,并用空格隔开 {注意是仅限数字的}
doecho $i
done# 使用花括号表示范围
for i in{a..z}
doecho $i
done
for((…;…;…)) do…done
for((expression; condition; expression))
dostate1state2...
done
while…do…done
while condition
dostate1state2...
done#文件结束符为ctrl+d,输出文件结束符以后read指令返回false
while read name   #read命令读到文件结束符EOF后,exit code为1,否则为0; 
doecho $name
done
until…do…done
#当条件为真时结束until condition
dostate1state2...
done# 当用户输入yes或者YES时结束,佛瑞泽一直等待读入
until [ "${word}" == "yes" ] || [ "${word}" == "YES" ]
doread -p "Please input yes/YES to stop this program:" word 
done
break命令

跳出当前一层循环,break不能跳出case语句,跳出case语句用的是 ;;

# 读入非EOF的字符串,会输出一遍1~7,,可以通过输入ctrl+d文件结束符来结束,也可以直接用ctrl+c杀掉进程
while read name
dofor ((i=1;i<=10;i++))docase $i in8break #跳出最近一层循环(for循环);; #跳出case语句*)echo $i;;escadone
done
continue命令

跳过这次循环,但不会退出循环

# 输出1~10之间所有的奇数
for ((i=1;i<=10;i++))
doif [ `expr $i % 2` -eq 0 ]thencontinuefiecho $i
done

死循环的处理方式

ctrl+c 关闭

或者

  1. 使用top命令找到进程的PID
  2. 输入 kill -9 PID 也可直接杀死进程

ps aux #返回所有正在运行的进程

函数

bash中的函数类似于C/C++中,但return的返回值与C/C++不同。返回的是exit code 取值为0-255,0表示正常结束

如果想要获取函数的输出结果,可以通过echo输出到stdout中,然后通过$(sunction_name)来获取stdout中的结果

函数的return值可以通过$?来获取

[function] fun_name(){ #function关键字可以省略state1state2...
}
不获取 return 和 stdout值
func(){name = abcecho "Hello $name"
}
func
#输出 Hello abc
获取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
函数的输入参数

在函数内,$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)# 输出 55
函数内的局部变量

可以在函数内定义局部变量,作用范围仅在当前函数内

可以在递归函数中定义局部变量

local 变量名=变量

#! /bin/bashfunc(){local name=abcecho $name
}
func
echo $name# 输出 abc
# 输出 空

exit命令

exit命令用来退出当前shell进程,并返回一个退出状态,使用$?可以接受这个退出状态

exit命令可以接受一个正数之作为参数,代表篇退出状态,如果不指定,默认状态值是0

exit退出状态只能是一个介于0~155之间的整数,其中只有0表示退出成功,其他值都表示失败

#! /bin/bash
if [ $# -ne 1]
thenecho "arguments not valid" #参数是不合法的exit 1
else echo "arguments valid"exit 0
fi

文件重定向

每个进程默认会打开三个文件描述符

  • stdin 标准输入,从命令行读取数据,文件描述符为0
  • stdout标准输出,向命令行输出数据,文件描述符为1
  • stderr标准错误输出,向命令行输出数据,文件描述符为2

可以用文件重定向将这三个文件重定向到其他文件中

命令说明
command > filestdout重定向到file
command < filestdin重定向到file中
command >> filestdout以追加方式重定向到file
command n> file将文件描述符 n 重定向到file
command n>> file将文件描述符 n 以追加方式重定向到file
输入和输出重定向
echo -e "Hello \c" > ouput.txt
echo "World" >> output.txtread str < output.txt
echo $str
同时重定向stdin 和 stdout

创建bash脚本

#! /bin/bashread a
read becho $(expr "$a" + "$b")#执行以下命令
./test.sh < input.txt > output.txt
#将从input.txt文件中读入a,b 并最终将结果输出定向到output.txt中,而且标准输入,输出的定向顺序是可以反过来的,非常神奇

引入外部脚本

类似 include ,bash也可以引入其他文件中的代码

. filename #点与文件之间存在一个空格
或者
source filename#eg
#创建文件test1.sh
#! bin/bash
name=abc #定义变量name#创建文件test2.sh
#! bin/bash
source test1.sh
echo My name id : $name

.bashrc

用户在登陆的时候,将首先默认执行一遍bashrc中的内容,在修改了bashrc之后,需要进行source操作,什么用?
就是执行一遍bashrc,然后更改的环境变量等内容 生效.

相关文章:

Linux基础 ——tmux vim 以及基本的shell语法

Linux 基础 ACWING y总的Linux基础课&#xff0c;看讲义作作笔记。 tmux tmux 可以干嘛&#xff1f; tmux可以分屏多开窗口&#xff0c;可以进行多个任务&#xff0c;断线&#xff0c;不会自动杀掉正在进行的进程。 tmux – session(会话&#xff0c;多个) – window(多个…...

使用 Kotlin 将 Vertx 和 Springboot 整合

本篇文章目的是将 Springboot 和 Vertx 进行简单整合。整合目的仅仅是为了整活&#xff0c;因为两个不同的东西整合在一起提升的性能并没有只使用 Vertx 性能高&#xff0c;因此追求高性能的话这是在我来说不推荐。而且他们不仅没有提高很多性能甚至增加了学习成本 一、整合流…...

【单层神经网络】softmax回归的从零开始实现(图像分类)

softmax回归 该回归分析为后续的多层感知机做铺垫 基本概念 softmax回归用于离散模型预测&#xff08;分类问题&#xff0c;含标签&#xff09; softmax运算本质上是对网络的多个输出进行了归一化&#xff0c;使结果有一个统一的判断标准&#xff0c;不必纠结为什么要这么算…...

课题推荐——基于自适应滤波技术的多传感器融合在无人机组合导航中的应用研究

无人机在现代航空、农业和监测等领域的应用日益广泛。为了提高导航精度&#xff0c;通常采用多传感器融合技术&#xff0c;将来自GPS、惯性测量单元&#xff08;IMU&#xff09;、磁力计等不同传感器的数据整合。然而&#xff0c;传感器的量测偏差、环境干扰以及非线性特性使得…...

【基于SprintBoot+Mybatis+Mysql】电脑商城项目之用户登录

&#x1f9f8;安清h&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;【Spring篇】【计算机网络】【Mybatis篇】 &#x1f6a6;作者简介&#xff1a;一个有趣爱睡觉的intp&#xff0c;期待和更多人分享自己所学知识的真诚大学生。 目录 &#x1f3af;1.登录-持久层 &…...

Mono里运行C#脚本40—mono_magic_trampoline函数的参数设置

前面介绍过跳板代码,它是用来切换托管代码与非托管的代码,以及运行时与C#代码的交互。实现从运行时切换到C#代码来运行,再从C#代码返回运行时。 要想理解整个切换的细节,那么就需要理解mono_magic_trampoline函数, 而要理解此函数,就必须了解这个函数的参数来源。 要理…...

Verilog基础(三):过程

过程(Procedures) - Always块 – 组合逻辑 (Always blocks – Combinational) 由于数字电路是由电线相连的逻辑门组成的,所以任何电路都可以表示为模块和赋值语句的某种组合. 然而,有时这不是描述电路最方便的方法. 两种always block是十分有用的: 组合逻辑: always @(…...

实际操作 检测缺陷刀片

号he 找到目标图像的缺陷位置&#xff0c;首先思路为对图像进行预处理&#xff0c;灰度-二值化-针对图像进行轮廓分析 //定义结构元素 Mat se getStructuringElement(MORPH_RECT, Size(3, 3), Point(-1, -1)); morphologyEx(thre, tc, MORPH_OPEN, se, Point(-1, -1), 1); …...

DeepSeek 阐述 2025年前端发展趋势

预测2025年前端的发展趋势。首先&#xff0c;我需要考虑当前的前端 技术发展情况&#xff0c;以及近几年的变化趋势。比如&#xff0c;框架方面&#xff0c;React、Vue、Angular这些主流框架的更新方向和社区活跃度。可能用户想知道未来哪些技术会更流行&#xff0c;或者需要学…...

Elasticsearch基本使用详解

文章目录 Elasticsearch基本使用详解一、引言二、环境搭建1、安装 Elasticsearch2、安装 Kibana&#xff08;可选&#xff09; 三、索引操作1、创建索引2、查看索引3、删除索引 四、数据操作1、插入数据2、查询数据&#xff08;1&#xff09;简单查询&#xff08;2&#xff09;…...

【Rust自学】17.3. 实现面向对象的设计模式

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 17.3.1. 状态模式 状态模式(state pattern) 是一种面向对象设计模式&#xff0c;指的是一个值拥有的内部状态由数个状态对象&#xff08…...

司库建设-融资需求分析与计划制定

当企业现金流紧张时&#xff0c;企业需要考虑外部融资&#xff0c;从财务营运角度来考虑和分析如何确定输入和输出&#xff0c;进行整体解决方案设计。 融资需求分析与计划制定 功能点&#xff1a; 现金流预测工具&#xff1a;集成历史数据和业务计划&#xff0c;自动生成未来1…...

2. 【.NET Aspire 从入门到实战】--理论入门与环境搭建--.NET Aspire 概览

在当今快速发展的软件开发领域&#xff0c;构建高效、可靠且易于维护的云原生应用程序已成为开发者和企业的核心需求。.NET Aspire 作为一款专为云原生应用设计的开发框架&#xff0c;旨在简化分布式系统的构建和管理&#xff0c;提供了一整套工具、模板和集成包&#xff0c;帮…...

【Elasticsearch】allow_no_indices

- **allow_no_indices 参数的作用**&#xff1a; 该参数用于控制当请求的目标索引&#xff08;通过通配符、别名或 _all 指定&#xff09;不存在或已关闭时&#xff0c;Elasticsearch 的行为。 - **默认行为**&#xff1a; 如果未显式设置该参数&#xff0c;默认值为 …...

26.useScript

在 Web 应用开发中&#xff0c;动态加载外部脚本是一个常见需求&#xff0c;特别是在需要集成第三方库或服务时。然而&#xff0c;在 React 应用中管理脚本加载可能会变得复杂。useScript 钩子提供了一种优雅的方式来处理外部脚本的加载、错误处理和清理&#xff0c;使得在 Rea…...

跨域问题和解决方案

跨域问题及解决方案 同源策略及跨域问题 同源策略是一套浏览器安全机制&#xff0c;当一个源的文档和脚本&#xff0c;与另一个源的资源进行通信时&#xff0c;同源策略就会对这个通信做出不同程度的限制。 简单来说&#xff0c;同源策略对 同源资源 放行&#xff0c;对 异源…...

springboot中路径默认配置与重定向/转发所存在的域对象

Spring Boot 是一种简化 Spring 应用开发的框架&#xff0c;它提供了多种默认配置和方便的开发特性。在 Web 开发中&#xff0c;路径配置和请求的重定向/转发是常见操作。本文将详细介绍 Spring Boot 中的路径默认配置&#xff0c;并解释重定向和转发过程中存在的域对象。 一、…...

【OS】AUTOSAR架构下的Interrupt详解(下篇)

目录 3.代码分析 3.1中断配置代码 3.2 OS如何找到中断处理函数 3.3 Os_InitialEnableInterruptSources实现 3.4 Os_EnableInterruptSource 3.5 DisableAllInterrupts 3.5.1Os_IntSuspendCat1 3.5.2 Os_InterruptDisableAllEnter 3.5.3 Disable二类中断 3.5.4 Disable一…...

基于遗传算法的256QAM星座图的最优概率整形matlab仿真,对比优化前后整形星座图和误码率

目录 1.算法仿真效果 2.算法涉及理论知识概要 3.MATLAB核心程序 4.完整算法代码文件获得 1.算法仿真效果 matlab2022a仿真结果如下&#xff08;完整代码运行后无水印&#xff09;&#xff1a; GA优化曲线&#xff1a; 优化前后星座图对比 优化前后误码率对比 仿真操作步骤…...

Android学习21 -- launcher

1 前言 之前在工作中&#xff0c;第一次听到launcher有点蒙圈&#xff0c;不知道是啥&#xff0c;当时还赶鸭子上架去和客户PK launcher的事。后来才知道其实就是安卓的桌面。本来还以为很复杂&#xff0c;毕竟之前接触过windows的桌面&#xff0c;那叫一个复杂。。。 后面查了…...

小程序越来越智能化,作为设计师要如何进行创新设计

一、用户体验至上 &#xff08;一&#xff09;简洁高效的界面设计 小程序的特点之一是轻便快捷&#xff0c;用户期望能够在最短的时间内找到所需功能并完成操作。因此&#xff0c;设计师应致力于打造简洁高效的界面。避免过多的装饰元素和复杂的布局&#xff0c;采用清晰的导航…...

【实践案例】基于大语言模型的海龟汤游戏

文章目录 项目背景提示词构建海龟汤主持人真相判断专家 具体实现流程文心一言大语言模型“海龟汤”插件参考 项目背景 “海龟汤”作为一种聚会类桌游&#xff0c;又称情境推理游戏&#xff0c;是一种猜测情境还原事件真相的智力游戏。其玩法是由出题者提出一个难以理解的事件&…...

基于多智能体强化学习的医疗AI中RAG系统程序架构优化研究

一、引言 1.1 研究背景与意义 在数智化医疗飞速发展的当下,医疗人工智能(AI)已成为提升医疗服务质量、优化医疗流程以及推动医学研究进步的关键力量。医疗 AI 借助机器学习、深度学习等先进技术,能够处理和分析海量的医疗数据,从而辅助医生进行疾病诊断、制定治疗方案以…...

【Unity2D 2022:UI】创建滚动视图

一、创建Scroll View游戏对象 在Canvas画布下新建Scroll View游戏对象 二、为Content游戏对象添加Grid Layout Group&#xff08;网格布局组&#xff09;组件 选中Content游戏物体&#xff0c;点击Add Competent添加组件&#xff0c;搜索Grid Layout Group组件 三、调整Grid La…...

C++ Primer 多维数组

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…...

怀旧经典:1200+款红白机游戏合集,Windows版一键畅玩

​沉浸在怀旧的海洋中&#xff0c;体验经典红白机游戏的魅力&#xff01;我们为您精心准备了超过1200款经典游戏的合集&#xff0c;每一款都是时代的印记&#xff0c;每一场都是回忆的旅程。这个合集不仅包含了丰富的游戏资源&#xff0c;还内置了多个Windows版的NES模拟器&…...

【数据采集】案例02:基于Selenium采集豆瓣电影Top250的详细数据

基于Selenium采集豆瓣电影Top250的详细数据 Selenium官网:https://www.selenium.dev/blog/ 豆瓣电影Top250官网:https://movie.douban.com/top250 写在前面 实验目标:基于Selenium框架采集豆瓣电影Top250的详细数据。 电脑系统:Windows 使用软件:PyCharm、Navicat 技术需求…...

Spring 面试题【每日20道】【其二】

1、Spring MVC 具体的工作原理&#xff1f; 中等 Spring MVC 是 Spring 框架的一部分&#xff0c;专门用于构建基于Java的Web应用程序。它采用模型-视图-控制器&#xff08;MVC&#xff09;架构模式&#xff0c;有助于分离应用程序的不同方面&#xff0c;如输入逻辑、业务逻辑…...

算法设计-0-1背包动态规划(C++)

一、问题阐述 0-1 背包问题的目标是在给定背包容量 W 的情况下&#xff0c;从 n 个物品中选择一些物品放入背包&#xff0c;使得背包中物品的总价值最大。每个物品只能选择一次&#xff08;即要么放入背包&#xff0c;要么不放入&#xff09;。 二、代码 #include <iostr…...

【Java知识】使用Java实现地址逆向解析到区划信息

文章目录 1. 实现 FST1.1 定义 FST 节点1.2 定义 FST 2. 实现地址逆向查询2.1 定义区划信息2.2 构建 FST 3. 运行结果4. 代码说明5. 进一步优化6. 总结 实现一个 FST&#xff08;Finite State Transducer&#xff0c;有限状态转换器&#xff09; 并用于 地址逆向查询区划信息…...

单机伪分布Hadoop详细配置

目录 1. 引言2. 配置单机Hadoop2.1 下载并解压JDK1.8、Hadoop3.3.62.2 配置环境变量2.3 验证JDK、Hadoop配置 3. 伪分布Hadoop3.1 配置ssh免密码登录3.2 配置伪分布Hadoop3.2.1 修改hadoop-env.sh3.2.2 修改core-site.xml3.2.3 修改hdfs-site.xml3.2.4 修改yarn-site.xml3.2.5 …...

[250204] Mistral Small 3:小巧、快速、强大 | asdf 0.16.0 发布:Golang 重写带来性能飞跃

目录 Mistral AI 发布开源模型 Mistral Small 3&#xff1a;小巧、快速、强大asdf 0.16.0 版本发布&#xff1a;Golang 重写带来性能飞跃&#xff01; Mistral AI 发布开源模型 Mistral Small 3&#xff1a;小巧、快速、强大 法国人工智能初创公司 Mistral AI 发布了最新的开源…...

解读“大语言模型(LLM)安全性测评基准”

1. 引入 OWASP&#xff0c;全称为Open Web Application Security Project&#xff0c;即开放式Web应用程序安全项目&#xff0c;是一个致力于提高软件安全性的非营利国际组织。 由于庞大的规模和复杂的结构&#xff0c;大语言模型也存在多种安全风险&#xff0c;如prompt误导…...

可视化相机pose colmap形式的相机内参外参

目录 内参外参转换 可视化相机pose colmap形式的相机内参外参 内参外参转换 def visualize_cameras(cameras, images):fig plt.figure()ax fig.add_subplot(111, projection3d)for image_id, image_data in images.items():qvec image_data[qvec]tvec image_data[tvec]#…...

从0开始使用面对对象C语言搭建一个基于OLED的图形显示框架(基础图形库实现)

目录 基础图形库的抽象 抽象图形 抽象点 设计我们的抽象 实现我们的抽象 测试 抽象线 设计我们的抽象 实现我们的抽象 绘制垂直的和水平的线 使用Bresenham算法完成任意斜率的绘制 绘制三角形和矩形 矩形 三角形 实现 绘制圆&#xff0c;圆弧和椭圆 继续我们的…...

python学opencv|读取图像(五十三)原理探索:使用cv.matchTemplate()函数实现最佳图像匹配

【1】引言 前序学习进程中&#xff0c;已经探索了使用cv.matchTemplate()函数实现最佳图像匹配的技巧&#xff0c;并且成功对两个目标进行了匹配。 相关文章链接为&#xff1a;python学opencv|读取图像&#xff08;五十二&#xff09;使用cv.matchTemplate()函数实现最佳图像…...

4 前端前置技术(上):AJAX技术(前端发送请求)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 前言...

python的ruff简单使用

Ruff 是一个用 Rust 编写的高性能 Python 静态分析工具和代码格式化工具。它旨在提供快速的代码检查和格式化功能&#xff0c;同时支持丰富的配置选项和与现有工具的兼容性。ruff是用rust实现的python Linter&Formatter。 安装&#xff1a; conda install -c conda-forge…...

windows环境下如何在PyCharm中安装软件包

windows环境下如何在pyCharm中安装wxPython软件包 在windows环境中&#xff0c;安装软件包可以使用 终端 的方式&#xff0c;在IDE下方的终端中执行pip install wxPython进行安装&#xff0c;安装完毕之后&#xff0c;使用pip show wxPython检查也符合预期。 但是在代码文件中导…...

【LLM-agent】(task2)用llama-index搭建AI Agent

note LlamaIndex 实现 Agent 需要导入 ReActAgent 和 Function Tool&#xff0c;循环执行&#xff1a;推理、行动、观察、优化推理、重复进行。可以在 arize_phoenix 中看到 agent 的具体提示词&#xff0c;工具被装换成了提示词ReActAgent 使得业务自动向代码转换成为可能&am…...

Deep Crossing:深度交叉网络在推荐系统中的应用

实验和完整代码 完整代码实现和jupyter运行&#xff1a;https://github.com/Myolive-Lin/RecSys--deep-learning-recommendation-system/tree/main 引言 在机器学习和深度学习领域&#xff0c;特征工程一直是一个关键步骤&#xff0c;尤其是对于大规模的推荐系统和广告点击率预…...

介绍一下Mybatis的Executor执行器

Executor执行器是用来执行我们的具体的SQL操作的 有三种基本的Executor执行器&#xff1a; SimpleExecutor简单执行器 每执行一次update或select&#xff0c;就创建一个Statement对象&#xff0c;用完立刻关闭Statement对象 ReuseExecutor可重用执行器 可重复利用Statement…...

pthread_cond_broadcast的概念和使用案例

pthread_cond_broadcast 是 POSIX 线程&#xff08;Pthreads&#xff09;库中用于条件变量&#xff08;Condition Variable&#xff09;操作的函数&#xff0c;定义在 <pthread.h> 头文件中。它的核心作用是唤醒所有等待在某个条件变量上的线程&#xff0c;通常用于多线程…...

数据中心服务器对PCIe测试的需求、挑战和应用

人工智能和机器学习技术的迅猛发展&#xff0c;尤其是大语言模型&#xff08;LLM&#xff09;的兴起&#xff0c;对计算资源和数据传输速度提出了更高的要求&#xff0c;从而激发了对更高带宽解决方案的迫切需求。PCIe作为数据中心服务器间互联的主力军&#xff0c;承担着高速数…...

SpringBoot的配置(配置文件、加载顺序、配置原理)

文章目录 SpringBoot的配置(配置文件、加载顺序、配置原理)一、引言二、配置文件1、配置文件的类型1.1、配置文件的使用 2、多环境配置 三、加载顺序四、配置原理五、使用示例1、配置文件2、配置类3、控制器 六、总结 SpringBoot的配置(配置文件、加载顺序、配置原理) 一、引言…...

利用Vue和javascript分别编写一个“Hello World”的定时更新

目录 一、利用Vue编写一个“Hello World”的定时更新&#xff08;1&#xff09;vue编码在Html文件中&#xff08;2&#xff09;vue编码在js文件中 二、利用javascript编写一个“Hello World”的定时更新 一、利用Vue编写一个“Hello World”的定时更新 &#xff08;1&#xff…...

【免费】2007-2019年各省科技支出占一般公共预算支出的比重数据

2007-2019年各省科技支出占一般公共预算支出的比重数据 1、时间&#xff1a;2007-2019年 2、来源&#xff1a;国家统计局、统计年鉴 3、指标&#xff1a;行政区划代码、地区名称、年份、科技支出占一般公共预算支出的比重 4、范围&#xff1a;31省 5、指标解释&#xff1a…...

解决 LeetCode 922 题:按奇偶排序数组 II

解决 LeetCode 922 题&#xff1a;按奇偶排序数组 II 题目描述 给定一个非负整数数组 nums&#xff0c;其中一半整数是奇数&#xff0c;一半整数是偶数。要求对数组进行排序&#xff0c;以便当 nums[i] 为奇数时&#xff0c;i 也是奇数&#xff1b;当 nums[i] 为偶数时&#…...

【PyQt】getattr动态访问对象的属性

问题 使用qtdesigner设计好大体的软件结构&#xff0c;需要使用代码进行批量修改控件样式,self.ui.x 会被解释为访问 self.ui 中名为 x 的属性&#xff0c;而不是将 x 作为变量名来解析&#xff0c;此时需要通过字符串动态访问 self.ui 中的按钮对象 for i in range(20):x f…...

基于RTOS的STM32游戏机

1.游戏机的主要功能 所有游戏都来着B站JL单片机博主开源 这款游戏机具备存档与继续游戏功能&#xff0c;允许玩家在任何时候退出当前游戏并保存进度&#xff0c;以便日后随时并继续之前的冒险。不仅如此&#xff0c;游戏机还支持多任务处理&#xff0c;玩家可以在退出当前游戏…...