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

K3知识点

提示:文章

文章目录

  • 前言
    • 一、顺序队列和链式队列
        • 题目
      • 顺序队列和链式队列的定义和特性
      • 实际应用场景
      • 顺序表
        • 题目
      • 链式队列
    • 二、AVL树
    • 三、红黑树
    • 四、二叉排序树
    • 五、树的概念
      • 题目1
      • 左子树
      • 右子树
      • 前序遍历、中序遍历,后序遍历
      • 先根遍历、中根遍历
      • 左孩子右孩子
      • 题目2
    • 六、平衡二叉树平衡因子
    • 七、B+树
    • 六、缓存Cache存储器访问周期计算
      • 4.1 源于题目
      • 4.2 开放案例题目
      • 4.2 题目2
    • 七、哈希表二次探测及线性探测
      • 二次探测
        • 源于K3题目
        • 网上题目1
      • 线性探测
        • 网上题目2
        • 真题3
    • 八、加密算法
    • 九、开源协议
    • 十、密码学
  • 总结

前言

前期疑问:
本文目标:


K3知识点

2024年12月2日17:25:30

一、顺序队列和链式队列

题目

关于队列的说法正确的有
A、队列又叫先进先出表
B、队列是一种线性表
C、无法判断队列是否为空
D、顺序队列和链式队列是不同的两种存储方式
正确答案:ABD

疑问:

顺序队列和链式队列是两种存储方式吗?

**顺序队列和链式队列确实是两种不同的存储方式。**‌‌

顺序队列采用固定的存储空间,在读访问时非常简单,对内部元素的访问也很方便。然而,由于顺序队列的存储空间是提前设定的,当元素数量超过预设容量时,就会出现溢出现象。为了解决这个问题,顺序队列可以采用循环队列的结构,通过将队尾指针循环使用来扩展存储空间。

链式队列则通过动态申请空间来满足队列长度的大幅变动,避免了溢出问题。链式队列的存储空间是动态分配的,可以根据需要随时扩展,但访问队列内部元素不如顺序队列方便。

顺序队列和链式队列的定义和特性

  • 顺序队列‌:使用一组地址连续的存储单元存放队列中的元素。队头指针指示当前的队首元素,队尾指针指示当前的队尾元素。顺序队列的存储空间是提前设定的,可能会出现溢出问题,可以通过循环使用队尾指针来解决。
  • 链式队列‌:采用链式存储结构,通过动态申请空间来满足队列长度的大幅变动。链式队列的存储空间是动态分配的,避免了溢出问题,但访问队列内部元素不如顺序队列方便。

实际应用场景

  • 顺序队列‌:适用于元素数量相对固定且读操作频繁的场景,如固定大小的缓冲区。
  • 链式队列‌:适用于元素数量频繁变动的场景,如网络通信中的数据包处理。

顺序表

顺序表和顺序队列一样吗?

顺序表和顺序队列在定义和用途上有显著区别。

顺序表是一种线性表的存储结构,它使用一组地址连续的存储单位来依次存储线性表中的数据元素,使得逻辑上相邻的两个元素在物理位置上也相邻。顺序表的特点包括动态分配空间、支持随机访问和顺序访问,逻辑顺序与物理顺序一致,每个元素都有唯一的位置,可以通过索引直接访问‌12。

顺序队列则是队列的顺序存储结构,实际上是一种运算受限的顺序表。它使用一个向量空间来存放当前队列中的元素,通过设置两个指针(front和rear)分别指示队头元素和队尾元素在向量空间中的位置。顺序队列遵循先进先出的规则,适用于需要按顺序处理元素的场景‌

题目

以下哪个说法是正确的(A B D)
A、顺序表按下表查找的时间复杂度为O(1)
B、顺序表存储空间连续,即允许元素的随机访问
C、顺序表在使用时,长度可随意变动
D、顺序表插入变动的时间复杂度为O(n)

链式队列

源于题目:

1、 关于单向、双向链表,下列说法正确的是(多选): ABCD

A. 用单向链表作为栈的存储形式,栈操作的时间复杂度可以达到O(1)

B. 用带尾指针的单向链表作为队列的存储形式,队列操作的时间复杂度可以达到O(1)

C. 用双向链表作为队列的存储形式,队列操作的时间复杂度可以达到O(1)

D. 用双向循环链表作为队列的存储形式,队列操作的时间复杂度可以达到O(1)

上面这个题目里的关键词对我来说都是陌生的。。。。。

查找关于A选项"单向链表作为栈的存储形式"这句话的意思,找到了下面的文章,列举的数据类型比较多:

【数据结构】第 1~10 章:思维导图与重点汇总

二、AVL树

这个知识点没有看懂,参考文档:AVL树详解

上一节的二叉二叉查找树BST,若按照顺序插入,会退化为一条链。于是需要对树的结构进行调整,使得树的高度在每次插入元素后仍然能保持O(logn)的级别,这样就产生了平衡二叉树。AVL(平衡二叉树)也是一个二叉查找树,查找操作和BST一样。但是AVL的高度为O(logn),查找时间复杂度为O(logn)。

43、AVL树再平衡的方法有
A、单次旋转:向右旋转
B、两次旋转:先向左旋转再向右旋转
C、两次旋转:先向右旋转再向左旋转
D、单次旋转:向左旋转
回答错误,答案为 ABCD

三、红黑树

参考文档:红黑树入门到精通,简单看了下,文字比较多,简单理解就是为了避免二叉树变成链表,实现平衡二叉树,产生了红黑树。具体的下次再研究吧。

四、二叉排序树

二叉排序树又叫二叉搜索树、搜索二叉树、二叉排序树、排序二叉树

源于题目:

对于下列关键字序列,不可能构成某二叉排序树种一条查找路径的序列是()
A. 92, 20, 91, 34, 88, 35
B. 12, 25, 71, 68, 33, 34
C. 21, 89, 77, 29, 36, 38
D. 95, 22, 91, 24, 94, 71
答案:D

搜索文章,这篇文章有点看懂:二叉搜索树(二叉排序树)

其中关于二叉排序树的特点如下:

二叉排序树的定义和性质
二叉排序树(Binary Sort Tree),又称二叉查找树(Binary Search Tree),是一种递归定义的数据结构:

  • 左子树‌:所有节点的值都小于根节点的值。
  • 右子树‌:所有节点的值都大于根节点的值。
  • 递归性质‌:左子树和右子树也必须是二叉排序树‌5。

二叉搜索树(BST)和二叉平衡树区别

‌二叉搜索树(BST)和AVL树在结构上有所不同,但都属于二叉树的一种。

定义和特性

  • ‌**二叉搜索树(BST)**‌:二叉搜索树是一种特殊的二叉树,其中每个节点的值都大于其左子树中所有节点的值,并且小于其右子树中所有节点的值。这种结构使得二叉搜索树在查找、插入和删除操作上的时间复杂度为O(logN),但在最坏情况下会退化为链表,时间复杂度变为O(N)‌12。
  • AVL树‌:AVL树是一种自平衡的二叉搜索树,它通过旋转操作来保持树的平衡,确保任何节点的两个子树的高度差不超过1。这使得AVL树的查找、插入和删除操作的时间复杂度仍然为O(logN),但插入和删除操作需要进行复杂的旋转调整,以维持树的平衡‌

上述题目改天再做的时候突然又有点蒙,按照我最新的理解,二叉排序树的叶子结点应该都比根节点小,左节点都小于右节点。

能构成二叉搜索树的一个条件是,后面的节点值都小于第二个和第三个节点值,否则不能形成二叉搜索树。

写完上面的文字,看了下定义文字,不是二叉排序树的叶子结点应该都比根节点小,而是左子树节点的值小于根节点,右子树节点的值大于根节点

11、红黑树再平衡的方法有(ABE)
A. 单次左旋
B. 单次右旋
C. 两次旋转:先左旋再右旋
D. 两次旋转:先右旋再左旋
E. 改变颜色
答案应该是ABCDE吧
好像又是ABE
红黑树保持平衡的基本三种操作。 1 变色:红变黑 黑变红 2 左旋 3 右旋

五、树的概念

这个章节解决之前一直疑惑的几个概念:1、左子树;2、右子树;3、中序遍历;4、后序遍历;5、中根遍历

依据题目解决问题熟悉知识点

题目1

某二叉树节点的中序遍历为abcdefg,后序遍历为bdcafge,则其左子树中节点数目为()
A.4
B.2
C.5
D.3
A

看到这个题目首先要解决一个问题,就是什么是左子树?

左子树

查了资料,答,

左子树‌是指在二叉树中,以当前节点的左孩子为根节点的子树。在二叉树中,每个节点最多有两个子节点,分别称为左子节点和右子节点。左子树就是以当前节点的左孩子为根节点的子树‌

右子树

左子树:以当前节点的左孩子为根节点的子树。
右子树:以当前节点的右孩子为根节点的子树。
关系:两者都是二叉树的组成部分,且互不相交‌

前序遍历、中序遍历,后序遍历

这三个遍历方式都是按照深度优先来遍历的

参考文档:一文讲解前序遍历,中序遍历,后序遍历的遍历过程

至于前序遍历、中序遍历,后序遍历怎么记忆,方法是前中后是对应根,左右是固定左在右前面。所以前序遍历是根左右,中序遍历是左根右,后序遍历是左右根。这样就记住了遍历顺序,但是究竟细节是怎么遍历的呢,下面验证一下

先根遍历、中根遍历

源于题目

4.[多选]关于二叉树(高度和深度的起始值为1),正确的是()
A.一颗非空二叉树的先根遍历与中根遍历的顺序正好相反,则该二叉树所有节点无右孩子;
B.二叉树中每个节点的两颗子树的高度差等于1;
C.一颗具有n个节点的二叉树,其高度最多为n,最少为log2(n)
D.一颗非空二叉树的先根遍历与中根遍历的顺序正好相同,则该二叉树所有节点无左孩子;
正确答案:AD

先根遍历和先序遍历实际上是同一个概念,只是叫法不同,它们都是指的一种节点遍历算法,即按照“根节点->左子树->右子树”的顺序遍历每个节点,可记做根左右。这种遍历方式一般用于树或者二叉树中。‌

题目

某二叉树节点的中序遍历为abcdefg,后序遍历为bdcafge,则其左子树中节点数目为()
A.4
B.2
C.5
D.3

        E/     \A       G \     /   C   F/   \     B    D 

120 已知一颗二叉树,如果先序遍历的节点顺序是:KDCEFGHB,中序遍历是:CDFEGHKB,则后序遍历结果为
A. CFHGEBDK
B. CDFEGHBK
C. FGHCDEBK D. CFHGEDBK
D

自己梳理的结果如下

      K/     \D       B
/   \      
C    E/   \     F     H /
G

根据后序遍历,左右根的遍历方法,得到答案为CFGHEDBK

上述二叉树后序遍历结果和答案不一样,需要再次修改

左孩子右孩子

‌左孩子和左子树在二叉树中是不同的概念。

在二叉树中,每个节点有两个子节点,分别称为左孩子和右孩子。左孩子是指与节点直接相连的左边的子节点,而左子树是指从该节点出发向左延伸的整棵子树,包括该节点的所有左子孙节点‌。

左孩子和左子树的具体定义和区别

  1. ‌左孩子:左孩子是指与某个节点直接相连的左边的子节点。在二叉树中,每个节点最多有两个孩子,左孩子和右孩子‌12。
  2. ‌左子树:左子树是指从某个节点出发向左延伸的整棵子树,包括该节点的所有左子孙节点。左子树不仅包含左孩子,还包括左孩子的所有子孙节点‌

基于上述题目,验证答案,先验证A和D。

对于C答案,解释是二叉树高度最高的情况是每一个层只有一个结点,此时高度为N最小的情况是完全二叉树,高度是[log2N]+1,以2为底的对数取整后+1,所以高度是[log2N]+1 到 N。

完全二叉树除了拥有二叉树的基本性质外,还具有以下性质:

  1. 具有n个结点的完全二叉树的深度为 [log2n]+1 (注:[ ]表示向下取整)
  2. 满二叉树也满足这个条件

用节点数为7的满二叉树验证上述计算高度的公式,验证有效。log2(7)=2.8,向下取整为2,加1为3,树的高度也为3。

题目2

某二叉树节点的中序遍历为abcdefg,后序遍历为bdcafge,则其左子树中节点数目为()
A.4
B.2
C.5
D.3
A

这个题目把我难住了,感觉之前看的前序后序中序知识又废了,就继续查找资料,看到下面这篇文章,【数据结构】—树:中序遍历,按照他的遍历方法才更熟悉一些。

但是上述是中序遍历,至于前序遍历和后序遍历是怎么遍历的,就继续查找,找到这篇文章

精简解析:二叉树的遍历方法及其应用场景,该文章前文的题目,我自己没看答案,自己写了下,答案全对,感觉这时候对遍历就更理解了。

最后还是回到上述的题目中,尝试解决一下。

六、平衡二叉树平衡因子

平衡因子为左子树比右子树的高度差。分为1和0和-1,什么是左子树、什么是右子树?左子树就是以当前节点的左节点为根节点的子树。

明白上面的知识点,下面的题目就好处理一些了。

12、若平衡二叉树的高度为4(只有根节点的二叉树高度为1),且所有非叶节点的平衡因子均为1,则该平衡树的节点总数为
A、4
B、7
C、12
D、20
正确答案B

根据题目画出平衡二叉树的图,根据下面的图可以知道节点总数为7个。

        8/     \3       14/  \    /   2    6  15/     
1        

七、B+树

  1. 以下关于B+树的描述,正确的是 O
    A. B+树中,叶子节点之间不能顺序访问
    B. B+树查找的平均时间复杂度为O(logn)
    C. B+树中,中间节点保存了键值和数据
    D. B+树中,叶子节点只保存了数据

D选项,B+ 树非叶子节点上是不存储数据的,仅存储键值

  1. 每个非叶子节点都包含了一定数量的子节点,这使得 B+ 树具有更高的数据存储和检索效率。
  2. 所有数据都存储在叶子节点上,而非叶子节点只包含索引信息,这有助于减少磁盘 I/O 操作。
  3. 叶子节点之间通过指针连接,形成一个有序链表,方便范围查询和顺序访问。
  4. B+ 树的平衡性能保证了在数据插入和删除时树的高效性能。

B+ 树是一种高效的数据结构,适用于需要频繁插入、删除和范围查询操作的场景。

这个题目AC为什么不对还有待探究。

六、缓存Cache存储器访问周期计算

K3真题:
假定某计算机存储器中有Cache和主存(Memeory),主存按字编址。假定Cache容量为4个Cache Line,用直接相联的映射方式,按地址取模的方式映射,采用最近最少使用的(LRU,least Recent Use)替换方法。假定Cache Line的大小为1个字节,cachel的初始时为空,某程序依次访问如下地址:0,8,0,6,8时,则该程序的Cache命中率为(*)
A、60%
B、40%
C、80%
D、0%

4.1 源于题目

假定某处理器使用了L1 Cache和L2 Cache。L1 Cache的命中率为90%,L2 Cache的局部命中率为95%。L1 Cache的访问延迟为10个时钟周期,L2 Cache的访问延迟为100个时钟周期。主存的访问延迟为1000个时钟周期。那么平均存储器(AMAT,Average Memory Access Time)的访问时间为多少个周期?
A、40
B、25
C、30
D、35

这个题目不会,百度查到资料,L1 Cache, L2 Cache读取命中率与时钟周期计算,这个题目看了能懂

按照上述文章计算,machineTime=(10 * 90% ) + 100 * ( (1 - 90%) * 95%) + 1000 * ( 1- 90% - (1 - 90%) * 95% ) = 23.5个

变更:根据下面的开放案例题目,列出新的公式:

计算逻辑表,假设数据总量为1
L1L2L3
时间t=10,数据全部穿越L1t=100*(1-90%),10%的数据全部穿越L2t=1000*(1-(1-90%)*95%),10%的95%在L2中被命中,只有10%的5%到了L3
10101000*0.005=5
总共25个周期

4.2 开放案例题目

某计算机存储器层次中,存储系统由一个Cache和主存组成二级存储系统,假定Cache的存取周期为20ns,命中率为90%,希望采用Cache后的加速比等于5,那么要求主存的存取周期是(B )ns
A. 175
B. 200
C. 225
D. 250

解释:做为单选题有唯一的正确答案,可以通过解方程的方式进行求解。
加速比为5,意味着使用cache以后的访存时间是不使用cache的访存时间的 1/5,假设不使用 cache 的访问时间为 x,
使用 cache 的访问时间分两种情况讨论,90%的概率命中,所以命中时的访存时间期望值是 0.9 * 20 = 18,
10%的概率不命中,这时要先访问cache,再访问主存,所以访存的期望是 0.1 * (20 + x) = 2 + 0.1x,两者相加为 20 + 0.1x。
不使用 cache 的访存时间是使用 cache 的访存时间的 5 倍,所以x / (20 + 0.1 x) = 5
求解这个方程可得,x = 200,所以B是正确答案。

自己验证:

验证逻辑表
10(假设总量是10)x(设主存时间为x)
10(加了cache后的总量同样是10)0.2x(加速比为5,时间缩短了5倍)
得到等式:20*(90%)+20*(1-90%)+20*(1-90%)=0.2x。【这边有个疑问就是为什么还要加上20*(1-90%),这边刚才想到应该可以理解为穿越cache的数据应该是全部,由此就涉及到上面的一个题目的计算了】

2.CPU访问存储器数据过程,Cache命中时访问时间为1ns,Cache缺失率为4%,Cache不命中时的访问时间为15ns,则存储器平均访问时间为(D)
当cache命中的情况:t1 = 1ns 出现概率为96%
当cache不命中的情况:t2 = 1ns + 15ns 出现概率为4%
t = t1 * 0.96 + t2 * 0.4 = 1.6
A、1.64ns
B、1.40ns
C、1.44ns
D、1.60ns

4.2 题目2

其他网上题目:存储系统Cache命中率问题——计算机组成原理,上述这个题目的第一个问我知道怎么做,第二个问题跟我想的不一样,【2024年12月20日12:39:46 今天再看一下第二题就是涉及了一个新的公式而已】。

文章提到的第一个题目,408真题:
在Cache和主存构成的两级存储体系中,主存与Cache同时访问,Cacge的存取时间是100ns,主存的存取时间是1000ns,设Cache和主存同时访问,若希望有效(平均)存取时间不超过Cache存取时间的115%,则Cache命中率至少应该为多少?

解:
分析:若Cache命中率为x那么主存命中率即为(1-x)。 即命中Cache了那么就不命中主存了。

假设命中率为x,可得100x+1000(1-x)<=100*(1+15%)

简单计算后得结果:

x >= 59/60

所以,Cache的命中率x至少应该为59/60,或者约为0.9833,即98.33%。

这个题目和上述两个题目的计算方式就不一样了。这个题目没有将数据全部穿越Cache的时间全算上。而是只算了cache命中的90%。我觉得可能是因为这句话【设Cache和主存同时访问】。

这篇文章中的写操作描述的就是我所表述的这种情况吧。同时文中还表述了平均访问时间和访问效率的计算公式。存储系统Cache(知识点+例题)

计算机组成原理求Cache的命中率相关练习题

计算机组成原理Cache例题

b站视频学习:【计组 | Cache】30min带你狠狠拿捏Cache所有知识与题型方法

根据上述b站视频笔记:
三种映射方式:
1、直接映射:要求主存的每一个块只能映射到Cache中的一个固定位置,cpu访问某个特定行即可。
2、全相联映射:允许主存的任何一个块映射到Cache中的任何一个位置。
3、组相联映射:结合了全相联和直接映射的优点。它将Cache分成若干组,每组包含多个块。主存的块可以映射到特定的组中,但组内的块位置是固定的。

地址结构:

直接映射主存地址结构|标记|cache行号|块内地址|
全相联映射主存地址结构|标记|块内地址|
组相联映射主存地址|标记|组号|块内地址|

主存块号即去除块内地址的部分

七、哈希表二次探测及线性探测

二次探测

源于K3题目

哈希表有14个桶,哈希函数为h(key) = key % 11。表中先后插入了数据30、48、66、18、74和96,如果采用二次探测法处理冲突,则新数据31的位置(从0开始计数)是(C 11)

A、10 B、12 C、11 D、9

解析:

H(30) = 8
H(48)=4
H(66)=0
H(18)=7
H(74)=8,冲突二次探测,H=(H(74) + 1) MOD 14 = 9
H(96)=8,冲突二次探测,H=(H(96) + 1) MOD 14 = 9,冲突H=(H(96) - 1) MOD 14 = 7,冲突;H=(H(96) + 4) MOD 14 = 12
H(31)=9,冲突二次探测,H=(H(31) + 1) MOD 14 = 10

在hash表中的存储情况如下

012345678910111213
66481830743190

正确答案C,应该是表达的位置吧。10号索引对应11号位置。

网上题目1

21.设哈希表长为14哈希函数是H(key)=key%11,表中已有数据的关键字为15,38.61.84共四个,现要将关键字为49的结点加刭表中,用二次探测再散列法解决冲突,则放入的位置是:9

题目链接:设哈希表长为14,哈希函数为h(key)=key%11。表中

解析:

在这里插入图片描述

线性探测

题目

34、有一系列整数7、30、11、18、9,采用的散列函数为 H(Key)=(key*3)% 7,将这些数据按序散列到表长为10的哈希表中存储(位置从0开始计算)。若采用线性探测法解决冲突,则以下说法正确的是(BCD)?

A、18插在第6个位置

B、11插在第5个位置

C、9插在第8个位置

D、7插在第0个位置

这个题目11和18发生冲突,11的位置为H(11)=(11*3)%7=5; H(18)=(18*3)%7=5。这个时候只需要放在第6个位置就行了。如果第6个位置有值,会放在第7个位置就了。

网上题目2

关于散列表的题目

真题3

有一系列整数7、30、11、18、9,采用的散列函数为 H(Key)=(key*3)% 7,将这些数据按序散列到表长为10的哈希表中存储(位置从0开始计算)。若采用线性探测法解决冲突,则以下说法正确的是(ABD)?

A.9插在第8个位置
B.11插在第5个位置
C.18插在第6个位置
D.7插在第0个位置

有一系列整数31,18,67,56,45,40,采用散列函数为H(key)=key % 7,将这些数据散列表长为7的哈希表中存储,若采用线性探测法解决冲突,则在该散列表上进行等概率成功查找的平均查找长度可能为:D

A. 1.33
B. 1.5
C. 2
D. 2.17
链表法解决冲突 A (1+1+2+1+2+1)/ 6 =1.33 链表只有取余相同才会冲突

八、加密算法

源于题目:

用户口令在不需要还原的情形下,使用以下哪种算法比较适合存储?
A、SHA512
B、SHA1
C、PBKDF2
D、RSA
回答错误,答案为 C

参考文档:存储用户密码应该使用什么加密算法?比较合适

九、开源协议

  1. BSD类如Apache/BSD/MIT等 典型软件:Tomcat,OpenSSL 触发代码开源义务前提条件:无 开源要求和范围:无 规避开源方式:不涉及
  2. MPL类如:MPL/EPL等 典型软件:FireFox,Eclipse 触发代码开源义务前提条件:产品集成使用该软件,并对外分发或销售产品对该软件进行了修改 开源要求和范围:若无修改,则无需开源;若对其进行了修改,需将修改的部分开源 规避开源方式:使用时不做任何修改
  3. GPL类: LGPL 典型软件:Hibernate,glibc 触发代码开源义务前提条件:产品集成使用该软件,并对外分发或销售 开源要求和范围:软件本身须开源。具有传染性,与其静态链接部分的代码也必须以LGPL许可开源;动态链接则不被传染。 规避开源方式:动态链接使用,仅开源其软件本身即可,产品代码可免受传染。
  4. GPL类: GPL 典型软件:Busybox,linux kernel 触发代码开源义务前提条件:产品集成使用该软件,并对外分发或销售 开源要求和范围:软件本身须开源。 具有传染性,与其有链接关系的代码都必须以GPL许可对外开源,即与该软件在同一进程中运行的代码都必须开源 规避开源方式:进程隔离,独立于产品进程运行,仅开源其软件本身即可,产品代码可免受传染
  5. GPL类: AGPL相当于给GPL加了(Add)一个补丁,变成AGPL 典型软件:Berkeley_DB 触发代码开源义务前提条件:产品集成使用该软件 开源要求和范围:在GPL上增加了一条限制:即便不对外分发,只要在网络服务器上使用AGPL软件提供网络服务,就需要履行相关开源义务。例如: Berkeley_DB,即使没有“分发”动作,通过WEB形式为用户提供服务,也要履行对外开源义务。 规避开源方式:同GPL
  6. GPL类: SSPL 典型软件:MongoDB 触发代码开源义务前提条件:产品将该软件做为服务或利用该软件的能力向公司外的第三方提供服务 开源要求和范围:软件本身须开源。 具有传染性,使用开源软件相关的服务组件也要开源。相对AGPL,任何试图将开源软件作为服务加以利用的组件,都必须开放用于提供此类服务的软件的源代码。 规避开源方式:谨慎使用! 对于使用SSPL协议软件,向第三方提供服务会导致软件包整体开源。只能向公司内部人员开放。

十、密码学

源于题目

基于《密码算法应用规范》,Hash长度扩展攻击可以用下面哪些方法进行防护
A、HMAC-SHA2-256
B、RSA-SHA2-256
C、AES-GCM
D、HMAC-MD5
回答错误,答案为 ACD

导致hash扩展攻击的根源是采用MAC = H(key ∥ message)的方式生成MAC。 HMAC算法采用H(key ∥ H(key ∥ message))的方式获得MAC,消除了这个问题。因此C、D都对。 参见https://en.wikipedia.org/wiki/HMAC

而AES-GCM算法在计算MAC时,每一个密文分组都参与了MAC计算。攻击者在不知道密钥时,应该无法运算出扩展消息的MAC值。

基于《密码算法应用规范》,Hash长度扩展攻击可以用下面哪些方法进行防护

根据《密码算法应用规范》中提到的Hash长度扩展攻击(Hash length extension attack),这是一种基于HMAC(散列消息认证码)的攻击,它允许攻击者在不知道密钥的情况下修改消息的哈希值。

为了防护这种攻击,可以采用以下方法:

  1. 使用安全的哈希算法,如SHA-256或SHA-512。
  2. 使用密钥派生函数(如HKDF)来生成密钥。
  3. 使用库函数,如HMAC,它们通常内置了对抗长度扩展攻击的保护机制。
  4. 监测日志或网络流量,如果发现异常,应立即更换密钥。

以下是一个使用Python的HMAC示例代码,它应用了安全的哈希算法和密钥派生方法来防护Hash长度扩展攻击:


总结

未完待续

相关文章:

K3知识点

提示&#xff1a;文章 文章目录 前言一、顺序队列和链式队列题目 顺序队列和链式队列的定义和特性实际应用场景顺序表题目 链式队列 二、AVL树三、红黑树四、二叉排序树五、树的概念题目1左子树右子树前序遍历、中序遍历&#xff0c;后序遍历先根遍历、中根遍历左孩子右孩子题目…...

cocos creator 3.x版本如何添加打开游戏时首屏加载进度条

前言 项目有一个打开游戏时添加载入进度条的需求。这个功能2.X版本是自带的&#xff0c;不知为何在3.X版本中移除了。 实现 先说一下解决思路&#xff0c;就是在引擎源码加载场景的位置插入一个方法&#xff0c;然后在游戏入口HTML处监听即可。 1.找到对应源码脚本 在coco…...

Fama MacBeth两步法与多因子模型的回归检验

Fama MacBeth两步法与多因子模型的回归检验 – 潘登同学的因子投资笔记 本文观点来自最近学习的石川老师《因子投资&#xff1a;方法与实践》一书 文章目录 Fama MacBeth两步法与多因子模型的回归检验 -- 潘登同学的因子投资笔记 多因子回归检验时序回归检验截面回归检验Fama–…...

IDEA 搭建 SpringBoot 项目之配置 Maven

目录 1?配置 Maven 1.1?打开 settings.xml 文件1.2?配置本地仓库路径1.3?配置中央仓库路径1.4?配置 JDK 版本1.5?重新下载项目依赖 2?配置 idea 2.1?在启动页打开设置2.2?配置 Java Compiler2.3?配置 File Encodings2.4?配置 Maven2.5?配置 Auto Import2.6?配置 C…...

node.js之---事件循环机制

事件循环机制 Node.js 事件循环机制&#xff08;Event Loop&#xff09;是其核心特性之一&#xff0c;它使得 Node.js 能够高效地处理大量并发的 I/O 操作。Node.js 基于 非阻塞 I/O&#xff0c;使用事件驱动的模型来实现异步编程。事件循环是 Node.js 实现异步编程的基础&…...

Python OpenAI 库开发指南:从入门到实战精通

在人工智能&#xff08;AI&#xff09;领域&#xff0c;OpenAI无疑是全球最受瞩目的机构之一。它推出的GPT系列模型、DALLE等创新技术&#xff0c;正在深刻改变各行各业。作为Python开发者&#xff0c;我们该如何快速上手并高效利用OpenAI的API&#xff0c;成为了提升个人竞争力…...

flash-attention保姆级安装教程

FlashAttention安装教程 FlashAttention 是一种高效且内存优化的注意力机制实现&#xff0c;旨在提升大规模深度学习模型的训练和推理效率。 高效计算&#xff1a;通过优化 IO 操作&#xff0c;减少内存访问开销&#xff0c;提升计算效率。 内存优化&#xff1a;降低内存占用…...

送给一年编程道路的自己

回望过去一年在编程道路上的成长与收获&#xff0c;是一个很有意义的过程。总结自己这一年的编程经历&#xff0c;不仅可以帮助你更清晰地了解自己的进步和不足&#xff0c;还能为未来的发展指引方向。以下是一些可能的收获&#xff0c;供你参考&#xff1a; 1. 技能提升 语言…...

LeRobot(1)

Train python lerobot/scripts/train.py \ policyact \ envaloha \ env.taskAlohaInsertion-v0 \ dataset_repo_idlerobot/aloha_sim_insertion_human \ load_data一直报错&#xff0c;忘记截图了&#xff0c;反正是ssh报错&#xff0c;下不下来&#xff0c;网…...

C++ 设计模式:组合模式(Composite Pattern)

链接&#xff1a;C 设计模式 链接&#xff1a;C 设计模式 - 迭代器模式 链接&#xff1a;C 设计模式 - 职责链模式 组合模式&#xff08;Composite Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许你将对象组合成树形结构来表示“部分-整体”的层次结构。组合模式…...

OpenHarmony源码编译后烧录镜像教程,RK3566鸿蒙开发板演示

本文介绍瑞芯微主板/开发板编译OpenHarmony源码后烧录镜像的教程&#xff0c;触觉智能Purple Pi OH鸿蒙开发板演示。搭载了瑞芯微RK3566四核处理器&#xff0c;树莓派卡片电脑设计&#xff0c;支持开源鸿蒙OpenHarmony3.2-5.0系统&#xff0c;适合鸿蒙开发入门学习。 编译源码…...

强化学习(1)

Reinforcement Learning Goal-directed learing from ineraction with the environment. 1. Basic Element 基本元素 1.1 Agent 玩家 1.2 Environment 1.3 Goal 2. Main Element 主要元素 2.1 State 2.2 Action 状态与行为往复 2.3 Reward 目标&#xff1a;最大化总…...

【漏洞复现】金和OA C6 FileDownLoad.aspx 任意文件读取漏洞复现

免责声明 请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。工具来自网络,安全性自测,如有侵权请联系删除。本次测试仅供学习使用,如若非法他用,与平台和本文作…...

开源模型应用落地-qwen2-7b-instruct-LoRA微调-Axolotl-单机多卡-RTX 4090双卡(七)

一、前言 本篇文章将使用Axolotl去高效微调QWen2系列模型,通过阅读本文,您将能够更好地掌握这些关键技术,理解其中的关键技术要点,并应用于自己的项目中。 二、术语介绍 2.1. LoRA微调 LoRA (Low-Rank Adaptation) 用于微调大型语言模型 (LLM)。 是一种有效的自适应策略,…...

Dockerfile 构建继承父镜像的 ENTRYPOINT 和 CMD

在 Docker 中&#xff0c;Dockerfile 是否继承其父映像的 ENTRYPOINT 和 CMD&#xff0c;取决于 Dockerfile 的编写方式。以下是规则&#xff1a; 1. CMD 的继承 子镜像会继承父映像的 CMD&#xff0c;但如果在子镜像的 Dockerfile 中显式定义了新的 CMD&#xff0c;就会覆盖…...

46. Three.js案例-创建颜色不断变化的立方体模型

46. Three.js案例-创建颜色不断变化的立方体模型 实现效果 知识点 Three.js基础组件 WebGLRenderer THREE.WebGLRenderer是Three.js提供的用于渲染场景的WebGL渲染器。它支持抗锯齿处理&#xff0c;可以设置渲染器的大小和背景颜色。 构造器 antialias: 是否开启抗锯齿&am…...

Linux系统离线部署MySQL详细教程(带每步骤图文教程)

1、登录官网下载对应的安装包 MySQL :: Developer Zone 2、将压缩包上传到服务器上&#xff0c;这里直接上传到/usr/local路径上 使用sftp工具上传到/usr/local目录上 3、解压压缩包 tar -xf mysql-8.0.39-linux-glibc2.17-x86_64.tar.xz 4、将mysql-8.0.39-linux-glibc2.17…...

【数据仓库】hive on Tez配置

hive on Tez 搭建 前提是hive4.0hadoop3.2.2数仓已搭建完成&#xff0c;现在只是更换其执行引擎 为Tez。搭建可参考【数据仓库】hive hadoop数仓搭建实践文章。 Tez 下载 下载地址 https://archive.apache.org/dist/tez/ 官网地址 https://tez.apache.org/releases/apac…...

Kubernetes Gateway API-3-TLS配置

1 简介 Gateway API 允许使用多种方式配置 TLS。本文档列出了各种TLS设置,并给出了如何有效使用它们的一般指南。 尽管本文档涵盖了 Gateway API 最常见的TLS配置形式,但某些实现也可能提供特定于实现的扩展,允许不同或更高级形式的TLS配置。除此文档外,值得阅读你所使用…...

C++ 设计模式:原型模式(Prototype Pattern)

链接&#xff1a;C 设计模式 链接&#xff1a;C 设计模式 - 工厂方法 链接&#xff1a;C 设计模式 - 抽象工厂 链接&#xff1a;C 设计模式 - 建造者模式 原型模式&#xff08;Prototype Pattern&#xff09;是一种创建型设计模式&#xff0c;它允许一个对象通过复制现有对象来…...

计算机网络 (12)物理层下面的传输媒体

前言 计算机网络物理层下面的传输媒体是计算机网络设备之间的物理通路&#xff0c;也称为传输介质或传输媒介&#xff0c;并不包含在计算机网络体系结构中&#xff0c;而是处于物理层之下。 一、传输媒体的分类 导向型媒体&#xff1a;电磁波被导引沿着固体媒体传播。常见的导向…...

SpringCloud 系列教程:微服务的未来(三)IService接口的业务实现

本文将介绍 IService 接口的基本业务操作、复杂业务操作、Lambda 方法的使用以及批量增加操作&#xff0c;帮助开发者深入了解如何高效地利用 MyBatis-Plus 提供的功能进行数据库操作。无论是简单的单表查询&#xff0c;还是复杂的多表联动&#xff0c;甚至是大数据量的批量操作…...

测试带宽上行方法

测试宽带上行速度的软件有多种&#xff0c;以下是一些常见的选择&#xff1a; Speedtest 平台支持&#xff1a;iOS、Android、Windows、MacOS等 特点&#xff1a;全球知名的网络测速软件&#xff0c;测试结果准确&#xff0c;支持多平台。用户可以选择最近的服务器进行测试&am…...

天天跳绳(???)

广东省人民政府门户网站 https://www.gd.gov.cn/zwgk/zdlyxxgkzl/whjg/content/post... 二沙岛变身智能“运动岛” - 广东省人民政府门户网站 2020年10月20日  广州二沙岛&#xff0c;犹如一颗璀璨明珠点缀在珠江之心&#xff0c;自然风光旖旎&#xff0c;功能分区清 … 公共…...

module ‘django.db.models‘ has no attribute ‘FieldDoesNotExist‘

module ‘django.db.models’ has no attribute ‘FieldDoesNotExist’ xadmin报错 原因 django与xadmin版本不匹配。 django==3.2.7 xadmin-django==3.0.2解决方案 在xadmin/view/edit.py的388行改为 from django.core import exceptions if self.request_method ==...

智能工厂的设计软件 应用场景的一个例子:为AI聊天工具添加一个知识系统 之10 方案再探之1:特定于领域的模板 之1 随想交流

前面的项目再次不能继续。不得已再一次重新建了这个项目&#xff0c;并以当前修改版本的项目文件为附件开始了今天的沟通。所以 标明是“方案再探” 在新建这个项目的同时&#xff0c;就将项目文件作为附件添加进去&#xff0c;然后开始。 文件链接&#xff1a;智能工厂的设计…...

Excel将混乱的多行做成1列

前提&#xff1a;需要excel有textjoin函数&#xff0c;这个函数&#xff0c;根据百度说是在2016之后的版本才说&#xff0c;功能比较强大。 目标是将数据按从左到右&#xff0c;再从上到下排成一列。 公式法 首先用textjoin函数将文本包起来&#xff0c;做成一个超长文本。 然…...

Django项目部署到服务器

文章目录 django项目部署到服务器在服务器上安装Django和依赖&#xff1a;项目代码上传配置数据库收集静态文件配置Web服务器配置Gunicorn&#xff08;WSGI服务器&#xff09;启动/停止/重载systemd服务。 django项目部署到服务器 在服务器上安装Django和依赖&#xff1a; su…...

SpringBoot集成Flowable

一、工作流介绍 1、概念 通过计算机对业务流程的自动化管理。工作流是建立在业务流程的基础上&#xff0c;一个软件的系统核心根本上还是系统的业务流程&#xff0c;工作流只是协助进行业务流程管理。 解决的是&#xff1a;在多个参与者之间按照某种预定义的规则自动进行传递…...

大模型从零开始——预训练之分词 Tokenization

文章目录 一、概念介绍 二、单词级别分词 三、字符级别分词 四、子词级别分词 BPE/BBPE分词 BPE&#xff1a;Byte-Pair Encoding (BPE) BBPE&#xff1a;Byte-level BPE (BBPE) WordPiece分词 Unigram分词 五、总结 词元化&#xff08;Tokenization&#xff09;是数据预处…...