一键优化Linux服务器性能(One Click Optimization of Linux Server Performance)

news2024/12/21 14:01:09

服务器上线之一键优化Linux服务器性能

以下是一个简单的Shell脚本,用于执行服务器上线优化的一些基本步骤。请注意,这个脚本是基于一个通用的Linux服务器配置,您可能需要根据您的具体需求和环境进行调整。

功能如下:

1.关闭SELINUX2.修改默认启动级别为33.关闭不必要的开机启动项4.sshd优化5.时间同步服务6.修改系统连接数7.内核参数优化10.退出 

脚本如下:

#!/bin/bash

 function ChoiceInterface(){    clear    cat <<EOF+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++                    欢迎使用服务器上线优化功能                    ++                          请选择优化操作                          ++                     1.关闭SELINUX                                ++                     2.修改默认启动级别为3                        ++                     3.关闭不必要的开机启动项                     ++                     4.sshd优化                                   ++                     5.时间同步服务                               ++                     6.修改系统连接数                             ++                     7.内核参数优化                               ++                                                                  ++                     10.退出                                      +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++EOF} #定义数字检测函数 判断是否输入回车或者非数字字符 承担解包作用 function NumberLegalChecker(){    num_wait2check=$1    num_wait2check_unpacked=`echo ${num_wait2check}|sed 's/[0-9]//g'`    #如果匹配到连续模式连接符号 -    if [[ ${num_wait2check_unpacked} == "-" ]];then        start_num=`echo $num_wait2check|awk -F"-" '{print $1}'`         end_num=`echo $num_wait2check|awk -F"-" '{print $2}'`         #解压连续数字序列        unpacked_numbers=`eval echo "{$start_num..$end_num}"`         #打印数字 返回结果        echo ${unpacked_numbers}    elif [[ ! -n ${num_wait2check} || -n ${num_wait2check_unpacked} ]];then        echo -e "\033[34;5m输入错误,请重新输入!!!\033[0m"        return 1    else        echo ${num_wait2check}    fi}#定义纯数字检测函数function PureNumberLegalChecker(){    num=$1    num_filtered=`echo ${num}|sed 's/[0-9]//g'`    if [[ -n $num && ! -n $num_filtered ]];then        return 0    else        echo -e "\033[34;5m输入错误,请重新输入!!!\033[0m"        return 1    fi}#定义继续优化 返回主菜单 退出 交互函数function QuitOrReturn2Mian(){    while true;do        read -p "`echo -e '\033[33m请选择返回主菜单/退出 (M/Q): \033[0m'`" input_choice        if [[ ! -n ${input_choice} ]];then            echo "输入错误,请重新选择!!!"        elif [[ ${input_choice} == [Mm] ]]; then            return        elif [[ ${input_choice} == [Qq] ]]; then            echo -e "\033[31;7m再见!!! \033[0m"            exit        fi    done}#定义禁用selinux函数function DisableSELINUX(){    selinux_config_file=/etc/selinux/config    echo "验证SELINUX配置文件。。。"    if [[ -f ${selinux_config_file} ]] ; then        echo "配置文件验证成功!"    else        echo "配置文件验证失败 "        return 1    fi    #获取目前selinux状态    se_status1=`awk -F"=" '/^SELINUX=/ {print $2}' /etc/selinux/config`    se_status2=`getenforce`    if [[ $se_status1 != 'disabled' ]]; then        sed -i 's/\(SELINUX=\)enforcing/\1disabled/g' $selinux_config_file        echo "修改了SELINUX配置文件,已置为Disabled,需要重启服务器"    fi    if [[ $se_status2 == 'Enforcing' ]]; then        setenforce 0 && echo "已设置临时的SELINUX状态为permissive"    fi    echo "SELINUX已经成功修改完成"    cmd=getenforce    echo "执行命令: $cmd"    echo "命令结果:`eval $cmd`"    cmd="grep -e '^SELINUX=' ${selinux_config_file}"    echo "执行命令: $cmd"    echo "命令结果:`eval $cmd`"    QuitOrReturn2Mian}#修改默认启动级别函数function ModifyDefaultRunlevel(){    inittab_config_file=/etc/inittab    echo "验证inittab配置文件。。。"    if [[ -f ${inittab_config_file} ]] ; then        echo "配置文件验证成功!"    else        echo "配置文件验证失败 "        return 1    fi     sed -i 's/\(id:\)[0-9]\(:initdefault:\)/\13\2/g' ${inittab_config_file}     echo "默认启动级别已经成功修改完成"    cmd="grep -e '^id:[0-9]:initdefault:' ${inittab_config_file}"    echo "执行命令:  $cmd"    echo "命令结果:`eval $cmd`"    QuitOrReturn2Mian}function AutostartOptimization(){    #获得目前开机3级别启动项清单    current_autostart_inventory=(`chkconfig --list | grep 3:on | awk '{print $1}'`)    #初始化用户输入选择序列号的存放的数组    user_choice_inventory=()    #定义打印开机启动项函数    function InactivePrintAutostartItem(){    clear    for order_number in `seq 0 $(( ${#current_autostart_inventory[@]} - 1 ))`; do        choice_boolen=false        for choice_number in ${user_choice_inventory[@]}; do            if [[ ${order_number} -eq ${choice_number} ]]; then                choice_boolen=true            fi        done        if ${choice_boolen};then             printf  "\033[41;36m%-3s-->%-17s\033[0m"  ${order_number} ${current_autostart_inventory[${order_number}]}        else            printf "%-3s-->%-17s"  ${order_number} ${current_autostart_inventory[${order_number}]}        fi        if [[ $(((${order_number}+1)%4)) -eq 0 ]];then            printf "\n"        fi    done    echo    echo -e "已选择开机启动项 \033[41;36m      \033[0m"     #打印非法选项    if [[ ${#illegal_user_choice_inventory[@]} -gt 0 ]];then        echo -e "\033[35;1m未操作开机启动项   ${illegal_user_choice_inventory[*]} \033[0m"    fi    }    #定义禁止启动项函数    function disable_startup(){        #首先禁止所有        for item in ${current_autostart_inventory[@]};do            #echo "执行命令: chkconfig --level 3 $item off"            chkconfig --level 3 $item off        done        #开启需要的开机启动项        for  allow_autostart_number in ${user_choice_inventory[@]};do            echo "执行命令: chkconfig --level 3 ${current_autostart_inventory[${allow_autostart_number}]} on"            chkconfig --level 3 ${current_autostart_inventory[${allow_autostart_number}]} on        done        echo "查看现在的启动项列表"        cmd="chkconfig --list | grep 3:on"        echo "执行命令: $cmd"        echo -e "命令结果: \n`eval $cmd`"    }    #主循环体    while true; do        InactivePrintAutostartItem        #定义验证输入合法性循环体        while true;do            echo "请选择需要开机自动启动的项(未选择的将被禁止启动,请输入每个服务所代表的数字)"            read -p "支持多选,支持连续模式,如3-11,请输入: " allow_autostart_variables            #检验输入是否为空            while [[ ! -n ${allow_autostart_variables} ]];do                echo "请选择需要开机自动启动的项(未选择的将被禁止启动,请输入每个服务所代表的数字)"                read -p "支持多选,请输入: " allow_autostart_variables            done             #先取出输入的数组 判断是否输入回车或者非数字字符 修改为匹配大多数字符 支持-连接符选择连续的数字            #allow_autostart_unpacked_inventory=(`echo ${allow_autostart_variables} | sed  's/[[:punct:]]/\ /g'`)            allow_autostart_inventory=(`echo ${allow_autostart_variables} |sed 's/[][!#$%&*+,./:;<=>?@\^_{|}~]/\ /g'`)            #初始化解压之后的数组            allow_autostart_unpacked_inventory=()            #遍历输入的选择数组            for single_allow_autostart_item in ${allow_autostart_inventory[*]}; do                #检测数字是否合法 非法报错                result_after_num_checker=`NumberLegalChecker ${single_allow_autostart_item}`                 if [[ -n $result_after_num_checker ]];then                    #如果结果不为空 追加到解压之后的数组                    allow_autostart_unpacked_inventory=(`echo ${allow_autostart_unpacked_inventory[*]}" "$result_after_num_checker`)                else                    continue                fi            done            #定义一个开机启动项的序列号数组            autostart_number_inventory=(`eval echo {0..$(( ${#current_autostart_inventory[@]} - 1 ))}`)            #求数组并集 差集            legal_autostart_num_inventory=(`echo ${allow_autostart_unpacked_inventory[*]} ${autostart_number_inventory[*]} | sed 's/\ /\n/g' | sort |uniq -d |tr "\n" "\ "`)            illegal_autostart_num_inventory=(`echo ${allow_autostart_unpacked_inventory[*]} ${autostart_number_inventory[*]} ${autostart_number_inventory[*]} | sed 's/\ /\n/g' | sort |uniq -u|tr "\n" "\ "`)            #把每次的结果叠加            user_choice_inventory=(`echo ${legal_autostart_num_inventory[*]}" "${user_choice_inventory[*]}`)            illegal_user_choice_inventory=(${illegal_autostart_num_inventory[@]})            InactivePrintAutostartItem            break        done         #定义是否终止 或继续选择循环体        while true;do            read -p "是否继续选择启用的开机启动项 是/否(应用)/删除(Y/N/D): " con_or_apply            if [[ ! -n ${con_or_apply} ]];then                echo -e "\033[34;5m输入错误,请重新选择!!!\033[0m"            elif [[ ${con_or_apply} == [Yy] ]];then                break            elif [[ ${con_or_apply} == [Nn] ]];then                read -p "是否应用 是/否(Y/N): " yes_no_apply                #是否应用所选择的启动服务项                while true;do                    if [[ ! -n ${yes_no_apply} ]];then                    echo -e "\033[34;5m输入错误,请重新选择!!!\033[0m"                    elif [[ ${yes_no_apply} == [Yy] ]];then                        echo "开始执行应用所选择的启动项"                        disable_startup                        break                    elif [[ ${yes_no_apply} == [Nn] ]];then                        break                    else                        echo -e "\033[34;5m输入错误,请重新选择!!!\033[0m"                    fi                    read -p "是否应用 是/否(Y/N): " yes_no_apply                done                QuitOrReturn2Mian                return            elif [[ ${con_or_apply} == [Dd] ]];then                read -p "清输入要移除的启动项序列号: " require2remove_num_variables                #判断输入是否非空                while [[ ! -n ${require2remove_num_variables} ]];do                    read -p "清输入要移除的启动项序列号(支持多选 支持连接符-): " require2remove_num_variables                done                #读取输入的多选到数组                removing_num_inventory=(`echo ${require2remove_num_variables} | sed 's/[][!#$%&*+,./:;<=>?@\^_{|}~]/\ /g'`)                #初始化解包后的清单数组                removing_num_unpacked_inventory=()                for single_removing_numt_item in ${removing_num_inventory[*]}; do                #检测数字是否合法 非法报错                    result_after_num_checker=`NumberLegalChecker ${single_removing_numt_item}`                     if [[ -n $result_after_num_checker ]];then                        #如果结果不为空 追加到解压之后的数组                        removing_num_unpacked_inventory=(`echo ${removing_num_unpacked_inventory[*]}" "$result_after_num_checker`)                    else                        continue                    fi                done                #求并集差集 需要删除的数组和已经选择的数组                legal_removing_inventory=(`echo ${removing_num_unpacked_inventory[*]} ${user_choice_inventory[*]} | sed 's/\ /\n/g' | sort |uniq -d |tr "\n" "\ "`)                illegal_removing_inventory=(`echo ${removing_num_unpacked_inventory[*]} ${user_choice_inventory[*]} ${user_choice_inventory[*]} | sed 's/\ /\n/g' | sort |uniq -u|tr "\n" "\ "`)                #在一选择数组中移除需要移除的合法序列数                user_choice_inventory=(`echo  ${legal_removing_inventory[*]} ${user_choice_inventory[*]} | sed 's/\ /\n/g' |sort|uniq -u | tr "\n" "\ "`)                illegal_user_choice_inventory=(${illegal_removing_inventory[@]})                InactivePrintAutostartItem                echo "已成功移除 ${legal_removing_inventory[*]}"                            else                echo -e "\033[34;5m输入错误,请重新选择!!!\033[0m"            fi        done    done} function SshOptimization(){    ssh_config_file=/etc/ssh/sshd_config    echo "验证sshd配置文件。。。"    if [[ -f ${ssh_config_file} ]] ; then        echo "配置文件验证成功!"    else        echo "配置文件验证失败 "        return 1    fi    #定义禁用DNS反查询的函数    function DisableUseDNS(){     #if [[ `grep -c  -e "#\ *UseDNS\ *yes" ${ssh_config_file}` -eq 1 && `grep -c  -e "[^#]UseDNS" ${ssh_config_file}` -eq 0 ]];then         sed -i 's/#*\(UseDNS\ \)yes/\1no/g' ${ssh_config_file}     #fi         sed -i 's/\(GSSAPIAuthentication\ \)yes/\1no/g' ${ssh_config_file}         cmd="grep UseDNS ${ssh_config_file}"         echo "执行命令: $cmd"         echo "执行结果: `eval $cmd`"         cmd="grep GSSAPIAuthentication ${ssh_config_file}"         echo "执行命令: $cmd"         echo "执行结果: `eval $cmd`"    }    #定义更改ssh端口号函数    function ChangeSshPort(){        port=$1        echo "正在更改SSH默认端口号。。。"        sed -i "s/#*\(Port\ *\)[0-9]*$/\1$port/g" ${ssh_config_file}        cmd="grep -E ^Port ${ssh_config_file}"        echo "执行命令: $cmd"        echo "执行结果: `eval $cmd`"    }    #定义更改是否允许root登录函数    function PermitRootLogin(){        permit_root_login=$1        echo "正在修改是否允许root ssh登录。。。"        sed -i "s/#*\(PermitRootLogin\ *\).*$/\1$permit_root_login/g" ${ssh_config_file}        cmd="grep -E ^#*PermitRootLogin ${ssh_config_file}"        echo "执行命令: $cmd"        echo "执行结果: `eval $cmd`"    }    #循环判断是否启用SSH加速    function InteractiveDisableUseDNS(){        read -p "是否启用SSH加速 是/否  (Y/N): " speedup_yes_no        while true;do            if [[ ! -n ${speedup_yes_no} ]];then                echo -e "\033[34;5m输入错误,请重新选择!!!\033[0m"            elif [[ ${speedup_yes_no} == [Yy] ]];then                echo "启用SSH加速功能"                DisableUseDNS                return            elif [[ ${speedup_yes_no} == [Nn] ]];then                return            else                echo -e "\033[34;5m输入错误,请重新选择!!!\033[0m"            fi            read -p "是否启用SSH加速 是/否  (Y/N): " speedup_yes_no        done    }        #循环判断是否修改SSH端口    function InteracticeChangeSshPort(){        read -p "是否修改SSH端口 是/否  (Y/N): " sshport_yes_no        #循环判断输入合法性        while true;do            #如果输入空的字符串            if [[ ! -n ${sshport_yes_no} ]];then                echo -e "\033[34;5m输入错误,请重新选择!!!\033[0m"            elif [[ ${sshport_yes_no} == [Yy] ]];then                while true;do                    read -p "请输入要修改的端口号:" port                    #判断输入的数字是否合法                    while ! PureNumberLegalChecker ${port};do                        read -p "请输入要修改的端口号:" port                    done                    #判断输入是否在合法端口范围内                    if [[ $port -gt 0 && $port -lt 65535 ]];then                        known_service_filter=`grep -E "[[:space:]]$port/[tcp|udp]" /etc/services`                        if [[ -n ${known_service_filter} ]];then                            echo -e "这个端口已经有服务在使用,\n ${known_service_filter}\n"                            read -p "是否继续使用这个端口? (Y/N)" port_confirm                            #判断是否继续使用这个端口                            while true;do                                if [[ ! -n ${port_confirm} ]];then                                    echo -e "\033[34;5m输入错误,请重新选择!!!\033[0m"                                elif [[ ${port_confirm} == [Yy] ]];then                                    ChangeSshPort $port                                    return                                elif [[ ${port_confirm} == [Nn] ]];then                                    break                                else                                    cho -e "\033[34;5m输入错误,请重新输入!!!\033[0m"                                    continue                                fi                            done                        else                            ChangeSshPort $port                            return                        fi                    else                        echo -e "\033[34;5m输入错误,端口范围需在0~65535 请重新输入!!!\033[0m"                    fi                done            elif [[ ${sshport_yes_no} == [Nn] ]];then                return            else                echo -e "\033[34;5m输入错误,请重新选择!!!\033[0m"            fi        read -p "是否修改SSH端口 是/否  (Y/N): " sshport_yes_no        done    }    #循环判断是否允许Root ssh登录    function InteractivePermitRootLogin(){        read -p "是否允许Root通过SSH登录 是/否  (Y/N): " root_login_yes_no        while true;do            if [[ ! -n ${root_login_yes_no} ]];then                echo -e "\033[34;5m输入错误,请重新选择!!!\033[0m"            elif [[ ${root_login_yes_no} == [Yy] ]];then                echo "允许root登录"                PermitRootLogin "yes"                return            elif [[ ${root_login_yes_no} == [Nn] ]];then                echo "禁止root登录"                PermitRootLogin "no"                return            else                echo -e "\033[34;5m输入错误,请重新选择!!!\033[0m"            fi            read -p "是否允许Root通过SSH登录 是/否  (Y/N): " root_login_yes_no        done    }    #执行定义的函数    InteractiveDisableUseDNS    InteracticeChangeSshPort    InteractivePermitRootLogin    /etc/init.d/sshd restart > /dev/null    QuitOrReturn2Mian}function TimeSynchronization(){    echo "此功能待开发"    QuitOrReturn2Mian}function ModifySystemResourceLimit(){    echo "此功能待开发"    QuitOrReturn2Mian}function KernelParameterOptimization(){    echo "此功能待开发"    QuitOrReturn2Mian} #判断是否是root用户运行if [[ `id -u` -ne 0 ]];then    echo "必须以root身份运行此脚本!"    exit 1fi while ChoiceInterface;do    read -p "请输入你的选择:" choice    #判断是否输入回车或者非数字字符    NumberLegalChecker ${choice} || continue    case $choice in         1)             DisableSELINUX            continue            ;;        2)              ModifyDefaultRunlevel             continue             ;;         3)             AutostartOptimization             continue             ;;         4)             SshOptimization             continue             ;;         5)             TimeSynchronization             continue             ;;         6)             ModifySystemResourceLimit             continue             ;;         7)             KernelParameterOptimization             continue             ;;         10)             exit 0             ;;         *)             echo "选择错误,请重新选择!"             continue             ;;    esacdone

保存此脚本为init_system.sh,并通过以下命令运行它:

  • chmod +x init_system.sh./init_system.sh

请记住,这只是一个示例脚本,实际部署时需要根据具体情况进行调整。在生产环境中,优化步骤可能会更加复杂,并且需要详细的规划和测试。

以上,既然看到这里了,如果觉得不错,随手点个赞、在看、转发三连吧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2263260.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【电脑技巧】将键盘的方向键映射为alt+i、k、j、l

最近感觉方向键太远了&#xff0c;想找个方法修改键盘映射&#xff0c;有几种方式可以实现 使用powertoys的键盘映射&#xff08;软件太大了&#xff0c;只为键盘映射不值得下这个&#xff09;使用autohotkey&#xff08;通过脚本的方式&#xff0c;可以打包成exe文件&#xf…

apache-tomcat-6.0.44.exe Win10

apache-tomcat-6.0.44.exe Win10

文件防泄漏 | 文件防泄漏软件解决方案分享,网络数据泄露防护系统

文件防泄漏 | 文件防泄漏软件解决方案分享&#xff0c;网络数据泄露防护系统 企业面临的一大挑战是数据安全和隐私保护。 网络数据泄露不仅会导致经济损失&#xff0c;还会损害企业的声誉和客户关系。 为了应对这一挑战&#xff0c;域智盾软件应运而生&#xff0c;成为众多企…

11篇--图像边缘检测

图像梯度 要学习图像边缘检测&#xff0c;要先了解图像梯度的概念&#xff0c;我们正是通过梯度值来区分边缘像素点的 处于边缘附近的像素点与周围像素点的差距很大&#xff08;不然不会有边缘呈现&#xff09;&#xff0c;所以给边缘附近的的梯度之变化很快&#xff0c;通过…

细说STM32F407单片机轮询方式读写SPI FLASH W25Q16BV

目录 一、工程配置 1、时钟、DEBUG 2、GPIO 3、SPI2 4、USART6 5、NVIC 二、软件设计 1、FALSH &#xff08;1&#xff09;w25flash.h &#xff08;2&#xff09; w25flash.c 1&#xff09;W25Q16基本操作指令 2&#xff09;计算地址的辅助功能函数 3&#xff09;器…

.net core在linux导出excel,System.Drawing.Common is not supported on this platform

使用框架 .NET7 导出组件 Aspose.Cells for .NET 5.3.1 asp.net core mvc 如果使用Aspose.Cells导出excel时&#xff0c;报错 &#xff1a; System.Drawing.Common is not supported on this platform 平台特定实现&#xff1a; 对于Windows平台&#xff0c;System.Drawing.C…

岁末回望,追梦远方

又到了岁末年初&#xff0c;按惯例&#xff0c;风云我都会写一篇长长的感悟&#xff0c;给自己辞旧的总结复盘&#xff0c;迎新的追梦定调&#xff0c;今年赋诗一首&#xff0c;畅想一下诗和远方&#xff0c;简洁而又虚无&#xff0c;缥缈中坚定初心。 岁末回首步履深&#xf…

作业Day4: 链表函数封装 ; 思维导图

目录 作业&#xff1a;实现链表剩下的操作&#xff1a; 任意位置删除 按位置修改 按值查找返回地址 反转 销毁 运行结果 思维导图 作业&#xff1a;实现链表剩下的操作&#xff1a; 1>任意位置删除 2>按位置修改 3>按值查找返回地址 4>反转 5>销毁 任意…

多个Echart遍历生成 / 词图云

echart官网 安装 如果版本报错推荐安装以下版本 npm install echarts4.8.0 --savenpm uninstall echarts//这个是卸载命令以下安装成功后是局部引入:多个Echart遍历生成 vue3echart单个页面多个图表循环渲染展示:<template><div class"main"><div …

混凝土-钢板结构抗剪性能DIC全场应变测试

混凝土-钢板结构发挥了钢板抗拉及混凝土抗压的特点&#xff0c;为建筑设计、选材、施工等过程带来了更多的可能性。构件将混凝土与钢板结合&#xff0c;从而改善抗剪承载性能&#xff0c;提升建筑性能。 采用3D-DIC非接触式三维全场应变测量技术&#xff0c;对构件的抗剪承载力…

网络安全渗透有什么常见的漏洞吗?

弱口令与密码安全问题 THINKMO 01 暴力破解登录&#xff08;Weak Password Attack&#xff09; 在某次渗透测试中&#xff0c;测试人员发现一个网站的后台管理系统使用了非常简单的密码 admin123&#xff0c;而且用户名也是常见的 admin。那么攻击者就可以通过暴力破解工具&…

音频开发中常见的知识体系

在 Linux 系统中&#xff0c;/dev/snd 目录包含与声音设备相关的文件。每个文件代表系统中的一部分音频硬件或音频控制接口。以下是你列出的文件及其含义&#xff1a; 一.基本术语 样本长度(sample)&#xff1a;样本是记录音频数据最基本的单位&#xff0c;计算机对每个通道采…

Linux setfacl 命令详解

文章目录 Linux setfacl 命令详解一、ACL 和 setfacl 简介二、基本语法三、常用操作1. 查看 ACL2. 为用户设置权限3. 为组设置权限4. 删除 ACL 条目5. 设置默认 ACL6. 递归设置 ACL 四、示例操作1. 创建示例目录和文件2. 设置 ACL3. 验证 ACL 五、注意事项六、总结 Linux setfa…

编程训练系统(代码+数据库+LW)

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了编程训练系统的开发全过程。通过分析编程训练系统管理的不足&#xff0c;创建了一个计算机管理编程训练系统的方案。文章介绍了编程训练系统的系统分析部分&…

提炼关键词的力量:AI驱动下的SEO优化策略

内容概要 在当今数字化营销的环境中&#xff0c;关键词对于提升网站的可见性和流量起着至关重要的作用。企业和个人必须重视有效的关键词策略&#xff0c;以便在竞争激烈的网络市场中脱颖而出。本文将深入探讨如何利用人工智能技术来优化SEO策略&#xff0c;特别是在关键词选择…

【Where语法全解密】.NET开源ORM框架 SqlSugar 系列

文章目录 前言一、普通表达式查询 Where二、根据SQL查询 where三、动态查询四、动态拼表达式查询 &#xff0c;拼拉姆达五、条件拼接查询六、链式条件查询七、根据Class查询&#xff0c;根据实查询八、根据Class中主键查询九、根据字典查询十、查询函数十一、Where中有子查询十…

模型优化之知识蒸馏

文章目录 知识蒸馏优点工作原理示例代码 知识蒸馏优点 把老师模型中的规律迁移到学生模型中&#xff0c;相比从头训练&#xff0c;加快了训练速度。另一方面&#xff0c;如果学生模型的训练精度和老师模型差不多&#xff0c;相当于得到了规模更小的学生模型&#xff0c;起到模…

电脑问题4[非华为电脑安装华为电脑管家华为荣耀手机多屏协助]

非华为电脑安装华为电脑管家华为荣耀手机多屏协助 我是荣耀手机之前一直用的是window的"连接手机"功能,电脑控制手机还蛮好用,但是又不能够没有好的电脑控制手机的功能,后来想了想看了看,竟然安装了华为电脑关键,竟然可以顺利连接上荣耀手机,发现还蛮好用! 本文引用…

win11 C盘出现感叹号解决方法

出现感叹号&#xff0c;原因是对C盘进行了BitLocker驱动器加密操作。如果想去除感叹号&#xff0c;对C盘进行BitLocker解密即可。 步骤如下&#xff1a; 1.点击Windows搜索框 2.搜索框内输入 系统 3.按下回车&#xff0c;进入系统界面 4.点击隐私和安全性 点击BitLocker驱…

MyBatis通过注解配置执行SQL语句原理源码分析

文章目录 前置准备流程简要分析配置文件解析加载 Mapper 接口MapperAnnotationBuilder解析接口方法注解parseStatement 方法详解MapperBuilderAssistant 前置准备 创建一个mybatis-config.xml文件&#xff0c;配置mapper接口 <mappers><!--注解配置--><mapper…