Linux软件开发笔试详解

741人浏览   2024-05-21 20:23:07

下列有关 const 限定符说法错误的是:


A、可以将一个非 const 对象的地址赋值给一个指向 const 对象的指针。

B、可以将一个非 const 对象的地址赋给一个指向非 const 对象的指针。

C、一个 const 对象不可以被多次赋值。

D、通过 const 对象指针可以改变全局 const 对象内容。


答案:D


题解:


选项A:


int num;
const int *p = #


赋值合法!


选项B:


int num;
int *p = #


赋值合法!


选项C:const对象只能被初始化一次,不能被赋值。


选项D:


const int g_num;         //全局const对象
const int *p = &g_num;   //*p = 1; 错误


const 修饰的是 *p,即指针 p 指向的内容不能修改。




以下程序的输出是:


int var = 100;
int main()
{
    int var = var;
    printf("%d\n", var);
    return 0;
}


A、随机数。

B、100。

C、0。

D、编译失败。


答案:A


题解:


  1. 当全局变量遇到局部变量,局部变量的优先级更高;
  2. 没有初始化的局部变量是随机值;


主函数中定义个局部变量,因为没有初始化,所以是随机值。用var来进行初始化,此时的var就是语句前面定义的var而不是全局变量,所以结果就是随机值。




以下程序在big-endial架构处理器下的输出是:


int i = 1;
char *pc = &i;
printf("%02x%02x%02x%02x\n", pc[0], pc[1], pc[2], pc[3]);


A、1000。

B、0001。

C、01000000。

D、00000001。


答案:D


题解:


大端字节序:低地址存放高字节。

&i取的是整数 i 第一个字节的地址,即 0x100。

%02x表示输出十六进制,且宽度为 2,前面补 0。




若入栈的顺序为e,f,g,h,则以下不可能的出栈顺序为:


A、e,f,g,h。

B、f,e,h,g。

C、f,h,e,g。

D、g,f,h,e。


答案:C


题解:


选项A:e进栈、出栈,f进栈、出栈,g进栈、出栈,h进栈、出栈;

选项B:e、f进栈,f出栈、e出栈,g、h进栈,h出栈、g出栈;

选项C:e、f进栈,f出栈,g、h进栈,h出栈,此时g为栈顶,e不可能先出栈;

选项D:e、f、g进栈,g、f出栈,h进栈,h、e出栈。




int (*p)[10];


则 p 是一个:


A、数组。

B、指针。

C、函数。

D、其他答案都不对。


答案:B


题解:


p是指针,指向有 10 个元素的数组,每个元素都是整形。




关于Linux的文件操作,下面说法正确的是:



A、一个文件的权限为-rwxr-xr-- ,用数字表示是:754。

B、chown -R root:root dir,可以将dir下所有文件的所有者和所属组变为root。

C、mkdir -p dir,若dir目录已存在,shell命令执行时会报错。

D、chmod u+x file1,会给file1的所有者增加可执行权限。


答案:ABD


题解:


选项A:r表示4,w表示2,x表示1;


选项B:chown用于修改属组和属主,-R表示递归,该命令表示修改目录dir以及dir下所有文件的属主和属组为root;


选项C:-p表示递归创建目录,比如:


mkdir -p /home/xx/yy


如果在home目录下不存在 xx 目录,则先创建 xx 目录,再创建 yy 目录。


选项D:chmod用于修改权限,该命令表示给 file1 的拥有者增加可执行权限。




关于TCP和UDP协议,下面说法正确的是:



A、TCP基于连接,UDP是无连接的。

B、TCP面向报文传输,UDP面向字节流传输。

C、TCP拥有拥塞控制机制,UDP没有。

D、TCP和UDP都支持多对多通信。


答案:AC


题解:


选项B:TCP基于流,UDP基于数据报;

选项C:TCP具有拥塞控制机制,UDP没有;

选项D:TCP不支持多对多通信。




Linux中关于僵尸进程说法正确的是:



A、僵尸进程是由于父进程异常退出造成的。

B、僵尸进程是由于父进程未回收子进程造成的。

C、父进程在创建子进程时,调用2次fork,可以预防僵尸进程。

D、僵尸进程可以使用kill -9杀掉。


答案:B


题解:


所谓僵尸进程,是指进程执行完了已经结束,但是资源没有被回收。如何防止僵尸进程的产生,就是在进程运行结束后,及时回收进程的资源。僵尸进程已经“死了”,无法再用 kill 命令杀死。




char c;以下对c的赋值错误的是:


A、c = "a"。

B、c = 'a'。

C、c = '\086'。

D、c = '\031'。


答案:AC


题解:


选项A:不能把字符串赋值给字符;

选项C:0开头的表示八进制,但是八进制最大数是 7,所以写法错误;

选项D:0开头表示八进制,D选项表示 031 的转义字符。




已知:


int a[4][3] = {1,2,3,4,5,6,7,8,9,10,11,12};
int (*ptr)[3] = a;
int *p = a[0];


那么值和 a[3][2]相同的表达式是:


A、*(*(ptr + 3) + 2)。

B、*(*(a + 2) + 3)。

C、*((a + 3)[2])。

D、*(p + 11)。


答案:AD


题解:


ptr:表示行的地址,p:表示元素的地址,a:同ptr。

选项A:ptr + 3指向第四行,取值后变成第四行首元素地址,再加2变成第四行第三个元素的地址,取值后就是 a[3][2]。

选项B:a + 2指向第三行,取值后变成第三行首元素地址,再加 3 变成第四行第一个元素地址,取值后就是 a[3][0]。

选项C:a + 3指向第四行,[2]表示向下两行的首元素地址,即第六行首元素地址,取值后就是 a[5][0],元素不存在。

选项D:p指向首行首元素,向后移动 11 个元素再取值,即 a[3][2]。



十一


以下语句可以看作一条语句的是:


A、i++。

B、int a = 0, b = 0, c = 0。

C、for (i = 0; i < 10; i++);。

D、i > 0 ? a = 0, b = 0。


答案:ABCD


题解:


在C/C++中,四条语句的写法都成立。



十二


链表具有的特点是:


A、不必事先估计存储空间。

B、可随机访问任一元素。

C、插入删除不需要移动元素。

D、所需空间与线性表长度成正比。


答案:ACD


题解:


选项A:链表没有长度限制,需要存储数据的时候就申请内存,不必预估空间。

选项B:链表的存储空间不连续,不能像数组一样随机访问,只能通过某个节点(比如头节点)经过多次移动,访问需要的节点。

选项C:插入和删除操作只需要修改节点的指针域,不需要移动元素。

选项D:节点越多,所需的空间越多。



十三


关于二叉树的说法不正确的是:


A、二叉树的度为2。

B、一棵二叉树的度可以小于2。

C、二叉树中至少有一个节点的度为2。

D、二叉树中任何一个节点的度都为2。


答案:ACD


题解:


度:节点的分支个数。

二叉树:指度不大于 2 的树。



十四


已知二叉树的先序遍历结果是 ABCDEF,后序遍历结果为 CDBFEA,那么中序遍历的结果可以是:


A、CBDAEF。

B、DCAEFB。

C、CBDAFE。

D、CBADFE。


答案:AC


题解:


已知先序遍历和中序遍历,可以确定后序遍历;已知后序遍历和中序遍历,可以确定先序遍历;但是已知先序遍历和后续遍历,由于左右孩子不能确定,所以中序遍历不确定。


先序遍历的特点:根出现在最前面;中序遍历的特点:根出现在中间。


选项A:


选项B:中序遍历的顺序:左-根-右,后序遍历的顺序:左-右-根,所以两种遍历方式,第一个元素是相同的,B选项可以直接PASS。


选项C:和选项A表示的是同一个二叉树。


选项D:CB节点是A的左子树,DFE节点是A的右子树,所以在后序遍历的时候,一定是左子树(包含CB,顺序不一定)、右子树(包含DFE,顺序不一定)、根,与后序遍历结果不一致。



十五


以下哪些上下文的切换由CPU来完成:


A、进程上下文切换。

B、线程上下文切换。

C、协程上下文切换。

D、中断上下文切换。


答案:ABD


题解:


协程属于用户空间。


相关推荐