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

bench.sh:一行命令测试Linux服务器基准测试

简介

bench.sh 是一个 Linux 系统性能基准测试工具。它的测试结果如下图:给出服务器的整体配置信息,IO 性能,网络性能。很多人使用它测试 vps 性能。

Clip_2024-09-26_22-23-15

一键运行

服务器在国外可以使用以下命令运行测试

wget -qO- bench.sh | bash

复制脚本到本地运行

服务器在国内只能从 github 复制脚本到本地运行。脚本内容已经贴到下面:复制代码块,保存到 bench.sh 文件中,chmod +x 赋权, ./bench.sh 运行。

#!/usr/bin/env bash
#
# Description: A Bench Script by Teddysun
#
# Copyright (C) 2015 - 2023 Teddysun <i@teddysun.com>
# Thanks: LookBack <admin@dwhd.org>
# URL: https://teddysun.com/444.html
# https://github.com/teddysun/across/blob/master/bench.sh
#
trap _exit INT QUIT TERM_red() {printf '\033[0;31;31m%b\033[0m' "$1"
}_green() {printf '\033[0;31;32m%b\033[0m' "$1"
}_yellow() {printf '\033[0;31;33m%b\033[0m' "$1"
}_blue() {printf '\033[0;31;36m%b\033[0m' "$1"
}_exists() {local cmd="$1"if eval type type >/dev/null 2>&1; theneval type "$cmd" >/dev/null 2>&1elif command >/dev/null 2>&1; thencommand -v "$cmd" >/dev/null 2>&1elsewhich "$cmd" >/dev/null 2>&1filocal rt=$?return ${rt}
}_exit() {_red "\nThe script has been terminated. Cleaning up files...\n"# clean uprm -fr speedtest.tgz speedtest-cli benchtest_*exit 1
}get_opsy() {[ -f /etc/redhat-release ] && awk '{print $0}' /etc/redhat-release && return[ -f /etc/os-release ] && awk -F'[= "]' '/PRETTY_NAME/{print $3,$4,$5}' /etc/os-release && return[ -f /etc/lsb-release ] && awk -F'[="]+' '/DESCRIPTION/{print $2}' /etc/lsb-release && return
}next() {printf "%-70s\n" "-" | sed 's/\s/-/g'
}speed_test() {local nodeName="$2"if [ -z "$1" ];then./speedtest-cli/speedtest --progress=no --accept-license --accept-gdpr >./speedtest-cli/speedtest.log 2>&1else./speedtest-cli/speedtest --progress=no --server-id="$1" --accept-license --accept-gdpr >./speedtest-cli/speedtest.log 2>&1fiif [ $? -eq 0 ]; thenlocal dl_speed up_speed latencydl_speed=$(awk '/Download/{print $3" "$4}' ./speedtest-cli/speedtest.log)up_speed=$(awk '/Upload/{print $3" "$4}' ./speedtest-cli/speedtest.log)latency=$(awk '/Latency/{print $3" "$4}' ./speedtest-cli/speedtest.log)if [[ -n "${dl_speed}" && -n "${up_speed}" && -n "${latency}" ]]; thenprintf "\033[0;33m%-18s\033[0;32m%-18s\033[0;31m%-20s\033[0;36m%-12s\033[0m\n" " ${nodeName}" "${up_speed}" "${dl_speed}" "${latency}"fifi
}speed() {speed_test '' 'Speedtest.net'speed_test '21541' 'Los Angeles, US'speed_test '43860' 'Dallas, US'speed_test '40879' 'Montreal, CA'speed_test '24215' 'Paris, FR'speed_test '28922' 'Amsterdam, NL'speed_test '24447' 'Shanghai, CN'speed_test '5530' 'Chongqing, CN'speed_test '60572' 'Guangzhou, CN'speed_test '32155' 'Hongkong, CN'speed_test '23647' 'Mumbai, IN'speed_test '13623' 'Singapore, SG'speed_test '21569' 'Tokyo, JP'
}io_test() {(LANG=C dd if=/dev/zero of=benchtest_$$ bs=512k count="$1" conv=fdatasync && rm -f benchtest_$$) 2>&1 | awk -F '[,,]' '{io=$NF} END { print io}' | sed 's/^[ \t]*//;s/[ \t]*$//'
}calc_size() {local raw=$1local total_size=0local num=1local unit="KB"if ! [[ ${raw} =~ ^[0-9]+$ ]]; thenecho ""returnfiif [ "${raw}" -ge 1073741824 ]; thennum=1073741824unit="TB"elif [ "${raw}" -ge 1048576 ]; thennum=1048576unit="GB"elif [ "${raw}" -ge 1024 ]; thennum=1024unit="MB"elif [ "${raw}" -eq 0 ]; thenecho "${total_size}"returnfitotal_size=$(awk 'BEGIN{printf "%.1f", '"$raw"' / '$num'}')echo "${total_size} ${unit}"
}# since calc_size converts kilobyte to MB, GB and TB
# to_kibyte converts zfs size from bytes to kilobyte
to_kibyte() {local raw=$1awk 'BEGIN{printf "%.0f", '"$raw"' / 1024}'
}calc_sum() {local arr=("$@")local ss=0for i in "${arr[@]}"; dos=$((s + i))doneecho ${s}
}check_virt() {_exists "dmesg" && virtualx="$(dmesg 2>/dev/null)"if _exists "dmidecode"; thensys_manu="$(dmidecode -s system-manufacturer 2>/dev/null)"sys_product="$(dmidecode -s system-product-name 2>/dev/null)"sys_ver="$(dmidecode -s system-version 2>/dev/null)"elsesys_manu=""sys_product=""sys_ver=""fiif grep -qa docker /proc/1/cgroup; thenvirt="Docker"elif grep -qa lxc /proc/1/cgroup; thenvirt="LXC"elif grep -qa container=lxc /proc/1/environ; thenvirt="LXC"elif [[ -f /proc/user_beancounters ]]; thenvirt="OpenVZ"elif [[ "${virtualx}" == *kvm-clock* ]]; thenvirt="KVM"elif [[ "${sys_product}" == *KVM* ]]; thenvirt="KVM"elif [[ "${sys_manu}" == *QEMU* ]]; thenvirt="KVM"elif [[ "${cname}" == *KVM* ]]; thenvirt="KVM"elif [[ "${cname}" == *QEMU* ]]; thenvirt="KVM"elif [[ "${virtualx}" == *"VMware Virtual Platform"* ]]; thenvirt="VMware"elif [[ "${sys_product}" == *"VMware Virtual Platform"* ]]; thenvirt="VMware"elif [[ "${virtualx}" == *"Parallels Software International"* ]]; thenvirt="Parallels"elif [[ "${virtualx}" == *VirtualBox* ]]; thenvirt="VirtualBox"elif [[ -e /proc/xen ]]; thenif grep -q "control_d" "/proc/xen/capabilities" 2>/dev/null; thenvirt="Xen-Dom0"elsevirt="Xen-DomU"fielif [ -f "/sys/hypervisor/type" ] && grep -q "xen" "/sys/hypervisor/type"; thenvirt="Xen"elif [[ "${sys_manu}" == *"Microsoft Corporation"* ]]; thenif [[ "${sys_product}" == *"Virtual Machine"* ]]; thenif [[ "${sys_ver}" == *"7.0"* || "${sys_ver}" == *"Hyper-V" ]]; thenvirt="Hyper-V"elsevirt="Microsoft Virtual Machine"fifielsevirt="Dedicated"fi
}ipv4_info() {local org city country regionorg="$(wget -q -T10 -O- ipinfo.io/org)"city="$(wget -q -T10 -O- ipinfo.io/city)"country="$(wget -q -T10 -O- ipinfo.io/country)"region="$(wget -q -T10 -O- ipinfo.io/region)"if [[ -n "${org}" ]]; thenecho " Organization       : $(_blue "${org}")"fiif [[ -n "${city}" && -n "${country}" ]]; thenecho " Location           : $(_blue "${city} / ${country}")"fiif [[ -n "${region}" ]]; thenecho " Region             : $(_yellow "${region}")"fiif [[ -z "${org}" ]]; thenecho " Region             : $(_red "No ISP detected")"fi
}install_speedtest() {if [ ! -e "./speedtest-cli/speedtest" ]; thensys_bit=""local sysarchsysarch="$(uname -m)"if [ "${sysarch}" = "unknown" ] || [ "${sysarch}" = "" ]; thensysarch="$(arch)"fiif [ "${sysarch}" = "x86_64" ]; thensys_bit="x86_64"fiif [ "${sysarch}" = "i386" ] || [ "${sysarch}" = "i686" ]; thensys_bit="i386"fiif [ "${sysarch}" = "armv8" ] || [ "${sysarch}" = "armv8l" ] || [ "${sysarch}" = "aarch64" ] || [ "${sysarch}" = "arm64" ]; thensys_bit="aarch64"fiif [ "${sysarch}" = "armv7" ] || [ "${sysarch}" = "armv7l" ]; thensys_bit="armhf"fiif [ "${sysarch}" = "armv6" ]; thensys_bit="armel"fi[ -z "${sys_bit}" ] && _red "Error: Unsupported system architecture (${sysarch}).\n" && exit 1url1="https://install.speedtest.net/app/cli/ookla-speedtest-1.2.0-linux-${sys_bit}.tgz"url2="https://dl.lamp.sh/files/ookla-speedtest-1.2.0-linux-${sys_bit}.tgz"if ! wget --no-check-certificate -q -T10 -O speedtest.tgz ${url1}; thenif ! wget --no-check-certificate -q -T10 -O speedtest.tgz ${url2}; then_red "Error: Failed to download speedtest-cli.\n" && exit 1fifimkdir -p speedtest-cli && tar zxf speedtest.tgz -C ./speedtest-cli && chmod +x ./speedtest-cli/speedtestrm -f speedtest.tgzfiprintf "%-18s%-18s%-20s%-12s\n" " Node Name" "Upload Speed" "Download Speed" "Latency"
}print_intro() {echo "-------------------- A Bench.sh Script By Teddysun -------------------"echo " Version            : $(_green v2023-10-15)"echo " Usage              : $(_red "wget -qO- bench.sh | bash")"
}# Get System information
get_system_info() {cname=$(awk -F: '/model name/ {name=$2} END {print name}' /proc/cpuinfo | sed 's/^[ \t]*//;s/[ \t]*$//')cores=$(awk -F: '/^processor/ {core++} END {print core}' /proc/cpuinfo)freq=$(awk -F'[ :]' '/cpu MHz/ {print $4;exit}' /proc/cpuinfo)ccache=$(awk -F: '/cache size/ {cache=$2} END {print cache}' /proc/cpuinfo | sed 's/^[ \t]*//;s/[ \t]*$//')cpu_aes=$(grep -i 'aes' /proc/cpuinfo)cpu_virt=$(grep -Ei 'vmx|svm' /proc/cpuinfo)tram=$(LANG=Cfree | awk '/Mem/ {print $2}')tram=$(calc_size "$tram")uram=$(LANG=Cfree | awk '/Mem/ {print $3}')uram=$(calc_size "$uram")swap=$(LANG=Cfree | awk '/Swap/ {print $2}')swap=$(calc_size "$swap")uswap=$(LANG=Cfree | awk '/Swap/ {print $3}')uswap=$(calc_size "$uswap")up=$(awk '{a=$1/86400;b=($1%86400)/3600;c=($1%3600)/60} {printf("%d days, %d hour %d min\n",a,b,c)}' /proc/uptime)if _exists "w"; thenload=$(LANG=Cw | head -1 | awk -F'load average:' '{print $2}' | sed 's/^[ \t]*//;s/[ \t]*$//')elif _exists "uptime"; thenload=$(LANG=Cuptime | head -1 | awk -F'load average:' '{print $2}' | sed 's/^[ \t]*//;s/[ \t]*$//')fiopsy=$(get_opsy)arch=$(uname -m)if _exists "getconf"; thenlbit=$(getconf LONG_BIT)elseecho "${arch}" | grep -q "64" && lbit="64" || lbit="32"fikern=$(uname -r)in_kernel_no_swap_total_size=$(LANG=Cdf -t simfs -t ext2 -t ext3 -t ext4 -t btrfs -t xfs -t vfat -t ntfs --total 2>/dev/null | grep total | awk '{ print $2 }')swap_total_size=$(free -k | grep Swap | awk '{print $2}')zfs_total_size=$(to_kibyte "$(calc_sum "$(zpool list -o size -Hp 2> /dev/null)")")disk_total_size=$(calc_size $((swap_total_size + in_kernel_no_swap_total_size + zfs_total_size)))in_kernel_no_swap_used_size=$(LANG=Cdf -t simfs -t ext2 -t ext3 -t ext4 -t btrfs -t xfs -t vfat -t ntfs --total 2>/dev/null | grep total | awk '{ print $3 }')swap_used_size=$(free -k | grep Swap | awk '{print $3}')zfs_used_size=$(to_kibyte "$(calc_sum "$(zpool list -o allocated -Hp 2> /dev/null)")")disk_used_size=$(calc_size $((swap_used_size + in_kernel_no_swap_used_size + zfs_used_size)))tcpctrl=$(sysctl net.ipv4.tcp_congestion_control | awk -F ' ' '{print $3}')
}
# Print System information
print_system_info() {if [ -n "$cname" ]; thenecho " CPU Model          : $(_blue "$cname")"elseecho " CPU Model          : $(_blue "CPU model not detected")"fiif [ -n "$freq" ]; thenecho " CPU Cores          : $(_blue "$cores @ $freq MHz")"elseecho " CPU Cores          : $(_blue "$cores")"fiif [ -n "$ccache" ]; thenecho " CPU Cache          : $(_blue "$ccache")"fiif [ -n "$cpu_aes" ]; thenecho " AES-NI             : $(_green "\xe2\x9c\x93 Enabled")"elseecho " AES-NI             : $(_red "\xe2\x9c\x97 Disabled")"fiif [ -n "$cpu_virt" ]; thenecho " VM-x/AMD-V         : $(_green "\xe2\x9c\x93 Enabled")"elseecho " VM-x/AMD-V         : $(_red "\xe2\x9c\x97 Disabled")"fiecho " Total Disk         : $(_yellow "$disk_total_size") $(_blue "($disk_used_size Used)")"echo " Total Mem          : $(_yellow "$tram") $(_blue "($uram Used)")"if [ "$swap" != "0" ]; thenecho " Total Swap         : $(_blue "$swap ($uswap Used)")"fiecho " System uptime      : $(_blue "$up")"echo " Load average       : $(_blue "$load")"echo " OS                 : $(_blue "$opsy")"echo " Arch               : $(_blue "$arch ($lbit Bit)")"echo " Kernel             : $(_blue "$kern")"echo " TCP CC             : $(_yellow "$tcpctrl")"echo " Virtualization     : $(_blue "$virt")"echo " IPv4/IPv6          : $online"
}print_io_test() {freespace=$(df -m . | awk 'NR==2 {print $4}')if [ -z "${freespace}" ]; thenfreespace=$(df -m . | awk 'NR==3 {print $3}')fiif [ "${freespace}" -gt 1024 ]; thenwritemb=2048io1=$(io_test ${writemb})echo " I/O Speed(1st run) : $(_yellow "$io1")"io2=$(io_test ${writemb})echo " I/O Speed(2nd run) : $(_yellow "$io2")"io3=$(io_test ${writemb})echo " I/O Speed(3rd run) : $(_yellow "$io3")"ioraw1=$(echo "$io1" | awk 'NR==1 {print $1}')[[ "$(echo "$io1" | awk 'NR==1 {print $2}')" == "GB/s" ]] && ioraw1=$(awk 'BEGIN{print '"$ioraw1"' * 1024}')ioraw2=$(echo "$io2" | awk 'NR==1 {print $1}')[[ "$(echo "$io2" | awk 'NR==1 {print $2}')" == "GB/s" ]] && ioraw2=$(awk 'BEGIN{print '"$ioraw2"' * 1024}')ioraw3=$(echo "$io3" | awk 'NR==1 {print $1}')[[ "$(echo "$io3" | awk 'NR==1 {print $2}')" == "GB/s" ]] && ioraw3=$(awk 'BEGIN{print '"$ioraw3"' * 1024}')ioall=$(awk 'BEGIN{print '"$ioraw1"' + '"$ioraw2"' + '"$ioraw3"'}')ioavg=$(awk 'BEGIN{printf "%.1f", '"$ioall"' / 3}')echo " I/O Speed(average) : $(_yellow "$ioavg MB/s")"elseecho " $(_red "Not enough space for I/O Speed test!")"fi
}print_end_time() {end_time=$(date +%s)time=$((end_time - start_time))if [ ${time} -gt 60 ]; thenmin=$((time / 60))sec=$((time % 60))echo " Finished in        : ${min} min ${sec} sec"elseecho " Finished in        : ${time} sec"fidate_time=$(date '+%Y-%m-%d %H:%M:%S %Z')echo " Timestamp          : $date_time"
}! _exists "wget" && _red "Error: wget command not found.\n" && exit 1
! _exists "free" && _red "Error: free command not found.\n" && exit 1
# check for curl/wget
_exists "curl" && local_curl=true
# test if the host has IPv4/IPv6 connectivity
[[ -n ${local_curl} ]] && ip_check_cmd="curl -s -m 4" || ip_check_cmd="wget -qO- -T 4"
ipv4_check=$( (ping -4 -c 1 -W 4 ipv4.google.com >/dev/null 2>&1 && echo true) || ${ip_check_cmd} -4 icanhazip.com 2> /dev/null)
ipv6_check=$( (ping -6 -c 1 -W 4 ipv6.google.com >/dev/null 2>&1 && echo true) || ${ip_check_cmd} -6 icanhazip.com 2> /dev/null)
if [[ -z "$ipv4_check" && -z "$ipv6_check" ]]; then_yellow "Warning: Both IPv4 and IPv6 connectivity were not detected.\n"
fi
[[ -z "$ipv4_check" ]] && online="$(_red "\xe2\x9c\x97 Offline")" || online="$(_green "\xe2\x9c\x93 Online")"
[[ -z "$ipv6_check" ]] && online+=" / $(_red "\xe2\x9c\x97 Offline")" || online+=" / $(_green "\xe2\x9c\x93 Online")"
start_time=$(date +%s)
get_system_info
check_virt
clear
print_intro
next
print_system_info
ipv4_info
next
print_io_test
next
install_speedtest && speed && rm -fr speedtest-cli
next
print_end_time
next

相关文章:

bench.sh:一行命令测试Linux服务器基准测试

简介 bench.sh 是一个 Linux 系统性能基准测试工具。它的测试结果如下图&#xff1a;给出服务器的整体配置信息&#xff0c;IO 性能&#xff0c;网络性能。很多人使用它测试 vps 性能。 ​​ 一键运行 服务器在国外可以使用以下命令运行测试 wget -qO- bench.sh | bash复制…...

广播IP与共享IP的关系

什么是广播IP&#xff1f; 广播IP是指一种特殊的IP地址&#xff0c;用于在网络中向所有设备发送信息。广播地址通常是某个网络段的最后一个地址&#xff0c;例如&#xff0c;在一个子网掩码为255.255.255.0的网络中&#xff08;即/24子网&#xff09;&#xff0c;其网络地址可…...

正则表达式和re模块

正则表达式&#xff08;Regular Expression&#xff0c;简称Regex或RegExp&#xff09;是计算机科学中的一个重要概念&#xff0c;它通常被用来检索、替换那些符合某个模式&#xff08;规则&#xff09;的文本。正则表达式是对字符串操作的一种逻辑公式&#xff0c;通过事先定义…...

不同的浏览器、服务器和规范对 URL 长度的限制

不同的浏览器、服务器和规范对 URL 长度的限制有所不同。通常的限制如下&#xff1a; 1. 浏览器限制&#xff1a; 常见浏览器对 URL 长度的限制在 2,000 到 8,000 个字符之间。例如&#xff1a; Internet Explorer: 大约 2,083 个字符。Google Chrome: 理论上支持超过 32,00…...

NASA:ATLAS/ICESat-2 L3 A沿线内陆地表水数据V006数据集

目录 简介 代码 引用 网址推荐 0代码在线构建地图应用 机器学习 ATLAS/ICESat-2 L3A Along Track Inland Surface Water Data V006 简介 ATLAS/ICESat-2 L3 A沿线内陆地表水数据V006 ATLAS/ICESat-2 L3 A沿线内陆地表水数据V006是指由ATLAS/ICESat-2卫星获取的针对陆地…...

数据结构之链表(1),单链表

目录 前言 一、什么是链表 二、链表的分类 三、单链表 四、单链表的实现 五、SList.c文件完整代码 六、使用演示 总结 前言 本文讲述了什么是链表&#xff0c;以及实现了完整的单链表。 ❤️感谢支持&#xff0c;点赞关注不迷路❤️ 一、什么是链表 1.概念 概念&#xff1a;链…...

如何构建鲁棒高性能 Prompt 的方法?

你好&#xff0c;我是三桥君 在当今时代&#xff0c;利用大型语言模型如ChatGPT进行文本生成和交互已成为一种趋势。然而&#xff0c;要充分发挥这些模型的能力&#xff0c;尤其是在生产环境中&#xff0c;我们需要精心设计和优化我们的提示词&#xff08;prompt&#xff09;。…...

基于Springboot+微信小程序 的高校社团管理小程序(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定…...

Vue 响应式监听 Watch 最佳实践

一. 前言 上一篇文章我们学习了 watch 的基础知识&#xff0c;了解了它的基本使用方法及注意事项&#xff0c;本篇文章我们继续了解在Vue 中 响应式监听 watch 的妙用。了解 watch 的基础使用请参考上一篇文章&#xff1a; 详解 Vue 中 Watch 的使用方法及注意事项https://bl…...

md编辑器语法

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…...

RabbitMQ常用管理命令及管理后台

RabbitMQ管理命令 1、用户管理1.1、新增一个用户1.2、查看当前用户列表1.3、设置用户角色1.4、设置用户权限1.5、查看用户权限 2、RabbitMQ的web管理后台2.1、查看rabbitmq 的插件列表2.2、启用插件2.3、禁用插件2.4、访问RabbitMQ的web后台2.4、通过web页面新建虚拟主机 ./rab…...

从准备面试八股文,感悟到技术的本质

工作前几年听说过&#xff0c;大学最重要的几门课其实是数据结构和算法、操作系统、计算机组成原理、计算机网络。 初听时不以为然&#xff0c;感觉没什么用。 近期准备面试八股文得到了一些感悟。这句话随着工作年限和对程序的理解越来越深入&#xff0c;含金量越来越高。 最…...

云手机的默认ip地址是什么

云手机&#xff08;Cloud Phone&#xff09;是一种基于云计算技术的虚拟手机&#xff0c;它可以在云端运行&#xff0c;使用户能够通过互联网访问手机应用和服务。云手机的IP地址通常取决于以下几个因素&#xff1a; 1. 云服务提供商 不同的云服务提供商&#xff08;如AWS、G…...

对接阿里asr和Azure asr

1&#xff1a;对接阿里asr 1.1&#xff1a;pom <dependency><groupId>com.alibaba.nls</groupId><artifactId>nls-sdk-recognizer</artifactId><version>2.2.1</version> </dependency>1.2&#xff1a;生成token package c…...

未来数字世界相关技术、应用:AR/VR/MR;数字人、元宇宙、全息显示

一、AR/VR/MR 增强现实(AR)、虚拟现实(VR)和混合现实(MR)是三种不同的技术,它们都旨在增强用户对现实世界的感知和交互体验。以下是它们的详细介绍: 增强现实(AR) 增强现实(Augmented Reality, AR) 是一种将虚拟信息叠加到现实世界中的技术。通过AR技术,用户可…...

在 Java 中提供接口方法而不是实现接口

问题 我正在阅读有关Java中的接口的文章。其中提到我们必须实现compareTo方法才能在ArrayList容器上调用sort&#xff0c;例如Employee类应该实现 Comparable接口。 后面解释了为什么Employee类不能简单地提供compareTo方法而不实现Comparable接口&#xff1f;之所以需要接口…...

伪类选择器

一、基本概念 伪类选择器以冒号&#xff08;:&#xff09;开头&#xff0c;后面跟着伪类名。它不直接对应DOM中的任何元素&#xff0c;而是用于描述元素的特殊状态或位置。通过使用伪类选择器&#xff0c;可以在不修改HTML文档结构的情况下&#xff0c;为元素添加或修改样式。…...

亚信安全天穹5分钟勒索体检 免费试用今起上线

对于勒索攻击的认知 你是否还停留在“2.0时代”&#xff1f; 勒索攻击无疑是企业面临的最大威胁&#xff0c;2024年上半年&#xff0c;勒索组织数量同步增长超过50%&#xff0c;勒索攻击数量也持续攀升&#xff0c;平均勒索赎金突破520万美元。 当前&#xff0c;勒索攻击治理…...

高校竞赛管理系统的设计与实现

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统高校竞赛管理系统信息管理难度大&#xff0c;容错率低&am…...

物联网行业中通信断线重连现象介绍以及如何实现

01 概述 断线重连是指在计算机网络中&#xff0c;当网络连接遇到异常中断或者断开时&#xff0c;系统会自动尝试重新建立连接&#xff0c;以保证网络通信的连续性和稳定性。这是一种常见的网络通信技术&#xff0c;广泛应用于各种计算机网络场景&#xff0c;包括互联网、局域…...

新手上路:Anaconda虚拟环境创建和配置以使用PyTorch和DGL

文章目录 前言步骤 1: 安装 Anaconda步骤 2: 创建新的 Anaconda 环境步骤 3: 安装最新版本的 PyTorch步骤 4: 安装特定版本的 PyTorch步骤 5: 安装最新版本的 DGL步骤 6: 安装特定版本的 DGL步骤 7: Pycharm中使用虚拟环境解释器第一种情况&#xff1a;创建新项目第二种情况&am…...

centos7系统安装宝塔面板

1、开始安装 适用系统 Centos/OpenCloud/Alibaba 稳定版9.0.0 urlhttps://download.bt.cn/install/install_lts.sh;if [ -f /usr/bin/curl ];then curl -sSO $url;else wget -O install_lts.sh $url;fi;bash install_lts.sh ed8484bec等待命令执行&#xff0c;安装完成&#…...

汽车总线之----J1939总线

instruction SAE J1939 是由美国汽车工程协会制定的一种总线通信协议标准&#xff0c;广泛应用于商用车&#xff0c;船舶&#xff0c;农林机械领域中&#xff0c;J1939协议是基于CAN的高层协议&#xff0c;我们来看一下两者之间的关系。在J1939 中&#xff0c;物理层和数据链路…...

基于skopt的贝叶斯优化基础实例学习实践

贝叶斯方法是非常基础且重要的方法&#xff0c;在前文中断断续续也有所介绍&#xff0c;感兴趣的话可以自行移步阅读即可&#xff1a; 《数学之美番外篇&#xff1a;平凡而又神奇的贝叶斯方法》 《贝叶斯深度学习——基于PyMC3的变分推理》 《模型优化调参利器贝叶斯优化bay…...

OJ在线评测系统 后端 用策略模式优化判题机架构

判题机架构优化(策略模式) 思考 我们的判题策略可能会有很多种 比如 我们的代码沙箱本身执行程序需要消耗时间 这个时间可能不同的编程语言是不同的 比如沙箱执行Java要额外花费2秒 我们可以采用策略模式 针对不同的情况 定义不同独立的策略 而不是把所有情况全部放在一个i…...

element ui 精确控制日期控件 date-picker

https://github.com/element-plus/element-plus/discussions/17378 -- 某组件 xxx.vue ... <el-date-pickerv-model"timeRange"type"daterange"range-separator"-"start-placeholder"开始日期"end-placeholder"结束日期"…...

centos7安装指定版本php及扩展

安装EPEL仓库&#xff08;如果尚未安装&#xff09; sudo yum install epel-release导入REMI仓库的公钥&#xff1a; sudo rpm --import http://rpms.remirepo.net/RPM-GPG-KEY-remi启用REMI仓库&#xff08;你可以选择PHP 7.0或者7.4&#xff0c;以下以7.0为例&#xff09;&am…...

后端-对表格数据进行添加、删除和修改

一、添加 要求&#xff1a; 按下添加按钮出现一个板块输入添加的数据信息&#xff0c;点击板块的添加按钮&#xff0c;添加&#xff1b;点击取消&#xff0c;板块消失。 实现&#xff1a; 1.首先&#xff0c;设计页面输入框格式&#xff0c;表格首行 2.从数据库里调数据 3.添加…...

【学习笔记】手写 Tomcat 七

目录 一、优化 Dao 1. 设置 UserDaoImpl 为单例模式 2. 创建 Dao 工厂 3. 在 Service 层获取 UserDao 的实例 二、优化 Service 1. 设置 UserServiceImpl 为单例模式 2. 创建 Service 工厂 3. 在 Servlet 层获取 Service 实现类的对象 三、优化 Servlet 1. 使用配置…...

QT开发:详解 Qt 多线程编程核心类 QThread:基本概念与使用方法

1. 引言 在现代应用程序开发中&#xff0c;多线程编程是一个关键技术&#xff0c;能够显著提高程序的效率和响应速度。Qt 是一个跨平台的 C 框架&#xff0c;其中 QThread 类是实现多线程编程的核心类。本文将深入详解 QThread 的基本概念、使用方法及其在实际应用中的重要性。…...