软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷45
-
(5)
-
(3)
-
(4)
-
阅读以下函数说明和Java代码,将应填入(n)处的字句写在对应栏内。
[说明]
很多时候,希望某些类只有一个或有限的几个实例,典型解决方案是所谓单身(Singleton)模式。但在多线程情况下,Singleton模式有可能出现问题,需要进行同步检查。如果对“检查singleton对象是否已经创建”进行同步,则存在严重的瓶颈,所有的线程都必须等待检查对象是否存在。解决方式是一种称为Double-Checked-Locking模式,其意图是将非必须的锁定优化掉,同步检查最多只发生一次,因此不会成为瓶颈。以下是Java语言实现,能够正确编译通过。
[Java代码]
public class USTax {
private static USTax instance=null;
(1) USTax(){}
private (2) static void doSync(){
if(instance==null){
System.out.println("实例不存在,创建实例..");
instance=(3);
System.out.println("实例创建成功");
}else{
System.out.println("实例已被创建了");
}
}
public static USTax getInstance(){
if(instance==null){
System.out.println("实例暂时不存在");
(4);//同步控制
}else{
System.out.println("实例已经存在");
}
return (5);
}
}
(1)
-
(5)
-
(2)
-
(3)
-
(4)
-
(5)
-
阅读以下说明和c++代码,将应填入(n)处的字句写在答题纸对应栏内。
[说明]
很多时候,希望某些类只有一个或有限的几个实例,典型解决方案是所谓单身(Singleton)模式。但在多线程情况下,Singleton模式有可能出现问题,需要进行同步检查。如果对“检查Singleton对象是否已经创建”进行同步,则存在严重的瓶颈,所有的线程都必须等待检查对象是否存在。解决方式是一种称为Double-Checked-Locking模式,其意图是将非必须的锁定优化掉,同步检查最多只发生一次,因此不会成为瓶颈。以下是c++语言实现,能够正确编译通过。
[C++代码]
class USTax{
(1):
USTax(){};//构造函数
public:
static USTax* getInstance();
private:
static USTax*instance;
};
(2)=NULL;
USTax*USTax::get Instance(){
if(instance==NULL){
//进行某种同步
cout<<"实例暂时不存在"< if( (3) ){
cout<<"实例不存在,创建实例..."< instance=(4);
cout<<"实例创建成功"< }
else{
cout<<"实例已被创建了"< }
}
else{
cout<<"实例已经存在"< }
return (5);
}
(1)
-
(2)
-
(4)
-
(3)
-
进程调度算法解决以何种次序对各就绪进程进行处理机的分配以及按何种时间比例让进程占用处理机。
常见的的调度算法有:先进先出FIFO(按照进程进入就绪队列的的先后次序选择)、时间片轮转RR(进程轮流运行一个时间片)、最高优先级HPF(分配给具有最高优先级的就绪进程)。
在实际系统中,调度模式往往是几种调度算法的结合。某系统按优先级别设置若干个就绪队列,对级别较高的队列分配较小的时间片Si(i=1,2,…,n),即有S1<S2<…n。除第n级队列是按RR法调度之外,其他各级队列均按FIFO调度。系统总是先调度级别较高的队列中的进程,仅当该队列为空时才去调度下一级队列中的进程。当执行进程用完其时间片时便被剥夺并进入下一级就绪队列。当等待进程被唤醒时,它进入其优先级相应的就绪队列,若其优先级高于执行进程,便抢占CPU执行进程。
现有五个进程P1、P2、P3、P4、P5,它们同时依次进入就绪队列,它们所需的CPU时间和优先级如图4-2所示。注意,优先数越大优先级越低。
[图4-2]
在该系统中,假定不同级别的时间片为S1=2i-1(i为优先数),请给出五个进程的CPU占用序列,并注明每次占用所用的时间。
-
(2)
-
阅读下列函数说明和C代码,将应填入(n)外的字句写在对应栏内。
[说明]
为网球比赛的选手安排比赛日程。设有n(n=2m)位选手参加网球循环赛,循环赛共进行n-1天,每位选手要与其他n-1位选手赛一场,且每位选手每天赛一场,不轮空。
设n位选手被顺序编号为1,2,…,n,比赛的日程表是一个n行n-1列的表,第i行j列的内容是第i号选手第j天的比赛对手。用分治法设计日程表,就是从其中一半选手(2m-1位)的比赛日程导出全体2m选手的比赛日程。从众所周知的只有两位选手的比赛日程出发,反复这个过程,直至为n位选手安排好比赛日程为止。
如两位选手比赛日程表如下所示:
如四位选手比赛日程表如下所示:
函数中使用的预定义符号如下:
#define M 64
int a[M+1][M];
[函数]
voidd main(){
int twoml,twom,i,j,m,k;
printf("指定n(=2的k次幂)位选手,请输入k:\n");
scanf("%d",&k);
/*8预设两位选手的比赛日程*/
a[1][1] =2;
a[2][1] =1;
m=1;
twoml=1;
while ( (1) ){
m++;
twoml+=twoml;
twom=twoml*2;/*为2^m位选手安排比赛日程*/
/*填日程表的左下角*/
for(i=twoml+1; (2) ;i++){
for(j=1; j<=twoml-1; j++){
a[i][j]=a[i-twoml][j]+twoml;
}
}
/*填日程表的右上角*/
a[1][twoml]= (3) ;/+填日程表右上角的第1列*/
for(i=2; i<=twoml; i++){
a[i][twoml]=a[i-1][twoml]+1;
}
/*填日程表右上角的其他列,参照前一列填当前列*/
for(j=twoml+1; j(twom;j++){
for(i=1; i a[i][j]= (4) ;
}
a[twoml][j]=a[1][j-1];
}
/*填日程表的右下角*/
for(j=twoml; j for(i=1;i<=twoml; i++){
a[ (5) [j]=i;
}
}
/*输出日程表*/
for(i=1; i<=twom; i++){
for(j=1;j printf("%4d",a[i][j]);
}
printf("\n");
}
printf("\n");
}
}
(1)
-
阅读下列说明和图表,回答问题1到问题3。
[说明]
在多道程序系统中,各个程序之间是并发执行的,共享系统资源。CPU需要在各个运行的程序之间来回地切换,这样的话,要想描述这些多道的并发活动过程就变得很困难。为此,操作系统设计者提出了进程的概念。
进程是具有独立功能的程序关于某个数据集合上的一次动态执行过程,是系统进行资源分配和调度的独立单位。
进程在生命消亡前处于且仅处于三种基本状态之一。运行态(Running):进程占有CPU,并在CPU上运行。就绪态(Ready):一个进程已经具备运行条件,但由于无CPU暂时不能运行的状态(当调度给其CPU时,立即可以运行)。等待态(Blocked):指进程因等待某种事件的发生而暂时不能运行的状态,即使CPU空闲,该进程也不可运行。指出如下进程状态转换图(图4-1)中“状态1”~“状态3”分别是什么状态。
[图4-1]
-
如果单CPU系统中有N个进程,运行的进程最多几个,最少几个;就绪进程最多几个,最少几个:等待进程最多几个,最少几个?
-
根据题意,用题中及类图中提供的术语指出图3-3所示的打电话序列图中的消息(A)~(D)。
-
阅读下列说明和图,回答问题1至问题2,
[说明]
移动电话是传统固定式电话的延伸,通过无线电网络可以与千里之外的朋友沟通而不受电话线的束缚。现在的移动电话功能更全面,除了作为电话使用外,还可以发送短信,可以管理电话簿,可以下载铃声、图案。
手机由键盘、显示屏以及移动通信设备组成,移动通信设备负责发送和接收信号,与基站进行连线。打电话的流程如下:
(1) 用户拨电话号码,每按下一个数字键显示屏上显示相应数字;
(2) 按OK键进行连线,显示屏上显示“连线中…”,请求连接基站,基站通过移动电话网络连接到对方手机,若有误则返回相关信息;
(3) 接通后,显示屏显示“连线成功”;
(4) 打电话结束后,按Cancel送出断线信号,通知移动电话基站断线,基站切断连接,显示屏显示“断线成功”。
该系统采用面向对象方法开发,系统中的类以及类之间的关系用UML类图表示,图3-1是该系统的用例图,图3-2是该系统的类图,图3-3描述了打电话(包括断开)的序列图。
[图3-1]
[图3-2]
[图3-3]
根据题意,用题中及类图中提供的术语指出图3-1中的参与者A及用例B、C各是什么。
-
查询内科病区患胃病的病人的姓名。 A.σName="内科"∨SC="胃病"(π2(R))
B.σName="内科"∧SC="胃病"(π2(R))
C.π2(σName="内科"∨SC="胃病"(R))
D.π2(σName="内科"∧SC="胃病"(R))
-
选出正确的关系代数表达式。
查询所有“外科”病区和“内科”病区的所有医生姓名; A.σName="外科"∨Name="内科"(π4(Q))
B.σName="外科"∧Name="内科"(π4(Q))
C.π4(σName="外科"∨Name="内科"(Q))
D.π4(σName="外科"∧Name="内科"(Q))
-
层次模型不能直接表示多对多联系,为什么?可采用哪些方法进行多对多联系的表示。
-
阅读下列说明和E-R图,回答问题1至问题4,
[说明]
图2-1是某医院组织的结构图。该医院分为多个病区,每个病区有一个唯一的编号,一个病区包括多个病房,多名医生:每位医生有一个唯一的编号,负责管辖其主治病人的所有病房;病人住院后给以一个唯一的编号,根据“患何病科”住在相应病区的某个病房里,有且仅有一位医生担任主治医生,除主治医生外其他医生不对其负责。
现假定病区名称有“内科”和“外科”, “内科”病区又细分为多个病区,以编号区分,名称都为“内科”; “外科”病区亦然。图2-2是经分析得到的E-R图。
[图2-1]
[图2-2]
实体间的联系有“一对一”、“一对多”和“多对多”,指出图2-2中各联系分别属于哪一种。
-
根据题意,指出加工2子图(图1-3B)中缺失的数据流的名称,并指出该数据流的起点和终点。加工2子图(图1-4)中有一条数据流是错误的,请指出这条数据流的起点和终点。
-
根据题意,指出加工1子图(图1-3A)中缺失的数据流的名称,并指出该数据流的起点和终点。
-
阅读下列说明和数据流图,回答问题1至问题3,
[说明]
考务处理系统具有如下功能:
(1)对考生送来的报名单进行检查。
(2)对合格的报名单编好准考证号后将准考证送给考生,并将汇总后的考生名单送给阅卷。
(3)对阅卷站送来的成绩清单进行检查,并根据制订的合格标准审定合格者。
(4)制作考生通知单送给考生。
(5) 进行成绩分类统计(按地区、年龄、文化程度、职业、考试级别等分类)和试题难度分析,产生统计分析表。
以下是经分析得到的数据流图及部分数据字典,有些地方有待填充,假定顶层数据流图是正确的。图1-1是顶层数据流图,图1-2是第0层数据流图,图1-3是第l层数据流图,其中(A)是加工1的子图,(B)是加工2的子图。
[图1-1]
[图1-2]
[图1-3]
[数据字典]
报名单=地区+序号+姓名+性别+年龄+文化程度+职业+考试级别+通信地址
正式报名单=报名单+准考证号
准考证=地区+序号+姓名+准考证号+考试级别
考生名单={准考证号+考试级别}
统计分析表=分类统计表+难度分析表
考生通知单=考试级别+准考证号+姓名+合格标志+通信地址
根据题意,指出0层数据流图(图1-2)中缺失的数据流的名称,并指出该数据流的起点和终点。