2022年职业考证-软考-软件设计师考试全真模拟易错、难点剖析AB卷(带答案)试题号:99
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2022年职业考证-软考-软件设计师考试全真模拟易错、难点剖析AB
卷(带答案)
一.综合题(共15题)
1.
单选题
以下关于软件维护的叙述中,正确的是()。
问题1选项
A.工作量相对于软件开发而言要小很多
B.成本相对于软件开发而言要更低
C.时间相对于软件开发而言通常更长
D.只对软件代码进行修改的行为
【答案】C
【解析】本题考查的是软件维护相关概念。
软件开发一般为定长时间,而软件维护是指软件从开始使用至消亡的过程,属于软件生命周期中最长的阶段,工作量、成本也是最大的,可以对软件代码、软件软硬件等多种内容进行修改。
本题只有C选项说法是正确的。
2.
单选题
以下关于软件设计原则的叙述中,不正确的是()。
问题1选项
A.将系统划分为相对独立的模块
B.模块之间的耦合尽可能小
C.模块规模越小越好
D.模块的扇入系数和扇出系数合理
【答案】C
【解析】考查关于软件设计原则。
软件设计原则始终强调高内聚、低耦合的设计原则。
具体包括:
保持模块的大小适中
尽可能减少调用的深度
多扇入,少扇出。
单入口,单出口
模块的作用域应该在模块之内
功能应该是可以被预测的。
综上所述,仅有C选项模块规模越小越好是不符合设计原则的。
3.
单选题
以下对于路由协议的叙述中,错误的是()。
问题1选项
A.路由协议是通过执行一个算法来完成路由选择的一种协议
B.动态路由协议可以分为距离向量路由协议和链路状态路由协议
C.路由协议是一种允许数据包在主机之间传送信息的种协议
D.路由器之间可以通过路由协议学习网络的拓扑结构
【答案】C
【解析】本题考查计算机网络路由协议。
路由协议:是一种指定数据包转送方式的网上协议。
Internet网络的主要节点设备是路由器,路由器通过路由表来转发接收到的数据。
转发策略可以是人工指定的(通过静态路由、策略路由等方法)。
在具有较小规模的网络中,人工指定转发策略没有任何问题。
但是在具有较大规模的网络中(如跨国企业网络、ISP网络),如果通过人工指定转发策略,将会给网络管理员带来巨大的工作量,并且在管理、维护路由表上也变得十分困难。
为了解决这个问题,动态路由协议应运而生。
动态路由协议可以让路由器自动学习到其他路由器的网络,并且网络拓扑发生改变后自动更新路由表。
网络管理员只需要配置动态路由协议即可,相比人工指定转发策略,工作量大大减少,其中动态路由协议又分为距离向量路由协议和链路状态路由协议。
工作原理:路由协议通过在路由器之间共享路由信息来支持可路由协议。
路由信息在相邻路由器之间传递,确保所有路由器知道到其它路由器的路径。
总之,路由协议创建了路由表,描述了网络拓扑结构;路由协议与路由器协同工作,执行路由选择和数据包转发功能。
4.
单选题
关于以下UML类图的叙述中,错误的是()。
问题1选项
A.一个A1的对象可能与一个A2的对象关联
B.一个A的非直接对象可能与一个A1 的对象关联
C.类B1的对象可能通过A2与C1的对象关联
D.有可能A的直接对象与B1的对象关联
【答案】D
【解析】本题考查面向对象的知识。
本题图中B1与A类的继承层次关系有关联关系,1个A的对象可以与多个B1的对象关联,1个B1对象可以与2到多个A的对象关联;1个A的对象可以与多个A的对象关联;1个A2的对象与多个C1类的对象关联,1个C1的对象与多个A2的对象关联;那么1个B1对象可以通过A2与C1的对象关联。
因为A标识为{abstract},即抽象类,抽象类不能直接进行实例化,即没有直接对象,只能有非直接对象,即子类的对象,因此,所有A的对象都是其子类的对象。
故本题选择D选项。
5.
单选题
设用线性探查法解决冲突构造哈希表,且哈希函数为H(key)=key%m,若在该哈希表中查找某关键字e是成功的且与多个关键字进行了比较,则()。
问题1选项
A.这些关键字形成一个有序序列
B.这些关键字都不是e的同义词
C.这些关键字都是e的同义词
D.这些关键字的第一个可以不是e的同义词
【答案】D
【解析】
本题是对哈希查找表的考查。
关键字e的同义词,指的是其他关键字利用哈希函数进行求值时,得到的函数结果与e是一致的,此时这些关键字就是e的同义词。
在哈希表查找关键字e时成功且经过多次比较,可以知道经过计算e的位置,此时该位置存放的并不是关键字e,并且这些关键字的顺序与原序列顺序相关,与大小无关,A选项有序序列说法不正确。
由于本题采用的线性探测法解决哈希冲突,此时该位置对同义词开放,对非同义词也是开放的,也就是说,其他非同义关键字在使用线性探测法解决冲突时,也有可能直接占据该位置。
所以对该位置进行比较的关键字,可能是e的同义词,也可能不是e的同义词,B和C的说法太过绝对,相比而言D的说法更合适,本题选择D选项。
6.
单选题
下列关于结构化分析方法的数据字典中加工逻辑的叙述中,不正确的是()。
问题1选项
A.对每一个基本加工,应该有一个加工逻辑
B.加工逻辑描述输入数据流变换为输出数据的加工规则
C.加工逻辑必须描述实现加工的数据结构和算法
D.结构化语言,判定树和判定表可以用来表示加工逻辑
【答案】C
【解析】本题是对数据字典中加工逻辑相关概念的考查。
数据字典包含4类条目:数据流、数据项、数据存储和基本加工。
其中基本加工条目是用来说明DFD中基本加工的处理逻辑的,由于下层的基本加工是由上层加工分解而来,只要有了基本加工的说明就可理解其他加工。
对每一个基本加工,都应该有一个加工逻辑来说明。
A 选项描述正确。
加工描述了输入数据流到输出数据流之间的编号,也就是输入数据流经过什么处理后变成了输出数据流。
加工逻辑对其进行说明,也就是描述了改过程的加工规则,B选项描述正确。
加工逻辑是位于需求分析阶段,此时具体的数据结构和算法并没有进行设计,C选项描述错误。
本题选择C选项。
常用的加工逻辑描述方法有结构化语言、判定表和判定树三种,D选项描述正确。
7.
单选题
函数foo、hoo的含义如下所示,函数调用hoo(a,x)的两个参数分别采用引用调用(call by reference)和值调用(call by value)方式传递,则函数调用foo(5)的输出结果为()。
问题1选项
A.2,5
B.2,15
C.13,5
D.13,15
【答案】C
【解析】根据题干给出的信息,foo(5),在该函数中,初始情况x=5,a=2。
调用hoo(a,x)函数,此时a=2传给hoo函数中的x,并且由于是引用方式,此时x在hoo函数内的修改会影响原a的值(注意区别,hoo函数的x与foo函数的x是不用的局部变量)。
同时x=5传给hoo函数中的y,并且是值调用方式,此时y在hoo函数内的修改是不会影响原x的值。
接着分析hoo()函数,x的初始值为2,y初始值为5。
执行y=y+10=15,执行x=y-x=15-2=13,此时x的值会传回原foo函数的a,即a=x=13。
返回foo函数进行分析,输出的a和x,取值分别为修改后的13和原数值5。
本题选择C选项。
8.
单选题
面向对象分析的第一项活动是();面向对象程序设计语言为面向对象()。
问题1选项
A.组织对象
B.描述对象间的相互作用
C.认定对象
D.确定对象的操作
问题2选项
A.用例设计
B.分析
C.需求分析
D.实现
【答案】第1题:C
第2题:D
【解析】第1题:本题考查的是面向对象分析与设计相关内容。
面向对象分析的活动有:认定对象(名词)、组织对象(抽象成类)、对象间的相互作用、基于对象的操作,第一项活动是认定对象,本题选择C选项。
第2题:面向对象实现需要选择一种面向对象程序设计语言。
第二空选择D选项。
9.
单选题
IPv6地址长度为()bit。
问题1选项
A.16
B.32
C.64
D.128
【答案】D
【解析】本题考查IPv6的基本概念。
IPv6地址由128位二进制表示。
10.
案例题
阅读下列说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内。
【说明】
在软件系统中,通常都会给用户提供取消、不确定或者错误操作的选择,允许将系统恢复到原先的状态。
现使用备忘录(Memento)模式实现该要求,得到如图6-1所示的类图。
Memento包含了要被恢复的状态。
Originator创建并在Memento中存储状态。
Caretaker负责从Memento中恢复状态。
图6-1 类图
【Java代码】
import java.util.*;
class Memento {
private String state;
public Memento(String state){this.state=state;}
public String getState(){return state;}
}
class Originator{
private String state;
public void setState(String state){this.state=state;}
public String getState(){ retum state;}
public Memento saveStateToMemento( ){ return (1);
}
}
public void getStateFromMemento(Memento Memento){
state =(2);
}
class CareTaker{
private List mementoList= new ArrayList();
public(3){
mementoList.add(state);
}
public (4){
return memensoList.get(index);
}
}
class MementoPaneDems{
public static void main(String[] args) {
Originator originator =new Originator();
CareTaker careTaker=new careTaker();
originator.setState("State #1");
originator.setState("State #2");
careTaker.add( (5) );
originator.setState("State #3");
careTaker.add( (6) );
originator.setState("State #4");
System.out.println("Current State"+originator.getState());
originator.getStateFromMemento(careTaker.get(0));
System.out.println("Frist saved State"+originator.getState());
originator.getStateFromMemento(careTaker.get(1));
System.out.println("Second saved State"+originator.getState());
}
}
【答案】(1) new Memento(state)
(2) Memento.getState()
(3) void add(Memento state)
(4) Memento get(int index)
(5) originator.saveStateToMemento()
(6) originator.saveStateToMemento() 11.
单选题
在Python语言中,()是一种不可变的、有序的序列结构,其中元素可以重复。
问题1选项
A.tuple(元组)
B.dict(字典)
C.list(列表)
D.set(集合)
【答案】A
【解析】本题考查的是Pythson数据类型相关内容。
不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组)。
可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。
tuple(元组)类似于list列表,元组用 () 标识。
内部元素用逗号隔开。
但是元组不能二次赋值,相当于只读列表。
dict(字典)
是除列表以外python之中最灵活的内置数据结构类型;列表是有序的对象集合,字典是无序的对象集合;字典用"{ }"标识;字典由索引(key)和它对应的值value组成。
list(列表)可以完成大多数集合类的数据结构实现。
它支持字符,数字,字符串甚至可以包含列表(即嵌套或者叫多维列表,可以用来表示多维数组)。
列表用 [ ] 标识,是 python 最通用的复合数据类型。
set(集合)是由一个或数个形态各异的大小整体组成的,构成集合的事物或对象称作元素或是成员;基本功能是进行成员关系测试和删除重复元素;可以使用大括号 { } 或者 set() 函数创建集合。
12.
案例题
阅读下列说明和C++代码。
将应填入(n)处的字句写在答题纸的对应栏内。
【说明】
在软件系统中,通常不会给用户提供取消、不确定或者错误操作的选择,允许将系统恢复到原先的状态。
现使用备忘录(Memento)模式实现该要求,得到如图5-1所示的类图。
Memento 包含了要被恢复的状态。
Originator创建并在Memento中存储状态。
Caretaker负责从Memento中恢复状态。
图5-1 类图
【C++代码】
#include
#include
#include
using namespace std;
class Memento{
private:
string state;
public:
Memento(string state){ this->state=state; } string getState(){ return state; }
} class Originator{
private:
string state;
public:
void setState(string state){this>sate=state;}
string getState(){return state;}
Memento saveStateToMemento(){return (1)}
void getStateFromMemento(Memento Memento){state (2)}
class CareTaker{
private:
vector mementoList;
pubilc:
viod(3){mementoList.push back(state)
(4);return mementoList(index);}
int mian(){
Originator*originator=new Originator();
CareTaker*careTaker=new CareTaker();
originator->setState("State #1");
originator->setState("State #2");
careTaker->add(_(5)_);
originator->setState("State #3");
careTaker->add((6));
originator->setState("State #4");
cout getState( )getStateFromMemento(careTaker->get(0); coutgetStatee( )getStateFromMemento(careTaker->get(1); coutgetState( )
【答案】本题代码存在缺失,暂未给出答案。
请参照JAVA代码题。
13.
单选题
面向对象分析时,执行的活动顺序通常是()。
问题1选项
A.认定对象、组织对象、描述对象的相互作用、确定对象的操作
B.认定对象、定义属性、组织对象、确定对象的操作
C.认定对象、描述对象间的相互作用、确定对象的操作、识别包
D.识别类及对象、识别关系、定义属性、确定对象的操作
【答案】A
【解析】本题考查面向对象分析的基本概念。
面向对象分析包含5个活动:认定对象、组织对象、描述对象间的相互作用、定义对象的操作、定义对象的内部信息。
认定对象是指:在应用领域中,按自然存在的实体确立对象。
在定义域中,首先将自然存在的“名词”作为一个对象,这通常是研究问题定义域实体的良好开始。
通过实体间的关系寻找对象常常没有问题,而困难在于寻找(选择)系统关心的实质性对象。
实质性对象是系统稳定性的基础。
例如在银行应用系统中,实质性对象应包含客户账务、清算等,而门卫值班表不是实质性对象,甚至可不包含在该系统中。
组织对象含义是:分析对象间的关系,将相关对象抽象成类,其目的是为了简化关联对象,利用类的继承性建立具有继承性层次的类结构。
抽象类时可从对象间的操作或一个对象是另一个对象的一部分来考虑;如房子由门和窗构成,门和窗是房子类的子类。
由对象抽象类,通过相关类的继承构造类层次,所以说系统的行为和信息间的分析过程是一种迭代表征过程。
描述对象间的相互作用是:描述出各对象在应用系统中的关系。
如一个对象是另一个对象的一部分,一个对象与其他对象间的通信关系等。
这样可以完整地描述每个对象的环境,由一个对象解释另一个对象,以及一个对象如何生成另一个对象,最后得到对象的界面描述。
最后定义对象的操作和内部信息。
本题选择A选项。
14.
单选题
()是构成我国保护计算机软件著作权的两个基本法律文件。
问题1选项
A.《计算机软件保护条例》和《软件法》
B.《中华人民共和国著作权法》和《软件法》
C.《中华人民共和国著作权法》和《计算机软件保护条例》
D.《中华人民共和国版权法》和《中华人民共和国著作权法》
【答案】C 【解析】考查知识产权的保护范围和对象。
对于软件著作权和软件作品受到《中华人民共和国著作权法》和《计算机软件保护条例》两个文件的保护
15.
单选题
Designing object -oriented software is hard,and designing()object -oriented software is even harder.You must find pertinent(相关的)objects,factor them into class at the right granularity,define class interfaces and inheritances,and establish key relationships among them.You design should be specific to the problem at hand but also()enough to address future problems and requirements.You also want to avoid redesign,or at least minimize it.Experienced object -oriented designers will tell you that a reusable and flexible design is difficult if not impossible to get "right" the first time.Before a design is finished,they usually try to reuse it several times,modifying it each time.
Yet experienced object-oriented designers do make good designs.Meanwhile new designers are ()by the options available and tend to fall back on non-object-oriented techniques they've used before.lt takes a long time for novices to learn what good object-oriented design is all about.Experienced designers evidently know something inexperienced ones don't.What is it?
One thing expert designers know not to do is solve every problem from first principles.Rather, they reuse solutions that have worked for them in the past.When they find a good().They use it again and again.Such experience is part of what makes them experts.Consequently,you'll find()patterns of classes and communicating objects in many object-oriented systems.
问题1选项
A.runnable
B.right
C.reusable
D.pertinent
问题2选项
A.clear
B.general
C.personalized
D.customized
问题3选项
A.excited
B.shocken
C.surprised
D.overwhelmed
问题4选项
A.tool
ponent
C.system
D.solution
问题5选项
A.recurring
B.right
C.experienced
D.past
【答案】第1题:C 第2题:B
第3题:D 第4题:D
第5题:A
【解析】设计面向对象的软件很难,而设计(可复用的)面向对象软件就更难了。
你必须找到合适的(相关的)对象,以适当的粒度将它们划分为类,定义类接口和继承,并在它们之间建立关键关系。
你的设计应该针对眼前的问题,但(一般)足以解决未来的问题和要求。
你也要避免重新设计,或者至少最小化它。
有经验的面向对象设计师会告诉你,一个可重用和灵活的设计是很难第一次就“正确”的。
在设计完成之前,他们通常会尝试多次重复使用,每次都是这样。
然而,有经验的面向对象设计师确实能做出好的设计。
同时,新的设计师们对可用的选项感到不安(第三题选项不知所措的意思),他们倾向于使用以前使用的非面向对象技术。
电影要花很长时间才能了解好的面向对象的设计。
经验丰富的设计师显然知道一些缺乏经验的东西。
它是什么?有一件事专家设计师知道不能做的就是从第一原理解决每一个问题。
相反,他们选择了过去对他们有效的解决方案。
当他们找到一个好的(解决方案)。
他们一次又一次地使用它。
这样的经验是他们成为专家的部分原因。
因此,您将在许多面向对象系统中找到第五题个类和通信对象的模式。
A. runnable可运行的
B.right对的
C. reusable可复用的
D. pertinent中肯的,相关的
A. clear清除
B. general总则
C. personalized个性化
D.customized定制
A. excited兴奋
B. shocken 震惊
C. surprised惊讶于
D. overwhelmed不知所措
A.tool工具
B. component组成部分
C. system系统
D. solution解决方案
A.recurring循环
B.right是吗
C.experienced经验丰富
D.past过去。