跳至主要內容

软件中级设计师

黄曦大约 18 分钟软考软考

📌 本文档收录软件设计师考试的练习题,按知识点分类整理。

软件工程基础

题目 1 ⭐

详细设计结束后,重点审查的内容不包括( )。

  • A. 数据流图
  • B. 算法
  • C. 数据结构
  • D. 软件界面

✅ 正确答案:A

解析

详细设计阶段主要关注模块内部逻辑的实现,包括算法、数据结构、界面设计等内容。数据流图属于需求分析阶段的工具,用于描述系统数据流动和处理过程,其审查通常在需求定义或概要设计阶段完成。

在详细设计结束后的审查重点是模块的具体实现细节,而非早期需求模型。参考软件工程中设计阶段划分的相关理论,详细设计的审查对象通常聚焦于模块内部设计元素。

💡 选项 A 不在此阶段审查范围内。

题目 2 ⭐

结构化开发方法中,( )主要包含对数据结构和算法的设计。

  • A. 体系结构设计
  • B. 数据设计
  • C. 接口设计
  • D. 过程设计

✅ 正确答案:D

解析

数据结构跟算法是系统的基础,是过程设计确定的任务。

设计类型说明
体系结构设计定义软件系统各主要部件之间的关系
数据设计基于 E-R 图确定软件涉及的文件系统的结构及数据库的表结构
接口设计(人机界面设计)软件内部,软件和操作系统间以及软件和人之间如何通信
过程设计系统结构部件转换成软件的过程描述,确定各组成部分的算法及内部数据结构,并选定过程表达形式来描述算法

信息安全

题目 3 ⭐⭐

下列关于报文摘要的叙述中,错误的是( )。

  • A. 在物联网环境中,可以为资源受限的传感器生成轻量级摘要
  • B. 对电子文档生成摘要,接收方用私钥解密
  • C. 对发送方报文生成的摘要值,接收方应重新计算并与原始摘要比对
  • D. 报文摘要仅用于验证完整性,传输数据仍需 TLS 加密

✅ 正确答案:B

解析

为什么 B 是错误的?

  • 报文摘要(Message Digest) 是通过哈希算法(如 MD5、SHA-256)生成的固定长度字符串。哈希算法是单向函数,不可逆,因此不存在”解密”这一说法。
  • 如果涉及”私钥”,那通常是指数字签名的过程:发送方用自己的私钥对摘要进行加密(签名),接收方用发送方的公钥进行解密(验签)。
  • 选项 B 说”接收方用私钥解密”,这在逻辑上是完全错误的:
    1. 摘要本身不能被解密。
    2. 即使是指数字签名,接收方也应该用公钥来验证,而不是私钥(私钥只有发送方自己有)。

其他选项为什么是正确的?

  • A 正确:物联网传感器资源(计算能力、电量)有限,确实需要使用轻量级的哈希算法(如 PHOTON、SPONGENT 等)来生成摘要,以节省能耗。
  • C 正确:这是验证数据完整性的标准流程。接收方收到数据和摘要后,使用相同的哈希算法对收到的数据重新计算摘要,如果计算结果与收到的摘要一致,说明数据在传输过程中未被篡改。
  • D 正确:报文摘要(哈希值)只能保证数据完整性(没被改过),但不能保证机密性(别人能看到内容)或身份认证(除非结合数字签名)。因此,如果需要保密传输,仍需配合 TLS/SSL 等加密协议。

💡 核心概念:哈希(摘要)是”指纹”,不是”锁”。指纹只能用来比对是不是同一个人(完整性),不能用来把信息藏起来(加密),所以谈不上”解密”。

知识产权

题目 4 ⭐

以下关于软件著作权产生时间的叙述中,正确的是( )。

  • A. 自开发者获得软件著作权登记证书起
  • B. 自开发计划文档完成时
  • C. 自软件首次公开发表时
  • D. 自软件开发完成之日起

✅ 正确答案:D

解析

根据《计算机软件保护条例》,软件著作权自软件开发完成之日起自动产生,不需要登记或发表。登记证书仅起证明作用,首次发表也不是著作权产生的条件。

软件测试

题目 5 ⭐

黑盒测试的主要依据是( )。

  • A. 代码复杂度
  • B. 软件需求规格说明书
  • C. 设计文档
  • D. 程序内部逻辑

✅ 正确答案:B

解析

黑盒测试基于软件的外部功能和需求,而不考虑内部代码结构。软件需求规格说明书定义了软件的功能和性能要求,是黑盒测试的主要依据。

操作系统

题目 6 ⭐

某文件系统文件存储采用文件索引节点法。假设文件索引节点中有8个地址项 iaddr[0]~iaddr[7],每个地址项大小为4字节,磁盘索引块和磁盘数据块大小均为1KB。其中地址项 iaddr[0]~iaddr[4] 是直接地址索引,iaddr[5]~iaddr[6] 是一级间接地址索引,iaddr[7] 是二级间接地址索引。若要访问 iclsClient、dll 文件的逻辑块号分别为 5、517,则系统应分别采用( )。

  • A. 直接地址索引、一级间接地址索引
  • B. 直接地址索引、二级间接地址索引
  • C. 一级间接地址索引、一级间接地址索引
  • D. 一级间接地址索引、二级间接地址索引

✅ 正确答案:D

解析

文件索引节点法中直接地址索引对应逻辑块号 0-4(每个地址项直接指向数据块),一级间接索引每个索引块可存储 1KB/4B = 256 个地址项,故 iaddr[5]、iaddr[6] 分别覆盖 5-260 和 261-516;二级间接索引通过两层索引表可寻址更大范围(iaddr[7] 对应 517 及以上)。逻辑块号 5 处于一级间接索引范围内,而 517 需通过二级间接索引访问,因此分别采用一级和二级间接地址索引。

题目 7 ⭐

当函数调用执行时,在栈顶创建项目用来支持被调用函数执行的一段存储空间称为活动记录或栈帧,栈帧中不包括( )。

  • A. 形参变量
  • B. 全局变量
  • C. 返回地址
  • D. 局部变量

✅ 正确答案:B

解析

当函数调用执行时,在栈顶创建并临时保留的一段存储空间即栈帧中,会存放调用函数时的返回地址、形参变量和局部变量。而全局变量存放在程序的静态存储区,位置是相对固定、独立的。

💡 全局变量位于静态存储区,不在栈帧中。

数据库

题目 8 ⭐

两个函数依赖集 F 和 G 等价是指( )。

  • A. F→G
  • B. F⁺ = G⁺
  • C. G→F
  • D. F = G

✅ 正确答案:B

解析

在关系数据库理论中,两个函数依赖集 F 和 G 等价的定义基于它们的闭包是否相等。闭包(F⁺ 或 G⁺)指的是从给定依赖集出发,通过 Armstrong 公理推导出的所有函数依赖的集合。若 F 的闭包包含 G 的所有依赖,且 G 的闭包也包含 F 的所有依赖,则二者闭包相同,即 F⁺ = G⁺。

  • A 错误:仅表示单向推导关系,不满足双向覆盖。
  • C 错误:同上,仅表示单向推导关系。
  • D 错误:要求 F 和 G 显式相等,忽略了逻辑等价但形式不同的情况。

💡 此定义可见于《数据库系统概念》等教材的函数依赖与规范化部分。

计算机网络

题目 9 ⭐

下列不能用于远程登录或控制的是( )。

  • A. IGMP
  • B. SSH
  • C. Telnet
  • D. RFB

✅ 正确答案:A

解析

  • Telnet 协议是 Internet 远程登录服务的标准协议和主要方式,为用户提供了在本地计算机上完成远程主机工作的能力。
  • RFB(Remote Frame Buffer,远程帧缓冲) 协议是一个用于远程访问图形用户界面的简单协议。
  • SSH 协议是较可靠、专为远程登录会话和其他网络服务提供安全性的协议,利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。
  • IGMP(Internet Group Management Protocol) 是主机与本地路由器之间用来进行组播组成员信息交互的协议,不用于远程登录或控制。

💡 IGMP 是组播管理协议,与远程登录无关。

数据结构与算法

题目 10 ⭐

某递归算法的时间复杂度计算公式为 T(n) = 4T(n/2) + nlgn,其中 n 为问题规模,则该算法的时间复杂度是( )。

  • A. Θ(nlgn)
  • B. Θ(n³)
  • C. Θ(n²)
  • D. Θ(n²lgn)

✅ 正确答案:C

解析

递归式 T(n) = 4T(n/2) + nlgn 的时间复杂度可通过主定理分析:

  1. 主定理形式:对形如 T(n) = aT(n/b) + f(n) 的递归式,主定理通过比较 f(n) 与 n^(log_b a) 的阶来确定时间复杂度。

  2. 参数分析:

    • a = 4,b = 2 → log_b a = log₂4 = 2,因此 n^(log_b a) = n²。
    • f(n) = nlgn,需与 n² 比较阶。
  3. 主定理情况判断:若 f(n) = O(n^{log_b a - ε})(存在 ε > 0),则 T(n) = Θ(n^{log_b a})。这里 nlgn 的阶低于 n²(因为 lgn 的增长速度远慢于 n),且存在 ε = 0.5 使得 nlgn = O(n^{2 - 0.5}) = O(n^{1.5})。因此满足情况1,时间复杂度为 Θ(n²)。

💡 主定理三种情况的核心是比较 f(n) 与 n^(log_b a) 的增长速度。

题目 11 ⭐

采用循环队列的优点是( )。

  • A. 入队和出队可以在队列的同端点进行操作
  • B. 入队和出队操作都不需要移动队列中的其他元素
  • C. 避免出现队列满的情况
  • D. 避免出现队列空的情况

✅ 正确答案:B

解析

循环队列的优点:可以有效利用资源。用数组实现队列时,如果不移动,随着数据的不断读写,会出现假满队列的情况(尾数组已满但头数组还是空的)。循环队列在逻辑上把数组的头和尾相连,当数组尾满时,会判断数组头是否为空,不为空则继续存放数据。

循环队列的缺点:入队时尾指针向前追赶头指针,出队时头指针向前追赶尾指针,造成队空和队满时头尾指针均相等,因此无法通过条件 front == rear 来判别队列是"空"是"满"。

  • A 错误:入队和出队在同端点操作是栈的特征,不是循环队列的。
  • C 错误:循环队列仍可能出现满的情况。
  • D 错误:循环队列仍可能出现空的情况。

💡 循环队列的核心价值在于充分利用数组空间,克服"假溢出"问题。

题目 12 ⭐

数据库中的视图是一个虚拟表。若设计师为 user 表创建一个 user1 视图,那数据字典中保存的是( )。

  • A. user1 查询语句
  • B. user1 视图定义
  • C. user1 查询结果
  • D. 所引用的基本表的数据

✅ 正确答案:B

解析

视图是一个虚拟表,其内容由查询定义。视图在数据字典中保存的是视图定义(即创建视图的 SQL 语句及其相关元数据),而非查询结果或基本表数据。每次查询视图时,数据库会根据视图定义动态生成结果。

  • A 不够准确:"查询语句"只是视图定义的一部分,视图定义还包含列名、权限等元数据。
  • C 错误:视图不存储查询结果,每次访问时实时计算。
  • D 错误:数据字典保存的是视图的定义信息,而非基本表的数据。

💡 视图是"虚表",数据字典存的是定义,不存数据。

计算机组成原理

题目 13 ⭐

某计算机用8位补码表示整数,可表示的最小整数是( )。

  • A. -128
  • B. -127
  • C. -256
  • D. 0

✅ 正确答案:A

解析

补码是计算机中最常用的表示方法,用于进行二进制加法运算。对于正数,其补码与其原码相同。对于负数,其补码是其反码加 1。补码的一个重要特性是,任何数的补码加上该数本身,结果总是 0。例如,十进制数 -5 的补码表示为 1111 1011。

补码表示法中,最高位为符号位,其余位表示数值。8位补码的数值范围是 -2^(8-1) 到 2^(8-1)-1,即 -128 到 127。最小负数对应的二进制为 10000000,其十进制值为 -128。

  • C 错误:-256 超出 8 位补码的表示范围。
  • B 错误:-127 是原码表示的最小负数,不是补码。
  • D 错误:0 是正数起点,不是最小整数。

💡 8位补码范围:-128 到 127,最小值为 10000000₂ = -128。

题目 14 ⭐

采用DMA方式传送数据时,每传送一个数据都需要占用一个( )。

  • A. 指令周期
  • B. 总线周期
  • C. 存储周期
  • D. 机器周期

✅ 正确答案:B

解析

DMA(Direct Memory Access,直接内存访问)方式下,数据传送不经过CPU,由DMA控制器直接控制总线进行数据传输。每传送一个数据,DMA控制器需要向总线发出请求并占用一个总线周期来完成数据传输。

  • A 错误:指令周期是CPU执行一条指令的时间,DMA传送不涉及指令执行。
  • C 错误:存储周期是存储器进行一次读写操作的时间,DMA占用的是总线而非存储器。
  • D 错误:机器周期是CPU执行一个基本操作的时间,DMA传送不经过CPU。

💡 DMA的核心优势是绕过CPU,由硬件直接控制数据传输,提高效率。

题目 15 ⭐

以下存储器中,( )使用电容存储信息且需要周期性地进行刷新。

  • A. DRAM
  • B. EPROM
  • C. SRAM
  • D. EEPROM

✅ 正确答案:A

解析

DRAM(Dynamic Random Access Memory,动态随机存储器) 使用电容存储信息,由于电容会漏电,因此需要周期性地进行刷新以保持数据。

存储器类型特点
DRAM使用电容存储,需要不断刷新电路,否则数据消失。一般用于内存
EPROM断电后仍能保留数据的计算机储存芯片,即非易失性(非挥发性)
SRAM随机存取存储器的一种,只要保持通电,里面储存的数据就可以恒常保持
EEPROM带电可擦可编程只读存储器,掉电后数据不丢失的存储芯片
  • B 错误:EPROM 是非易失性存储器,不需要刷新。
  • C 错误:SRAM 使用触发器存储信息,不需要刷新。
  • D 错误:EEPROM 是非易失性存储器,不需要刷新。

💡 DRAM 需要刷新,SRAM 不需要刷新但成本更高。

编译原理

题目 16 ⭐

程序设计语言的大多数语法现象可以用CFG(上下文无关文法)表示。下面的CFG产生式集用于描述简单算术表达式,其中 +、-、* 表示加、减、乘运算,id 表示单个字母表示的变量,那么符合该文法的表达式为( )。

P:E→E+T|E-T|T

T→T*F|F

F→-F|id

  • A. a+-b-c
  • B. a*(b+c)
  • C. a*-b+2
  • D. -a/b+c

✅ 正确答案:A

解析

本题考查文法推导树相关知识。

根据本题的语法推导式,可以发现,这里没有终结符 (、)、/,因此选项 B 和 D 错误。

id 表示单个字母表示的变量,不能表示数字 2,所以这里无法识别字符 2,C 选项错误。

也可以进行推导,在推导的过程中,会发现 * 只能通过 T 推导,此时必定经过了 E+T 或 E-T,不可能出现数字 2。因此 C 错误。

只有 A 能够被推导,推导过程如下:

  1. 通过 E→E-T,从起始符 E 得到 E-T
  2. 通过 E→E+T,将上面的 E 展开为 E+T,得到 E+T-T
  3. 通过 E→T→F→id→单个字母 a
  4. 通过 T→F→-F→-id→单个字母 -b
  5. 通过 T→F→id→单个字母 c

可以从起始符 E 得到 a+-b-c,即为 A 选项。

  • B 错误:文法中没有终结符 ( 和 )。
  • C 错误:id 只能表示单个字母变量,不能表示数字 2。
  • D 错误:文法中没有终结符 /。

💡 CFG 推导的关键是按照产生式规则逐步展开,检查终结符是否在文法中定义。

题目 17 ⭐

若栈采用顺序存储方式,现有两栈共享空间 V[1..n],top[i] 代表第 i(i=1,2)个栈的栈顶(两个栈都空时 top[1]=1、top[2]=n),栈1的底在 V[1],栈2的底在 V[n],则栈满(即 n 个元素暂存在这两个栈)的条件是( )。

  • A. top[1] = top[2]
  • B. top[1] + top[2] == 1
  • C. top[1] + top[2] == n
  • D. top[1] - top[2] == 1

✅ 正确答案:D

解析

两栈共享空间时,栈1从数组头部向后增长,栈2从数组尾部向前增长。当栈满时,两个栈顶指针相邻。

  • 初始状态:top[1] = 1,top[2] = n
  • 栈1入栈:top[1]++
  • 栈2入栈:top[2]--
  • 栈满条件:top[1] - top[2] == 1(栈顶指针相遇)

分析各选项:

  • A 错误:top[1] = top[2] 表示两个栈顶指向同一位置,此时栈未满。
  • B 错误:top[1] + top[2] == 1 在正常情况下不可能成立(top[1] ≥ 1,top[2] ≤ n)。
  • C 错误:top[1] + top[2] == n 是初始状态(两栈都空时),不是栈满条件。
  • D 正确:top[1] - top[2] == 1 表示栈1的栈顶刚好在栈2的栈顶前面一个位置,即栈满。

💡 两栈共享空间的核心是利用数组两端,栈满时栈顶指针相邻(差值为1)。

题目 18 ⭐

计算机中,系统总线用于( )连接。

  • A. 接口和外设
  • B. 运算器、控制器和寄存器
  • C. 主存和外设部件
  • D. DMA控制器和中断控制器

✅ 正确答案:A

解析

系统总线是计算机各部件之间传输信息的公共通道,主要用于连接 CPU、主存和 I/O 接口(接口再连接外设)。

  • A 正确:系统总线连接接口和外设,实现 CPU 与外部设备的数据传输。
  • B 错误:运算器、控制器和寄存器是 CPU 内部部件,通过内部总线连接,不是系统总线。
  • C 错误:主存通过系统总线连接,但外设通过接口连接,不是直接连接系统总线。
  • D 错误:DMA 控制器和中断控制器是 I/O 接口的一部分,不是系统总线的主要连接对象。

💡 系统总线 = 数据总线 + 地址总线 + 控制总线,连接 CPU、内存和 I/O 接口。

题目 19 ⭐

以下关于闪存(Flash Memory)的叙述中,错误的是( )。

  • A. 掉电后信息不会丢失,属于非易失性存储器
  • B. 以块为单位进行删除操作
  • C. 采用随机访问方式,常用来代替主存
  • D. 在嵌入式系统中可以用 Flash 来代替 ROM 存储器

✅ 正确答案:C

解析

闪存(Flash Memory) 是一种非易失性存储器,具有掉电后数据不丢失的特性。

  • A 正确:Flash 是非易失性存储器,掉电后信息不会丢失。
  • B 正确:Flash 以块(Block)为单位进行删除操作,不能按字节删除。
  • C 错误:Flash 虽然可以随机读取,但写入和删除操作需要先擦除整个块,速度较慢,不适合代替主存(RAM)。主存需要高速随机读写,Flash 无法满足。
  • D 正确:在嵌入式系统中,Flash 常用来代替 ROM 存储器,用于存储程序代码和固定数据。

闪存 vs 主存(RAM):

特性FlashRAM
易失性非易失性易失性
读取速度较快很快
写入速度较慢(需先擦除)很快
擦除单位块无需擦除
用途存储程序和数据运行时工作内存

💡 Flash 适合存储,不适合做主存。主存需要高速随机读写,Flash 写入需要先擦除整个块,速度太慢。