C++分析AVL树
目录
AVL树介绍
AVL树平衡因子更新分析
AVL树插入时旋转与平衡因子更新
左单旋
右单旋
左右单旋
右左单旋
AVL旋转可行性
AVL树节点删除(待补充)
AVL树分析
AVL树介绍
二叉搜索树在某些极端情况下可能会退化,为了解决这个问题,引入了AVL树(平衡搜索二叉树中的一种)控制二叉搜索树的不平衡情况,插入一个新节点后,控制每一个节点的左右子树高度差的绝对值不超过1
之所以控制绝对值不超过1而不是不超过0是因为只有在满二叉树的情况下才可以满足每一个节点的左右子树高度差的绝对值不超过0,为了满足普遍性,选择绝对值不超过1
一棵AVL树具有以下的特点:
-
每一个节点的左右子树都是AVL树
-
左右子树高度差的绝对值(通过平衡因子判断)不超过1
绝对值不超过1,包括-1、1和0
以右子树高度减左子树高度为例,下面是含有每一个节点的高度的AVL树示意图:
AVL树平衡因子更新分析
在AVL树中,平衡因子更新只有两种情况:1. 增加 2. 减少,但是需要考虑什么时候增加什么时候减少
-
当插入节点在左子树时,平衡因子减少,例如插入在8节点的左子树
-
当插入节点在右子树时,平衡因子增加,例如插入在8的右子树
接着考虑插入新节点后,哪些节点的平衡因子需要改变。
-
如果插入节点在8的左子树,那么更新时只会更新8节点的平衡因子,因为8初始时是1,插入在左子树平衡因子减小,而对于节点7来说,并没有影响到其平衡因子,因为7的右子树总体的高度没有发生变化,而对于根节点的左子树以及7节点的左子树来说没有一点影响
-
如果按照下图的插入方式,插入节点为红色节点,此时会更新其所有祖先节点
-
如果插入节点在8的右子树,那么更新时8节点的平衡因子变为了2,因为8初始时是1,插入在右子树平衡因子增加,因为AVL树规定每一个节点的左右子树高度差的绝对值不能超过1,所以此时8节点需要进行额外处理使其恢复AVL树结构
综上所述,存在三种情况:
-
当插入节点的父亲节点更新为0时:插入节点前父亲节点平衡因子为1或者-1(一边高一边矮),为1时,右子树高,插入位置为左子树;为-1时,左子树高,插入位置为右子树(插入在矮的一边),此时只需要更新父亲节点的平衡因子,因为总高度并没有发生变化。例如8节点的左子树插入节点,树的总高度还是4
-
当插入节点的父亲节点更新为1或者-1时:插入节点前父亲节点平衡因子为0(左右子树高度相等),当更新为1时,插入位置为右子树,右子树变高,起始为-1时,插入位置为左子树,左子树变高(其中一方变高),此时需要更新所有祖先节点的平衡因子,因为插入的节点导致了树的总高度发生变化,例如例2插入红色节点树的总高度由4变为5
-
当插入节点的父亲节点更新为2或者-2时:插入节点前父亲节点平衡因子为1或者-1(左右子树存在一方高一方矮),当更新为2时,原父亲节点平衡因子为1,并且插入位置在平衡因子为1的父亲节点的右子树,例如在节点8右子树插入新节点;当更新为-2时,原父亲节点平衡因子为-1,插入位置平衡因子为-1的父亲节点的右子树(高的一方继续变高,矮的一方没有改变),此时需要进行旋转处理将平衡因子为2或者-2的节点对应的树进行调整使其恢复AVL树结构
AVL树插入时旋转与平衡因子更新
左单旋
当插入的节点在平衡因子为1的父亲节点的右子树的右子树上时,此时父亲节点的平衡因子更新为2,其右孩子节点的平衡因子分别为1和0时需要进行左单旋,例如下面的一种具体情况:
为了便于分析,将插入位置进行抽象化,a、b和c分别是高度h>=0
的AVL子树,如下图所示:
此时因为父亲节点10的平衡因子变为了2,需要进行左旋,左旋需要进行的步骤如下:
平衡因子计算:
h+1(新增节点所在层数)-1=1为20节点的平衡因子
h+1+1(20节点所在层数)-h=2为10节点的平衡因子
-
将20的左孩子给10节点作为其右孩子
-
将10降下作为20的左孩子
-
20节点作为本棵子树的根节点
-
更新10和20节点的平衡因子为0
结合变量parent
、subR
和subRL
:
代码实现:
// 左单旋void rotateLeft(node* parent){// 定义节点node* subR = parent->_right;node* subRL = subR->_left;// 1. subRL变为parent的右孩子parent->_right = subRL;// 更新subRL的_parent为parent,需要注意当h=0时subRL节点不存在,所以需要进行判断subRL是否为空if (subRL){subRL->_parent = parent;}// 2. parent变为subR的左孩子subR->_left = parent;// 3. subR变为本棵子树的根节点// 记录parent的父亲节点node* parentParent = parent->_parent;// 更新parent节点的父亲节点为subRparent->_parent = subR;// 更新parent节点的父亲节点的孩子节点为subRif (parentParent == nullptr){// 父亲节点为空证明是根节点_root = subR;subR->_parent = nullptr;}else{if (parentParent->_left == parent){parentParent->_left = subR;}else{parentParent->_right = subR;}// 更新subR的父亲节点subR->_parent = parentParent;}// 4. 更新平衡因子parent->_bf = subR->_bf = 0;}
右单旋
当插入的节点在平衡因子为-1的父亲节点的左子树的左子树上时,此时父亲节点的平衡因子更新为-2,其左孩子节点的平衡因子分别为-1和0时需要进行右单旋,例如下面的一种具体情况:
为了便于分析,将插入位置进行抽象化,a、b和c分别是高度h>=0
的AVL子树,如下图所示:
此时因为父亲节点10的平衡因子变为了-2,需要进行右旋,右旋需要进行的步骤如下:
平衡因子计算:
h-(h+1(新增节点所在层数))=-1为20节点的平衡因子
h-(h+1+1(20节点所在层数))=-2为10节点的平衡因子
-
将20的右孩子作为10的左孩子
-
将10作为20的右孩子
-
将20作为本棵子树的根节点
-
更新10和20的平衡因子为0
结合变量parent
、subL
和subLR
:
代码实现:
// 右单旋void rotateRight(node* parent){node* subL = parent->_left;node* subLR = subL->_right;// 1. 将subLR作为parent的左孩子parent->_left = subLR;// 更新subLR的parentif (subLR){subLR->_parent = parent;}// 2. 将parent作为subL的右孩子subL->_right = parent;// 3. 将subL作为本棵子树的根节点// 记录当前parent节点的父亲节点node* parentParent = parent->_parent;// 更新parent的_parent为subLparent->_parent = subL;if (parentParent == nullptr){_root = subL;subL->_parent = nullptr;}else{if (parentParent->_left == parent){parentParent->_left = subL;}else{parentParent->_right = subL;}// 更新subL的父亲节点subL->_parent = parentParent;}// 4. 更新平衡因子subL->_bf = parent->_bf = 0;}
左右单旋
当插入的节点在平衡因子为-1的父亲节点的左子树的右子树上时,此时父亲节点的平衡因子更新为-2,其右孩子节点的平衡因子分别为1和0时需要先进行左单旋再进行右单旋,例如下面的一种具体情况:
为了便于分析,将插入位置进行抽象化
-
a、b和c分别是高度
h=0
的AVL子树,如下图所示:
在当前情况下,b位置的节点即为新增节点,a和c位置此时均没有节点,10节点的平衡因子更新为-2,10节点的左孩子节点的平衡因子更新为1
平衡因子计算:
5节点的平衡因子:h+1(新增节点所在层数)-h=1
10节点的平衡因子:h-(h+1+1(5节点所在层数))=-2
-
a、b、c和d分别是高度
h>0
的AVL子树,如下图所示:
h>0
在上图的情况下代表已经至少存在一个节点,即5的右子树开始有一个节点存在,所以6位置没有节点时用h-1
代替
此时插入节点的位置有两种:
(a) 在b位置插入,此时6节点的平衡因子变为-1,5节点的平衡因子变为1,10节点的平衡因子变为-2
平衡因子的计算:
6节点的平衡因子:h-1-h(新增节点所在层数)=-1
5节点的平衡因子:h+1(6节点所在层数)-h=1
10节点的平衡因子:h-(h+1+1)=-2
(b) 在d位置插入,此时6节点的平衡因子变为-1,5节点的平衡因子变为1,10节点的平衡因子变为-2
平衡因子的计算:
6节点的平衡因子:h+1-h(新增节点所在层数)=1
5节点的平衡因子:h+1(6节点所在层数)-h=1
10节点的平衡因子:h-(h+1+1)=-2
尽管左右单旋有两种主要情况,但是实际上影响到的平衡因子的更新,主要思路还是先左旋再右旋,为了更好观察效果,以第二种情况中的第一种情况为例分析先左旋再右旋的步骤:
-
左旋(将多条路径更新化为一条路径更新)
-
将6节点的左孩子作为5节点的右孩子
-
将5节点作为6节点的左孩子
-
将6节点作为本棵树的根节点,链接到10节点的左孩子(因为开始的父亲节点5是10节点的左孩子)
-
-
右旋(更新单一路径)
-
将6节点的右孩子作为10节点的左孩子
-
将10节点作为6节点的右孩子
-
将6节点作为本棵树的根节点
-
更新平衡因子
-
当树旋转结束后需要更新对应的平衡因子,此时需要考虑到两种主要情况,即h=0
和h>0
,结合变量parent
、subL
和subLR
:
-
h=0
,左右双旋结束后如下图所示: -
h>0
-
插入位置在b,左右双旋结束后如下图所示:
-
插入位置在d,左右双旋结束后如下图所示:
代码实现:
// 左右双旋void rotateLR(node* parent){// 记录旋转前的平衡因子node* subL = parent->_left;node* subLR = subL->_right;int bf = subLR->_bf;// 1. 左右双旋// 左旋rotateLeft(parent->_left);// 右旋rotateRight(parent);// 更新平衡因子if (bf == 0){subL->_bf = parent->_bf = 0;}else if (bf == -1)// 插入在d位置{subL->_bf = 0;subLR->_bf = 0;parent->_bf = 1;}else if (bf == 1){subL->_bf = -1;subLR->_bf = 0;parent->_bf = 0;}else{assert(false);}}
-
右左单旋
当插入的节点在平衡因子为1的父亲节点的右子树的左子树上时,此时父亲节点的平衡因子更新为2,其右孩子节点的平衡因子分别为-1和0时需要先进行右单旋再进行左单旋,例如下面的一种具体情况:
为了便于分析,将插入位置进行抽象化
-
a、b和c分别是高度
h=0
的AVL子树,如下图所示:
在当前情况下,c位置的节点即为新增节点,a和b位置此时均没有节点,10节点的平衡因子更新为-2,10节点的左孩子节点的平衡因子更新为1
-
a、b、c和d分别是高度
h>0
的AVL子树,如下图所示:
h>0
在上图的情况下代表已经至少存在一个节点,即20的左子树开始有一个节点存在,所以15位置没有节点时用h-1
代替
此时插入节点的位置有两种:
(a)当插入在c位置时,15的平衡因子变为1,20的平衡因子变为-1,10的平衡因子变为2
(b)当插入在d位置时,15的平衡因子变为-1,20的平衡因子变为-1,10的平衡因子变为2
尽管右左单旋有两种主要情况,但是实际上影响到的平衡因子的更新,主要思路还是先右旋再左旋,为了更好观察效果,以第二种情况中的第一种情况为例分析先右旋再左旋的步骤:
-
右旋(将多条路径更新化为一条路径更新)
-
将15的右孩子作为20的左孩子
-
将20作为15的右孩子
-
15作为本棵子树的根节点,链接到10节点的右孩子位置
-
-
左旋(更新单一路径)
-
将15节点的左孩子作为10节点的右孩子
-
10节点作为15节点的左孩子
-
15作为本棵子树的根
-
更新平衡因子
-
当树旋转结束后需要更新对应的平衡因子,此时需要考虑到两种主要情况,即h=0
和h>0
,结合变量parent
、subR
和subRL
:
-
h=0
,左右双旋结束后如下图所示: -
h>0
-
插入位置在c,左右双旋结束后如下图所示:
-
插入位置在d,左右双旋结束后如下图所示:
-
代码实现:
// 右左双旋void rotateRL(node* parent){// 记录旋转前的平衡因子node* subR = parent->_right;node* subRL = subR->_left;int bf = subRL->_bf;// 1. 右左双旋// 右旋rotateRight(parent->_right);// 左旋rotateLeft(parent);// 更新平衡因子if (bf == 0){subR->_bf = parent->_bf = 0;}else if (bf == 1)// 插入在c位置{subR->_bf = 0;subRL->_bf = 0;parent->_bf = -1;}else if (bf == -1) // 插入在d位置{subR->_bf = 1;subRL->_bf = 0;parent->_bf = 0;}else{assert(false);}}
AVL旋转可行性
以左单旋为例,其余类比推理即可
在左单旋中,选择b子树作为10节点的右孩子节点是可行的,因为b子树的所有节点满足比10节点大,比20节点小,根据二叉搜索树的规则进行旋转
AVL树节点删除(待补充)
AVL树分析
AVL树是一棵绝对平衡的二叉搜索树,其要求每个节点的左右子树高度差的绝对值都不超过1,这样可以保证查询时高效的时间复杂度,即log_2 (N)。但是如果要对AVL树做一些结构修改的操作,性能非常低下,比如插入时要维护其绝对平衡,旋转的次数比较多,更差的是在删除时,有可能一直要让旋转持续到根的位置。因此如果需要一种查询高效且有序的数据结构,而且数 据的个数为静态的(即不会改变),可以考虑AVL树,但一个结构经常修改,就不太适合
相关文章:
C++分析AVL树
目录 AVL树介绍 AVL树平衡因子更新分析 AVL树插入时旋转与平衡因子更新 左单旋 右单旋 左右单旋 右左单旋 AVL旋转可行性 AVL树节点删除(待补充) AVL树分析 AVL树介绍 二叉搜索树在某些极端情况下可能会退化,为了解决这个问题&…...
aurora8b10b ip的使用(framing接口下的数据回环测试)
文章目录 一、Aurora8B/10B协议二、时钟、复位与状态指示1、时钟2、复位3、状态指示 三、数据发送、接受接口(1)AXI4-Stream位排序(2)Streaming接口(3)Framing接口(帧传输接口) 四、…...
如何通过OpenCV判断图片是否包含在视频内?
要判断图片是否包含在视频内,可以使用计算机视觉技术和图像处理方法。这通常涉及特征匹配或模板匹配。以下是一个基于OpenCV的解决方案,通过特征匹配的方法来实现这一目标。 步骤概述 读取视频和图片: 使用OpenCV读取视频文件和图片文件。 …...
大数据基础:Spark重要知识汇总
文章目录 Spark重要知识汇总 一、Spark 是什么 二、Spark 四大特点 三、Spark框架模块介绍 3.1、Spark Core的RDD详解 3.1.1、什么是RDD 3.1.2、RDD是怎么理解的 四、Spark 运行模式 4.1、Spark本地模式介绍 4.2、Spark集群模式 Standalone 4.3、Spark集群模式 Stan…...
Executable Code Actions Elicit Better LLM Agents
Executable Code Actions Elicit Better LLM Agents Github: https://github.com/xingyaoww/code-act 一、动机 大语言模型展现出很强的推理能力。但是现如今大模型作为Agent的时候,在执行Action时依然还是通过text-based(文本模态)后者JSO…...
循环结构(三)——do-while语句
目录 🍁引言 🍁一、语句格式 🚀格式1 🚀格式2 🍁二、语句执行过程 🍁三、实例 🚀【例1】 🚀【例2】 🚀【例3】 🍁总结 🍁备注 &am…...
pandas 或筛选
pandas 或筛选 在Pandas中,可以使用DataFrame.loc方法结合逻辑运算符来实现或筛选。这里提供一个简单的例子: import pandas as pd 创建示例DataFrame df pd.DataFrame({ ‘A’: [1, 2, 3, 4], ‘B’: [5, 6, 7, 8], ‘C’: [9, 10, 11, 12] }) 设定…...
工具(1)—截屏和贴图工具snipaste
演示和写代码文档的时候,总是需要用到截图。在之前的流程里面,一般是打开WX或者QQ,找到截图工具。但是尴尬的是,有时候,微信没登录,而你这个时候就在写文档。为了截个图,还需要启动微信…...
【从零开始一步步学习VSOA开发】快速体验SylixOS
快速体验SylixOS 安装完毕RealEvo-IDE 后,同时也安装了RealEvo-Simulator。RealEvo-Simulator 是一个虚拟运行环境,可以模拟各种体系结构并在其上运行 SylixOS。相比于物理板卡,在 RealEvo-Simulator 进行运行调测更加的方便快捷且成本低廉。…...
Ansible自动化:简化IT基础设施管理的艺术
目录 一.前言 二.Ansible简介 2.1什么是Ansible? 2.2Ansible的主要特点 2.3Ansible的应用场景 三.探索Ansible的高级功能 3.1 高级Playbook特性 3.2 Ansible Vault 3.3 动态Inventory 3.4Ansible Tower(AWX) 3.5模块开发 3.6 Ans…...
【Rust光年纪】探索Rust语言中的WebSocket库和框架:优劣一览
Rust语言中的实时通信利器:WebSocket库与框架全面解析 前言 随着Rust语言的不断发展,其在Web开发领域也变得越来越受欢迎。WebSocket作为实现实时通信的重要技术,在Rust的生态系统中也有多个库和框架提供了支持。本文将介绍几个主流的Rust …...
HTML 基础结构
目录 1. 文档声明 2. 根标签 3. 头部元素 4. 主题元素 5. 注释 6. 演示 1. 文档声明 <!DOCTYPE html>:声明文档类型,表示该文档是 html 文档, 2. 根标签 (1)所有的其他标签都要放在一对根标签中&#…...
多页合同怎么盖骑缝章_电子合同怎么盖骑缝章?
多页合同怎么盖骑缝章?电子合同怎么盖骑缝章? 对于纸质多页合同,盖骑缝章是一种常见的做法,用于确保合同的完整性,防止任何页面被替换或篡改。以下是盖骑缝章的基本步骤: 将所有合同页面平铺在桌面上。用…...
GD 32 IIC通信协议
前言: ... 通信方式 通信方式分为串行通信和并行通信。常见的串口就是串行通信的方式 常用的串行通信接口 常用的串行通信方式有USART,IIC,USB,CAN总线 同步与异步 同步通信:IIC是同步通信,有两个线一个是时钟信号线,一个数数据…...
Spring Task初学
介绍 Spring Task 是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑 为什么要在Java程序中使用Spring Task? 运行效果 cron表达式:一般日和周不会同时出现 入门案例 启动类添加注解EnableScheduling开始任务调度 创建MyTask类…...
决策树可解释性分析
决策树可解释性分析 决策树是一种广泛使用的机器学习算法,以其直观的结构和可解释性而闻名。在许多应用场景中,尤其是金融、医疗等领域,模型的可解释性至关重要。本文将从决策路径、节点信息、特征重要性等多个方面分析决策树的可解释性&…...
BUGKU-WEB never_give_up
解题思路 F12查看请求和响应,查找线索 相关工具 base64解码URL解码Burp Suit抓包 页面源码提示 <!--1p.html--> 2. 去访问这个文件,发现直接跳转到BUGKU首页,有猫腻那就下载看看这个文件内容吧 爬虫下载这个文件 import requests …...
hive自动安装脚本
使用该脚本注意事项 安装hive之前确定机子有网络。或者yum 更改为本地源,因为会使用epel仓库下载一个pv的软件使用该脚本前提是自行安装好mysql数据库准备好tomcat软件包,该脚本使用tomcat9.x版本测试过能正常执行安装成功,其他版本没有测试…...
unix 用户态 内核态
在UNIX操作系统中,"用户态"和"内核态"是两种不同的运行模式,它们定义了程序在执行时的权限级别: 用户态(User Mode): 用户态是程序运行的常规状态,大多数应用程序在执行时…...
GD32 IAP升级——boot和app相互切换
GD32 IAP升级——boot和app相互切换 目录 GD32 IAP升级——boot和app相互切换1 Keil工程设置1.1 修改ROM1.2 Keil烧录配置 2 代码编写2.1 app跳转2.2 软件重启2.3 app中断向量表偏移 结束语 1 Keil工程设置 1.1 修改ROM GD32内部Flash是一整块连续的内存,但是因为…...
C++11革新之旅:探索C++编程的无限可能
C11革新之旅:探索C编程的无限可能 C11,作为C语言的一个重要标准,为C编程带来了革命性的变革。它不仅引入了众多新特性和改进,还极大地增强了C的表达能力、提高了程序的性能和资源利用率。本文将从多个方面深入探讨C11的新特性&am…...
免费自动化AI视频剪辑工具
下载地址:https://pan.quark.cn/s/3c5995da512e FunClip是一款完全开源、本地部署的自动化视频剪辑工具,通过调用阿里巴巴通义实验室开源的FunASR Paraformer系列模型进行视频的语音识别,随后用户可以自由选择识别结果中的文本片段或说话人&a…...
Linux中安装C#的.net,创建运行后端或控制台项目
安装脚本命令: 创建一个sh文件并将该文件更改权限运行 sudo apt update wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb sudo dpkg -i packages-microsoft-prod.deb sudo apt-get upd…...
最长上升子序列LIS(一般+优化)
1. 题目 题目链接: B3637 最长上升子序列 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 输入样例: 6 1 2 4 1 3 4 输出样例: 4 说明/提示: 分别取出 1、2、3、4 即可。 2. 具体实现 2.1 一般做法 dp[i]表示第i个位置的…...
【Python系列】Python 协程:并发编程的新篇章
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
详解C/C++输入输出
前言 C/C输入输出很多,在不同的情况会用不同的输入输出,有的题目在输入时可能换一种输入输出就能不会TLE,有的输入可能要循环输入,但是可以换一种输入直接就能把所有数据输入进去。C/C有哪些常用的输入输出,在什么时候…...
AI人工智能开发环境配置
AI人工智能 为什么使用Python来开发AI 人工智能被认为是未来的趋势技术。 已经有了许多应用程序。 因此,许多公司和研究人员都对此感兴趣。 但是这里出现的主要问题是,在哪种编程语言中可以开发这些 AI 应用程序? 有各种编程语言,…...
Tomcat 8.5 下载、安装、启动及各种问题
🥰🥰🥰来都来了,不妨点个关注叭! 👉博客主页:欢迎各位大佬!👈 本期内容主要介绍 Tomcat 8 的安装,以及可能会遇到的问题 文章目录 1. Tomcat 安装2. 可能会遇到的问题2.…...
Harbor系列之5:复制管理
Harbor的镜像复制功能 Harbor 提供镜像复制功能,允许用户以推送和拉取方式在不同 Harbor 仓库之间,以及 Harbor 与非 Harbor 仓库间(如Alibaba ACR、Quay、Aws ECR、Azu热ACR、Docker Registry、Docker Hub等)复制 image、chart …...
V.PS德国VPS详细测评
V.PS的德国机房位于法兰克福,默认接入电信CN2 GIA、联通CUII网络,针对中国大陆进行路由优化处理的。而且是强制移动走联通的CUII链路,确保三网都处在轻负载的网络环境下。 CPU是Intel Xeon Gold 6133 ,启用了BBR,归属德…...
国内外画画做的好网站/友情链接怎么连
按CtrlAltT键,调出终端窗口 在窗口中输入【free -m】按enter键执行然后会在下面第一行的【mem:】后面的【total】下面显示你的内存总大小。 硬盘信息 那么我们需要先在终端输入【df】,显示的sd1就是我当前的磁盘。后面的第一个数据就是磁盘大小。 查看c…...
长沙网站制作哪家好/厦门seo代理商
在通常工程项目中,基线库的创建通常包含以下一些目录: 1 创建一个工程目录 2 再该工程目录中创建Document, Source, test&Demo, tools, Resource目录 3 Document目录用于存放项目各个阶段所产生的文档,如:规格阶段,…...
做部队网站技术/百度热搜榜排名昨日
目录 1.查看请求接口时的时延: 2.使用压力工具请求服务时查看系统负载:top 发现cpu,mem正常,iowait高. 3.iostat查看系统io负载 发现此磁盘sda的I/O使用率已经达到100%饱和 4.df查看sda是否是磁盘设备 df -h---->确认是系统磁盘 5.pidstat排查是哪个进程引起I/O瓶颈 6.st…...
网站后台培训方案/网络营销的特点不包括
汇编初步认识机器语言汇编是什么?汇编语言的组成CPU对存储器的读写总结机器语言 机器语言是CPU微处理器的指令集。 汇编是什么? 汇编实际上就是机器语言的助记符,通过某种规则,给机器码起不同的有意义的名字。 汇编语言的组成…...
如果做网站用java/百度推广客户端怎么登陆
这久自己在自己摸索apicloud,一直都是打算使用自己的数据库来开发,因此这里我通过一个实例来获取自己服务器数据库中的栏目信息,PHP代码如下://JSON获取栏目public function Category(){$Category M(news_cate)->order(sort)->select(…...
wordpress在首页音乐/如何建网站不花钱
jsp中page指令用法详解本文实例讲述了jsp中page指令用法。分享给大家供大家参考。具体如下:一、JSP 指令JSP 指令(directive)影响由 JSP 页面生成的 servlet 的整体结构。下面的模板给出指令的两种可能形式。属性值两边的双引号可以替换为单引号,但引号标…...