软件设计师-软考知识复习(1)
写在前面
复习软考,把一些忘记了的知识整理一下,方便后续查看。
设码长为8,补码为11111111,其真值是多少( )
A.1 B.-1 C.127 D.128
参考答案:B
解题步骤
1. 理解补码表示法
在计算机中,补码(Two’s Complement) 用于表示有符号整数。其规则如下:
- 最高位(最左边的一位)是符号位:
0
表示正数1
表示负数
- 正数的补码:等于其二进制原码(直接转换)。
- 负数的补码:符号位为
1
,数值部分取反加1
(即“补码”)。
2. 分析给定的补码
给定的补码是 11111111
(8位):
- 符号位:
1
(表示负数) - 数值部分:
1111111
(后7位)
3. 补码 → 真值的转换
由于补码是 11111111
(负数),我们需要求其原码,再计算真值。
补码转原码的方法(负数):
- 补码 → 反码:补码
-1
- 反码 → 原码:符号位不变,其余位取反
计算过程:
- 补码:
1 1111111
- 补码 -1(得到反码):
1 1111110
- 反码取反(得到原码):
1 0000001
原码:1 0000001
- 符号位:
1
(负数) - 数值部分:
0000001
(即1
)
真值:-1
4. 验证
我们也可以通过补码的定义验证:
- 补码 = 2^n - |x|(n 是位数,x 是真值)
- 8位补码的范围:
-128
到127
11111111
(补码)对应的真值计算:- 补码的十进制值:
1×2^7 + 1×2^6 + ... + 1×2^0 = 255
- 真值 =
255 - 2^8 = 255 - 256 = -1
- 补码的十进制值:
结果一致,真值为 -1
。
为实现海明码纠错,对于16位信息位,至少需要附加多少个校验位( )
A.4 B.5 C.6 D.7
参考答案:B
海明码(Hamming Code)校验位计算
海明码是一种纠错编码,它通过添加校验位(Parity Bits)来检测和纠正数据传输中的错误。对于给定的信息位长度,我们需要计算最少需要多少校验位才能实现单比特纠错(SEC, Single Error Correction)。
海明码校验位计算公式
海明码要求:
-
校验位的位置:必须是 2 的幂次方(即 ( 2^0, 2^1, 2^2, …))。
-
纠错能力:每个校验位覆盖特定的数据位,使得任何单比特错误都能被唯一识别。
-
校验位数量 ( r ) 必须满足:
2^r >= m + r + 1
- ( m ) = 信息位长度(本题 ( m = 16 ))
- ( r ) = 校验位数量
计算步骤
我们需要找到最小的 ( r ) 使得:
2^r >= 16 + r + 1
即:
2^r >= r + 17
尝试不同的 ( r ):
-
( r = 4 )
2^4 = 16 >= 4 + 17 = 21 \quad \text{❌(16 < 21,不满足)}
-
( r = 5 )
2^5 = 32 >= 5 + 17 = 22 \quad \text{✅(32 ≥ 22,满足)}
-
( r = 6 )
2^6 = 64 >= 6 + 17 = 23 \quad \text{✅(64 ≥ 23,但 ( r = 5 ) 已经满足)}
最小的 ( r ) 是 5,因为:
- ( r = 4 ) 不满足 ( 16 \geq 21 ),
- ( r = 5 ) 满足 ( 32 \geq 22 )。
验证
- 海明码总位数 = 信息位 + 校验位 = ( 16 + 5 = 21 )。
- 纠错能力:
- 5 个校验位可以表示 ( 2^5 = 32 ) 种状态。
- 其中 21 位用于数据 + 校验,剩余 11 种状态用于错误检测(足够覆盖所有单比特错误)。
构造一个5层的二叉平衡树,至少需要多少个结点( )
A.11 B.12 C.15 D.16
参考答案:B
关键概念
-
平衡二叉树(AVL 树):
- 任意结点的左右子树高度差不超过 1(即平衡因子 ( \in {-1, 0, 1} ))。
- 最小结点数的平衡二叉树类似于 斐波那契树(Fibonacci Tree)。
-
高度 ( h ) 的平衡二叉树的最小结点数 ( N(h) ):
-
递推关系:
N(h) = N(h-1) + N(h-2) + 1
-
初始条件:
N(0) = 0, \quad N(1) = 1
-
计算最小结点数
我们需要计算 高度 ( h = 5 ) 的平衡二叉树的最小结点数 ( N(5) )。
递推计算:
N(0) &= 0
N(1) &= 1
N(2) &= N(1) + N(0) + 1 = 1 + 0 + 1 = 2
N(3) &= N(2) + N(1) + 1 = 2 + 1 + 1 = 4
N(4) &= N(3) + N(2) + 1 = 4 + 2 + 1 = 7
N(5) &= N(4) + N(3) + 1 = 7 + 4 + 1 = 12
验证
- 高度 ( h = 5 ) 的最小平衡二叉树结构:
- 左子树:高度 4,结点数 7
- 右子树:高度 3,结点数 4
- 根结点:1
- 总结点数:( 7 + 4 + 1 = 12 )
数据库的恢复操作,主要依靠什么特性( )
A.约束 B.存储 C. 存取控制 D.冗余
参考答案:D
数据库恢复操作的关键特性
数据库的恢复(Recovery)是指当数据库发生故障(如系统崩溃、事务失败、磁盘损坏等)后,能够将数据库恢复到一致状态的过程。恢复操作的核心依赖于以下特性:
1. 冗余(Redundancy)
- 日志(Logging):数据库系统会记录所有事务的修改操作(如
UNDO
和REDO
日志),这些日志存储在冗余的存储介质上(如磁盘)。 - 检查点(Checkpoint):定期保存数据库的一致性快照,减少恢复时需要处理的数据量。
- 数据备份(Backup):定期备份数据库,以便在严重故障时恢复。
冗余是恢复的基础,因为:
- 日志和备份提供了历史操作记录,使得可以回滚未提交的事务或重做已提交的事务。
- 如果没有冗余(如日志或备份),数据库在故障后无法恢复。
2. 其他选项分析
- A. 约束(Constraints)
- 用于保证数据的完整性(如主键、外键、唯一性约束),但不直接用于恢复。
- B. 存储(Storage)
- 存储是数据库的基础,但恢复的关键是如何利用存储的冗余信息(如日志),而非存储本身。
- C. 存取控制(Access Control)
- 用于管理用户权限,与恢复无关。
在TCP/IP协议体系结构中,根据IP地址得到MAC地址使用的协议是( )
A.DNS B.ARP C. RARP D.TCP
参考答案:B
关键概念
-
IP地址 vs MAC地址
- IP地址:逻辑地址,用于网络层(如IPv4、IPv6),标识主机在网络中的位置。
- MAC地址:物理地址,用于数据链路层(如以太网),标识网卡的唯一硬件地址。
-
地址解析的需求
- 在局域网(LAN)中,数据包最终要通过MAC地址传输,但上层协议(如TCP/IP)使用的是IP地址。
- 因此,需要一种机制将IP地址映射到MAC地址。
相关协议分析
协议 | 全称 | 作用 | 是否匹配题目要求 |
---|---|---|---|
DNS | Domain Name System | 将域名解析为IP地址(如 www.example.com → 192.0.2.1 ) | ❌(不涉及MAC地址) |
ARP | Address Resolution Protocol | 根据IP地址查询MAC地址(如 192.0.2.1 → 00:1A:2B:3C:4D:5E ) | ✅(题目要求的协议) |
RARP | Reverse ARP | 根据MAC地址查询IP地址(反向ARP,现已很少使用) | ❌(与题目要求相反) |
TCP | Transmission Control Protocol | 提供可靠的端到端数据传输(如HTTP、FTP依赖TCP) | ❌(不涉及地址解析) |
为什么是ARP?
- ARP(Address Resolution Protocol)是专门用于在局域网(LAN)中根据IP地址查找MAC地址的协议。
- 工作流程:
- 主机A想发送数据给主机B(已知B的IP地址,但不知道MAC地址)。
- 主机A发送ARP请求广播(“谁的IP是
192.0.2.1
?请告诉我你的MAC地址”)。 - 主机B收到后,回复ARP响应(“我是
192.0.2.1
,我的MAC是00:1A:2B:3C:4D:5E
”)。 - 主机A将
192.0.2.1
和00:1A:2B:3C:4D:5E
的映射存入ARP缓存表,后续通信直接使用。
排除其他选项
- DNS:解析域名→IP,不涉及MAC地址。
- RARP:功能与ARP相反(MAC→IP),且已被DHCP取代。
- TCP:传输层协议,与地址解析无关。
中缀(1+(2-3*4))/5转后缀,存储运算符的栈最多有几个元素?
A.3 B.4 C. 5 D.6
参考答案:C
中缀转后缀的规则
- 操作数:直接输出到后缀表达式。
- 运算符:
- 若栈为空或栈顶为
(
,直接入栈。 - 否则,比较当前运算符与栈顶运算符的优先级:
- 若当前运算符优先级≤栈顶运算符,则弹出栈顶运算符到输出,直到不满足条件,再入栈。
- 若当前运算符优先级**>**栈顶运算符,直接入栈。
- 若栈为空或栈顶为
- 括号:
(
直接入栈。)
弹出栈内运算符到输出,直到遇到(
((
不输出)。
- 结束:遍历完中缀表达式后,弹出栈中剩余运算符。
运算符优先级
*
,/
:优先级 2+
,-
:优先级 1(
:优先级 0(栈内特殊处理)
逐步转换过程
中缀表达式:(1 + (2 - 3 * 4)) / 5
初始化:
- 运算符栈:
[ ]
- 后缀表达式:
[ ]
当前字符 | 动作 | 运算符栈 | 后缀表达式 | 栈深度 |
---|---|---|---|---|
( | 入栈 | ( | 1 | |
1 | 输出 | ( | 1 | 1 |
+ | 栈顶是 ( ,直接入栈 | ( + | 1 | 2 |
( | 入栈 | ( + ( | 1 | 3 |
2 | 输出 | ( + ( | 1 2 | 3 |
- | 栈顶是 ( ,直接入栈 | ( + ( - | 1 2 | 4 |
3 | 输出 | ( + ( - | 1 2 3 | 4 |
* | * 优先级 > - ,直接入栈 | ( + ( - * | 1 2 3 | 5 |
4 | 输出 | ( + ( - * | 1 2 3 4 | 5 |
) | 弹出到 ( ,输出 * 和 - | ( + | 1 2 3 4 * - | 2 |
) | 弹出到 ( ,输出 + | 1 2 3 4 * - + | 0 | |
/ | 栈空,直接入栈 | / | 1 2 3 4 * - + | 1 |
5 | 输出 | / | 1 2 3 4 * - + 5 | 1 |
结束 | 弹出栈中剩余运算符 / | 1 2 3 4 * - + 5 / | 0 |
关键点:栈的最大深度
- 最深时栈内运算符:
( + ( - *
- 栈内容:
(
,+
,(
,-
,*
- 深度为 5(从栈底到栈顶共 5 个运算符)。
- 栈内容:
与RICS相比,不属于CISC的特点的是( )
A.执行单条指令时钟周期多 B.指令长度固定 C. 寻址方式多 D.指令类型多
参考答案:B
题目回顾
题目问的是:“与RISC相比,不属于CISC的特点的是( )”
并给出了四个选项:
A. 执行单条指令时钟周期多
B. 指令长度固定
C. 寻址方式多
D. 指令类型多
关键概念
-
RISC(精简指令集计算机):
- 特点:
- 指令长度固定(通常为32位)。
- 指令类型较少,格式简单。
- 寻址方式简单(通常只有几种基本方式)。
- 单条指令执行速度快(通常1个时钟周期完成)。
- 依赖编译器优化性能(硬件设计简单,复杂功能由软件实现)。
- 代表架构:ARM、MIPS、RISC-V。
- 特点:
-
CISC(复杂指令集计算机):
- 特点:
- 指令长度可变(例如x86的指令长度从1字节到15字节不等)。
- 指令类型多,支持复杂操作(如单条指令实现字符串处理)。
- 寻址方式多(支持多种内存访问模式)。
- 单条指令可能需要多个时钟周期(尤其是复杂指令)。
- 硬件复杂度高(指令解码和执行逻辑复杂)。
- 代表架构:x86(Intel/AMD处理器)。
- 特点:
选项分析
题目问的是**“不属于CISC的特点”,即哪个选项是RISC的特点**而非CISC的特点。
选项 | 是否符合CISC特点? | 解析 |
---|---|---|
A. 执行单条指令时钟周期多 | ✅ 是CISC特点 | CISC的复杂指令需要多个时钟周期(如x86的LOOP 指令),而RISC通常单周期完成。 |
B. 指令长度固定 | ❌ 不属于CISC特点 | RISC的指令长度固定(如ARM的32位指令),而CISC的指令长度可变(如x86)。 |
C. 寻址方式多 | ✅ 是CISC特点 | CISC支持多种寻址方式(如x86的直接、间接、基址变址等),RISC通常只有几种。 |
D. 指令类型多 | ✅ 是CISC特点 | CISC指令集庞大(如x86有上千条指令),RISC指令类型较少(如ARM约100条)。 |
正确答案
- B. 指令长度固定是RISC的特点,不属于CISC的特点。
- 其他选项(A、C、D)均为CISC的典型特征。
非连通无向图共有28个条边,最多几个节点( )
A.6 B.7 C. 8 D.9
参考答案:D
关键概念
- 非连通无向图:由两个或多个连通分量组成,且各分量之间没有边相连。
- 最大节点数的条件:为了让节点数尽可能多,需要让边数尽可能少(因为边越多,节点之间的连接越紧密,节点数可能减少)。
- 在非连通图中,边数最多的情况是其中一个连通分量是完全图,其余节点孤立(即无边)。
- 完全图的边数为 ( \frac{n(n-1)}{2} ),其中 ( n ) 是节点数。
解题步骤
-
设定非连通图的结构:
- 假设图由两部分组成:
- 一个完全图 ( K_m )(( m ) 个节点,边数为 ( \frac{m(m-1)}{2} ))。
- 其余 ( k ) 个孤立节点(无边)。
- 总节点数 ( n = m + k ),总边数 ( E = \frac{m(m-1)}{2} = 28 )。
- 假设图由两部分组成:
-
求解完全图的节点数 ( m ):
- 解方程 ( \frac{m(m-1)}{2} \leq 28 ):
- ( m(m-1) \leq 56 )。
- 尝试 ( m = 8 ):( 8 \times 7 = 56 \leq 56 )(满足)。
- ( m = 9 ):( 9 \times 8 = 72 > 56 )(不满足)。
- 因此,最大完全图是 ( K_8 ),边数为 28,节点数为 8。
- 解方程 ( \frac{m(m-1)}{2} \leq 28 ):
-
计算总节点数:
- 完全图 ( K_8 ) 已占用 28 条边,其余节点必须孤立(无边)。
- 题目问的是“最多几个节点”,因此可以增加孤立节点:
- 若完全图 ( K_8 ) 占用 28 条边,剩余边数为 0,此时总节点数为 8。
- 但题目问的是“最多”,因此可以额外增加孤立节点:
- 比如 1 个孤立节点:总节点数 ( n = 8 + 1 = 9 ),边数仍为 28。
- 但题目要求“非连通”,因此至少有两个连通分量(完全图 + 孤立节点是允许的)。
- 因此,最大节点数为 9(( K_8 + 1 ) 个孤立节点)。
-
验证选项:
- 完全图 ( K_8 ) 占用 28 条边,节点数 8(对应选项 C)。
- 但可以额外增加孤立节点,最多到 9(对应选项 D)。
- 题目问“最多”,因此 D. 9 是正确的。