笔试题总结1

应用程序PING发出的是什么报文(C)

A.TCP请求报文

B.TCP应答报文

C.ICMP请求报文

D.ICMP应答报文


语法分析器可以用于(C)

A.识别语义错误

B.识别语法和语义错误

C.识别语法错误

D.识别并修正语法,语义错误

解释:语法分析器通常是作为编译器或解释器的组件出现的,它的作用是进行语法检查、并构建由输入的单片语组成的资料结构


IPV6地址包含多少位()

A.16

B.32

C.64

D.128

解释:IPv6的128位地址通常写成8组,每组为四个十六进制数的形式。比如:
AD80:0000:0000:0000:ABAA:0000:00C2:0002 是一个合法的IPv6地址。


如果在一个建立了TCP连接的socket上调用recv函数,返回值为0,则表示(B)

A.对端发送了一段长度为0的数据

B.对端关闭了连接

C.还没有收到对端数据

D.连接发生错误

解释:recv返回0的唯一条件就是对端关闭了连接
在socket可读的情况下,当有异常发生的时候,read返回-1


以下哪些不是内核对象(D)

A.进程

B.线程

C.互斥器

D.临界区

解释:临界区是资源对象,只能被一个进程访问


同一进程下的多个线程可以共享哪一种资源(B)

A.stack

B.data section

C.register set

D.thread ID

解释:线程共享的环境包括:进程代码段、进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯)、进程打开的文件描述符、信号的处理器、进程的当前目录和进程用户ID与进程组ID。


对于Linux说法,下列说法正确的是()

A.线性访问内存非法时,当前线程会进入信号处理函数

B.用mv命令移动文件时,文件的修改时间会发生变化

C.ulimit -c设置的是函数调用栈的大小

D.malloc函数是应用程序向操作系统申请内存的接口

B.不会改变

C.ulimit用于shell启动进程所占用的资源.-c size:设置core文件的最大值.单位:blocks


在c++中,

const int i = 0; 
int *j = (int *) &i; 
*j = 1; 
printf("%d,%d", i, *j)

输出是多少?(A)

A.0,1

B.1,1

C.1,0

D.0,0

解释:const修饰的常量值具有不可变性,c++编译器通常会对该变量做优化处理,在编译时变量i的值为已知的,编译器直接将printf输出的变量i替换为0。尽管如此,编译器仍然会为变量i分配存储空间,通过修改内存的hack方式将变量i在内存中的值修改后并不影响printf的输出。

gcc不会对此进行优化,所以如果用gcc来编译,输出就是1,1


  struct Date
{
    char a;
    int b;
    int64_t c;
    char d;
};

Date data[2][10]; 在32位系统上,如果Data的地址是x,那么data[1][5].c的地址是(C)

A.X+195

B.X+365

C.X+368

D.X+215

解释:

struct Date {      
    char a;//起始位置0      
    int b;//起始位置4      
    int64_t c;//起始位置8      
    char d;//起始位置16,
    //考虑成员中自身对齐值最大的那个值是8. 16不是8的倍数,所以这个sturct的size是24.  
};

data[1][5]与data[0][0]相隔15个元素,data[1][5].c的地址是x+24*15+(4+4) = 368


快速排序算法在序列已经有序的情况下的复杂度为(B)

A.O(nlogn)

B.O(n^2)

C.O(n)

D.O(n^2 logn)

有序的情况是O(n2);无序的情况是O(nlog2n)