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