day029-Shell自动化编程-计算与while循环
文章目录
- 1. read 交互式初始化变量
- 1.1 案例-安装不同的软件
- 1.2 案例-比较大小
- 2. 计算
- 2.1 bc
- 2.2 awk
- 2.3 expr
- 2.4 let
- 2.5 案例-计算内存的空闲率
- 2.6 案例-检查域名过期时间和https整数过期时间
- 3. 循环
- 3.1 循环控制语句
- 3.2 for循环-c语言格式
- 3.3 while循环
- 3.3.1 案例-猜数字
- 3.3.2 读取文件
- 3.3.3 案例-读取文件,批量ping和wget
- 4. 踩坑记录
- 1. -bash: 条件表达式中有语法错误
- 5. 思维导图
1. read 交互式初始化变量
- read是从标准输入获取数据,一般用来在脚本中交互式为变量赋值
- -p “信息”:打印提示信息
- -t:设置输入时间
- -s:静默模式,不显示输入的数据,类似于输入密码
1.1 案例-安装不同的软件
[root@oldboy99-Kylin /server/scripts]# cat read_install_pkg.sh
#!/bin/bash
##############################################################
# File Name: read_install_pkg.sh
# Version: V1.0
# Author: SunKexu
# Organization: www.oldboyedu.com
# Description:
##############################################################export LANG=en_US.UTF-8
cat <<EOF
请选择:
1.安装nginx
2.安装php
3.安装mysql
4.安装DeepSeek
5.安装tomcat
6.安装所有
7.退出
EOF
# read
read -p "请输入您的选择:" choose# vars# command
case $choose in1)echo install nginx ;;2)echo install php ;;3)echo install mysql ;;4)echo install DeepSeek ;;5)echo install tomcat ;;6)echo install all ;;7) exit ;;*)echo "Usage:$0 数字"exit 1
esac[root@oldboy99-Kylin /server/scripts]# bash read_install_pkg.sh
请选择:
1.安装nginx
2.安装php
3.安装mysql
4.安装DeepSeek
5.安装tomcat
6.安装所有
7.退出
请输入您的选择:100
Usage:read_install_pkg.sh 数字
[root@oldboy99-Kylin /server/scripts]# bash read_install_pkg.sh
请选择:
1.安装nginx
2.安装php
3.安装mysql
4.安装DeepSeek
5.安装tomcat
6.安装所有
7.退出
请输入您的选择:1
install nginx
[root@oldboy99-Kylin /server/scripts]# bash read_install_pkg.sh
请选择:
1.安装nginx
2.安装php
3.安装mysql
4.安装DeepSeek
5.安装tomcat
6.安装所有
7.退出
请输入您的选择:6
install all
[root@oldboy99-Kylin /server/scripts]# bash read_install_pkg.sh
请选择:
1.安装nginx
2.安装php
3.安装mysql
4.安装DeepSeek
5.安装tomcat
6.安装所有
7.退出
请输入您的选择:7
1.2 案例-比较大小
[root@oldboy99-Kylin /server/scripts]# cat compare_2.sh
#!/bin/bash
##############################################################
# File Name: compare_2.sh
# Version: V1.0
# Author: SunKexu
# Organization: www.oldboyedu.com
# Description:比较大小,交互传参
##############################################################
export LANG=en_US.UTF-8# vars
read -p "请输入参数1、参数2:" num1 num2# command
# 判断是否是数字
if [[ ! "$num1" =~ ^-?[0-9]+$ || ! "$num2" =~ ^-?[0-9]+$ ]];thenecho "$num1或者${num2}不是数字"exit 1
fi
#[[ "$num2" =~ ^-?[0-9]+$ ]] || {
# echo "$num2 不是数字"
# exit 1
#}
# 比较
if [ $num1 -gt $num2 ];thenecho "$num1 > $num2"
elif [ $num1 -eq $num2 ];thenecho "$num1 = $num2"
elseecho "$num2 > $num1"
fi[root@oldboy99-Kylin /server/scripts]# bash compare_2.sh
请输入参数1、参数2:-3 a
-3或者a不是数字
[root@oldboy99-Kylin /server/scripts]# bash compare_2.sh
请输入参数1、参数2:-1 -3
-1 > -3
[root@oldboy99-Kylin /server/scripts]# bash compare_2.sh
请输入参数1、参数2:30 23
30 > 23
[root@oldboy99-Kylin /server/scripts]# bash compare_2.sh
请输入参数1、参数2:10 20
20 > 10
2. 计算
计算方案 | 说明 | 应用场景 |
---|---|---|
awk/bc | 整数、小数都可以计算 | 计算小数、整数,或比较大小 |
expr | 计算整数 | 检查输入的内容是否为数字(也可以用[[ =~ ]]) |
let/$(())/$[] | 计算整数 | 配合循环使用 |
2.1 bc
bc:Basic calculation,基础计算
- -l(小写的L):使用标准数学库,显示精准小数
- 直接使用是交互式的计算器
- 非交互式一般和echo配合使用
# 计算器
[root@oldboy99-Kylin /server/scripts]# bc
bc 1.07.1
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
22-10
12
10^3
1000
……
[root@oldboy99-Kylin /server/scripts]# echo "10+20" |bc
30
[root@oldboy99-Kylin /server/scripts]# echo "10-20" |bc
-10
[root@oldboy99-Kylin /server/scripts]# echo "10*20" |bc
200
[root@oldboy99-Kylin /server/scripts]# echo "10/20" |bc
0
[root@oldboy99-Kylin /server/scripts]# echo "10/20" |bc -l
.50000000000000000000
[root@oldboy99-Kylin /server/scripts]# echo "10^2" |bc
100
[root@oldboy99-Kylin /server/scripts]# echo "10%2" |bc
0
2.2 awk
-v <变量名>=<值>
: 设置awk
内部的变量值。可以使用该选项将外部值传递给awk
脚本中的变量。- BEGIN关键词:BEGIN{},里面存放awk执行前的语句
[root@oldboy99-Kylin /server/scripts]# awk -v n1=10 'BEGIN{print n1}'
10
[root@oldboy99-Kylin /server/scripts]# awk -v n1=10 'BEGIN{print n1}'
10
[root@oldboy99-Kylin /server/scripts]# awk -v n1=10 -v n2=20 'BEGIN{print n1+n2}'
30
[root@oldboy99-Kylin /server/scripts]# awk -v n1=10 -v n2=20 'BEGIN{print n1-n2}'
-10
[root@oldboy99-Kylin /server/scripts]# awk -v n1=10 -v n2=20 'BEGIN{print n1*n2}'
200
[root@oldboy99-Kylin /server/scripts]# awk -v n1=10 -v n2=20 'BEGIN{print n1/n2}'
0.5
[root@oldboy99-Kylin /server/scripts]# awk -v n1=10 -v n2=20 'BEGIN{print n1^n2}'
100000000000000000000
[root@oldboy99-Kylin /server/scripts]# awk -v n1=10 -v n2=20 'BEGIN{print n1%n2}'
10
[root@oldboy99-Kylin /server/scripts]# awk -v n1=10 -v n2=20 'BEGIN{print n2%n1}'
0
# 集合变量计算
[root@oldboy99-Kylin /server/scripts]# num1=10
[root@oldboy99-Kylin /server/scripts]# num2=20
[root@oldboy99-Kylin /server/scripts]# awk -v n1=$num1 -v n2=$num2 'BEGIN{print n1}'
10
[root@oldboy99-Kylin /server/scripts]# awk -v n1=$num1 -v n2=$num2 'BEGIN{print n1+n2}'
30
[root@oldboy99-Kylin /server/scripts]# awk -v n1=$num1 -v n2=$num2 'BEGIN{print n1-n2}'
-10
[root@oldboy99-Kylin /server/scripts]# awk -v n1=$num1 -v n2=$num2 'BEGIN{print n1*n2}'
200
[root@oldboy99-Kylin /server/scripts]# awk -v n1=$num1 -v n2=$num2 'BEGIN{print n1/n2}'
0.5
[root@oldboy99-Kylin /server/scripts]# awk -v n1=$num1 -v n2=$num2 'BEGIN{print n2^n1}'
10240000000000
[root@oldboy99-Kylin /server/scripts]# awk -v n1=$num1 -v n2=$num2 'BEGIN{print n2%n1}'
0
[root@oldboy99-Kylin /server/scripts]# awk -v n1=$num1 -v n2=$num2 'BEGIN{print n1%n2}'
10
2.3 expr
expr:evaluate expressions,计算表达式
- 一般用来验证变量是否是数字
- 也能计算字符串长度
# 数字与算数字符之间要有空格
[root@oldboy99-Kylin /server/scripts]# expr 10 + 20
30
[root@oldboy99-Kylin /server/scripts]# expr 10 - 20
-10
[root@oldboy99-Kylin /server/scripts]# expr 10 * 20
expr: 语法错误:未预期的参数 “api.txt”
# 要用转义字符
[root@oldboy99-Kylin /server/scripts]# expr 10 \* 20
200
# expr只能计算整数,结果也只能是整数
[root@oldboy99-Kylin /server/scripts]# expr 10 / 20
0
# 判断变量是否是数字
[root@oldboy99-Kylin /server/scripts]# num=10
[root@oldboy99-Kylin /server/scripts]# expr $num + 1
11
[root@oldboy99-Kylin /server/scripts]# echo $?
0
[root@oldboy99-Kylin /server/scripts]# name=skx
[root@oldboy99-Kylin /server/scripts]# expr $name + 1
expr: 非整数参数
[root@oldboy99-Kylin /server/scripts]# echo $?
2
# 计算字符串长度
[root@oldboy99-Kylin /server/scripts]# expr length skx123oldboy
12
[root@oldboy99-Kylin /server/scripts]# expr length $name
3
# 变量扩展符也能显示字符长度
[root@oldboy99-Kylin /server/scripts]# echo ${#name}
3
2.4 let
let 命令是 BASH 中用于计算的工具,用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量。如果表达式中包含了空格或其他特殊字符,则必须引起来。
- let的结果必须用变量来接收,并直接修改原变量内容
- let的结果只能是整数
[root@oldboy99-Kylin /server/scripts]# echo $n
10
[root@oldboy99-Kylin /server/scripts]# let n=10+2
[root@oldboy99-Kylin /server/scripts]# echo $n
12
[root@oldboy99-Kylin /server/scripts]# let n=10-2
[root@oldboy99-Kylin /server/scripts]# echo $n
8
[root@oldboy99-Kylin /server/scripts]# let n=10*2
[root@oldboy99-Kylin /server/scripts]# echo $n
20
[root@oldboy99-Kylin /server/scripts]# let n=10/2
[root@oldboy99-Kylin /server/scripts]# echo $n
5
[root@oldboy99-Kylin /server/scripts]# let n=10^2
[root@oldboy99-Kylin /server/scripts]# echo $n
8
[root@oldboy99-Kylin /server/scripts]# let n=10%2
[root@oldboy99-Kylin /server/scripts]# echo $n
0
[root@oldboy99-Kylin /server/scripts]# let n=10/3
[root@oldboy99-Kylin /server/scripts]# echo $n
3
# 使用let自增或自减
[root@oldboy99-Kylin /server/scripts]# let n++
[root@oldboy99-Kylin /server/scripts]# echo $n
4
[root@oldboy99-Kylin /server/scripts]# let n--
[root@oldboy99-Kylin /server/scripts]# echo $n
3
2.5 案例-计算内存的空闲率
- 注意单位
[root@oldboy99-Kylin /server/scripts]# free -k |awk 'NR==2{print $NF/$2*100"%"}'
55.9613%
[root@oldboy99-Kylin /server/scripts]# free -m |awk 'NR==2{print $NF/$2*100"%"}'
55.8017%
2.6 案例-检查域名过期时间和https整数过期时间
- 检查域名过期时间:
whois 二级域名
,关键词:Expiration Date - 检查https证书过期时间:
curl -v https://www.二级域名
,关键词:expire date - -v:显示请求与响应的详细信息
- date
- -d " ":读取字符串时间
- +%s:获取时间戳
[root@oldboy99-Kylin /server/scripts]# cat check_domain_https_expire.sh
#!/bin/bash
##############################################################
# File Name: check_domain_https_expire.sh
# Version: V1.0
# Author: SunKexu
# Organization: www.oldboyedu.com
# Description:检查域名和https证书过期时间
##############################################################
export LANG=en_US.UTF-8
# vars
time_stamp=`date +%s`# command
while true
do
# 用户需要输入一个二级域名read -p "请输入一个二级域名:" domain
# 检查用户输入的域名[[ $domain =~ ^[^\ ]+\.[a-z]+$ ]] || {echo "输入的二级域名有误,请重新输入"continue}
# 检查域名过期时间expire_domain=`date -d $(whois ${domain} |awk -F ': ' '/Expiration Date/{print $2}') +%s`
# 检查https证书过期时间expire_https=`date -d "$(curl -v https://www.${domain} |& awk -F ': ' '/expire date/{print $2}')" +%s`
# 计算相差时间days_domain=`echo "(${expire_domain}-${time_stamp})/60/60/24" |bc`days_https=`echo "(${expire_https}-${time_stamp})/60/60/24" |bc`
cat <<EOF${domain}:域名还有${days_domain}天过期"https证书还有${days_https}天过期"
EOFexit
done
[root@oldboy99-Kylin /server/scripts]# bash check_domain_https_expire.sh
请输入一个二级域名:baidu 123.com
输入的二级域名有误,请重新输入
请输入一个二级域名:baidu.combaidu.com:域名还有1222天过期"https证书还有62天过期"
3. 循环
3.1 循环控制语句
循环控制 | 说明 |
---|---|
exit | 退出脚本 |
continue | 跳过本次循环,进入下一次循环 |
break | 打断,结束循环 |
return | 函数返回值 |
3.2 for循环-c语言格式
[root@oldboy99-Kylin /server/scripts]# cat test.sh
#!/bin/bash
##############################################################
# File Name: test.sh
# Version: V1.0
# Author: SunKexu
# Organization: www.oldboyedu.com
# Description:
##############################################################
for(( i=1;i<=10;i++))
doecho $i
done
[root@oldboy99-Kylin /server/scripts]# bash test.sh
1
2
3
4
5
6
7
8
9
10
3.3 while循环
3.3.1 案例-猜数字
- 生成随机数:$RANDOM,随机数范围:0-32767
- 32767是16位二进制无符号整数,数值位全为1
- 生成1-100之间的随机数:$RANDOM%100+1
[root@aliyun-ubuntu /server/scripts]# cat GuessNumber.sh
#!/bin/bash
##############################################################
# File Name: GuessNumber.sh
# Version: V1.0
# Author: SunKexu
# Organization: www.oldboyedu.com
# Description:Guess the numbers
##############################################################
export LANG=en_US.UTF-8# vars
# random num
num=$(($RANDOM%100+1))# command
while true
doread -p "Please enter the number you guessed (1-100):" user# check user para[[ $user =~ ^[0-9]+$ ]] || {echo "Please enter a number (1-100):"continue}if [ $user -eq $num ];thenecho "Congratulations, you guessed right"exitelif [ $user -gt $num ];thenecho "Guess too big"elseecho "Guess too small"fi
done[root@aliyun-ubuntu /server/scripts]# bash GuessNumber.sh
Please enter the number you guessed (1-100):50
Guess too small
Please enter the number you guessed (1-100):60
Guess too small
Please enter the number you guessed (1-100):70
Guess too small
Please enter the number you guessed (1-100):80
Guess too big
Please enter the number you guessed (1-100):75
Guess too big
Please enter the number you guessed (1-100):74
Guess too big
Please enter the number you guessed (1-100):73
Guess too big
Please enter the number you guessed (1-100):72
Congratulations, you guessed right
3.3.2 读取文件
- while读取文件时是按行读取的
[root@aliyun-ubuntu /server/scripts]# cat read_file.sh
#!/bin/bash
##############################################################
# File Name: read_file.sh
# Version: V1.0
# Author: SunKexu
# Organization: www.oldboyedu.com
# Description:
##############################################################
export LANG=en_US.UTF-8# vars
file=$1
# check para
[ $# -eq 0 ] && {echo "Usage:$0 filename"exit 1
}
while read line
doecho $line
done < $file
[root@aliyun-ubuntu /server/scripts]# bash read_file.sh /etc/passwd |head
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
3.3.3 案例-读取文件,批量ping和wget
- ping -W 数字:每次请求的超时时间,单位秒
- wget:
- -S/–spider:不下载任何文件
- -T 数字:设置连接请求的超时时间,单位秒
- -t 数字:设置重试次数
[root@oldboy99-Kylin /server/scripts]# cat check_ping_wget.sh
#!/bin/bash
##############################################################
# File Name: check_ping_wget.sh
# Version: V1.0
# Author: SunKexu
# Organization: www.oldboyedu.com
# Description:读取文件,批量ping和wget
##############################################################
export LANG=en_US.UTF-8# vars
file=$1# command
[ $# -eq 0 ] && {echo "$0 filename(has ip/domain ……)"exit 1
}
while read line
doping -c 2 -W 1 $line >/dev/null 2>&1[ $? -eq 0 ] && echo "$line 可以ping通" || echo "$line 不能ping通"wget -S -T 1 -t 1 $line >/dev/null 2>&1[ $? -eq 0 ] && echo "$line 可以访问" || echo "$line 不能访问"echo "-----------------------"
done < $1
[root@oldboy99-Kylin /server/scripts]# bash check_ping_wget.sh ./log/ip.txt
10.0.0.200 可以ping通
10.0.0.200 不能访问
-----------------------
baidu.com 可以ping通
baidu.com 可以访问
-----------------------
jd.com 可以ping通
jd.com 可以访问
-----------------------
csdn.net 可以ping通
csdn.net 可以访问
-----------------------
4. 踩坑记录
1. -bash: 条件表达式中有语法错误
修改:
- 空格:[:space:]
- 或者将空格转义
5. 思维导图
【金山文档 | WPS云文档】 思维导图 https://kdocs.cn/l/co3I7PtpTYQX
相关文章:

day029-Shell自动化编程-计算与while循环
文章目录 1. read 交互式初始化变量1.1 案例-安装不同的软件1.2 案例-比较大小 2. 计算2.1 bc2.2 awk2.3 expr2.4 let2.5 案例-计算内存的空闲率2.6 案例-检查域名过期时间和https整数过期时间 3. 循环3.1 循环控制语句3.2 for循环-c语言格式3.3 while循环3.3.1 案例-猜数字3.3…...

Linux命令基础(2)
su和exit命令 可以通过su命令切换到root账户 语法:su [-] 用户名 -符号是可选的,表示是否在切换用户后加载环境变量,建议带上 参数:用户名,表示要切换的用户,用户名可以省略,省略表示切换到ro…...

vue3 + vite实现动态路由,并进行vuex持久化设计
在后台管理系统中,如何根据后端返回的接口,来动态的设计路由呢,今天一片文章带你们解 1、在vuex中设置一个方法 拿到完整的路由数据 const state {routerList: []}; const mutations { dynameicMenu(state, payload) {// 第一步 通过glob…...
ThingsCloud事物云平台搭建-微信小程序
ThingsCloud云平台与微信小程序设计 本文主要是介绍ThingsCloud云平台的搭建及微信小程序与app的使用。 当前文章是作为一个通用案例,介绍如何快速使用 ThingsCloud云平台 以及 利用 ThingsCloud云平台平台的框架快速设计手机APP和微信小程序。 可以快速让硬件接入,实现硬件…...
为什么 uni-app 开发的 App 没有明显出现屏幕适配问题Flutter 开发的 App 出现了屏幕适配问题
🧩 一、为什么 uni-app 开发的 App 没有明显出现屏幕适配问题? ✅ 1. uni-app 是基于 H5 的运行环境(或类 H5) uni-app 默认使用的是 H5 的渲染引擎(如 WebView 或小程序渲染引擎)。在 H5 中,…...

学习路之php--性能优化
一、php周边优化 二、代码级优化 变量管理 及时unset()释放大数组/对象,减少内存占用局部变量访问速度比全局变量快约2倍,优先使用局部变量大数组采用引用传递(&$var)避免内存 循环优化 预计算循环次数: …...

GC1808:高性能24位立体声音频ADC芯片解析
1. 芯片简介 GC1808 是一款24位立体声音频模数转换器(ADC),支持96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于家庭影院、蓝牙音箱等场景。 核心特性 高精度:24位分辨率,…...

echarts使用graph、lines实现拓扑,可以拖动增加effect效果
options.js // import React from react // import * as echarts from echartsimport ./index.lessexport const useEchartsOptionFun ({ nodeDataList, getNodeLinksDataList, getLinesCoordsFun }) > {const option {title: {text: 拓扑关系图,top: top,left: center,}…...

产品经理课程(九)
从需求到功能设计 (一)复习 产品规划:产品定位、阶段性计划 产品定位:产品画布(9个步骤;最重要的是先解决什么问题) (Roadmap)目标要素:时间、事项、里程碑…...
二.单例模式
一.单例模式的定义 单例模式是一种创建型设计模式,确保一个类只有一个实例,并提供该实例的全局访问点。 1.1.核心目标 唯一实例:限制类的实例化次数仅一次。全局访问:提供统一的访问入口(通常是静…...

从零开始开发纯血鸿蒙应用之网络检测
从零开始开发纯血鸿蒙应用 〇、前言一、认识 connection 模块1、获取默认网络2、获取网络能力信息3、解析网络能力信息3.1、NetCap3.2、NetBearType 二、实现网络检测功能1、申请权限2、获取默认网路的 NetCap 数组 三、总结 〇、前言 在之前的博文里,介绍了如何实…...

向 AI Search 迈进,腾讯云 ES 自研 v-pack 向量增强插件揭秘
作者:来自腾讯云刘忠奇 2025 年 1 月,腾讯云 ES 团队上线了 Elasticsearch 8.16.1 AI 搜索增强版,此发布版本重点提升了向量搜索、混合搜索的能力,为 RAG 类的 AI Search 场景保驾护航。除了紧跟 ES 官方在向量搜索上的大幅优化动…...
接IT方案编写(PPT/WORD)、业务架构设计、投标任务
1、IT 方案编写(PPT/WORD) 定制化方案:根据客户需求,提供涵盖云计算、大数据、人工智能等前沿技术领域的 PPT/WORD 方案编写服务,精准提炼核心价值,呈现专业技术内容。 逻辑清晰架构:采用…...
PostgreSQL 的扩展pageinspect
PostgreSQL 的扩展pageinspect pageinspect 是 PostgreSQL 提供的一个强大的底层扩展,允许数据库管理员和开发者直接检查数据库页面的内部结构。这个扩展对于数据库调试、性能优化和深入学习 PostgreSQL 存储机制非常有价值。 一、扩展概述 功能:提供…...
Unity——QFramework框架 内置工具
QFramework 除了提供了一套架构之外,QFramework 还提供了可以脱离架构使用的工具 TypeEventSystem、EasyEvent、BindableProperty、IOCContainer。 这些工具并不是有意提供,而是 QFramework 的架构在设计之初是通过这几个工具组合使用而成的。 内置工具…...

【win | docker开启远程配置】使用 SSH 隧道访问 Docker的前操作
在主机A pycharm如何连接远程主机B win docker? 需要win docker配置什么? 快捷配置-主机B win OpenSSH SSH Server https://blog.csdn.net/z164470/article/details/121683333 winR,打开命令行,输入net start sshd,启动SSH。 或者右击我的电脑&#…...

股指期货波动一个点多少钱?
很多朋友在交易股指期货时,都会好奇一个问题:股指期货波动一个点,我的账户里到底是赚了还是亏了多少钱?要搞清楚这个问题,其实很简单,只需要了解两个关键信息:股指期货的“交易单位”࿰…...
Kafka 快速上手:安装部署与 HelloWorld 实践(一)
一、Kafka 是什么?为什么要学? ** 在大数据和分布式系统的领域中,Kafka 是一个如雷贯耳的名字。Kafka 是一种分布式的、基于发布 / 订阅的消息系统,由 LinkedIn 公司开发,后成为 Apache 基金会的顶级开源项目 。它以…...
NGINX `ngx_stream_core_module` 模块概览
一、模块定位与功能 通用 TCP/UDP 代理 支持同时处理 TCP 和 UDP 流量,透明转发请求到后端服务器组(upstream)。可作为四层负载均衡,根据客户端 IP、权重、最少连接等策略将连接分发给后端。 预读(preread)…...

iOS、Android、鸿蒙、Web、桌面 多端开发框架Kotlin Multiplatform
Kotlin Multiplatform(简称 KMP)是 JetBrains 推出的开源跨平台开发框架 Kuikly 是腾讯开源的跨端开发框架,基于 Kotlin Multiplatform 技术构建,为开发者提供了技术栈更统一的跨端开发体验 KMP 不仅局限于移动端,它…...

探索C++标准模板库(STL):String接口的底层实现(下篇)
前引:在C的面向对象编程中,对象模型是理解语言行为的核心。无论是类的成员函数如何访问数据,还是资源管理如何自动化,其底层机制均围绕两个关键概念展开:this指针与六大默认成员函数。它们如同对象的“隐形守护者”&am…...

Flutter知识点汇总
Flutter架构解析 1. Flutter 是什么?它与其他移动开发框架有什么不同? Flutter 是 Google 开发的开源移动应用开发框架,可用于快速构建高性能、高保真的移动应用(iOS 和 Android),也支持 Web、桌面和嵌入式设备。。它与其他移动开发框架(如 React Native、Xamarin、原…...
vue组件的data为什么是函数?
vue组件的data为什么是函数? 在JS中,实例是通过构造函数创建的,每个构造函数可以new出多个实例,每个实例都会继承原型上的方法和属性。 在vue中,一个vue组件就是一个实例,当一个组件被复用多次࿰…...
AI图片售卖:是暴利新风口还是虚幻泡沫?哪些平台适合售卖AI图片
还记得去年大火的Midjourney吗?今年4月,Midjourney又发布了备受期待的V7版本,带来了更高的图像质量和创新功能。使用Midjourney、Stable Diffusion、DALLE等AI图片生成工具,创作者只需输入关键词即可获得高质量的原创图片。这一变…...

线性注意力 vs. 传统注意力:效率与表达的博弈新解
核心结论:线性注意力用计算复杂度降维换取全局建模能力,通过核函数和结构优化补足表达缺陷 一、本质差异:两种注意力如何工作? 特性传统注意力(Softmax Attention)线性注意力(Linear At…...

YOLO在QT中的完整训练、验证与部署方案
以下是YOLO在QT中的完整训练、验证与部署方案: 训练方案 准备数据集: 收集数据:收集与目标检测任务相关的图像数据集,可以是公开数据集如COCO、Pascal VOC,也可以是自定义数据集。标注数据:使用标注工具如…...
Vue在线预览excel、word、ppt等格式数据。
目录 前言 1.安装库 2.预览文件子组件代码 3、新建store/system.ts 4、父页面进行使用 总结 前言 纯前端处理文件预览,包含excel、word、ppt、txt等格式,不需要后端服务器进行部署,并且内网也可以使用。 1.安装库 npm install vue-offi…...

增量式网络爬虫通用模板
之前做过一个项目,他要求是只爬取新产生的或者已经更新的页面,避免重复爬取未变化的页面,从而节省资源和时间。这里我需要设计一个增量式网络爬虫的通用模板。可以继承该类并重写部分方法以实现特定的解析和数据处理逻辑。这样可以更好的节约…...

【JVM】三色标记法原理
在JVM中,三色标记法是GC过程中对象状态的判断依据,回收前给对象设置上不同的三种颜色,三色分为白色、灰色、黑色。根据颜色的不同,决定对象是否要被回收。 白色表示: 初始状态:所有对象未被 GC 访问。含义…...

【uniapp开发】picker组件的使用
项目uniapp,结合fastadmin后端开发 picker组件的官方文档说明 https://en.uniapp.dcloud.io/component/picker.html#普通选择器 先看效果: 1、实现设备类型的筛选;2、实现设备状态的筛选; 前端代码(节选࿰…...