赞
踩
标记表示记忆,标黑表示注意
(1)全名
高速缓冲存储器
高速缓存
(2)作用
Cache的主要作用是存储那些由CPU频繁访问的数据和指令,从而减少访问主内存的次数,提高系统的整体性能,减少访存平均时间。
(使用局部性原理思想:空间局部性即一次从主存中调入一个块,时间局部性即存在高速缓存中方便下次访问,再次访问时速度更快。)
(3)映射方式
(映射方式指的是主存地址映射成cache地址的方式。)
地址映射方式分为:全相联映射 、直接映射 、组相联映射。
(4)写操作的具体实现
(写操作指的是CPU想要往主存中写一个数据(修改)。如果这个数据在cache中,若不同时更新cache和内存,则必将导致不一致的情况)
写直达、写回、写缓冲
(5)多级cache
第一级cache更注重速度,第二级cache更注重命中率,速度都比访问主存快得多。
(1)局部性原理
(2)存储器的层次结构
存储器层次结构:一种由多存储器层次组成的结构,存储器的容量和访问时间随着离处理器距离的增加而增加。
这样组织的原因是:利用局部性原理,使得CPU访问存储器更快
(3)主存地址映射
地址映射:应用某种函数,将主存地址映射到Cache中定位,从而可以将内存地址变换成Cache地址,完成CPU的访问。
地址映射方式也决定了CPU访问cache的方式,cache的结构,主存和cache地址交换的方式。
地址映射方式分为:全相联映射 、直接映射 、组相联映射。
注意主存到cache的存储信息交换的单位是块,CPU访问cache时都是先找块地址,而不是找具体数据地址。数据对应的块在cache内,则必然数据也在cache内
(4)写操作的处理
(5)虚拟存储器
在仅仅考虑cache和主存的关系时,不需要考虑虚拟存储的问题,直接认为cache和主存进行交互,CPU给的是主存物理地址即可。
如果考虑虚拟存储器,那么就引入了多进程概念了,开始考虑主存和磁盘之间的映射。页表启动!
cache是主存的cache,主存是磁盘的cache。
虚拟存储器:一种将主存用作辅助存储器高速缓存的技术。实际上就是让各进程认为自己有一个单独的地址空间。
主存到磁盘的存储信息交换的单位是页,页远大于块。
也采用写回的方式,因为访问磁盘开销太大了。
ps:cache和页表都有引用位和脏位,cache的全相联部分和页表的引用位用于选择替换谁,引用位为1表示最近被使用了,优先不被替换。脏位表示被替换的时候是否写回。
Q:为什么磁盘页要以全相联方式放置在内存中?不使用cache的组相联之类的?
因为磁盘访问开销太大了,我们尽可能不替换它,页表的存在可以使得直接找到磁盘页在内存的位置,因此使用全相联尽量保证替换的次数最少,放置再次访问磁盘。
(1)数据冒险:
当一条指令依赖于前一条指令的执行结果,但前一条指令的结果尚未计算完成时,后续指令已经开始执行。这种情况下,后续指令无法获取正确的数据,可能导致错误的执行结果。
简单来说就是,后面的指令需要用到前面指令写的数据,但前面指令还没写时,导致后面指令使用了旧值,导致错误。
(黑书定义:因无法提供指令执行所需数据而导致指令不能在预定的时钟周期内执行的情况。)
(2)解决方式
(3)解决控制冒险的方法:
①假定分支不发生:假定不会发生跳转,正常顺序执行
②缩短分支的延迟:将beq指令的判断提前到ID阶段
③动态分支预测
将数据均分成十组内部进行排序之后,使用多路归并排序
这里是多路归并排序问题:使可以用分治归并 或 使用优先队列合并
。
可以参考力扣题目:23. 合并 K 个升序链表
个人题解:23. 合并 K 个升序链表
BST、AVL、红黑树、B树都是用来查找的树形结构,他们都有增删改查的操作。但是它们使用的场景不一样,面试时主要是问红黑树和B树。
这些查找都是树形查找,由于对数底对时间复杂度不影响,所以这些树查找的平均时间复杂度都是O(logn),但为什么我们使用场景不一样呢?
我们需要进行磁盘中信息的索引时,比如数据库索引(比如主键索引)和文件索引,我们需要快速且访问磁盘次数尽可能少的算法,因为磁盘的I/O时间长,导致计算机性能瓶颈。
B树,多叉树,我们可以在一个结点中存储更多的儿子信息,也就是索引信息。相当于我一次磁盘检索就可以找到更多的索引信息,比二叉树两个信息更多!虽然时间复杂度跟底数没关系,但是在磁盘访问上,可以看出有很大的区别。我们可以一个可以存多个儿子的位置,实现多路查询!因为这样的话我们访问了一个结点就能有更多的磁盘信息,访问磁盘次数比二叉树查找少得多!
那红黑树又比AVL好在哪儿呢?嗯?
(1)使用场景
B树是一种自平衡的树数据结构
主要用于存储系统中的索引和数据库管理系统中。
(2)优点
效率高,高效的查找性能
优化磁盘I/O,更多的信息
动态扩展
(3)能够维护什么样的操作
增删改查,顺序遍历
(1)使用场景
关联数组:红黑树可以用来实现标准库中的关联数组数据结构,如 C++ 中的 std::map
、std::set
和 Java 中的 TreeMap
、TreeSet
。这些结构通常使用红黑树来维持元素的有序状态。
内存管理:某些类型的内存管理算法使用红黑树来维护内存块的各种大小,以便快速分配和释放内存。
数据库:数据库系统中的索引经常使用红黑树来快速查找记录。
B树更适合大数据量的磁盘存储场景,而红黑树可能更适合内存中的数据结构管理。
(2)优点
自平衡:红黑树通过在树中插入和删除节点时的旋转和重新着色,保持树的平衡,确保最长路径不会超过最短路径的两倍。这意味着树大致上是平衡的。
效率:操作如插入、删除和查找都可以在 O ( log n ) O(\log n) O(logn)时间内完成,其中 n n n 是树中的节点数。这对于动态数据集合(即频繁修改的数据)特别重要。
效率高B树和红黑树都有奥。
(3)能够维护什么样的操作
增删改查,顺序遍历
(1)prim算法和Kruskal算法分别适合场景?
Prim算法:稠密图,时间复杂度
O
(
n
2
)
O(n^2)
O(n2),堆优化是
O
(
n
l
o
g
n
+
e
)
O(nlogn+e)
O(nlogn+e)
Kruskal算法:稀疏图,时间复杂度
O
(
e
l
o
g
e
)
O(eloge)
O(eloge)
Kruskal是使用边排序和并查集,边排序相当于时间复杂度约束于边的条数,如果有一亿个图顶点,但是是边很少的稀疏图,那么Kruskal会比prim快,所以Kruskal很适合稀疏图,因为点多边少对他有利。
(2)邻接矩阵存图时使用哪种算法
邻接矩阵常存储稠密图,使用Prim算法
第一个是因为邻接矩阵常存储稠密图;
第二个是因为使用Kruskal需要得到边,仍然需要对邻接矩阵进行一次遍历,时间复杂度变成了 O ( n 2 + e l o g e ) O(n^2+eloge) O(n2+eloge),它的优势没了。
而Prim算法的时间复杂度还是 O ( n 2 ) O(n^2) O(n2),因为对于每一个点都得遍历一次它的边来更新它的邻居,邻接矩阵需要 O ( n ) O(n) O(n),而选择最短顶点,每一次最坏也就 O ( n ) O(n) O(n),因此整体时间复杂度是 O ( n 2 ) O(n^2) O(n2),Kruskal还多了 e l o g e eloge eloge,且需要的空间复杂度也更高。
pk,稠稀,p稠k稀
(1)集合基础
幂集
笛卡尔积
余集/补集:
A
的余集
=
E
−
A
,
E
是全集
A的余集 = E-A,E是全集
A的余集=E−A,E是全集
(2)关系:集合A与集合B上的一个二元关系
关系是
A
×
B
A×B
A×B的一个子集
R
R
R,根据幂集的数量可以知道
A
A
A、
B
B
B上一共有
2
a
b
2^{ab}
2ab个关系。
(3)A上的二元关系
若
A
=
B
A=B
A=B则,称关系为A上的二元关系。
A上的二元关系的重点种类:
for example:
(4)关系的性质
自反性:
对称性:
反对称性:反对称性,对
(
x
,
x
)
(x,x)
(x,x)没有约束
传递性:
反自反性:反自反不包含任何的
(
x
,
x
)
(x,x)
(x,x)
(5)等价关系
自反、对称、传递
(6)偏序关系
自反、反对称、传递
(7)1-1映射
满射+单射
A映射到B,B全能被映射到,则称为满射。
A的每一个都映射到一个B且映射到的B都不相同,则称为单射。
(8)集合的基数
这个原理的基本思想很直观:如果你有更多的物体要放入较少的容器中,那么至少有一个容器会包含多于一个的物体
(1)特征值(Eigenvalue)和特征向量(Eigenvector)
给定一个方阵 A A A(即行数和列数相等的矩阵),如果存在一个非零向量 v \mathbf{v} v和一个标量 λ \lambda λ,使得:
A v = λ v A \mathbf{v} = \lambda \mathbf{v} Av=λv
那么,这个标量 λ \lambda λ 称为矩阵 A A A 的一个特征值,非零向量 v \mathbf{v} v 称为对应于特征值 λ \lambda λ 的特征向量。
(2)意义
方向保持不变:
特征向量的方向在矩阵
A
A
A 的变换下保持不变,只是被拉伸或压缩。特征值
λ
\lambda
λ 描述了这种拉伸或压缩的程度。如果
λ
\lambda
λ 大于1,向量在变换后被拉伸;如果
λ
\lambda
λ小于1,向量被压缩;如果
λ
\lambda
λ为负,向量的方向也会翻转。
数据降维:
在数据分析中,特征值和特征向量用于确定数据的主要变化方向。在主成分分析(PCA)中,数据集的主成分是数据协方差矩阵的特征向量,而这些主成分的重要性由其对应的特征值的大小决定。
特征向量和特征值的概念源自线性代数中的矩阵理论。对于任何方阵,特征向量和特征值描述了这个矩阵的一些内在特性。理解为什么一个矩阵可以有多个特征向量,需要从线性变换的角度来考虑。
一个方阵可以存在多个特征向量
(3)一个方阵可以有多个特征向量和特征值
具体原因包括:
特征多项式:特征值是方阵 A A A的特征多项式的根。特征多项式是一个 n n n阶多项式,对于 n × n n \times n n×n 的矩阵,理论上可以有多达 n n n 个根,这些根可以是实数或复数,可以是不同的或重复的。
特征空间:每个特征值 λ \lambda λ 都对应一个特征空间,该空间由满足 ( A − λ I ) ⋅ v = 0 (A - \lambda I) \cdot v = 0 (A−λI)⋅v=0 的所有向量$v¥构成(这里 I I I 是单位矩阵)。特征空间可能包含多个线性独立的特征向量,特别是在特征值是重根的情况下。
维数:每个特征值的特征空间的维数被称为该特征值的代数重数。如果一个特征值的代数重数大于1,那么它的特征空间中将存在多个线性独立的特征向量。
(4)考虑一个简单的 2 × 2 2 \times 2 2×2 方阵:
A
=
[
4
1
0
3
]
A =
对应的特征多项式是
(
4
−
λ
)
(
3
−
λ
)
=
0
(4 - \lambda)(3 - \lambda) = 0
(4−λ)(3−λ)=0,解出来的特征值是
λ
1
=
4
\lambda_1 = 4
λ1=4 和
λ
2
=
3
\lambda_2 = 3
λ2=3。对每个特征值求解
(
A
−
λ
I
)
v
=
0
(A - \lambda I)v = 0
(A−λI)v=0可以得到相应的特征向量。
因此,矩阵 A A A有多个特征向量,它们分别对应于不同的特征值,或者即使是同一个特征值也可能存在多个线性独立的特征向量。这使得矩阵能够描述多维空间中的各种独立变换方向。
钻研的精神,实验的精神,求真的精神,以及知识储备。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。