1、2022年软考-软件设计师考试内容及全真模拟冲刺卷(附带答案与详解)1. 单选题某种机器的浮点数表示格式如下(允许非规格化表示)。若阶码以补码表示,尾数以原码表示,则1 0001 0 0000000001表示的浮点数是()问题1选项A.2-162-10B.2-152-10C.2-16 (1-2-10)D.2-15 (1-2-10)【答案】B【解析】考查对于浮点数表示。浮点数表示:N=尾数*基数指数其中尾数是用原码表示,是一个小数,通过表格和题干可知, 0 0000000001是尾数部分,共计后11位,其中第1位为0表示正数,展开得2-10阶码部分是用补码表示,是一个整数,通过表格和题干可知,1
2、 0001是整数部分,共计前5位,要计算其具体数值需要将其转换成原码,通过第1位符号位1可知其为负数,补码:10001 ,反码:10000 原码:11111,数据为-15,基数在浮点数表示为2,可得2-152-102. 案例题阅读下列说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内。【说明】层叠菜单是窗口风格的软件系统中经常采用的一种系统功能组织方式。层叠菜单(如图6-1示例)中包含的可能是一个菜单项(直接对应某个功能),也可能是一个子菜单,现在采用组合(composite)设计模式实现层叠菜单,得到如图6-2所示的类图层叠菜单(如图6-1示例)暂缺 图6-2 类图import
3、java.util.*;abstract class MenuComponent / 构成层叠菜单的元素(1) String name; / 菜单项或子菜单名称public viod printName() System.out.println(name); public (2) ;public abstract boolean removeMenuElement(MenuComponent element);public (3) ;class MenuItem extends MenuComponent public MenuItem(String name) this.name=name;
4、 public boolean addMenuElement(MemuComponent element) return false; public boolean removeMenuElement(MenuComponent element) return false; public List getElement() return null; class Menu extends MemuComponent private (4);public Menu(String name)this.name = name;this.elementList = new ArrayList;publi
5、c boolean addMenuElement(MenuComponent element)return elementList.add(element);public boolean removeMenuElement(MenuComponent element)return elementList.remove(element);public List getElement() return elementList;class CompositeTest public static void main(String args) MenuComponent mainMenu = new M
6、enu(“AB”); /此处字符不清晰,以“AB”代替原文MenuComponent subMenu = new Menu(“Chart”);MenuComponent element = new MenuItem(“On This Sheet”);(5);subMenu.addMenuElement(element);printMenus(mainMenu);private static void printMenus(MenuComponent ifile)ifile.printName();List children = ifile.getElement();if(children =
7、null) return; /打印for(MenuComponent element; children)printMenus(element);【答案】(1)protected(2)abstract boolean addMenuElement(MemuComponent element)(3)abstract List getElement()(4)ArrayList elementList(5)mainMenu.addMenuElement(subMenu)【解析】本题是典型的组合模式应用。首先根据类图中name标注的为#(+表示public,-表示private,#表示protecte
8、d),第(1)空对name的修饰应该是protected。然后根据抽象类和实现类的对应关系,可以补充第(2)(3)空,这两处缺失的方法根据下文代码进行补充,注意方法名必须用abstract修饰,并且注意抽象方法的写法没有具体方法体。其中第(2)空填写abstract boolean addMenuElement(MemuComponent element) ,第(3)空填写abstract List getElement()。第(4)空缺失了一个属性,此时根据下文的同名构造函数会发现,此处传参给了this.name以及this.elementList,name可以根据父类继承使用,而eleme
9、ntList需要定义,因此此处缺失的参数是elementList,类型根据后面的赋值类型进行定义,即第(4)空填写ArrayList elementList。第(5)空是对组合模式的应用拼装,根据下文可知打印需要调用mainMenu对象,而此时该对象是独立的,需要与其他菜单进行拼装,下文中subMenu拼装了element,此处需要将subMenu拼装到mainMenu,即第(5)空填写mainMenu.addMenuElement(subMenu)。3. 单选题下面是一个软件项目活动图,其中顶点表示项目里程碑,连接顶点的边表示包含的活动,边上的权重表示活动的持续时间(天),则关键路径长度为(
10、 ),在该活动图中,活动( )晚16天开始不会影响上班。问题1选项A.20B.25C.27D.48问题2选项A.ACB.BEC.FID.HJ【答案】第1题:D第2题:B【解析】本题是对进度网络图分析的考查。将各个活动的最早开始和完成时间、最晚开始和完成时间、持续时间和总时差分别进行标注,结果如下:4. 案例题阅读下列说明和代码,回答问题1和问题2,将解答写在答题纸的对应栏内。【说明】凸多边形是指多边形的任意两点的连线均落在多边形的边界或内部。相邻的点连线落在多边形边界上,称为边;不相邻的点连线落在多边形内部,称为弦。假设任意两点连线上均有权重,凸多边形最优三角剖分问题定义为:求将凸多边形划分为
11、不相交的三角形集合,且各三角形权重之和最小的剖分方案。每个三角形的权重为三条边权重之和。假设N个点的凸多边形点编号为V1,V2,VN,若在VK处将原凸多边形划分为一个三角形V1VkVN,两个子多边形V1,V2,Vk和Vk,Vk+1,VN,得到一个最优的剖分方案,则该最优剖分方案应该包含这两个子凸边形的最优剖分方案。用mij表示带你Vi-1,Vi,Vj构成的凸多边形的最优剖分方案的权重,Sij记录剖分该凸多边形的k值。则其中:W(Vi-1VkVj)=Wi-1,kWk,jWj,i-1为三角形Vi-1VkVj的权重,Wi-1,k,Wk,j,Wj,i-1分别为该三角形三条边的权重。求解凸多边形的最优剖
12、分方案,即求解最小剖分的权重及对应的三角形集。C代码includestdio.hdefine N 6 /凸多边形规模int mN1 N1; /mij表示多边形Vi-1到Vj最优三角剖分的权值int SN1 N1; /Sij记录多边形Vi-1到Vj最优三角剖分的k值int WN1 N1; /凸多边形的权重矩阵,在main函数中输入/*三角形的权重a,b,c,三角形的顶点下标*/int get_ triangle_weight(int a,int b,int c) return WabWbcWca;/*求解最优值*/void triangle_partition()int i,r,k,j;int
13、temp;/*初始化*/for(i=1;i /*r为子问题规模*/ for(i=1;k (2); mij= mij+mi+1j+get_triangle_weight(i-1,i,j); /*k=j*/ Sij=i; for(k=j+1;k /*计算 ij的最小代价*/ temp=mik+mk+1j+ge_triangle_ weight(i-1,k,j); if(3) /*判断是否最小值*/ mij=temp; Sij=k; /*输出剖分的三角形i,j:凸多边形的起始点下标*/void print_triangle(int i,int j)if(i=j) return;print_trian
14、gle(i,Sij);print_ triangle(4);print(“V%d- -V%d- -V%dn“,i-1,Sij,j);【问题1】(8分)根据题干说明,填充C代码中的空(1)(4)。【问题2】(7分)根据题干说明和C代码,该算法采用的设计策略为(5)。算法的时间复杂度为(6),空间复杂度为(7)(用O表示)【答案】【问题1】(8分)(1)i3)(7)O(n2)【解析】本题考查的是凸多边形最优三角剖分动态规划设计过程。本题算法难度较大,在没有理解算法过程的前提下,首先可以根据相关信息进行部分填空。首先根据题干描述出现的将问题规模从k开始截断,此时其实就是“最优子结构”的说法,并且本题
15、出现了递归式的应用,是典型的动态规划法的应用。又根据题目中的代码,出现了三层嵌套for循环,此时代码的时间复杂度为O(n3)。本题用到的辅助空间记录中间解有2个数组mij和Sij,都是二维数组,空间复杂度的量级为O(n2)。最后分析代码填空部分。第(1)空,r表示的是子问题规模,规模划分已知从r=2开始,子问题最大应该能够取到N,因此本空填写r=N或其等价表示形式。第(2)空缺失的是j的初始化赋值,本空较难。代码计算前边界为i,链长为r的链的后边界取值,结果为i+r-1,即本题填写j=i+r-1或其等价表示形式。第(3)空缺失判断条件,此时注释明确说明此处判断最小值,判断后,mij值进行修改并
16、修改为temp,也就是意味着mij此时记录的不是最优解(最小值),需要进行修正改为最小,即填写tempDraw()(5) piece-Draw()6. 单选题某高校信息系统设计的分E-R图中,人力部门定义的职工实体具有属性:职工号、姓名、性别和出生日期;教学部门定义的教师实体具有属性:教师号、姓名和职称。这种情况属于( ),在合并E-R图时,( )解决这一冲突。问题1选项A.属性冲突B.命名冲突C.结构冲突D.实体冲突问题2选项A.职工和教师实体保持各自属性不变B.职工实体中加入职称属性,删除教师实体C.教师也是学校的职工,故直接将教师实体删除D.将教师实体所有属性并入职工实体,删除教师实体【
17、答案】第1题:C第2题:B【解析】第1题:本题是对数据库概念设计的考查。关于冲突的概念:属性冲突。同一属性可能会存在于不同的分E-R图,由于设计人员不同或是出发点不同,对属性的类型、取值范围和数据单位等可能会不一致。命名冲突。相同意义的属性在不同的分E-R图中有着不同的命名,或是名词相同的属性在不同的分E-R图中代表着不同的意义。结构冲突。同一实体在不同的分E-R图中有不同的属性,同一对象在某一分E-R图中被抽象为实体,而在另一分E-R图中又被抽象为属性,需要统一。本题属于结构冲突,选择C选项。没有实体冲突的说法。第二问本身不够严谨。根据题干来看,因为存在冲突,需要某些操作去解决,所以A选项保
18、持不变无法解决问题。C选项直接删除教师实体,会丢失教师中的职称属性。D选项并入的方式,会重复记录姓名属性。只有B选项相对合适一些,将职称属性加入职工实体,然后删除教师实体,过程中还需要对属性名称进行统一调整。本题选择B选项。第2题:7. 案例题阅读下列说明和Java代码,将应填入(n)处的字句写在题纸的对应栏内。【说明】享元(flyweight)模式主要用于减少创建对象的数量,以低内存占用,提高性能。现要开发一个网络围棋程序允许多个玩家联机下棋。由于只有一台服务器,为节内存空间,采用享元模式实现该程序,得到如图6-1所的类图。图6-1 类图【Java代码】import java.util.*:
19、enum PieceColor BLACK,WHITE棋子颜色class PiecePos棋子位置private intx;private int y;pubic PiecePos(int a,int b)x=a;y=b;public int getX( )return x;public int getY( )return y; abstract class Piece棋子定义protected PieceColor mcolor;颜色protected Piecemopos mpos;位置public Piece(PieceColor,color PiecePos pos)m_color=c
20、olor;mpos=pos;(1);class BlackPiece extends Piecepublic BlackPiece(PieceColor color,PiecePos pos)super(color,pos);public void draw ( ) System out println(draw a blackpiece); class WhitePiece extends Piecepublic WhitePiece(PieceColor color,PiecePos pos)super(color,pos);public void draw( ) System.out.p
21、rintln(draw a white piece); class PieceBoard棋盘上已有的棋子private static final ArrayListm_arrayPiece=new ArrayListprivate String mblackName;黑方名称private String mwhiteName;白方名称public PieceBoard(String black,String white)m_blackName=black;m_whiteName=white;一步棋,在棋盘上放一颗棋子public void SetePiece(PieceColor color,
22、PiecePos pos)(3)piece=null;if(colorPieceColor.BLACK)放黑子piecenew BlackPiece(color,pos);获取一颗黑子Systemoutprintln(mblackName在位置(posgetX( )+,+pos.getY( )+);(4) ;else放白子piecenew WhitePiece(color,pos);获取一颗白子Systemoutprintln(m whiteName在位置(posgetX0),+pos.getYO+);(5) ;m_arrayPiece.add(piece);【答案】(1)public abs
23、tract void draw( )(2)Piece(3)Piece(4)piece.draw( )(5)piece.draw( )【解析】对于第一空,可知该空需要填写的是 Piece类里面的方法,对于其方法在图中都无法找出,可以根据其实现类(BlackPiece和WhitePiece类)来看,对应得是方法public void draw( ),又由于其在抽象类Piece里面,所以是抽象方法,需要加上关键词abstract,则为public abstract void draw( )对于第二空,可知该空填写的是动态数组Arraylist的泛型,里面填写得应该是对应的m_arrayPiece的类
24、型,用类进行修饰,可知其属于Piece类,填写的应该是Piece对于第三空,可知该空填写的是对象创建的声明对象过程,格式应该为类名 对象名称=null,可知该对象piece对应的类是Piece(类名字母大写)对于第四空和第五空,根据注释来看,是放黑子和白子的过程,已知实例化该对象piece,具体的放黑子和白子过程,都需要调用draw()方法来指向,故 第4空和第5空填写的应该都是piece.draw( )8. 单选题面向对象分析时,执行的活动顺序通常是( )。问题1选项A.认定对象、组织对象、描述对象的相互作用、确定对象的操作B.认定对象、定义属性、组织对象、确定对象的操作C.认定对象、描述对
25、象间的相互作用、确定对象的操作、识别包D.识别类及对象、识别关系、定义属性、确定对象的操作【答案】A【解析】本题考查面向对象分析的基本概念。面向对象分析包含5个活动:认定对象、组织对象、描述对象间的相互作用、定义对象的操作、定义对象的内部信息。认定对象是指:在应用领域中,按自然存在的实体确立对象。在定义域中,首先将自然存在的“名词”作为一个对象,这通常是研究问题定义域实体的良好开始。通过实体间的关系寻找对象常常没有问题,而困难在于寻找(选择)系统关心的实质性对象。实质性对象是系统稳定性的基础。例如在银行应用系统中,实质性对象应包含客户账务、清算等,而门卫值班表不是实质性对象,甚至可不包含在该系
26、统中。组织对象含义是:分析对象间的关系,将相关对象抽象成类,其目的是为了简化关联对象,利用类的继承性建立具有继承性层次的类结构。抽象类时可从对象间的操作或一个对象是另一个对象的一部分来考虑;如房子由门和窗构成,门和窗是房子类的子类。由对象抽象类,通过相关类的继承构造类层次,所以说系统的行为和信息间的分析过程是一种迭代表征过程。描述对象间的相互作用是:描述出各对象在应用系统中的关系。如一个对象是另一个对象的一部分,一个对象与其他对象间的通信关系等。这样可以完整地描述每个对象的环境,由一个对象解释另一个对象,以及一个对象如何生成另一个对象,最后得到对象的界面描述。最后定义对象的操作和内部信息。本题
27、选择A选项。9. 案例题阅读下列说明和C+代码,将应填入(n)处的字句写在答题纸的对应栏内。【说明】在线支付是电子商务的一个重要环节,不同的电子商务平台提供了不同的支付接口。现在需要整合不同电子商务平台的支付接口,使得客户在不同平台上购物时,不需要关心具体的支付接口。拟采用中介者(Mediator) 设计模式来实现该需求,所设计的类图如图5-1所示。【C+代码】【答案】(1) virtual void buy(double money, WebService *service)(2) WebServiceMediator *(3) virtual void buyService(double
28、money)= 0(4) mediator-buy(money, this)(5) mediator-buy(money, this)【解析】(1)空是属于接口WebServiceMeditor内的方法,我们可以通过下文的实现类中找到ConcreteServiceMeditor可知缺少了一个buy()方法故第一空填写virtual void buy(double money, WebService *service) ;(2)空类WebService中属性的参数类型,Colleague与Mediator之间的关联关系由属性meditor实现,所以第2空应该填写WebServiceMediato
29、r*;(3)空类WebService中的virtual方法,根据其具体子类可以看到缺少的是buyService方法,书写成virtual void buyService(double money)= 0 ;(4)空和(5)空具体同事类Amazon、Ebay与中介者的通信,调用中介者之间的支付接口,所以空(4)和(5)都填写mediator-buy(money, this) 。10. 单选题面向对象设计时包含的主要活动是( )。问题1选项A.认定对象、组织对象、描述对象间的相互作用、确定对象的操作B.认定对象、定义属性、组织对象、确定对象的操作C.识别类及对象、确定对象的操作、描述对象间的相互作
30、用、识别关系D.识别类及对象、定义属性、定义服务、识别关系、识别包【答案】D【解析】考查关于面向对象的开发阶段。面向对象分析阶段:认定对象,组织对象,对象间的相互作用,基于对象的操作。面向对象设计阶段:识别类及对象、定义属性、定义服务、识别关系、识别包。面向对象程序设计:程序设计范型、选择一种OOPL。面向对象测试:算法层、类层、模板层、系统层。11. 单选题某文件系统采用索引节点管理,其磁盘索引块和磁盘数据块大小均为1KB字节且每个文件索引节点有8个地址项iaddr0iaddr7,每个地址项大小为4字节,其中iaddr0iaddr4采用直接地址索引,iaddr5和iaddr6采用一级间接地址
31、索引,iaddr7 采用二级间接地址索引。若用户要访问文件userA中逻辑块号为4和5的信息,则系统应分别采用( ), 该文件系统可表示的单个文件最大长度是( )KB。问题1选项A.直接地址访问和直接地址访问B.直接地址访问和一级间接地址访问C.一级间接地址访问和一级间接地址访问D.一级间接地址访问和二级间接地址访问问题2选项A.517B.1029C.65797D.66053【答案】第1题:B第2题:D【解析】第1题:本题是对索引文件结构的考查。根据题干可得:其中04号节点为直接索引,对应逻辑块号为04。其中56号节点为一级间接索引方式,对应逻辑块号从5开始。本题第一空选择B选项。每个索引盘大
32、小为1KB,地址项大小为4B,故每个索引盘有(1KB/4B)=256个索引。一级间接索引有2个盘块,共有512个索引,对应512个逻辑盘块。其中7号节点为二级间接索引,共有256*256=65536个索引,对应65536个逻辑盘块。单个文件最大为:(5+512+65536)*1KB=66053KB。本题第二空选择D选项。第2题:12. 单选题软件质量属性中,( )是指软件每分钟可以处理多少个请求。问题1选项A.响应时间B.吞吐量C.负载D.容量【答案】B【解析】本题考查的是计算机性能指标的概念。吞吐量:指在给定的时间内,系统所能处理的任务的数量。本题选择B选项。响应时间:指系统对请求作出响应的
33、时间。容量:存储器所能存储的全部信息量称为该存储器的容量。负载:负载能力一般指的是系统能够承受的最大任务数。13. 单选题在软件设计阶段进行模块划分时,一个模块的( )。问题1选项A.控制范围应该在其作用范围之内B.作用范围应该在其控制范围之内C.作用范围与控制范围互不包含D.作用范围与控制范围不受任何限制【答案】B【解析】本题是对模块设计原则的考查。模块控制域:这个模块本身以及所有直接或间接从属于它的模块的集合。模块作用域:指受该模块内一个判定所影响的所有模块的集合。模块的作用域应该在控制域范围之内,本题选择B选项。14. 单选题某企业信息系统采用分布式数据库系统。“当某一场地故障时, 系统
34、可以使用其他场地上的副本而不至于使整个系统瘫痪”称为分布式数据库的( )。问题1选项A.共享性B.自治性C.可用性D.分布性【答案】C【解析】本题考查的是分布式数据库的基本概念。在分布式数据库系统中,共享性是指数据存储在不同的结点数据共享;自治性是指每个结点对本地数据都能独立管理;可用性是指当某一场地故障时,系统可以使用其他场地上的副本而不至于使整个系统瘫痪;分布性是指在不同场地上的存储。本题选择C选项。15. 单选题ARP 报文分为ARP Request和ARP Response,其中ARP Request采用( )进行传送,ARP Response采用( )进行传送。问题1选项A.广播B.
35、组播C.多播D.单播问题2选项A.组播B.广播C.多播D.单播【答案】第1题:A第2题:D【解析】本题考查计算机网络ARP协议。ARP协议:地址解析协议,作用是由IP地址转换成MAC地址RARP协议:反地址解析协议,作用是MAC地址转换成IP地址对于ARP而言,请求是广播发送,ARP响应是单播发送。故有ARP Request采用广播进行传送,ARP Response采用单播进行传送16. 单选题Designing object -oriented software is hard,and designing( )object -oriented software is even harder.
36、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
37、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 obj
38、ect-oriented designers do make good designs.Meanwhile new designers are( )by the options available and tend to fall back on non-object-oriented techniques theyve used before.lt takes a long time for novices to learn what good object-oriented design is all about.Experienced designers evidently know s
39、omething inexperienced ones dont.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 expert
40、s.Consequently,youll find( )patterns of classes and communicating objects in many object-oriented systems.问题1选项A.runnableB.rightC.reusableD.pertinent问题2选项A.clearB.generalC.personalizedD.customized问题3选项A.excitedB.shockenC.surprisedD.overwhelmed问题4选项A.toolB.componentC.systemD.solution问题5选项A.recurringB
41、rightC.experiencedD.past【答案】第1题:C第2题:B第3题:D第4题:D第5题:A【解析】设计面向对象的软件很难,而设计(可复用的)面向对象软件就更难了。你必须找到合适的(相关的)对象,以适当的粒度将它们划分为类,定义类接口和继承,并在它们之间建立关键关系。你的设计应该针对眼前的问题,但(一般 )足以解决未来的问题和要求。你也要避免重新设计,或者至少最小化它。有经验的面向对象设计师会告诉你,一个可重用和灵活的设计是很难第一次就“正确”的。在设计完成之前,他们通常会尝试多次重复使用,每次都是这样。然而,有经验的面向对象设计师确实能做出好的设计。同时,新的设计师们对可用的选项感到不安(第三题选项不知所措的意思),他们倾向于使用以前使用的非面向对象技术。电影要花很长时间才能