笔试题总结--选择题(每日更新)
Posted 水澹澹兮生烟.
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了笔试题总结--选择题(每日更新)相关的知识,希望对你有一定的参考价值。
正确答案是红色的选项。
1.以 下 for 循 环 的 执 行 次 数 是()。
for(x=0,y=0;(y=123)&&(x<4);x++);
A.是无限循环 B.循环次数不定 C.4次 D.3次
2.以下程序的运行结果是()
int main(void) {
printf("%s , %5.3s\\n","computer","computer");
return 0;
}
A.computer , puter B.computer , com
C.computer , computer D.computer , compu.ter
解析:%m.ns 输出占m列,但只取字符串中左端n个字符。这n个字符输出在m列的右侧,左补空格。
3.int *p[4] 与选择项中的 说明 与() 等价 。
A.int p[4] B.int *p C.int *(p[4]) D.int (*p)[4]
解析:int* p1[4]此时可知[]的结合性比*的结合性强,因此[]先结合,因此他是一个数组,他是一个指针数组,因此与C选项等价,而int(*p2)[4]此时()的优先级最大,*先于p结合,因此它是一个指针,是一个数组指针。
4.若有定义语句: int a=10 ; double b=3.14 ; 则表达式 'A'+a+b 值的类型是()
A.char B.int C.double D.float
解析:是double类型,因为按照类型大的与类型小的运算,强制转换类型小的进行运算的规则,double>int>char,因此结果是double类型。
5.在()情况下适宜采用 inline 定义内联函数 。
A 函数体含有循环语句 B 函数体含有递归语句
C 函数代码少、频繁调用 D 函数代码多,不常调用
6.在 c++ 语言中,对函数参数默认值描述正确的是()
A 函数参数的默认值只能设定一个 B 一个函数的参数若有多个,则参数默认值的设定可以不连续
C 函数参数必须设定默认值 D 在设定了参数的默认值后,该参数后面定义的所有参数都必须设定默认值
解析:c++在声明函数原型的时可为一个或者多个参数指定默认的参数值,也称之为缺省参数。函数的默认参数从左向右,如果一个参数设定了设定了参数的默认值,那么参数后面定义的所有参数都必须设定默认值,如果函数声明和函数定义分开写,函数声明和函数定义不能同时设置默认参数
7.下列静态数据成员的特性中,错误的是()
A 引用静态数据成员时,要在静态数据成员名前加和作用域符号
B 说明静态数据成员时前边要加关键字static来修饰
C 静态数据成员在类体外进行初始化
D 静态数据成员不是所有对象所共有的
8.选择表达式 11|10 的结果()。(本题数值均为十进制)
A 11 B 10 C 8 D 2
解析: 11:1011,10:1010,此时1011|1010结果为1011,即11。
9.下面叙述不正确的是() 。
A 派生类一般都用公有派生 B 对基类成员的访问必须是无二义性的
C 赋值兼容规则也适用于多重继承的组合 D 父类的公有成员在派生类中仍然是公有的
解析:
10.下列代码的运行结果是()
int a[]={1,2,3,4};
int *b=a;
*b+=2;
*(b+2)=2;
b++;
printf(“%d,%d\\n”,*b,*(b+2));
A 1,3 B 1,2 C 2,4 D 3,2
根据上面的代码我们可以知道,*b+=2,此时指针b指向数组a的第一个元素,并且进行加法操作,此时a[0]=3,*(b+2)=2,此时(b+2)相当于指向数组的第三个元素a[2],并且将a[2]进行赋值为2;进一步操作b++,则指针b向后移动一位,指向a[1],而(b+2)指向a[3],此时数组啊中的值为[3,2,2,4],且输出的值为2,4。
11.在32位cpu上选择缺省对齐的情况下,有如下结构体定义,则sizeof(struct A)的值为()
struct A{
unsigned a : 19;
unsigned b : 11;
unsigned c : 4;
unsigned d : 29;
char index;
};
A 9 B 12 C 16 D 20
在32为cpu上,因此每行支持4个字节即32比特位。 那么此时a与b共用一行,占4个字节;且此时c是4个比特位,而第一行只剩下2个,且d与c比特位相加大于32位,c与d各占一行,占了8个比特位,char类型的大小为2个字节即16比特位,那么他也要自己独占一行,且为了保持对其,需要把剩余空间补齐,所以有4*4=16。
12.以下关于C++的描述中哪一个是正确的()
A 任何指针都必须指向一个实例 B 子类指针不可以指向父类实例
C 任何引用都必须指向一个实例 D 引用所指向的实例不可能无效(有问题)
解析:7.引用
13.以下不是double compare(int,int)的重载函数的是()
A int compare(double,double)
B double compare(double,double)
C double compare(double,int)
D int compare(int,int)
解析:函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数或类型或顺序)必须不同,常用来处理实现功能类似数据类型不同的问题。
14.关于虚函数的描述正确的是()
A 派生类的虚函数与基类的虚函数具有不同的参数个数和类型
B 内联函数不能是虚函数
C 派生类必须重新定义基类的虚函数
D 虚函数可以是一个static型的函数
15.关于c++的inline关键字,以下说法正确的是()
A 使用inline关键字的函数会被编译器在调用处展开
B 头文件中可以包含inline函数的声明
C 可以在同一个项目的不同源文件内定义函数名相同但实现不同的inline函数
D 定义在Class声明内的成员函数默认是inline函数
E 优先使用Class声明内定义的inline函数
F 优先使用Class实现的内inline函数的实现
16.能把函数处理结果的二个数据返回给主调函数,在下面的方法中不正确的是()
A return这二个数 B 形参用数组 C 形参用二个指针 D 用二个全局变量
解析:函数只能返回一个结果,所以A错误;将形参存在数组中,修改数组中内容,可以通过数组将修改结果带出去,B正确;形参如果用指针,最终指向的是外部的实参,在函数中对指向指向内容进行修改,改变的就是外部的实参,C正确;全局变量不受函数的结束而结束,在函数中改变全局变量,主调函数中可以看到改变之后的结果,D正确。
17.当一个类对象的生命周期结束后,关于调用析构函数的描述正确的是:()
A 如果派生类没有定义析构函数,则只调用基类的析构函数
B 如果基类没有定义析构函数,则只调用派生类的析构函数
C 先调用派生类的析构函数,后调用基类的析构函数
D 先调用基类的析构函数,后调用派生类的析构函数
解析:他是类中的默认成员函数,如果没有定义,编译器会自动生成。派生类对象析构清理先调用派生类析构再调基类的析构,派生类的析构函数会在被调用完成后自动调用基类的析构函数清理基类成员。因为这样才能保证派生类对象先清理派生类成员再清理基类成员的顺序。
18.下面3段程序代码的效果一样吗()
int b;
(1)const int *a = &b;
(2)int const *a = &b;
(3)int *const a = &b;
A (2)=(3) B (1)=(3) C (1)=(2) D 都不一样 E 都一样
19.下面关于一个类的静态成员描述中,不正确的是()
A 静态成员变量可被该类的所有方法访问 B 该类的静态方法只能访问该类的静态成员函数
C 该类的静态数据成员变量的值不可修改 D 子类可以访问父类的静态成员
E 静态成员无多态特性
20.在系统内存中设置磁盘缓冲区的主要目的是()。
A 减少磁盘 I/O 次数 B 减少平均寻道时间
C 提高磁盘数据可靠性 D 实现设备无关性
21.IP地址205.140.36.68的哪一部分表示网络号()
A 205 B 205.140 C 68 D 205.140.36
22.IP数据报分片的重组通常发生在()
A 源主机和数据报经过的路由器上 B 源主机上
C 数据报经过的路由器上 D 目的主机上
解析:
23.以下不属于tcp连接断开的状态是()
A .TIME_WAIT B. FIN_WAIT_1 C .SYNC_SENT D. FIN_WAIT_2
分析:选项C是三次握手是发生的状态。(详解)
24.ip地址10.1.8.0/24和10.1.9.0/24,下列哪个是正确的汇总网段()
A. 10.0.0.0/8 B. 10.1.0.0/16 C. 10.1.8.0/23 D. 10.1.10.0/24
25.属于网络112.10.200.0/21的地址是()
A. 112.10.206.0 B. 112.10.217.0 C. 112.10.224.0 D. 112.10.198.0
26.下列TCP连接建立过程描述正确的是()
A 服务端收到客户端的SYN包后等待2*ml时间后就会进入SYN_SENT状态
B 服务端收到客户端的ACK包后会进入SYN_RCVD状态
C 当客户端处于ESTABLISHED状态时,服务端可能仍然处于SYN_RCVD状态
D 服务端未收到客户端确认包,等待2*ml时间后会直接关闭连接
解析:首先在TCP建立连接的时候是不会存在2MSL的,只有在断开的时候有,所以A,D都是错的;其次,在服务端接收到客户端SYN数据包的时候才会进入SYN_SENT状态,当客户端给服务端发送ACK包时后,服务端进入ESTABLISHED。(详解)
27.TCP建立连接的过程采用三次握手,已知第三次握手报文的发送序列号为1000,确认序列号为2000,请问第二次握手报文的发送序列号和确认序列号分别为 ()
A 1999,999 B 1999,1000 C 999,2000 D 999,1999
解析:假设现在有客户端发送X,服务端发送Y。
- 第一次握手:客户端发送序列号X。
- 第二次握手:服务端发送序列号Y,服务端确认序列号X+1。
- 第三次握手:客户端发送X+1,服务端确认发送序号Y+1。
- 因此X+1=1000;Y+1=2000;此时第二次服务端发送序列号为Y=1999;确认序列号为X+1=1000。
- 总结:第三次发送的序列号 = 第二次确认的序列号;第三次确认的序列号 = 第二次发送的序列号+1
28. 应用程序PING 发出的是什么报文()
A TCP 请求报文 B TCP 应答报文 C ICMP 请求报文 D ICMP 应答报文
29.HTTP协议中,如果要告知所请求的网页已经永久跳转到了另一个地址,应该返回哪个状态码()
A 301 B 302 C 404 D 503
解析:
- 301:永久性重定向
- 302:临时性重定向
- 404:Not Found
- 503:Service Unavailable
30.在因特网中,下列哪个不是IP层所需解决的问题()
A 流量控制 B 路径选择 C 寻址 D 分段和重新组装
解析:流量控制是TCP协议当中需要解决的问题。
31.常见的http错误描述原因错误的是()
A 404-Not found(没有找到) B 302-临时重定向
C 500-内部服务器错误 D 403- IP address rejected
解析:
403:Forbidden,不允许访问那个资源
403.6:IP address rejected,IP地址被拒绝
32.linux tcpdump监听网卡 eth0,对方主机IP为10.1.1.180,tcp端口为80的数据,相应命令为()
A tcpdump -h eth0 -nn 'tcp and host 10.1.1.180:80'
B tcpdump -i eth0 -nn 'tcp and host 10.1.1.180:80'
C tcpdump -h eth0 -nn 'tcp and port 80 and host 10.1.1.180'
D tcpdump -i eth0 -nn 'tcp and port 80 and host 10.1.1.180
33.tcp三次握手的过程,accept发生在三次握手哪个阶段()
A 第一次握手 B 第二次握手 C 第三次握手 D 三次握手后
解析:应该在第三次握手之后,因为在第三次握手的时候,只有客户端此时的状态是ESTABLISHED,而此时服务端状态还处于SYN_RECV;而此时的连接还处在内核当中的未完成队列当中,因此不能将其调出来。
34.Linux中,一个端口能够接受tcp链接数量的理论上限是()
A 1024 B 65535 C 65535 * 65535 D 无上限
35.TCP报文首部信息中与关闭连接有关的是()
A URG B ACK C SYN D FIN
36.10.1.0.1/17的广播地址是( )
A 10.1.128.255 B 10.1.63.255 C 10.1.127.255 D 10.1.126.255
37.随着IP 网络的发展,为了节省可分配的注册IP 地址,有一些地址被拿出来用于私有IP 地址,以下不属于私有IP 地址范围的是()
A 10.6.207.84 B 172.23.30.28 C 172.32.50.80 D 192.168.1.100
解析:私有IP地址共有三个范围段:
- 10.0.0.0~10.255.255.255/8
- 172.16.0.0~172.31.255.255/12
- 192.168.0.0~192.168.255.255/16
38.int listen(SOCKET s, int backlog);该函数中第二个参数的含义是()
A 是否打开log信息 B 是否打开后台log信息
C 后台等待连接队列的最大限制值 D 后台等待连接队列的最小限制值 E 无意义
解析:(socket)
39.在Linux系统中, 为找到文件try_grep含有以a字母为行开头的内容, 可以使用命令()
A.grep -E #$ try_grep B.grep -E #a try_grep
C.grep -E ^$ try_grep D.grep -E ^a try_grep
40.当一个进程发生以下哪种状态转换时引起的CPU调度属于剥夺式调度()
A 运行到待态 B 运行态到终止 C 就绪到等待 D 运行到就绪
解析:剥夺式(preemptive)调度,又称抢先式调度。当进程/线程正在处理器上运行时,系统可根据所规定的原则剥夺分配给此进程/线程的处理器,并将其移入就绪列队,选择其他进程/线程运行。
41.下面的程序会输出几个"hello"()
#include<stdio.h>
#include <unistd.h>
int main( ) {
fork( );
fork( );
fork( );
printf(“hello\\n”);
return 0;
}
因此我们总结出了如果有n个fork(),那么他的最终输出有2^(n-1)+2^(n-2)+...+2^(n-n)+1。
42.设主存容量为1MB,外存容量为400MB,计算机系统的地址寄存器有24位,那么虚存的最大容量是()
A 1MB B 401MB C 1MB+2^24B D 2^24B
解析:虚存储容量=min(主存+外存,2^N);N指的是地址总线的长度。
43.流式文件是指无结构的文件,这种说法对吗?(正确)
解析:文件分为两大类,一种是结构文件也就是记录式文件;另一种是无结构文件也就是流式文件。大量的数据结构和数据库采用有结构文件;大量的源程序,可执行程序,库函数等采用无结构文件。其长度以字节为单位,对流式文件的访问是利用读写指针来指出下一个要访问的字符。有结构的文件分为定长和不定长两类。定长又分为:定长记录,变长记录两种。变长记录文件根据文件组织方式的不同又分为:顺序文件,索引文件,索引顺序文件。
44.同一进程的各个线程可以共享哪些内容()
A 寄存器内容 B 堆 C 栈 D 线程私有数据
解析:线程占有的都是不共享的:栈 、 寄存器、 状态、 程序计数器。但他们共享父进程的各种资源,如堆区。
进程 | 线程 |
地址空间 全局变量 打开的文件 子进程 信号量 账户信息 | 栈 寄存区 状态 程序计数器 |
45.linux 的索引节点中不包含的内容是( )
A 文件名 B 文件物理地址 C 文件存取权限 D 文件创建时间
解析:inode包含文件的元信息:
* 文件的字节数 * 文件拥有者的User ID * 文件的Group ID * 文件的读、写、执行权限 * 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。 * 链接数,即有多少文件名指向这个inode * 文件数据block的位置
为什么没有文件名,是因为由于inode号码与文件名分离,这种机制导致了一些Unix/Linux系统特有的现象。
1. 有时,文件名包含特殊字符,无法正常删除。这时,直接删除inode节点,就能起到删除文件的作用。 2. 移动文件或重命名文件,只是改变文件名,不影响inode号码。 3. 打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名。因此,通常来说,系统无法从inode号码得知文件名。
以上是关于笔试题总结--选择题(每日更新)的主要内容,如果未能解决你的问题,请参考以下文章