Linux软件工程师测试
一、基础总分:
1.GCC
用哪个参数可以产生obj文件:B
(A) -c (B)-o (C)-share (D)-static
2、GDB
在main函数处设置断点的命令是:A
(A)b main (B)set main (C)set 0 (D)b 0
3、UNP
下列函数中可以将主机字节序转换成网络字节序的是:D
(A)convert() (B)sprintf() (C)ntonl() (D)htonl()
4、man
查阅"read系统调用"man手册的命令是:B
(A)man 1 read (B)man 2 read (C)man 3 read (D)man read
5、shell
删除"/tmp/prj/"目录下(及所有子目录下)所有名字以".o"结尾的文件:A
(A)find /tmp/prj/ -name "*.o" | xargs -i rm {}
(B)rm -rf /tmp/prj/*.o
(C)find /tmp/prj/ -name "*.o" -rm {} \;
(D)find /tmp/prj/*.o -name "*.o" | xargs -i rm {}
6、IPC
下列哪些属于IPC范畴(多选):A,C,D,E,G,H
(A)信号
(B)文件监视
(C)管道
(D)消息队列
(E)信号灯
(F)odbc
(G)共享内存
(H)UNIX域套接字
7、Signal
下列那个信号不可以被捕获或阻塞:A
(A)SIGKILL (B)SIGINT (C)SIGCHILD (D)SIGUSR1
8、Thread
下列那一项描述是错误的:B
(A)进程拥有独立的内存空间,而线程之间却共享内存空间。
(B)进程可以使用libc库,而线程不可以
(C)进程和线程在Linux内核中都使用clone()来实现
(D)信号量也可以作为线程间的通讯手段
二、C/C++部分:
1、以下为HP-UX下的64位应用程序,请写出其运行结果。
void func(char *ptr)
{
printf("%d\n", sizeof(ptr));
}
int main()
{
char buf[1024];
char *buf_p = buf;
printf("%d\n", sizeof(char));
printf("%d\n", sizeof(int *));
printf("%d\n", sizeof(buf));
func(buf);
func(buf_p);
}
答案:
1
8
1024
8
8
2、请分析以下程序,并写出其运行结果。
char *get_memory(void)
{
char p[] = "hello world";
return p;
}
int main()
{
char *str = NULL;
str = get_memory();
printf(str);
}
答案:(这是个典型有内存错误的程序,回答出有内存错误算对,最好能回答哪里有错)
3、请编写下面的C函数
/*
功能:在堆上分配一块指定大小的内存,并且全部清0,如果出错则返回一个空指针
lens:请求分配内存的尺寸
*/
void *get_mem(int lens)
{
...
}
答案:(考察编程风格和细心程度,不一定要和下面的程序一样,注意出错处理和返回值控制)
void *get_mem(int lens)
{
char *ret;
if (lens <= 0)
return NULL;
ret = malloc(lens);
if (ret == NULL)
return NULL;
bzero(ret, lens);
return ret;
}
4、Makefile
假设有一个小型web服务器程序名叫"miniweb",它的源代码包含三个源文件: utils.c, lib.c, main.c
请为这个程序编写一个Makefile。
答案:(考察是否会写Makefile,可能很多人都不会写,如果此题没回答出来,面试的时候需要再次询问是否使会用make和Makefile)
一个最基本的例子:
miniweb: main.o lib.o utils.o
cc -o $@ $<
*.o: *.c
cc -c $<
clean:
rm -f *.o rm miniweb