- 博客(79)
- 收藏
- 关注
原创 RedBlackTree(红黑树)
极端情况下,最短路径都是黑色结点,不存在红色结点,最长路径是一黑一红的黑红相间,但是,一棵红黑树不一定存在最长路径和最短路径,也有可能是平衡的。且插入结点的grandfather结点一定是黑色(在插入结点之前的树一定是红黑树,说明不存在连续的红色结点)。和情况一不同的是,情况二经过旋转+变色,无论是p变为黑色结点还是cur变为黑色结点,都不需要再向上处理。插入新结点的颜色必须是红色,如果插入新节点的颜色是黑色,则大概率会违反。一个红色结点的孩子必然是黑色,一个黑色结点的孩子可以是红色也可以是黑色。
2024-07-13 11:28:39
668
原创 AVLTree(平衡二叉树)
相比BinarySearchTreeNode,AVL树的结点引入平衡因子 = 右子树高度 - 左子树高度,并且多加了指向父亲的指针。
2024-07-10 16:40:21
1040
原创 算法——同步算法
后面步骤省略,结束条件是有一个遍历结束,则结束。另一个剩余元素则push到差集。,与此类似的还有求差集,相关的解法有很多。通过这道题,引出被广泛应用的同步算法。数据同步算法最常见的应用就是手机云存储。应用需求:要求同时求出差集和交集。2.依次比较,比较结果是小的就push到差集。1.同时遍历两个数组(也可以是其他)3.比较结果相同的就push到交集。4.比较结果不相等时,值为小的++,遍历数组插入set即可去重。5.比较结果相等时,同时++
2024-07-08 11:45:07
293
原创 链表——随机链表的复制
再遍历原链表,此时,通过基于map重载的[]运算符,可以返回原链表结点random对应的V即复制结点。过去的算法是修改原链表的next,让每个复制结点位于原链表结点后面。这道题的关键在于完成链表复制后,如何修改random指针。map 的结点为 K原链表结点和V复制链表结点。基于这篇文章算法的改进。
2024-07-08 11:05:14
400
原创 STL——map和set
要求统计个数。比如要求你统计数组中有每种水果有几个string arr[] = { "苹果", "西瓜", "苹果", "西瓜", "苹果", "苹果", "西瓜","苹果", "香蕉", "苹果", "西瓜", "香蕉", "草莓" };if (it!else这是正常的写法。
2024-07-07 15:41:25
777
原创 计算机组成结构—IO接口(IO控制器)
两个系统或两个部件之间的交接部分,一般就称为。接口可以是硬件上两种设备间的连接电路;也可以是两个软件之间交互的逻辑边界。主机与 I/O 设备之间,专门设置一套硬件电路、配合相应的软件控制,实现两者间的信息交互,这就是。不同的 I/O 设备都有其相应的设备控制器,而它们往往都是通过 I/O 接口与主机取得联系的。
2024-06-07 18:57:41
1420
原创 计算机组成结构—IO系统概述
在计算机中,除 CPU 和主存两大模块之外,第三个重要部分就是,也叫做,简写为。I/O 系统的主要功能,就是对不同类型数据信息的输入输出,进行高效的控制管理。
2024-06-07 18:48:47
1298
原创 计算机组成结构—总线
并且对所有从模块都用同一限时,这就势必造成,对各不相同速度的部件而言,必须按最慢速度的部件来设计公共时钟,严重影响总线的工作效率,也给设计带来了局限性,缺乏灵活性。在第一个子周期,主设备 A 获取总线使用权后,将命令、地址及其它有关信息都发到系统总线上,经总线传输,由从设备 B 接收下来。后来,虽然改进为以存储器为中心的分散连接结构,I/O 与主存交换信息可以不经过运算器,又采用了中断、DMA 等技术,使 CPU 工作效率得到很大的提高,但是仍无法解决I/O设备与主机之间连接的灵活性。
2024-06-06 19:58:53
1080
原创 计算机组成结构—多处理器
SIMD 的特点是,设置了多个并行的执行单元,而所有的执行单元都是同步的,执行的指令从同一个 PC 中取出,由同一个控制单元来进行调度管理。于是多处理器又可以划分为两种架构。尽管物理地址空间是统一的、共享的,但如果存储器本身也采取了并行架构(例如多模块存储器),不同的处理器对存储器不同部分的访问可能就会有区分。在支持硬件多线程的 CPU 中,需要为每个线程提供单独的寄存器堆和 PC 等资源,这样就可以在共享资源的同时保持线程的独立状态。这样,每个处理器对所有存储单元的访问时间都大致相同,是对称的系统架构。
2024-06-06 19:37:37
896
原创 计算机组成结构—中断和异常
计算机在执行程序的过程中,有时会遇到一些异常情况或者特殊请求;这时就需要计算机暂停正在运行的程序,转而先去处理这些异常或特殊请求,处理结束之后再返回程序的断点处继续执行。这种处理方式就被称为 “”,计算机的这种功能就称为;实现这种功能所需的软硬件技术统称为。很显然,对于一些突发情况和实时传来的外部信号,相比时刻查询的方式,使用中断技术可以大大地提高计算机的整体效率。能够引发中断的因素有很多,比如等等。通常将能够引起中断的各种因素称为。根据各种中断源的类型,可以对中断进行不同的分类。
2024-05-24 19:44:55
1005
原创 计算机组成结构—控制器的原理和设计
控制单元 CU 控制一条指令执行的过程,实质上就是发出控制信号、依次执行一个微操作序列的过程。很明显,不同的指令中包含的微操作数量不等,每个微操作的复杂程度也不同,所以每条指令的执行时间都是不同的。在 CPU 内,可以通过时钟信号产生节拍,来控制每个微操作的执行。一个指令周期可以包含多个机器周期,每个机器周期又可以包含多个节拍,这样就构成了。控制不同的微操作序列,需要产生不同的时序控制信号。至于如何形成这些控制信号,可以采用不同的时序控制方式,这就被称为 CU 的。
2024-05-22 16:57:47
1125
原创 计算机组成结构—数据通路和控制信号
计算机中,将各个功能部件连接起来、可以进行数据传送的路径称为。数据通路的主要功能,就是实现计算机中不同部件间的信息传送和数据交换。在这里我们主要讨论 CPU 内部的数据通路,
2024-05-21 20:58:17
1830
原创 计算机组成结构—指令流水线
对于计算机系统而言,提升器件性能和改进系统结构,是提高整体性能的两大途径。就是改进处理器架构的一项并行处理技术,可以极大地提高 CPU 的工作效率。计算机中的并行性体现在不同的级别上。通常可以分为以下 4 个级别:作业级/程序级任务级/进程级指令之间级指令内部级前两个级别是粗粒度的,又称为,一般用软件算法实现;而后两个级别是细粒度的,又称为,一般用硬件实现。指令流水线就是一项实现指令级并行的技术。
2024-05-21 08:35:53
1286
原创 计算机组成结构—指令周期
计算机取出并执行完一条指令所需的全部时间,就叫做。我们已经知道,一条指令的执行过程可以分为和三个步骤,因此一个指令周期也应该包含这三部操作需要的时间。由于分析指令时可以用硬件实现操作码的译码,因此这步操作用时很短,一般可以将取指令和分析指令合并为一个阶段,对应的时间称为;而执行指令阶段所需的时间就称为。很明显,各种指令的取指周期是一样的,但由于具体的执行操作不同,因此指令周期是可以不同的。前面我们将 ”分析指令“ 这一步合并入了取指周期,是因为操作码的译码非常简单;
2024-05-20 14:41:30
1473
原创 计算机组成结构—CPU的功能和基本结构
中央处理器(CPU)由和组成。运算器负责数据加工,也就是对数据进行算术和逻辑运算;而控制器则需要完成计算机各部件之间的协调和控制,保障每一条指令按规定的执行步骤正确执行,还要处理各项紧急事件。计算机核心的功能就是自动执行一系列指令,这项工作主要由 CPU 中的控制器来完成。具体来说,指令的执行过程包括了和三个步骤。取指令:控制器能够自动地从存储器中取出指令,并且按预定的顺序依次取下一条指令。这要求控制器可以自动形成要执行的指令地址,并发出取指命令将对应的指令从主存取到控制器中。
2024-05-20 14:19:49
579
原创 计算机组成结构—高级语言程序与机器级代码
x86 架构的 CPU 中会设置一组,用来存储整数数据和指针(地址)。最初的 8086 有 8 个 16 位的寄存器,分别叫做 ax、bx、cx、dx、si、di、bp、sp,每个寄存器都有各自特殊的用途,这都体现在它们的名字中。当扩展到 32 位架构(标准名称为 IA32)时,这些寄存器也都扩展为 32 位,名称前加上了 ’‘e“ 表示扩展(extended)。每个 32 位的通用寄存器,都可以将低 16 位当作一个 16 位寄存器独立使用,最低 8 位当作一个 8 位寄存器使用;
2024-05-16 17:13:05
827
原创 计算机组成结构—CISC和RISC
指令集的不同会导致一个处理器的基础结构不同。最早的 CPU 出现在 20 世纪 70 年代,当时的集成电路技术制约了一块芯片上能实现什么,所以它们的指令集都非常有限;以 8 位 CPU 为主,Intel 8080、MOS 6502、MC 6800 就是其中的代表。之后随着超大规模集成电路技术的发展,微处理器发展得非常迅速,指令集也越来越复杂;并且出现了将处理器、RAM、ROM 和 I/O接口等计算机基本部件集成到一个芯片上的微控制器(MCU),这就是,Intel 的 MCS-51 系列就是其中的代表。
2024-05-16 16:19:47
1174
原创 计算机组成结构—寻址方法
寻址方式是寻找指令或操作数有效地址的方式,也就是指确定本条指令的数据地址,以及下一条将要执行的指令地址的方法。寻址方式分为指令寻址和数据寻址两大类。
2024-05-15 16:07:26
1391
原创 计算机组成结构—指令和指令格式
计算机是通过连续执行一条条机器语言语句,而实现自动工作的。习惯上就把每一条机器语言的语句称为,而把全部机器指令的集合称为机器的。(机器指令)是指计算机执行某种操作的机器语言命令。一台计算机的所有指令的集合构成该计算机的,也称。指令系统是计算机的主要属性,位于硬件和软件的交界面上。
2024-05-11 17:00:22
1767
原创 计算机组成结构—虚拟存储器
早期的计算机,CPU 是直接操作主存的,也就是运行程序时,直接给出要访问的实际主存地址。这种方式简单直接,但是会有一些问题:不同的程序之间需要共享内存,它们的内存地址空间很难隔离,从而导致程序运行的稳定性和安全性降低;主存容量有限,如果同时执行的程序太多、使用内存太大容易超出容量限制而崩溃。为了解决这些问题,在主存-辅存这一层次的不断发展中,逐渐形成了虚拟存储系统。主存和辅存共同构成了虚拟存储器,二者在硬件和系统软件的共同管理下工作。对于应用程序员而言,虚拟存储器是透明的。
2024-05-07 11:14:24
1097
原创 计算机组成结构—高速缓冲存储器(Cache)
基本想法就是使用速度更快但容量更小、价格更高的,用来存放经常用到的信息;这样一来,CPU 就可以直接与 Cache 交换数据,而不用访问主存了。这种方案之所以有效,是因为通过对大量典型程序分析发现,。这是由于指令和数据在内存中都是连续存放的,而且有些指令和数据会被多次调用(比如常用函数、循环代码段、数组和一些常数);也就是说,指令和数据在主存中地址分布不是随机的,而是相对的簇聚。这使得 CPU 执行程序时,访存具有相对的局部性;这称为程序访问的。
2024-05-06 21:18:14
1365
2
原创 WAF防范原理
WAF,即Web Application Firewall,和传统防火墙的区别是,它是工作在应用层的防火墙,也是基于特征规则库防御,主要对web请求/响应进行防护。WAF能做什么呢?1.纵深安全纵深防护,精确识别人机识别,拦截爬虫行为隐藏服务器敏感信息泄露2.WAF其实是部署在服务器的前置,这样可以减少对服务器的资源消耗,但是对WAF的性能要求比较高。
2024-04-23 19:22:05
615
原创 木马——文件上传
WebShell就是以网页文件形式(asp\php\jsp)存在的一种命令执行环境,客户端通过远程连接,利用W ebS h ell连接到服务器,并可对服务器进行操作。前提是后端一定可以解析这种环境。
2024-04-21 15:37:50
748
原创 BP使用和弱口令漏洞
完成后会弹出结果,对比每一行的Length,和其他行不一样的一般是破解成功的,且状态码为200。右键选择发送到Intruder,在Positions选项中,设置要暴力破解的变量,这里是登录的密码。比如图片验证码,具体绕过原理是,使用BP拦截包后,单独发送验证码,获得正确的验证码后,再暴力破解密码。要爆破一台win10的账号登录和密码,拿我这台机器举例,需要知道账号名,比如abc。我们不知道密码,验证码也不知道,因为是在服务端验证,因此我们需要获得正确的验证码。也可以观察到响应的包的具体内容。
2024-04-20 14:38:04
1012
原创 SQL注入作业
实际上这个过程是,admin'# 作为用户名登录后,数据库对该用户名,密码信任,实际上这个用户名被代码替换后,登录的不是admin'# ,而是admin。修改的是admin的密码,这就是二阶注入的原理。所谓的二阶注入,利用的是,数据库系统对已有信息的“信任”,将注入的用户名输入到系统后,利用这种信任,登录到数据库其他用户,比如admin'#成功注册后,但是登录的却是admin。此时,username为8 ,根据or的运算,3=3是永真式,#将后半句注释了,故这句代码执行结果永远为真,可以登录成功。
2024-04-19 20:49:57
1342
原创 计算机组成结构—外部存储器
外部存储器是主存的后援设备,也叫做辅助存储器,简称或,与主存一起构成了存储器系统的主存-辅存层次。与主存相比,外存容量大、速度慢、价格低,可以脱机保存信息,属于。用于计算机系统的外存主要有磁盘、磁带、光盘;磁盘和磁带都属于。而目前广泛应用的主体由闪存芯片构成,属于半导体存储器。
2024-04-10 21:31:03
921
原创 计算机组成结构—主存储器
主存储器简称主存或内存,是计算机中存储程序和数据的重要部件。主存内包含了存储体、各种逻辑部件以及控制电路等。主存是通过按地址访问的方式,对存储体内的存储单元进行读写操作的。因此主存首先需要从 MAR 中获取地址,由译码器进行地址译码、再经过驱动电路,进而通过选择线选中所需访问的单元。读出时,需要经过读出放大器才能将被选中存储单元的内容送到 MDR;写入时,MDR 中的数据也需要经过写入电路才能真正存入被选中的单元。
2024-04-08 19:29:19
1263
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人