部分真题整理4

时间:2022-07-29 19:27:34
1、下面的代码运行的结果是:(B)
class B extends Object
{
static
{
System.out.println("Load B");
}
public B()
{
System.out.println("Create B");
}
}
class A extends B
{
static
{
System.out.println("Load A");
}
public A()
{
System.out.println("Create A");
}
}

public class Testclass
{
public static void main(String[] args)
{
new A();
}
}
Load B ->Create B->Load A -> Create A
Load B -> Load A ->Create B ->Create A
Load B -> Create B-> Create A -> Load A
Create B ->Create A ->Load B ->Load A
解析:
java类中的静态代码块只在类加载到内存时执行一次
B是A的父类,所以先加载B,再加载A
然后在new A()过程中首先构造父类,再构造子类


2、下列几种关于进程的叙述,()最不符合操作系统地进程的理解?(B)
进程是在多程序并行环境中的完整的程序
进程可以由程序、数据和进程控制描述
线程是一种特殊的进程
进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位
解析:
进程由进程控制块唯一确定


3、以下代码共调用多少次拷贝构造函数:(D)
Widget f(Widget u)
{ 
Widget v(u);
Widget w=v;
return w;
}
main(){
Widget x;
Widget y=f(f(x));
}
1
3
5
7
解析:
y=f(f(x)) 有两层 f() ,为了说明过程,把里面的一层标明为 f_1 ,外面一层标明为 f_2 。则 7 次调用分别是:
x -> f_1 的 u
f_1 的 u -> f_1 的 v
f_1 的 v -> f_1 的 w
f_1 的 w -> f_2 的 u
f_2 的 u -> f_2 的 v
f_2 的 v -> f_2 的 w
f_2 的 w -> y
f_1 的 v -> f_1 的 w为啥调用的不是重载赋值运算符?
在使用一个现有对象去初始化一个新对象时,使用复制构造函数,而非赋值构造函数; 若'='左边的对象已经初始化过了,这时才把'='看做是赋值构造函数。
在main()函数直接输入f(x);是调用4次(可以自己写个拷贝函数,输出1,结果得到4个1),按上述代码却调用7次(只得到7个1),所以感觉很奇怪,不知道编译器做了什么优化。。。


4、帧中继是一种( AD)的协议。
面向连接
网络协议
面积无连接
可靠
解析:
帧中继( Frame Relay)是一种用于连接计算机系统的面向分组的通信方法。它主要用在公共或专用网上的局域网互联以及广域网连接。大多数公共电信局都提供帧中继服务,把它作为建立高性能的虚拟广域连接的一种途径。帧中继是进入带宽范围从56Kbps到1.544Mbps的广域分组交换网的用户接口。
帧中继是一个提供连接并且能够支持多种协议、多种应用的多个地点之间进行通信的广域网技术,它定义了在公共数据网上发送数据的流程,属于高性能、高速率的数据连接技术。


5、
 int func(unsigned int i)
{
unsigned int temp = i;
temp = (temp & 0x55555555) + ((temp & 0xaaaaaaaa) >> 1);
temp = (temp & 0x33333333) + ((temp & 0xccccccccc) >> 2);
temp = (temp & 0x0f0f0f0f) + ((temp & 0xf0f0f0f0) >> 4));
temp = (temp & 0xff00ff) + ((temp & 0xff00ff00) >> 8);
temp = (temp & 0xffff) + ((temp & 0xffff0000) >> 16);
return temp;
}
请问 func(0x11530828)的返回值是: 1032
解析:
首先确定这个题是想考察数的二进制表示中1的个数的“平行算法”
分析改算法是如何实现二进制表示中1的个数统计的,为了方便理解,我们把代码改成如下的形式:
int func(unsigned int i)
{
unsigned int temp = i;
temp = (temp & 0x55555555) + ((temp>> 1) & 0x55555555); //temp相邻位相加 
temp = (temp & 0x33333333) + ((temp >> 2) & 0x33333333); //temp相邻(以2为单位)相加
temp = (temp & 0x0f0f0f0f) + ((temp>> 4) & 0x0f0f0f0f); //temp相邻(以4为单位)相加
temp = (temp & 0xff00ff) + ((temp>> 8) & 0xff00ff); //temp相邻(以8为单位)相加
temp = (temp & 0xffff) + ((temp>> 16) & 0xffff) ; //temp相邻(以16为单位)相加
return temp;
}
temp相邻位相加:相加原理若相邻的两个数为00则结果为00, 相邻的两个数为01或10则结果为01,相邻两个数为11则结果为10,也就是先小范围统计每两位中1的个数,后面的步骤在累计有多少个1.
0x11530828的二进制表示如下:
0 0 0 1 0 0 0 1 1 0 0 1 0 0 1 1 0 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0;
    0           1     0     1     1     1     0     2     0     0     1     0     0     1     1     0;
    1        1     2          2     0     1     1             1;
    2     4     1     2
    6     3
    9


6、在含有n个关键字的小根堆(堆顶元素最小)中,关键字最大的记录有可能存储在(D)位置上
[n/2]
[n/2]-1
1
[n/2]+2
解析:
小根堆中最大的数一定是放在叶子节点上,堆本身是个完全二叉树,完全二叉树的叶子节点的位置大于[n/2]


7、 cp拷贝命令的-f参数含义为?(D)
拷贝目录
递归处理
显示执行过程
强制进行拷贝


8、
unsigned int a= 0x1234; unsigned char b=*(unsigned char *)&a; 
在32位大端模式处理器上变量b等于(A)?
0x00
0x12
0x34
0x1234
解析:
unsigned int a= 0x1234; 其中int是4字节, 大端存储 ,补齐16进制表示为: 0x00 00 12 34
unsigned char b=*(unsigned char *)&a; 由于大端存储, 所以上述int a变量的最低地址存储的是
十六进制表示中最左边的1字节, 为0x00.


9、 建立动态路由需要用到的文件有?(D)
/etc/hosts
/etc/HOSTNAME
/etc/resolv.conf
/etc/gateways
解析:
/etc/hosts 主机名到 IP 地址的映射关系的文件
/etc/resolv.conf DNS 服务的配置文件
/etc/gateways 建立动态路由需要用到的文件


10、下面有关文件系统元数据的描述,说法错误的是?(D)
元数据指用来描述一个文件的特征的系统数据,诸如访问权限、文件拥有者以及文件数据块的分布信息等等
我们可以使用stat命令来查看文件更多的元数据信息
Unix/Linux系统允许,多个文件名指向同一个inode号码
文件A和文件B的inode号码虽然不一样,但是文件A的内容是文件B的路径。读取文件A时,系统会自动将访问者导向文件B,这是文件A就称为文件B的"硬链接"
解析:
我们知道文件都有文件名与数据,这在 Linux 上被分成两个部分:用户数据 (user data) 与元数据 (metadata)。用户数据,即文件数据块 (data block),数据块是记录文件真实内容的地方;而元数据则是文件的附加属性,如文件大小、创建时间、所有者等信息。在 Linux 中,元数据中的 inode 号(inode 是文件元数据的一部分但其并不包含文件名,inode 号即索引节点号)才是文件的唯一标识而非文件名。文件名仅是为了方便人们的记忆和使用,系统或程序通过 inode 号寻找正确的文件数据块。
硬链接 (hard link) 与软链接(又称符号链接,即 soft link 或 symbolic link)。链接为 Linux 系统解决了文件的共享使用,还带来了隐藏文件路径、增加权限安全及节省存储等好处。
若一个 inode 号对应多个文件名,则称这些文件为硬链接。换言之,硬链接就是同一个文件使用了多个别名。
若文件用户数据块中存放的内容是另一文件的路径名的指向,则该文件就是软链接。


11、 忽略内部接口的情况,不能用来修饰interface的有( ACD)
private
public
protected
static
解析:
only public & abstract are permitted
你既然定义了interface(接口),那肯定是要其它的类去实现它的, 不然你定义它干吗,所以不能用protected去修饰, 而要用public去修饰。
接口可以去继承一个已有的接口。
接口只能被public和默认修饰符修饰,protected也不行所以除了public其他的都要选


12、下面的说法那个正确(B)
#define NUMA 10000000
#define NUMB 1000
int a[NUMA], b[NUMB];

void pa()
{
int i, j;
for(i = 0; i < NUMB; ++i)
for(j = 0; j < NUMA; ++j)
++a[j];
}
void pb()
{
int i, j;
for(i = 0; i < NUMA; ++i)
for(j = 0; j < NUMB; ++j)
++b[j];
}
pa 和 pb 运行的一样快
pa 比 pb 快
pb 比 pa 快
无法判断
解析:
参考高质量C++编程在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的
循环放在最外层,以减少 CPU
跨切循环层的次数。例如示例 4-4(b)的效率比示例
4-4(a)的高。
for (row=0;
row<100; row++)
{
for ( col=0; col<5; col++ )
{

sum = sum + a[row][col];
}
示例 4-4(a) 低效率:长循环在最外层

}
for (col=0; col<5; col++ )
{
for (row=0;
row<100; row++)
{
sum = sum + a[row][col];
}
}

示例 4-4(b) 高效率:长循环在最内层
测试时pb比pa快,数组a比数组b大很多,可能跨更多的页,缺页率高或者缓存命中更低,所以pb快




13、 B-树中所有结点的平衡因子都为零(A)




14、 用来辅助软件开发、运行、维护、管理、支持等过程中的活动的软件称为软件开发工具,通常也称为(D)工具。
CAD
CAI
CAM
CASE
解析:
CAD:计算机辅助设计 , 指利用计算机及其图形设备帮助设计人员进行设计工作。
CAI: 计算机辅助教学,是在计算机辅助下进行的各种教学活动,以对话方式与学生讨论教学内容、安排教学进程、进行教学训练的方法与技术。
CAM:计算机辅助制造 ,是将计算机应用于制造生产过程的过程或系统。


15、运行下面这段C语言程序之后,输出在屏幕上的结果是:(A)
void foobar(int a, int *b, int **c)
{
int *p = &a;
*p = 101;
*c = b;
b = p;
}

int main()
{
int a = 1;
int b = 2;
int c = 3;
int *p = &c;
foobar(a, &b, &p);
printf("a=%d, b=%d, c=%d, *p=%d\n", a, b, c, *p);
return (0);
}
a=1, b=2, c=3, *p=2
a=101, b=2, c=3, *p=2
a=101, b=101, c=2, *p=3
a=1, b=101, c=2, *p=3
解析:
A: a=1, b=2, c=3, *p=2
函数foobar中的a是按值传递,因此在函数中的修改不会引起主函数中的变化。
函数中b传递的是主函数中b的指针,语句b = p ,其中p指向的是函数foobar内局部变量a的地址,让传递过去的指针换了指向的数据,原来指向的数据(主函数中的b)不会有影响。如果这里是*b = *p那么主函数中的b也要相应变化。
函数中的c传递的是双重指针,*c = b,也就是让主函数中的p指针指向了主函数中的b的地址
在函数foobar中对指针的变化没有影响到主函数,只是让双重指针更换了指向而已
说了半天上个图吧,比较直接。说明:值用=表示,指针用:表示,双重指针用::表示



16、长为N的字符串中匹配长度为M的子串的算法复杂度是多少?(B)
O(N)
O(M+N)
O(N+logM)
(M+logN)


17、实时操作系统的基本特性有?(AB)
提供高可靠性
提供及时响应性
提供多路性:即众多联机用户可以同时使用同一台计算机
提供独占性:各终端用户感觉到自己独占了计算机
解析:
在特定时间内完成特定的任务,实时性与可靠性。
所谓“实时操作系统”,实际上是指操作系统工作时,其各种资源可以根据需要随时进行动态分配。由于各种资源可以进行动态分配,因此其处理事务的能力较强、速度较快。 应该说,实时操作系统是在早期的操作系统基础上发展起来的,早期的操作系统的各种资源都是事先已经分配好的,工作期间这些资源不能再重新进行分配。因此其处理事务的能力较差、速度较慢,现在则称之为“非实时操作系统”。但“非实时操作系统”诞生时,其功能、性能等在当时也是非常强的,人们在未认识到更好的操作系统之前并不将其这样称呼。将来如果新的、功能更强的、实时性能更高的操作系统出现,也许现在称之为“实时”的操作系统则可能将让位于新的“实时操作系统”了。从这方面讲“实时操作系统”是一个相对的概念的


18、软件测试计划评审会需要哪些人员参加?(ABCD)
项目经理
SQA 负责人
配置负责人
测试组
解析:
软件测试计划评审会需要有 项目经理、客户(可选)、配置管理员、测试经理、开发组长等人的参加。


19、下面对路由器的描述正确的是(交换机指二层交换机)(ADE )
相对于交换机和网桥来说,路由器具有更加复杂的功能
相对于交换机和网桥来说,路由器具有更低的延迟
相对于交换机和网桥来说,路由器可以提供更大的带宽和数据转发功能
路由器可以实现不同子网之间的通信,交换机和网桥不能
路由器可以实现虚拟局域网之间的通信,交换机和网桥不能
解析:
A,路由器工作在网络层,交换机工作在链路层,路由器具有交换机的全部功能,更复杂
B,错误,设备更复杂则延时更大。因为需要维护路由表
C,错误,交换机可以提供更大的带宽和数据转发功能
D,正确。路由器可以构建一个局域网,交换机锁连接的是同一个局域网内的主机
E,正确。路由器可以构建VLAN,二层交换机不能


20、请描述http请求get和post的区别,下面描述正确的有:(CD)
GET用于信息获取,而且应该是安全的和幂等的,POST表示可能修改变服务器上的资源的请求
POST比GET安全,因为采用了SSL加密
GET方式提交的数据最多只能是1024字节,理论上POST没有限制,可传较大量的数据
POST提交,把提交的数据放置在是HTTP包的包体中,GET提交的数据会在地址栏中显示出来