自练题20170730

1.所有的函数在定义它的程序中都是可见的,正确吗

答:错误,类的某些私有或保护成员函数就不可见

2.有一个用数组 C[1..m]表示的环形队列,m 为数组的长度。假设 f 为队头元素在数组中的位置,r 为队尾元素的后一位置(按顺时针方向)。若队列非空,则计算队列中元素个数的公式应为?
(m+r-f)mod m
r-f
(m-r+f) mod m
(m-r-f) mod m
(r-f) mod m

答:选第一个,r-f是长度,为防止出现负数+m,然后mod m
根据Clifford A.Shaffer写的数据结构与算法分析,环形(顺序)队列的元素个数的公式应为(r+m-f)%m+1,最后还要加上1

3.下面代码的输出是什么?

auto fn = [](unsigned char a){
    cout << std::hex << (int)a << endl;
};
fn(-1);

ff
256
-1
Undefined
0

答:选第一个
int型-1的存储方式为补码(32位,4字节),1111 1111 1111 1111 1111 1111 1111 1111
转换为unsigned char(8位,1字节)发生字节截断,取最后八位为1111 1111
再转换为int后为0000 0000 0000 0000 0000 0000 1111 1111,即为ff
第二种解法:-1 = 1000 0001
存储的是补码形式
①反码是1111 1110【符号位不变,其他位取反】
②补码是1111 1111【反码加1】
然后std::hex以十六进制显示【1111 1111】

4.用不带头结点的单链表存储队列,其队头指针指向队头结点,队尾指针指向队尾结点,则在进行出队操作时
仅修改队头指针
仅修改队尾指针
队头、队尾指针都可能要修改
队头、队尾指针都要修改

答:选第三个,当队列中只有一个元素时,出队后需要清空对头和队尾指针。

5.你被需要检查系统中的设备情况,需要检查哪个log日志?
/var/log/tmp
/var/log/lastlog
/var/log/messages
/var/log/utmp

答:选第三个,
①/var/log/messages — 包括整体系统信息,其中也包含系统启动期间的日志。此外,mail,cron,daemon,kern和auth等内容也记录在var/log/messages日志中。
②/var/log/dmesg — 包含内核缓冲信息(kernel ring buffer)。在系统启动时,会在屏幕上显示许多与硬件有关的信息。可以用dmesg查看它们。
③/var/log/auth.log — 包含系统授权信息,包括用户登录和使用的权限机制等。
④/var/log/boot.log — 包含系统启动时的日志。
⑤/var/log/daemon.log — 包含各种系统后台守护进程日志信息。
⑥/var/log/dpkg.log – 包括安装或dpkg命令清除软件包的日志。
⑦/var/log/kern.log – 包含内核产生的日志,有助于在定制内核时解决问题。
⑧/var/log/lastlog — 记录所有用户的最近信息。这不是一个ASCII文件,因此需要用lastlog命令查看内容。
⑨/var/log/maillog /var/log/mail.log — 包含来着系统运行电子邮件服务器的日志信息。例如,sendmail日志信息就全部送到这个文件中。
⑩/var/log/user.log — 记录所有等级用户信息的日志。
①①/var/log/Xorg.x.log — 来自X的日志信息。
①②/var/log/alternatives.log – 更新替代信息都记录在这个文件中。
①③/var/log/btmp – 记录所有失败登录信息。使用last命令可以查看btmp文件。例如,”last -f /var/log/btmp | more“。
①④/var/log/cups — 涉及所有打印信息的日志。
①⑤/var/log/anaconda.log — 在安装Linux时,所有安装信息都储存在这个文件中。
①⑥/var/log/yum.log — 包含使用yum安装的软件包信息。
①⑦/var/log/cron — 每当cron进程开始一个工作时,就会将相关信息记录在这个文件中。
①⑧/var/log/secure — 包含验证和授权方面信息。例如,sshd会将所有信息记录(其中包括失败登录)在这里。
①⑨/var/log/wtmp或/var/log/utmp — 包含登录信息。使用wtmp可以找出谁正在登陆进入系统,谁使用命令显示这个文件或信息等。
②0 /var/log/faillog – 包含用户登录失败信息。此外,错误登录命令也会记录在本文件中。
除了上述Log文件以外, /var/log还基于系统的具体应用包含以下一些子目录:
/var/log/httpd/或/var/log/apache2 — 包含服务器access_log和error_log信息。
/var/log/lighttpd/ — 包含light HTTPD的access_log和error_log。
/var/log/mail/ – 这个子目录包含邮件服务器的额外日志。
/var/log/prelink/ — 包含.so文件被prelink修改的信息。
/var/log/audit/ — 包含被 Linux audit daemon储存的信息。
/var/log/samba/ – 包含由samba存储的信息。
/var/log/sa/ — 包含每日由sysstat软件包收集的sar文件。
/var/log/sssd/ – 用于守护进程安全服务。

6.关于重载和多态正确的是
A如果父类和子类都有相同的方法,参数个数不同,将子类对象赋给父类后,由于子类继承于父类,所以使用父类指针,调用父类方法时,实际调用的是子类的方法
B选项全部都不正确
C重载和多态在C++面向对象编程中经常用到的方法,都只在实现子类的方法时才会使用
D

class A{
    void test(float a){cout<<"1";}
};
class B:public A{
    void test(int b){cout<<"2";}
};
A *a=new A;
B *b=new B;
a=b;
a.test(1.1);

结果是1

答:选第二个
A调用的是父类的方法,
C重载也包含函数重载,
D中a.test(1.1)是错误的,应该为(*a).test(1.1);然后在class A里面加public就对了。
D选项有2点错误
1.class默认的属性为private,不能用对象调用private
2.好多人认为在基类的test加上virtual就对了,其实 不然,虚函数要求返回值,参数名,参数个数,函数类型都相同,很显然基类和派生类的参数类型是不同的。对,这个例子根本不是覆盖!它是隐藏,隐藏分为2种: (1) 派生类的函数与基类的函数同名,但是参数列表有所差异。此时,不论有无virtual关键字,基类的函数在派生类中将被隐藏。(2) 派生类的函数与基类的函数同名,参数列表也相同,但是基类函数没有virtual关键字。
首先,class默认访问权限为private,故所有函数都不能在外部被调用。
其实,即使把函数的访问权限声明为public,也还是不对。通过指针调用函数,应该使用a->test(1.1)

7.设从磁盘将一块数据传送到缓冲区所用实际为80μs,将缓冲区中数据传送到用户区所用时间为40μs,CPU处理数据所用的时间为30μs。则处理该数据,采用单缓冲传送磁盘数据,系统所用总时间为多少us
这里写图片描述

答:120us

8.段式和页式存储管理的地址结构很类似,但是他们之间有实质上的不同,表现为()。
A页式的逻辑地址是连续的,段式的逻辑地址可以不连续
B页式的地址是一维的,段式的地址是二维的
C分页是操作系统进行,分段是用户确定
D各页可以分散存放在主存,每段必须占用连续的主存空间
E页式采用静态重定位方式,段式采用动态重定位方式

答:选BD。各页可以分散存放在主存,每段必须占用连续的主存空间;分页和分段者是操作系统确定和进行的;页式和段式都是采用动态重定位方式。

9.关系规范化中的 删除 异常是指( )
不该删除的数据被删除
不该插入的数据被插入
应该删除的数据未被删除
应该插入的数据未被插入

答:选第一个,插入异常:不该插入的数据被插入

10.分时操作系统的主要特征之一是提高()。
计算机系统的实时性
计算机系统的交互性
计算机系统的可靠性
计算机系统的安全性

答:选第二个

11.两个栈共用静态存储空间,对头使用也存在空间溢出问题,对吗

答:对,既然是静态空间,大小就是事先确定的。所以存在空间溢出的问题

12.拓扑排序的有向图中,最多存在一条环路,正确吗

答:错误,有环的有向图不能用拓扑排序,换句话说就是拓扑排序是针对无环有向图的,拓扑排序的步骤:
(1)、找到一个没有后继的顶点(如果有一条边从A指向B,那么B是A的后继)。
(2)、从图中删除这个顶点,在列表的前面插入顶点的标记。
(3)、重复步骤1和2.直到所有的顶点都从图中删除。这时列表显示的顶点顺序就是拓扑排序的结果。
环路:环图是不能进行拓扑排序的,如果有N个顶点的有向图有超过N-1条边,那么必定存在环。
拓扑排序中,是不会存在环的。存在环还哪来的拓扑排序?!

13.

int i=10j=10,k=3;k*=i+j

k最后的值是?

答:60,=优先级从右到左,+优先级高于=,从左到右,相当于k*=(i+j)

14.单道程序系统中程序的执行也需要同步和互斥,正确吗
答:错误, 单道程序系统几个特点:
1. 资源独占性
任何时候,位于内存中的程序可以使用系统中的一切资源,不可能有其他程序与之竞争
2. 执行的顺序性
内存中只有一个程序,各个程序是按次序执行的。在做完一个程序的过程中,不可能夹杂进另一个程序执行
3. 结果的可再现性
只要执行环境和初始条件相同,重复执行一个程序,获得的结果总是一样的
4. 运行结果的无关性
程序的运行结果与程序执行的速度无关。系统中的作业以串行的方式被处理,无法提高CPU、内存的利用率
本来就是有序的,故不需要同步互斥
单道程序资源独占,执行是顺序的,所以不需要同步和互斥!

15.设计批处理多道系统时,首先要考虑的是()
灵活性和可适应性
系统效率和吞吐量
交互性和响应时间
实时性和可靠性

答:选第二个,在单道批处理系统中,内存中仅有一道作业。他无法充分利用系统中的所有资源,致使系统性能较差。为了进一步提高资源的利用率和系统吞吐量 ,由此形成了多道批处理系统

16.下面关于系统调用的描述中,错误的是()
系统调用把应用程序的请求传输给系统内核执行
系统调用中被调用的过程运行在”用户态”中
利用系统调用能够得到操作系统提供的多种服务
是操作系统提供给编程人员的接口
系统调用给用户屏蔽了设备访问的细节
系统调用保护了一些只能在内核模式执行的操作指令

答:选第二个,系统调用通过中断完成,这一过程中系统由用户态变为内核态。 在内核态下,系统可以无限制的访问内核资源。用户空间与系统空间所在的内存区间不一样,同样,对于这两种区间,CPU的运行状态也不一样。 在用户空间中,CPU处于”用户态”;在系统空间中,CPU处于”系统态”。

17.设只含根结点的二叉树高度为1,现有一颗高度为h(h>1)的二叉树上只有出度为0和出度为2的结点,则此二叉树中所包含的结点数至少为多少个?
2^h-1
2h-1
2h
2h+1

答:选第二个,除了根 结点 其他每层两个结点即可 2h-1

18.以下有关C语言的说法中,错误的是__
内存泄露一般是指程序申请了一块内存,使用完后,没有及时将这块内存释放,从而导致程序占用大量内存。
可以通过malloc(size_t)函数调用申请超过该机器物理内存大小的内存块。
无法通过内存释放函数free(void*)直接将某块已经使用完的物理内存直接还给操作系统。
可以通过内存分配函数malloc(size_t)直接申请物理内存。

答:选最后一个,内存泄漏也称作“存储渗漏”,用动态存储分配函数动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元。直到程序结束。(其实说白了就是该内存空间使用完毕之后未回收)即所谓内存泄漏。
free释放的内存不一定直接还给操作系统,可能要到进程结束才释放。
可以直到malloc不能直接申请物理内存,它申请的是虚拟内存

19.使用 char* p = new char[100]申请一段内存,然后使用delete p释放,有什么问题?
会有内存泄露
不会有内存泄露,但不建议用
编译就会报错,必须使用delete []p;
编译没问题,运行会直接崩溃

答:选第二个,C++告诉我们在回收用 new 分配的单个对象的内存空间的时候用 delete,回收用 new[] 分配的一组对象的内存空间的时候用 delete[]。
关于 new[] 和 delete[],其中又分为两种情况:(1) 为基本数据类型分配和回收空间;(2) 为自定义类型分配和回收空间。
基本类型的对象没有析构函数,所以回收基本类型组成的数组空间用 delete 和 delete[] 都是应该可以的;但是对于类对象数组,只能用 delete[]。
所以一个简单的使用原则就是:new 和 delete、new[] 和 delete[] 对应使用。

20.在请求分页系统中,页表中的辅存始地址是供()参考的。
页面置换
内存分配
页面换出
页面调入

答:选最后一个,页表项有:
|页号|物理块号|状态位P|访问字段A|修改位M|外存地址|

各字段说明如下:
1)状态位P:用于指示该页是否已调入内存,供程序访问时参考;
2)访问字段A:用于记录本页在一段时间内被访问次数,供选择换出页面时参考;
3)修改位M:表示该页在调入内存后是否被修改过,供置换页面时参考;
4)外存地址:用于指出该页在外存上的地址,通常是物理块号,供调入该页时参考;
辅存——即磁盘
辅存地址位,也叫高度缓存禁止位,对于映射到设备寄存器而不是常规内存的页面来说,这个位很重要;
例如: 操作系统正在循环等待着某个I/O设备对他的指令做出响应,保证硬件是不断的从设备中读取数据而不是访问一个旧的被高速缓存的副本是非常重要的,通过这一位就可以禁止高速缓存。

21.Linux系统中,已经将DHCP服务器架设好,客户端的网络接口eth0,可以通过( )命令获得服务器分配的IP地址。
dhclient
ifdown eth0;ifup eth0
ifconfig
service network stop;service network start

答:选ACD,ifconfig是查看eth0的IP地址,其它都是分配IP地址

22.下面这个程序执行后会有什么错误或者效果:

#define MAX 255
int main()
{
     unsigned char A[MAX], i;
     for (i = 0; i <= MAX; i++)
         A[i] = i;
}

数组越界
死循环
栈溢出
内存泄露

答:选AB,死循环加数组越界访问(C/C++不进行数组越界检查)
MAX=255
数组A的下标范围为:0..MAX-1,这是其一..
其二.当i循环到255时,循环内执行:
A[255]=255;
这句本身没有问题..但是返回for (i=0;i<=MAX;i++)语句时,
由于unsigned char的取值范围在(0..255),i++以后i又为0了..无限循环下去.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值