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

shell编程:安装部署前常见环境检查

脚本任务

监测主机是否联通正常

检查安装操作系统版本是否和需求一致

检查CPU是否满足规格要求

检查内存是否满足规格要求

检查数据磁盘是否满足规格要求

检查操作系统分区目录大小是否满足需求

检查集群主机时间是否一致

0.配置文件准备及脚本变量初始化

编写config.ini存放主机配置文件

[hosts]
10.0.1.10 node01
10.0.1.20 node02
10.0.1.30 node03[root_password]
000000

编写 env-check.sh 取出ip和 密码

#!/bin/bash
#
if [ ! -e ./config.ini ];thenecho "config.ini is not exist...please check.."EXIT 1
fiHOSTS_IP=`cat config.ini | sed -n '/\[hosts\]/,/\[.*\]/p' | grep -v "\[.*\]" |grep -v ^$ |grep -v ^# |awk '{print $1}'`ROOT_PATH=`cat config.ini | sed -n '/\[root_password\]/,/\[.*\]/p' | grep -v "\[.*\]" |grep -v ^$ |grep -v ^#`

1.监测主机是否联通正常

function check_host_online
{echo "++++++++++++++++监测主机是否联通正常++++++++++++++++"for host in $HOSTS_IP;doping -w 3 $host &> /dev/nullif [ $? -eq 0 ];thenecho "检测主机 $host 连通性通过"elseecho "检测主机 $host 无法连通"ping_faild_hosts="$ping_faild_hosts $host"fidoneif [[ "$ping_faild_hosts" == "" ]];thenecho "1.使用ping对主机连通性检查,全部通过"elseecho "1.使用ping对主机连通性检查,未全部通过:$ping_faild_hosts"exit 1fi
}

循环遍历主机列表:通过for循环遍历HOSTS_IP变量中包含的所有主机IP地址。

执行ping命令:对每个主机执行ping命令,-w 3参数指定ping操作持续3秒,&> /dev/null将标准输出和标准错误都重定向到/dev/null,即不显示ping命令的输出。

检查ping命令的返回值:使用$?获取上一个命令(即ping命令)的退出状态。如果返回值为0(-eq 0),表示ping命令成功,即主机连通性通过。

打印连通性结果:如果主机连通性通过,则打印"检测主机 $host 连通性通过";如果不通,则打印"检测主机 $host 无法连通",并将该主机IP添加到ping_faild_hosts变量中,用于记录失败的主机。

检查是否有主机未通过连通性检查:循环结束后,使用if语句检查ping_faild_hosts变量是否为空。如果为空,表示所有主机的连通性检查都通过了,打印"1.使用ping对主机连通性检查,全部通过"。如果不为空,表示有主机未通过连通性检查,打印"1.使用ping对主机连通性检查,未全部通过:$ping_faild_hosts",并退出脚本,返回状态为1。

退出脚本:如果检测到有主机连通性失败,脚本将通过exit 1命令退出,并返回状态码1,表示脚本执行失败。

2.检查安装操作系统版本是否和需求一致

先编写检查主机是否能登录

function verify_password
{if [ $# -lt 2 ];thenecho "Usage: verify_password IP root_password"exit 1fisshpass -p$2 ssh -o StrictHostKeyChecking=no -o ConnectTimeout=2 root@$1 "df -h" &> /dev/nullif [ $? -ne 0 ];thenecho "尝试登录ssh主机$1 失败,检查后重试"return 255elsereturn 0fi
}

编写检查操作系统版本是否一致

grep $OS_VERSION /etc/redhat-release

OS_VERSION=`cat config.ini | sed -n '/\[os_version\]/,/\[.*\]/p' | grep -v "\[.*\]" |grep -v ^$ |grep -v ^#`function check_os_version
{for host in $HOSTS_IP;doverify_password $host $ROOT_PASSif [ $? -eq 0 ];thensshpass -p$ROOT_PASS ssh -o StrictHostKeyChecking=no -o ConnectTimeout=2 root@$host "grep $OS_VERSION /etc/redhat-release" &> /dev/nullif [ $? -ne 0 ];thenecho "检查主机$host 版本,与目标不一致,检查不通过"os_failed_hosts="$os_failed_hosts $host"elseecho "检查主机$host 版本,与目标一致,检查通过"fielseos_failed_hosts="$os_failed_hosts $host"fidoneif [[ "$os_failed_hosts" == "" ]];thenecho "2.对主机版本检查,全部通过"elseecho "2.对主机版本检查,未全部通过: $os_failed_hosts"exit 1fi
}

循环遍历主机列表:通过for循环遍历HOSTS_IP变量中包含的所有主机IP地址。

验证密码:对每个主机调用verify_password函数,传入主机IP和root用户的密码$ROOT_PASS,以验证SSH连接的密码是否正确。

检查SSH连接:如果verify_password函数返回状态码0(表示密码验证成功),则继续执行;否则,跳过当前主机。

SSH连接并检查操作系统版本:使用sshpass工具和提供的root用户密码通过SSH连接到主机,并执行grep命令检查/etc/redhat-release文件中是否包含特定的操作系统版本字符串$OS_VERSION。这里使用了-o StrictHostKeyChecking=no选项来禁用严格的主机密钥检查,这在自动化脚本中常用于避免每次连接时的手动确认。

记录检查结果:如果操作系统版本检查未通过(即grep命令返回非0状态码),则打印该主机的检查未通过信息,并将主机IP添加到os_failed_hosts变量中;如果检查通过,则打印该主机的检查通过信息。

汇总检查结果:循环结束后,使用if语句检查os_failed_hosts变量是否为空。如果为空,表示所有主机的操作系统版本检查都通过了,打印"2.对主机版本检查,全部通过"。如果不为空,表示有主机的操作系统版本检查未通过,打印"2.对主机版本检查,未全部通过:$os_faild_hosts",并退出脚本,返回状态码1。

退出脚本:如果检测到有主机操作系统版本不一致,脚本将通过exit 1命令退出,并返回状态码1,表示脚本执行失败。

3.检查CPU是否满足规格要求

cat /proc/cpuinfo |grep ^processor |sort |uniq |wc -l

CPU_CORES=`cat config.ini | sed -n '/\[cpu_cores\]/,/\[.*\]/p' | grep -v "\[.*\]" |grep -v ^$ |grep -v ^#`
function check_cpu_cores
{for host in $HOSTS_IP;doverify_password $host $ROOT_PASSif [ $? -eq 0 ];thenDST_CPU_CORES=`sshpass -p$ROOT_PASS ssh -o StrictHostKeyChecking=no -o ConnectTimeout=2 root@$host "cat /proc/cpuinfo |grep ^processor |sort |uniq |wc -l"` &> /dev/nullif [ $DST_CPU_CORES -lt $CPU_CORES ];thenecho "检查主机CPU逻辑核心数量,检查不通过"cpu_failed_hosts="$cpu_failed_hosts $host"elseecho "检查主机CPU逻辑核心数量,检查通过"fielsecpu_failed_hosts="$cpu_failed_hosts $host"fidoneif [[ "$cpu_failed_hosts" == "" ]];thenecho "3.对主机cpu检查,全部通过"elseecho "3.对主机cpu检查,未全部通过: $cpu_failed_hosts"exit 1fi

4.检查内存是否满足规格要求

cat /proc/meminfo |grep MemTotal| awk '{print $2}'

TOTAL_MEMORY=`cat config.ini | sed -n '/\[memory_kb\]/,/\[.*\]/p' | grep -v "\[.*\]" |grep -v ^$ |grep -v ^#`
function check_memory
{for host in $HOSTS_IP;doverify_password $host $ROOT_PASSif [ $? -eq 0 ];thenDST_TOTAL_MEMORY=`sshpass -p$ROOT_PASS ssh -o StrictHostKeyChecking=no -o ConnectTimeout=2 root@$host "cat /proc/meminfo |grep MemTotal| awk '{print \\$2}'"` &> /dev/nullif [ $DST_TOTAL_MEMORY -lt $TOTAL_MEMORY ];thenecho "检查主机 $host 内存大小,检查不通过"men_failed_hosts="$men_failed_hosts $host"elseecho "检查主机 $host 内存大小,检查通过"fielsemen_failed_hosts="$men_failed_hosts $host"fidoneif [[ "$men_failed_hosts" == "" ]];thenecho "4.对主机内存检查,全部通过"elseecho "4.对主机内存检查,未全部通过,未通过的主机: $men_failed_hosts"fi
}

5.检查数据磁盘是否满足规格要求

function check_disk_number
{for host in $HOSTS_IP;doverify_password $host $ROOT_PASSALL_DISK_SYMBOLS=`sshpass -p$ROOT_PASS ssh -o StrictHostKeyChecking=no -o ConnectTimeout=2 root@$host "lsscsi |awk '\\$2~/disk/{print \\$8}'"` &> /dev/nullfor d in $ALL_DISK_SYMBOLS;dodf -h | grep "$d" &> /dev/nullif [ $? -eq 0 ];thenDATA_DISK_SYMBOLS=`echo $ALL_DISK_SYMBOLS | sed "s#$d##g"`fidoneDATA_DISK_NUMBER=`echo $DATA_DISK_SYMBOLS | awk '{print NF}'`if [ $DATA_DISK_NUMBER -ge $NUM_OF_DISK ]; thenecho "检查主机 $host 数据盘个数,检查通过"elseecho "检查主机 $host 数据盘个数,检查不通过"disk_failed_hosts="$disk_failed_hosts $host"fidoneif [[ "$disk_failed_hosts" == "" ]];thenecho "5.对主机内存检查,全部通过"elseecho "5.对主机内存检查,未全部通过,未通过的主机: $disk_failed_hosts"fi}

6.检查操作系统分区目录大小是否满足需求

PARTITION_SIZE=`cat config.ini | sed -n '/\[root_partition_size\]/,/\[.*\]/p' | grep -v "\[.*\]" |grep -v ^$ |grep -v ^#`
function check_root_partition_size
{for host in $HOSTS_IP;doverify_password $host $ROOT_PASSif [ $? -eq 0 ];thenROOT_PARTITION_SIZE=`sshpass -p$ROOT_PASS ssh -o StrictHostKeyChecking=no -o ConnectTimeout=2 root@$host "df -h |awk '\\$6==\"/\"{print \\$2}' |sed 's/[^0-9]//g'"` &> /dev/nullif [ $ROOT_PARTITION_SIZE -ge $PARTITION_SIZE ]; thenecho "检查主机 $host 分区大小,检查通过"elseecho "检查主机 $host 分区大小,检查不通过"part_failed_hosts="$part_failed_hosts $host"fielsepart_failed_hosts="$part_failed_hosts $host"fidoneif [[ "$part_failed_hosts" == "" ]];thenecho "6.对主机分区大小,全部通过"elseecho "6.对主机分区大小,未全部通过,未通过的主机: $part_failed_hosts"fi
}

7.检查集群主机时间是否一致

TIME_VALUE=`cat config.ini | sed -n '/\[time_sync_diff\]/,/\[.*\]/p' | grep -v "\[.*\]" |grep -v ^$ |grep -v ^#`
function check_time_sync
{for host in $HOSTS_IP;doLOCAL_TIME=`date "+%Y%m%d%H%M%S"`verify_password $host $ROOT_PASSif [ $? -eq 0 ];thenDST_HOST_TIME=`sshpass -p$ROOT_PASS ssh -o StrictHostKeyChecking=no -o ConnectTimeout=2 root@$host 'date "+%Y%m%d%H%M%S"'` &> /dev/nullTIME_DIFF=`expr $LOCAL_TIME - $DST_HOST_TIME |sed 's/[^0-9]//g'`if [ $TIME_DIFF -lt $TIME_VALUE ];thenecho "检查主机 $host 时间同步通过"elseecho "检查主机 $host 时间同步不通过,时间误差在 $TIME_DIFF"time_failed_hosts="$time_failed_hosts $host"fielsetime_failed_hosts="$time_failed_hosts $host"fidoneif [[ "$time_failed_hosts" == "" ]];thenecho "7.对主机时间检查,全部通过"elseecho "7.对主机时间检查,未全部通过,未通过的主机: $time_failed_hosts"fi
}

全部代码在这


#!/bin/bash
#
if [ ! -e ./config.ini ];thenecho "config.ini is not exist...please check.."exit 1
fiHOSTS_IP=`cat config.ini | sed -n '/\[hosts\]/,/\[.*\]/p' | grep -v "\[.*\]" |grep -v ^$ |grep -v ^# |awk '{print $1}'`ROOT_PASS=`cat config.ini | sed -n '/\[root_password\]/,/\[.*\]/p' | grep -v "\[.*\]" |grep -v ^$ |grep -v ^#`OS_VERSION=`cat config.ini | sed -n '/\[os_version\]/,/\[.*\]/p' | grep -v "\[.*\]" |grep -v ^$ |grep -v ^#`CPU_CORES=`cat config.ini | sed -n '/\[cpu_cores\]/,/\[.*\]/p' | grep -v "\[.*\]" |grep -v ^$ |grep -v ^#`TOTAL_MEMORY=`cat config.ini | sed -n '/\[memory_kb\]/,/\[.*\]/p' | grep -v "\[.*\]" |grep -v ^$ |grep -v ^#`NUM_OF_DISK=`cat config.ini | sed -n '/\[data_disk_number\]/,/\[.*\]/p' | grep -v "\[.*\]" |grep -v ^$ |grep -v ^#`PARTITION_SIZE=`cat config.ini | sed -n '/\[root_partition_size\]/,/\[.*\]/p' | grep -v "\[.*\]" |grep -v ^$ |grep -v ^#`TIME_VALUE=`cat config.ini | sed -n '/\[time_sync_diff\]/,/\[.*\]/p' | grep -v "\[.*\]" |grep -v ^$ |grep -v ^#`if [[ "$HOSTS_IP" == "" ]];thenecho "NO HOST IP ADDRESS is configured in config.please check config.ini"exit 1
elseecho "the cluster includes the following hosts:"for host in $HOSTS_IP; doecho $hostdoneread -p "Please confirm,input yes/no:" choiceif [[ "$choice" == "yes" || "$choice" == "YES" || "$choice" == "Y" || "$choice" == "y" ]];thencontinueelseexitfi
fifunction format_print
{if [ $# -lt 1 ]; thenecho "Usage: format_print 'args1 args2...'"exit 1fifor str in $@;doecho $strdone
}function verify_password
{if [ $# -lt 2 ];thenecho "Usage: verify_password IP root_password"exit 1fisshpass -p$2 ssh -o StrictHostKeyChecking=no -o ConnectTimeout=2 root@$1 "df -h" &> /dev/nullif [ $? -ne 0 ];thenecho "尝试登录ssh主机$1 失败,检查后重试"return 255elsereturn 0fi
}function check_host_online
{echo "++++++++++++++++1、检查主机是否联通正常++++++++++++++++"for host in $HOSTS_IP;doping -w 3 $host &> /dev/nullif [ $? -eq 0 ];thenecho "检测主机 $host 连通性通过"elseecho "检测主机 $host 无法连通"ping_faild_hosts="$ping_faild_hosts $host"fidoneif [[ "$ping_faild_hosts" == "" ]];thenecho "1.使用ping对主机连通性检查,全部通过"elseecho "1.使用ping对主机连通性检查,未全部通过:"format_print $ping_faild_hostsfi
}
function check_os_version
{echo "++++++++++++++++2、检查安装操作系统版本是否和需求一致++++++++++++++++"for host in $HOSTS_IP;doverify_password $host $ROOT_PASSif [ $? -eq 0 ];thensshpass -p$ROOT_PASS ssh -o StrictHostKeyChecking=no -o ConnectTimeout=2 root@$host "grep $OS_VERSION /etc/redhat-release" &> /dev/nullif [ $? -ne 0 ];thenecho "检查主机$host 版本,与目标不一致,检查不通过"os_failed_hosts="$os_failed_hosts $host"elseecho "检查主机$host 版本,与目标一致,检查通过"fielseos_failed_hosts="$os_failed_hosts $host"fidoneif [[ "$os_failed_hosts" == "" ]];thenecho "2.对主机版本检查,全部通过"elseecho "2.对主机版本检查,未全部通过,未通过的主机: "format_print $os_failed_hostsfi
}
function check_cpu_cores
{echo "++++++++++++++++3、检查CPU是否满足规格要求++++++++++++++++"for host in $HOSTS_IP;doverify_password $host $ROOT_PASSif [ $? -eq 0 ];thenDST_CPU_CORES=`sshpass -p$ROOT_PASS ssh -o StrictHostKeyChecking=no -o ConnectTimeout=2 root@$host "cat /proc/cpuinfo |grep ^processor |sort |uniq |wc -l"` &> /dev/nullif [ $DST_CPU_CORES -lt $CPU_CORES ];thenecho "检查主机CPU逻辑核心数量,检查不通过"cpu_failed_hosts="$cpu_failed_hosts $host"echo $cpu_failed_hostselseecho "检查主机CPU逻辑核心数量,检查通过"fielsecpu_failed_hosts="$cpu_failed_hosts $host"fidoneif [[ "$cpu_failed_hosts" == "" ]];thenecho "3.对主机cpu检查,全部通过"elseecho "3.对主机cpu检查,未全部通过,未通过的主机: "format_print $cpu_failed_hostsfi
}
function check_memory
{echo "++++++++++++++++4、检查内存是否满足规格要求++++++++++++++++"for host in $HOSTS_IP;doverify_password $host $ROOT_PASSif [ $? -eq 0 ];thenDST_TOTAL_MEMORY=`sshpass -p$ROOT_PASS ssh -o StrictHostKeyChecking=no -o ConnectTimeout=2 root@$host "cat /proc/meminfo |grep MemTotal| awk '{print \\$2}'"` &> /dev/nullif [ $DST_TOTAL_MEMORY -lt $TOTAL_MEMORY ];thenecho "检查主机 $host 内存大小,检查不通过"men_failed_hosts="$men_failed_hosts $host"elseecho "检查主机 $host 内存大小,检查通过"fielsemen_failed_hosts="$men_failed_hosts $host"fidoneif [[ "$men_failed_hosts" == "" ]];thenecho "4.对主机内存检查,全部通过"elseecho "4.对主机内存检查,未全部通过,未通过的主机:"format_print $men_failed_hostsfi
}
function check_disk_number
{echo "++++++++++++++++5、检查数据磁盘是否满足规格要求++++++++++++++++"for host in $HOSTS_IP;doverify_password $host $ROOT_PASSALL_DISK_SYMBOLS=`sshpass -p$ROOT_PASS ssh -o StrictHostKeyChecking=no -o ConnectTimeout=2 root@$host "lsscsi |awk '\\$2~/disk/{print \\$8}'"` &> /dev/nullfor d in $ALL_DISK_SYMBOLS;dodf -h | grep "$d" &> /dev/nullif [ $? -eq 0 ];thenDATA_DISK_SYMBOLS=`echo $ALL_DISK_SYMBOLS | sed "s#$d##g"`fidoneDATA_DISK_NUMBER=`echo $DATA_DISK_SYMBOLS | awk '{print NF}'`if [ $DATA_DISK_NUMBER -ge $NUM_OF_DISK ]; thenecho "检查主机 $host 数据盘个数,检查通过"elseecho "检查主机 $host 数据盘个数,检查不通过"disk_failed_hosts="$disk_failed_hosts $host"fidoneif [[ "$disk_failed_hosts" == "" ]];thenecho "5.对主机内存检查,全部通过"elseecho "5.对主机内存检查,未全部通过,未通过的主机:"format_print $disk_failed_hostsfi}
function check_root_partition_size
{echo "++++++++++++++++6、检查操作系统分区目录大小是否满足需求++++++++++++++++"for host in $HOSTS_IP;doverify_password $host $ROOT_PASSif [ $? -eq 0 ];thenROOT_PARTITION_SIZE=`sshpass -p$ROOT_PASS ssh -o StrictHostKeyChecking=no -o ConnectTimeout=2 root@$host "df -h |awk '\\$6==\"/\"{print \\$2}' |sed 's/[^0-9]//g'"` &> /dev/nullif [ $ROOT_PARTITION_SIZE -ge $PARTITION_SIZE ]; thenecho "检查主机 $host 分区大小,检查通过"elseecho "检查主机 $host 分区大小,检查不通过"part_failed_hosts="$part_failed_hosts $host"fielsepart_failed_hosts="$part_failed_hosts $host"fidoneif [[ "$part_failed_hosts" == "" ]];thenecho "6.对主机分区大小,全部通过"elseecho "6.对主机分区大小,未全部通过,未通过的主机:"format_print $part_failed_hostsfi}
function check_time_sync
{echo "++++++++++++++++7、检查集群主机时间是否一致++++++++++++++++"for host in $HOSTS_IP;doLOCAL_TIME=`date "+%Y%m%d%H%M%S"`verify_password $host $ROOT_PASSif [ $? -eq 0 ];thenDST_HOST_TIME=`sshpass -p$ROOT_PASS ssh -o StrictHostKeyChecking=no -o ConnectTimeout=2 root@$host 'date "+%Y%m%d%H%M%S"'` &> /dev/nullTIME_DIFF=`expr $LOCAL_TIME - $DST_HOST_TIME |sed 's/[^0-9]//g'`if [ $TIME_DIFF -lt $TIME_VALUE ];thenecho "检查主机 $host 时间同步通过"elseecho "检查主机 $host 时间同步不通过,时间误差在 $TIME_DIFF"time_failed_hosts="$time_failed_hosts $host"fielsetime_failed_hosts="$time_failed_hosts $host"fidoneif [[ "$time_failed_hosts" == "" ]];thenecho "7.对主机时间检查,全部通过"elseecho "7.对主机时间检查,未全部通过,未通过的主机: "format_print $time_failed_hostsfi
}
check_host_online
check_os_version
check_cpu_cores
check_memory
check_disk_number
check_root_partition_size
check_time_sync

相关文章:

shell编程:安装部署前常见环境检查

脚本任务 监测主机是否联通正常 检查安装操作系统版本是否和需求一致 检查CPU是否满足规格要求 检查内存是否满足规格要求 检查数据磁盘是否满足规格要求 检查操作系统分区目录大小是否满足需求 检查集群主机时间是否一致 0.配置文件准备及脚本变量初始化 编写config.i…...

思特科技:国家宝藏数字体验馆展现东方美学 让“文物活起来”

01      思特科技为“国家宝藏数字体验展”提供“数字技术”支持,带来国宝的数字化演绎。以《国家宝藏》顶级IP为基础,打造的全新沉浸文化项目“国宝数字体验展“,借由文物的视角、站在历史的星河中,探寻时间长河中不变的智慧…...

ES6笔记总结(Xmind格式):第二天

Xmind鸟瞰图: 简单文字总结: ES6知识总结 Proxy(代理): 1.作用:实现数据的私有化处理 2.target 目标对象 handler处理函数 3.处理函数中有两个方法:get,set 4.读取数据会触发g…...

Kotlin 流flow、ShareFlow、StateFlow、Channel的解释与使用

一、介绍 随着Android接入kotlin开发,Android之前好多模式也渐渐被kotlin替代。开发模式也在做渐进的转型,从MVC到MVP在到MVVP以及现在的MVI等。 流IO在java中和kotlin中使用率都是比较高的,场景很多。如Java的IO和NIO,再到我们现…...

【个人学习】JVM(7):方法区概述、方法区内部结构、垃圾回收等

方法区 栈、堆、方法区的交互关系 从线程共享与否的角度来看 ThreadLocal:如何保证多个线程在并发环境下的安全性?典型场景就是数据库连接管理,以及会话管理。 栈、堆、方法区的交互关系 下面涉及了对象的访问定位 Person 类的 .class 信息存放在方法区中person 变量存放…...

@Scheduled 定时任务自定义

简介 Scheduled 定时任务自定义可以通过SchedulingConfigurer实现。 SchedulingConfigurer 是 Spring Framework 中的一个接口,用于配置定时任务。当你需要对定时任务进行更高级别的定制时,这个接口就显得非常有用。 可以通过SchedulingConfigurer 接口…...

一种新颖的面试方式

你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益: 了解大厂经验拥有和大厂相匹配的技术等 希望看什么,评论或者私信告诉我! 文章目录 一…...

【Linux】生产消费模型实践 --- 基于信号量的环形队列

你送出去的每颗糖都去了该去的地方, 其实地球是圆的, 你做的好事终会回到你身上。 --- 何炅 --- 基于信号量的环形队列 1 信号量2 框架构建3 代码实现4 测试运行 1 信号量 信号量本质是一个计数器,可以在初始化时对设置资源数量&#xf…...

Science Robotics 与蜜蜂群互动的蜂窝型机器人系统

蜜蜂,如黄蜂,蚂蚁和其他社会昆虫,建立大型自组织群体,通常被解释为自我调节的“超有机体”。这些超生物是生态系统的重要稳定剂,因此被认为是“关键物种”。例如,蜜蜂群落通过觅食授粉服务的生态效应对陆地…...

Vue 计算属性:优雅地处理数据逻辑

在 Vue.js 中,计算属性(Computed Properties)是一种非常实用的功能,它允许我们根据组件的响应式依赖进行缓存和派生状态。计算属性可以让我们以声明式的方式编写复杂的逻辑,而不必担心性能问题。 什么是计算属性&…...

C++中`union`

文章目录 C中的union什么是union?定义union示例一输出结果: 示例二修正后的代码解释输出结果结论 union的特性匿名union示例 union和struct的区别1. 内存布局2. 同时访问3. 用途 union和class的区别1. 数据成员2. 功能性3. 适用场景 在C编程中&#xff0…...

Linux——网络(1)

一、IPC(进程间通信方式) IPC:Inter Process Communication 共享内存(最高效的进程间通信方式) 虚拟地址 mmu(memory management unit ) 共享内存: 1.是一块,内核预留的空间 2.最高效的…...

【五】阿伟开始学Kafka

阿伟开始学Kafka 概述 人生若只如初见,阿伟心里回想起了第一次和Kafka见面的场景,记忆虽然已经有些模糊,但是感觉初次见面是美好的。积累了一些实战经验之后,阿伟感觉不能再是面对百度开发了,于是决心系统的学习一下Ka…...

Java—Arrays api

public static String toString(数组) //把数组拼接成一个字符串 public static int binarySearch(数组,查找的元素) //二分查找法查找元素 public static int[] copyOf(原数组,新数组长度) //拷贝数组 public st…...

Java - 基数排序算法介绍、应用场景和示例代码

概述 基数排序(Radix Sort)是一种非比较型整数排序算法,适用于整数或固定长度的字符串排序。它的基本思想是将待排序的元素分为多个关键字进行排序,通常从最低位(最低有效位,Least Significant Digit, LSD…...

Django 后端架构开发:文件云存储,从本地存储到腾讯COS桶集成

⭐ Django 后端架构开发:文件云存储,从本地存储到腾讯COS桶集成 目录 ☁️ 文件云存储 - 项目使用云存储💻 文件云存储 - 项目中使用本地存储📝 文件云存储 - 概述和创建项目🌐 腾讯COS桶 - 概述📚 腾讯CO…...

【系统分析师】-综合知识-计算机网络与信息安全

1、要对消息明文进行加密传送,当前通常使用的加密算法是 报文认证算法:数字摘要 RSA 非对称加密,一般不用于明文 MD5 数字摘要 SHA-1 数字摘要,160位的消息摘要 HMAC 以一个密钥和一个消息为输入,生成一个消息摘要作…...

C++ | Leetcode C++题解之第363题矩形区域不超过K的最大数值和

题目&#xff1a; 题解&#xff1a; class Solution { public:int maxSumSubmatrix(vector<vector<int>> &matrix, int k) {int ans INT_MIN;int m matrix.size(), n matrix[0].size();for (int i 0; i < m; i) { // 枚举上边界vector<int> sum(…...

python动画:场景的线性变换展示

一&#xff0c;主函数 LinearTransformationScene 是 Manim 中用于展示线性变换的场景类。它通过在一幅背景和前景平面上展示向量和变换&#xff0c;帮助理解线性代数中的概念。 LinearTransformationScene(include_background_planeTrue, include_foreground_planeTrue, ba…...

HBase体系架构与环境搭建

这里写目录标题 一、常见的NoSQL数据库二、HBase的体系架构和表结构三、搭建HBasa环境1.本地模式2.伪分布模式全分布模式HA模式 一、常见的NoSQL数据库 NoSQL数据库的说明与定义 NoSQL是一种不同于关系数据库的数据库管理系统设计方式&#xff0c;是对非关系型数据库的统称。它…...

海思SD3403/SS928V100开发(16)Tsensor驱动开发

1. 前言 由于需要检测SD3403芯片内部实时温度,需要开发Tsensor传感器驱动和应用 查看手册发现SD3403内部有三个Tsensor传感器 可以参考之前我写的35系列平台Tsensor驱动开发记录 海思35系列平台Tsensor驱动开发(1)驱动编写_t sensor-CSDN博客 海思35系列平台Tsensor驱动…...

JVM类加载机制—JVM类加载过程

一、概述 代码编译后&#xff0c;就会生成JVM&#xff08;Java虚拟机&#xff09;能够识别的二进制字节流文件&#xff08;*.class&#xff09;。而JVM把Class文件中的类描述数据从文件加载到内存&#xff0c;并对数据进行校验、转换解析、初始化&#xff0c;使这些数据最终成…...

可变参数模板与包装器

抱歉&#xff1a;铁汁们&#xff0c;最近在做兼职&#xff0c;积累社会经验&#xff0c;多有拖欠&#xff0c;请多多包涵&#xff08;抱拳&#xff09; 引子&#xff1a;接上回我们讲了C11的几种新增&#xff0c;今天就来接着讲C11中比较有用的二个东西可变参数模板与包装器。…...

工业控制常用“对象“数据类型汇总(数据结构篇)

合理巧妙的数据结构会大大简化项目的编程工作量,所以任何项目前期第一步应该是设计巧妙的数据结构、封装对象属性。这样会使我们的编程快捷和高效。这篇博客作为数据类型汇总,会不间断更新。 1、普通电机轴对象 2、普通电机轴对象(详细结构变量) TYPE "udtMotorAxis&q…...

优雅处理枚举前端丢失大Long精度问题

1. 枚举-json处理&#xff08;前端 <> 后端 <> 数据库&#xff09; 前端传递 枚举code 后端响应 枚举code 表里存储 枚举code 内存处理 枚举对象 Getter AllArgsConstructor JsonFormat(shape JsonFormat.Shape.OBJECT) public enum SexEnum {MALE(0, "男&…...

【c/c++】 学习ector 容器笔记

c/c 学习ector 容器笔记 int 型的 vector 容器应该使用什么类型的索引&#xff1f; 对于 int 型的 vector 容器&#xff0c;应该使用 size_t 类型的索引。size_t 是一个无符号整数类型&#xff0c;它在标准库中广泛用于表示大小和索引。它足够大&#xff0c;可以表示任何标准…...

DN专业3D图形制作软件win/mac软件安装下载(附下载链接)

目录 一、软件概述 1.1 Adobe DN简介 1.2 Windows/Mac系统要求 Windows系统&#xff1a; Mac系统&#xff1a; 二、安装步骤 2.1 下载与解压 2.2 安装程序 2.3 启动软件 三、使用教程 3.1 界面介绍 3.2 创建和编辑3D内容 3.3 合成与渲染 四、高级技巧与注意事项 …...

VSCode搭建Hzero(SpringCloud架构)后端开发调试环境

正常情况下我们使用IDEA开发Hzero&#xff0c;但是有的公司是不允许破解或者使用IDEA的&#xff0c;此时可以使用eclipse来替代也是可以的&#xff0c;最近尝试使用VSCode来开发调试发现了一些问题其中最大的问题是Vscdoe在绝大多数情况下是不能直接运行Hzero&#xff0c;使用插…...

【C++】OJ习题(初阶)

&#x1f680;个人主页&#xff1a;奋斗的小羊 &#x1f680;所属专栏&#xff1a;C 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 &#x1f4a5;1、字符串&#x1f4a5;1.1 字符串相加&#x1f4a5;1.2 验证回文字符串&#x1f4a5;1.3 反转…...

6.4K+ Star!一个强大的本地知识库问答系统,支持多格式文件和跨语言检索,为企业提供高效、安全的数据洞察……

https://github.com/netease-youdao/QAnything 【阅读原文】跳转Github项目 转自AIGC创想者 项目简介 QAnything 是一个基于本地知识库的问答系统&#xff0c;它能够理解和回答基于任何类型文件的问题。 QAnything支持的文件格式非常广泛&#xff0c;包括PDF、Word、PPT、XL…...

wordpress页面图片如何排版/合肥网络推广

moment.js不依赖任何第三方库&#xff0c;支持字符串、Date、时间戳以及数组等格式&#xff0c;可以像PHP的date()函数一样&#xff0c;格式化日期时间&#xff0c;计算相对时间&#xff0c;获取特定时间后的日期时间等等&#xff0c;本文有如下举例。 格式化日期 当前时间&…...

东莞企业网站建设/网盘app下载

本文实例讲述了JS实现的简单四则运算计算器功能。分享给大家供大家参考&#xff0c;具体如下&#xff1a;先来看看运行效果&#xff1a;具体代码如下&#xff1a;www.jb51.net 计算器 Calculatorvar numresult;var str;function onclicknum(nums) {str document.getElementByI…...

哪里有做php网站免费教程/网站推广沈阳

Hexo更改主题后启动服务器&#xff0c;界面显如下字符: extends includes/layout.pug block content include includes/recent-posts.pug include includes/partial 解决方案: 执行如下命令 npm install --save hexo-renderer-jade hexo-generator-feed hexo-generator-sit…...

兰州网站建设/推广平台哪儿有怎么做

临江仙.吴忠漫步 纵目水乡多少埠&#xff1f;引来商贾如云。黄河造就万家春。 古城连广厦&#xff0c;绿树抱街心。 在此唐宗施大略&#xff0c;丝绸驼队铃频。清真美食诱嘉宾。 人勤千业旺&#xff0c;当数穆斯林&#xff01; 注&#xff1a;吴忠&#xff0c;市名&#xff0c;…...

开发微信小程序需要多少钱/汉中网站seo

list接口方法 List接口是Collection接口的子接口 List集合类中元素有序(即添加顺序和去除新婚徐一致)、且可重复 List集合中每个元素都有其对应的顺序索引&#xff0c;及支持索引 List容器中的元素都对应一个整数型的序号记载其在容器中的位置&#xff0c;可以根据序号存取容…...

网站编辑如何做原创/营销网络是什么

计算机系统基础知识一、计算机系统硬件基本组成二、CPU的功能与组成1、CPU的功能2、CPU的组成①运算器②控制器③寄存器组3、多核CPU三、数据表示四、校验码一、计算机系统硬件基本组成 计算机系统硬件{运算器控制器存储器输入设备输出设备计算机系统硬件 \begin{cases} 运算器…...