C高级——shell(3)
一、shell的选择结构
1.回顾:C语言的选择结构:if , if else if ,if else,switch (switch的执行速度最快)
2.shell的选择结构: 单分支if 双分支 if else 多分支if elif case..in
1.1 shell的选择结构的格式
--------C语言的格式------
单分支if(表达式){C语句 }
双分支if(表达式){C语句1 }else{C语句2 }
多分支if(表达式1){C语句1 }else if(表达式2){C语句2; }....else{C语句n; }
-------------------shell的格式------
单分支if 表达式thenSHELL语句fi
执行流程:如果表达式为真,则执行shell语句,否则退出
双分支if 表达式thenshell语句1elseshell语句2fi
执行流程:如果表达式为真,则执行shell语句1,否则执行shell语句2
多分支if 表达式1thenshell语句1elif 表达式2thenshell语句2....elseshell语句nfi
执行流程:如果表达式1为真,则执行shell语句1,结束如果表达式1为假,则继续判断表达式2,如果表达式2为真,则执行shell语句2,结束重复以上过程
1.2 shell选择结构练习
1.输入一个数,判断奇数偶数
2.输入一个数,判断是否是水仙花
水仙花:各个位数字立方和等于本身,是三位数
eg: 153==1*1*1+5*5*5+3*3*3
if ((a%2==0))
then
偶数
else
奇数
fi
if ((a%2==0))
then
偶数
fi
if ((a%2!=0))
then
奇数
fi
if ((a%2==0))
then
偶数
elif ((a%2!=0))
then
奇数
fi
#!/bin/bashread -p "please enter a:" a
if ((a%2==0))
thenecho 偶数
elseecho 奇数
firead -p "please enter num:" numif (($num>100&&num<999))
theng=$((num%10))s=$((num/10%10))b=$((num/100))if ((g**3+s**3+b**3==num))thenecho 是水仙花else echo 不是水仙换fi
elseecho 不是三位数
fi
1.3 test指令和if结合
1.test是一个指令:必须添加空格,必须写$,必要时写双引号 man test
2.test实现的操作:逻辑运算,关系运算,字符串,文件
3.test指令等价于[]
1.3.1 test和if结合的格式
格式1:if test 表达式thenshell语句fi
格式2:if [ 表达式 ] 注意[]的左右必须添加空格thenshell语句fi
1.3.2 test的指令
【1】逻辑运算
格式1:if [ 表达式1 -a 表达式2 ]
格式2:if [ 表达式1 ] && [ 表达式2 ]
格式3:if [ 表达式1 -o 表达式2 ]
格式4:if [ 表达式1 ] || [ 表达式2 ]
1.判断表达式为真( EXPRESSION )EXPRESSION is true判断a不为0if(a!=0) --->if(a) --->if [ $a ]2.判断表达式为假! EXPRESSIONEXPRESSION is false判断a等于if(a==0) ---->if(!a) ---->if [ ! $a ]
3.逻辑与运算,遇假则假,全真为真 EXPRESSION1 -a EXPRESSION2both EXPRESSION1 and EXPRESSION2 are true判断a>b>cif(a>b&&b>c) ---->if [ $a -gt $b -a $b -gt $c ]--->if [ $a -gt $b ] && [ $b -gt $c ]4.逻辑或运算,遇真则真,全假为假 EXPRESSION1 -o EXPRESSION2either EXPRESSION1 or EXPRESSION2 is true判断成绩不合格<0 >100if(a<0 || a>100) --->if [ $a -lt 0 -o $a -gt 100 ]--->if [ $a -lt 0 ] || [ $a -gt 100 ]
练习:输入一个年份,判断润年润年:能被4整除,但不可以被100整除,或者可以被400整除read -p "please enter year:" yearif [ $((year%4)) -eq 0 -a $((year%100)) -ne 0 -o $((year%400)) -eq 0 ]
thenecho 是润年
elseecho 不是润年
fi判断偶数 ---》if [ a%4==0 ] --->if [ $((a%4)) -eq 0 ]
【2】关系运算
1.判断两个整数是否相等INTEGER1 -eq INTEGER2INTEGER1 is equal to INTEGER2判断a和b相等if test $a -eq $b ----> if [ $a -eq $b ]2.判断整数1大于等于整数2 INTEGER1 -ge INTEGER2INTEGER1 is greater than or equal to INTEGER2判断a大于等于bif test $a -ge $b ----> if [ $a -ge $b ]
3.判断整数1大于整数2 INTEGER1 -gt INTEGER2INTEGER1 is greater than INTEGER2
4.判断整数1小于等于整数2INTEGER1 -le INTEGER2INTEGER1 is less than or equal to INTEGER2
5.判断整数1小于整数2INTEGER1 -lt INTEGER2INTEGER1 is less than INTEGER2
6.判断两个整数不相等INTEGER1 -ne INTEGER2INTEGER1 is not equal to INTEGER2练习:输入三个数,实现升序排序a b c 要求:a存储最小值 b存储中间值 c存储最大值
#!/bin/bashread -p "please enter arr" -a arr#1.判断arr[0] arr[1]
if [ ${arr[0]} -gt ${arr[1]} ]
thent=${arr[0]}arr[0]=${arr[1]}arr[1]=$t
fi#判断arr[1] arr[2]
if [ ${arr[1]} -gt ${arr[2]} ]
thent=${arr[1]}arr[1]=${arr[2]}arr[2]=$t
fi #判断arr[0] arr[1]
if [ ${arr[0]} -gt ${arr[1]} ]
thent=${arr[0]}arr[0]=${arr[1]}arr[1]=$t
fi
echo ${arr[*]}
【3】字符串
1.判断字符串长度不为0-n STRINGthe length of STRING is nonzeroSTRING equivalent to -n STRING判断str不为空if [ -n "$str" ]
2.判断字符串长度为0-z STRINGthe length of STRING is zero判断str为空if [ -z "$str" ]
3.判断两个字符串是否相等STRING1 = STRING2the strings are equal判断字符串ab是否相等if [ $a = $b ]
4.判断两个字符串不相等STRING1 != STRING2the strings are not equal判断字符串ab不相等if [ $a != $b ]
5.判断字符串的大小关系if [ $a > $b ] if [ $a < $b ] 练习:输入两个字符串,如果有一个为空则提示空,否则判断= > <
read a
read b
if [ -z "$a" -o -z "$b" ]
thenecho NULL
elseif [ $a "=" $b ]thenecho "="elif [ $a ">" $b ] thenecho ">"elif [ $a "<" $b ]thenecho "<"fi
fi
【4】文件
文件类型:bcd-lsp
参数: bcdfLSp
1.判断两个文件谁跟新(修改的时间)FILE1 -nt FILE2FILE1 is newer (modification date) than FILE2两个文件file1 file2if [ $file1 -nt $file2 ] 2.判断文件谁跟旧 FILE1 -ot FILE2FILE1 is older than FILE2两个文件file1 file2if [ $file1 -ot $file2 ] 3. 判断是否是块设备文件以及存在 -b FILEFILE exists and is block special文件file是否是块设备文件if [ -b $file ]
4. 判断文件存在且是一个字符设备文件 -c FILEFILE exists and is character specialif [ -c $file ]
5.判断文件存在且是一个目录 -d FILEFILE exists and is a directory6.判断文件是否存在-e FILEFILE exists
7.判断文件存在且是一个普通文件-f FILEFILE exists and is a regular file
8.判断文件存在且是一个链接文件 -h FILEFILE exists and is a symbolic link (same as -L)-L FILEFILE exists and is a symbolic link (same as -h)9.判断文件存在且是一个管道文件-p FILEFILE exists and is a named pipe
10.判断文件存在且文件大小大于0,文件不为空 -s FILEFILE exists and has a size greater than zero
11.判断文件存在且是一个套接字文件-S FILEFILE exists and is a socket12.判断文件存在且具备可读权限-r FILEFILE exists and read permission is granted
13.判断文件存在且具备写权限 -w FILEFILE exists and write permission is granted
14.判断文件存在且具备可执行权限 -x FILEFILE exists and execute (or search) permission is granted练习:终端输入文件名,输出文件对应的类型以及对应的权限

1.4 case ..in
---------------C语言switch----
switch(表达式)
{case 常量表达式1:C语句; break;case 常量表达式2:C语句; break;case 常量表达式3:C语句; break;...default:C语句n;break;
}
----------------case..in--------
格式:
case varName in常量表达式1)shell语句;; 常量表达式2)shell语句;; ------》不可以省略....*)shell语句;; ----》可以省略不写 esac 解析:1.varName:只是一个变量 类似switch中的表达式 2.常量表达式:2.1常见格式:hello)'hello')"hello") 2.2可以和按位或链接A|a) --->A或a则执行Y|y|yes|YES) 2.3可以和通配符结合使用h*) ?[] 70-89B[7-8][0-9])3.;; --->类似C语言break,退出case..in, 可有可无 4.*) 类似default 执行除上面案例的所有情况 练习:输入一个表达式,输出对应的值 +-*% 1+2 ---》3 a=1b=+c=2switch(b){case '+':printf("%d",a+b);break;case '-':printf("%d",a+b);break; case '*':printf("%d",a+b);break; case '/':printf("%d",a+b);break;case '%':printf("%d",a+b);break;default:error;break;}read a b c
case $b in+)echo $a$b$c=$((a+c));;-)echo $a$b$c=$((a-c));;"*")echo $a$b$c=$((a*c));;/) echo $a$b$c=$((a/c));;%)echo $a$b$c=$((a%c));;*)echo input error;;esac
二、shell循环结构
1.回顾C语言的循环:while\ for\ do..while
2.shell的循环: while\for\select..in
2.1 while
------------------C语言----
while(表达式)
{C语句
}
------------------shell循环格式----
格式#while test 表达式while [ 表达式 ] --->while [ 1 ] 死循环doshell语句done
执行流程:如果表达式为真则进入循环,表达式为假则退出循环练习:循环1--5 i=1while [ $i -le 5 ]doecho i=$i((i++))done练习:输入一个数组,使用while循环输出数组元素,计算数组元素的和
read -p "please enter arr:" -a arr
i=0
while [ $i -lt ${#arr[*]} ]
doecho arr[$i]=${arr[$i]} ((sum+=arr[i]))((i++))
done
echo sum=$sum
11.2 for
while:属于当型循环,先判断后执行,最少执行0次,属于有条件控制(不清楚循环次数)
for: 属于当型循环,先判断后执行,最少执行0次,属于计数控制(循环次数明确)
do..while:属于直到型循环,先执行后判断,最少执行1次,属于条件控制(循环次数不明确)
---------------------C语言for循环格式----
for(表达式1;表达式2;表达式3)
{C语句
}
表达式1:起始值
表达式2:循环条件
表达式3:步长
-------------------shell的格式--------
格式1:类似于C语言的格式for ((表达式1;表达式2;表达式3))doshell语句done
执行流程:先表达式1,执行表达式2,如果表达式2为真则继续循环,后执行表达式3,如果表达式2为假
则结束循环
格式2:可以实现稀疏数组的循环for varName in 选项列表doshell语句done
格式3:for varName -----》doshell语句done注意:"in 选项列表"如果不写,则默认varName的结果是终端输入的字符串也就是命令置换$1 $2 $3...
解析:
1.varName: 循环变量,类似i
2.选项列表:每个元素之间使用空格隔开2.1 选项列表为固定的字符换for i in 1 2 3 4doecho $idone2.2 选项列表的值为数组arr=(11 22 33)for i in ${arr[*]}doecho $idone2.3 选项列表可以使用seq指令格式:seq 起始值 间隔 终止值eg: seq 1 2 10 ----->1 3 5 7 9使用: `seq 起始值 间隔 终止值` $(seq 起始值 间隔 终止值) for i in `seq 2 2 8` a=2 b=8for i in `seq $a 2 $b` 2.4 选项列表可以使用{1..3},起始值和终止值必须是常量{1..3} --->1 2 3
3.执行流程:依次把选项列表的每个元素赋值给变量varName,如果选项列表的元素赋值结束,则结束循环练习:输入一个数组,计算最大值,使用for实现
练习: 打印图片**********for((i=1;i<=4;i++))
dofor((j=1;j<=i;j++))doecho -n "*" #取消换行打印doneecho #换行
doneread -p "please enter arr:" -a arr
max=${arr[0]}
for var in ${arr[*]}
doif [ $max -lt $var ]thenmax=$varfi
done
echo max=$max
2.3 select..in
select..in: 增强和终端页面的交互性
格式:select varName in 选项列表doshell语句done
解析:
1.varName和选项列表: 与for循环一样
2.select..in执行流程:在#?的后面输入指定序列,如果序列号存在,则把指定对应的元素赋值给varName如果#?不输入世界回车,则重新打印页面,如果在#?的后面输入的值不在列表中,则重新输入ctrl c\ ctrl d结束循环
eg:
select var in 11 22 33 44
doecho var=$var
done
2.4 select..in和case..in结合使用
练习:使用select..in和case..in实现计算器1)+2)-3)*4)/5)%#?
read a c #1 2
select b in + - "*" / %
docase $b in +)echo $a$b$c=$((a+c));;-)echo $a$b$c=$((a-c));;"*")echo $a$b$c=$((a*c));;/) echo $a$b$c=$((a/c));;%)echo $a$b$c=$((a%c));;*)echo input error;;esacdone
三、练习:
3.1 使用case..in实现等级判断,输入一个成绩,判断等级

#!/bin/bashread grade
case $grade in9[0-9]|100)echo A;;8[0-9])echo B;;7[0-9])echo C;;6[0-9])echo D;;[1-5][0-9]|[0-9])echo 不及格;;*)echo error;;
esac
3.2任意输入一个数,使用while循环计算各个位数字之和

#!/bin/bashread -p "请输入一个数:" num
sum=0
n=$num
while [ $num -gt 0 ]
dosum=$((num%10+$sum))num=$((num/10))
done
echo $n各个位数和为$sum
3.3 输入一个字符串,使用while循环实现字符串逆置

#!/bin/bashread str
len=${#str}
echo str=$str
for i in `seq 1 1 $len`
doNewStr=$NewStr${str:0-i:1}
done
echo 逆置后:str=$NewStr
3.4循环家目录下的所有内容,计算家目录下 目录的个数,普通文件的个数,使用for循环

#!/bin/basharr=(`ls ~`)
len=${#arr[*]}
qt=0
for i in `seq 0 1 $(($len-1))`
doif [ -d ~/${arr[$i]} ]then((qt++))fi
done
echo 家目录下目录数量为$qt
qt=0
for i in `seq 0 1 $(($len-1))`
doif [ -f ~/${arr[$i]} ]then((qt++))fi
done
echo 家目录下普通文件数量为$qt
3.5 打印图形
*
***
*****
*******

#!/bin/bashfor i in {1..4}
dofor ((j=4-i;j>0;j--))doecho -n " "donefor ((k=2*i-1;k>0;k--))doecho -n "*"doneecho
done
3.6 输入一个数组,请实现冒泡排序

#!/bin/bashread -p "请输入数组元素:" -a arr
len=${#arr[*]}
for i in `seq 1 1 $len`
dofor j in `seq 0 1 $(($len-$i-1))`doif [ ${arr[$j]} -gt ${arr[$((j+1))]} ]thentemp=${arr[$j]}arr[j]=${arr[$((j+1))]}arr[$((j+1))]=$tempfidone
doneecho ${arr[*]}
3.7 输入一个数组,请实现插入排序

#!/bin/bashread -a arr -p "请输入数组中的元素:"
len=${#arr[*]}
sun=0
for i in `seq 1 1 $(($len-1))`
dotemp=${arr[$i]}for ((j=i-1;j>=0;j--))doif [ $temp -le ${arr[$j]} ]thenarr[$((j+1))]=${arr[$j]}elsearr[$((j+1))]=$tempj=-1fidone
done
echo ${arr[*]}
3.8 输入用户名和密码(加密输入),实现密码的三次登录 默认用户名admin 密码1234 账户存款10000
如果登录失败,则提示
第1次登录失败,还有2次机会
第2次登录失败,还有1次机会
第3次登录失败,账户被锁定
如果登录成功,则显示银行页面
1.账户余额
2.取款
3.存款
如果选择1,则打印当前的余额
如果选择2,则输入取款金额,如果取款金额大于实际金额,则提示账户余额不足,请重新输入,如果账户余额小于等于实际金额,则提示取款成功,打印剩余金额
如果选择3,则输入存款金额,并提示 存款成功,余额的值

#!/bin/bashcount=1
balance=10000
while [ $count -le 3 ]
doread -p "请输入用户名:" nameread -p "请输入密码:" -s passwdif [ $name=="admin" -a $passwd=="1234" ]thenechoselect choice in 账户余额 取款 存款docase $choice in账户余额)echo 账户余额:$balance;;取款)read -p "请输入取款金额:" mountif [ $mount -gt $balance ]thenecho 余额不足,请重新输入elsebalance=$((balance-mount))echo 取款成功echo 账户余额:$balancefi;;存款)read -p "请输入存款金额:" mountbalance=$((balance+mount))echo 存款成功echo 账户余额:$balance;;*)echo error;;esacdoneelif [ $name!="admin" || $passwd!="1234" ]thenif [ $count -eq 3 ]thenecho 第$count次登录失败,账户被锁定elseecho "第$count次登录失败,还有$((3-$count))次机会"fi((count++))fi
done
相关文章:
C高级——shell(3)
一、shell的选择结构 1.回顾:C语言的选择结构:if , if else if ,if else,switch (switch的执行速度最快) 2.shell的选择结构: 单分支if 双分支 if else 多分支if elif case..in 1.1 shell的选择结构的格式 --------C语言的格式--…...
【C语言】第八期——指针、二维数组与字符串
目录 1 初始指针 2 获取变量的地址 3 定义指针变量、取地址、取值 3.1 定义指针变量 3.2 取地址、取值 4 对指针变量进行读写操作 5 指针变量作为函数参数 6 数组与指针 6.1 指针元素指向数组 6.2 指针加减运算(了解) 6.2.1 指针加减具体数字…...
docker 运行claude 的computer use
需要注意的是:这里claude操纵的是docker的虚拟服务器,不能访问本地url,需要进行端口转发 export ANTHROPIC_API_KEY%your_api_key% docker run \-e ANTHROPIC_API_KEY$ANTHROPIC_API_KEY \-v $HOME/.anthropic:/home/computeruse/.anthropi…...
JAVA面试_进阶部分_23种设计模式总结
1. 单例模式:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这 个实例。 (1)懒汉式 public class Singleton { /* 持有私有静态实例,防止被引用,此处赋值为null,目的是实现延迟加载…...
边缘计算收益低的三大指标
边缘计算收益低的三大指标主要包括以下方面: 1. 资源贡献不足: 边缘计算的收益通常基于所提供的带宽、存储和计算资源来计算。如果设备的网络带宽有限、在线时间短或提供的存储容量较小,可能无法满足平台设定的最低贡献标准,从而导…...
Linux网络之传输层协议(UDP,TCP协议)
目录 重新认识端口号 端口号划分 netstat pidof UDP协议 UDP的特点 面向数据报 UDP的缓冲区 全双工和半双工 TCP协议 TCP的特点 TCP报头分析 源端口,目标端口,数据偏移(报文首部长度) 序号 确认号 窗口 6个标志位 ACK SYN …...
傅里叶分析
傅里叶分析之掐死教程(完整版)更新于2014.06.06 要让读者在不看任何数学公式的情况下理解傅里叶分析。 傅里叶分析不仅仅是一个数学工具,更是一种可以彻底颠覆一个人以前世界观的思维模式。但不幸的是,傅里叶分析的公式看起来太复…...
【前端基础】Day 3 CSS-2
目录 1. Emmet语法 1.1 快速生成HTML结构语法 1.2 快速生成CSS样式语法 2. CSS的复合选择器 2.1 后代选择器 2.2 子选择器 2.3 并集选择器 2.4 伪类选择器 2.4.1 链接伪类选择器 2.4.2 focus伪类选择器 2.5 复合选择器总结 3. CSS的元素显示模式 3.1 什么是元素显示…...
NAT 技术:网络中的 “地址魔术师”
目录 一、性能瓶颈:NAT 的 “阿喀琉斯之踵” (一)数据包处理延迟 (二)高并发下的性能损耗 二、应用兼容性:NAT 带来的 “适配难题” (一)端到端通信的困境 (二&…...
Ollama下载安装+本地部署DeepSeek+UI可视化+搭建个人知识库——详解!(Windows版本)
目录 1️⃣下载和安装Ollama 1. 🥇官网下载安装包 2. 🥈安装Ollama 3.🥉配置Ollama环境变量 4、🎉验证Ollama 2️⃣本地部署DeepSeek 1. 选择模型并下载 2. 验证和使用DeepSeek 3️⃣使用可视化工具 1. Chrome插件-Page …...
【JavaSE-1】初识Java
1、Java 是什么? Java 是一种优秀的程序设计语言,人类和计算机之间的交流可以借助 Java 这种语言来进行交流,就像人与人之间可以用中文、英语,日语等进行交流一样。 Java 和 JavaScript 两者有关系吗? 一点都没有关系!!! 前端内容:HTML CSS JS,称为网页三剑客 2、JDK 下…...
《基于Django和ElasticSearch的学术论文搜索推荐系统的设计与实现》开题报告
目录 一、选题的背景和意义 (一)选题背景 (二)选题意义 2.1.提升科研效率 2.2 促进学术创新 2.3优化资源配置 二、选题的国内外现状与总结 (一)国内现状 (二)国外现状 &am…...
Dify在Ubuntu20.04系统的部署
文章目录 一、dify 介绍1.核心功能优势2.应用场景 二、dify 安装(docker方式)1.代码库下载2.配置文件修改3.启动docker 容器 三、遇到问题与解决1.使用sudo docker compose up -d报错2.使用service docker start报错 一、dify 介绍 Dify 是一款开源的大语言模型(LL…...
第7天:结构体与联合体 - 复杂数据类型
第7天:结构体与联合体 - 复杂数据类型 一、📚 今日学习目标 🎯 掌握结构体(struct)的定义与使用🔧 理解联合体(union)的特性与适用场景💡 完成图书馆管理系统实战&…...
vue富文本 vue-quill-editor + 上传图片到阿里云服务器 + 修改富文本内容
前言 使用富文本编辑器,需要将图片上传到服务器,完成之后,还需要在修改页面完成修改富文本内容,使用的富文本插件是vue-quill-editor, 一 、安装 vue-quill-editor npm i vue-quill-editor npm install quill --save npm inst…...
Java常见设计模式(中):结构型模式
🌈 引言:设计模式就像乐高积木 适配器:让不同形状的积木完美拼接装饰器:给积木添加炫酷灯光效果代理:遥控积木完成复杂动作组合:将小积木搭建成宏伟城堡 结构型模式 主要用于描述对象之间的关系ÿ…...
DeepSeek R1 + 飞书机器人实现AI智能助手
效果 TFChat项目地址 https://github.com/fish2018/TFChat 腾讯大模型知识引擎用的是DeepSeek R1,项目为sanic和redis实现,利用httpx异步处理流式响应,同时使用buffer来避免频繁调用飞书接口更新卡片的网络耗时。为了进一步减少网络IO消耗&…...
【论文详解】Transformer 论文《Attention Is All You Need》能够并行计算的原因
文章目录 前言一、传统 RNN/CNN 存在的串行计算问题二、Transformer 如何实现并行计算?三、Transformer 的 Encoder 和 Decoder 如何并行四、结论 前言 亲爱的家人们,创作很不容易,若对您有帮助的话,请点赞收藏加关注哦ÿ…...
51c嵌入式~电路~合集12
我自己的原文哦~ https://blog.51cto.com/whaosoft/12318429 一、单端、推挽、桥式拓扑结构变压器对比 单端正激式 单端:通过一只开关器件单向驱动脉冲变压器。 正激:脉冲变压器的原/付边相位关系,确保在开关管导通,驱动脉冲…...
php 获取head参数
php 获取head参数 在PHP中,获取HTTP头部(head)参数可以通过不同的方式实现,下面为你详细介绍几种常见的方法。 1. 使用$_SERVER超全局变量 $_SERVER 是PHP中的一个超全局变量,它包含了诸如头信息、路径、脚本位置等…...
SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
NPOI操作EXCEL文件 ——CAD C# 二次开发
缺点:dll.版本容易加载错误。CAD加载插件时,没有加载所有类库。插件运行过程中用到某个类库,会从CAD的安装目录找,找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库,就用插件程序加载进…...
Unity中的transform.up
2025年6月8日,周日下午 在Unity中,transform.up是Transform组件的一个属性,表示游戏对象在世界空间中的“上”方向(Y轴正方向),且会随对象旋转动态变化。以下是关键点解析: 基本定义 transfor…...
C++--string的模拟实现
一,引言 string的模拟实现是只对string对象中给的主要功能经行模拟实现,其目的是加强对string的底层了解,以便于在以后的学习或者工作中更加熟练的使用string。本文中的代码仅供参考并不唯一。 二,默认成员函数 string主要有三个成员变量,…...
Qt的学习(二)
1. 创建Hello Word 两种方式,实现helloworld: 1.通过图形化的方式,在界面上创建出一个控件,显示helloworld 2.通过纯代码的方式,通过编写代码,在界面上创建控件, 显示hello world; …...
