- 論壇徽章:
- 0
|
基礎(chǔ)試題(C語言)
一、ANSI C/C++方面的知識
一.1、簡答題。下面的題目必須全部答對才給分(20分):
1、 如何在C中初始化一個字符數(shù)組。
2、 如何在C中為一個數(shù)組分配空間。
3、 如何初始化一個指針數(shù)組。
4、 如何定義一個有10個元素的整數(shù)型指針數(shù)組。
5、 s[10]的另外一種表達(dá)方式是什么。
6、 GCC3.2.2版本中支持哪幾種編程語言。
7、 要使用CHAR_BIT需要包含哪個頭文件。
8、 對(-1.2345)取整是多少?
9、 如何讓局部變量具有全局生命期。
10、C中的常量字符串應(yīng)在何時定義?
11、如何在兩個.c文件中引用對方的變量。
12、使用malloc之前需要做什么準(zhǔn)備工作。
13、realloc函數(shù)在使用上要注意什么問題。
14、strtok函數(shù)在使用上要注意什么問題。
15、gets函數(shù)在使用上要注意什么問題。
16、C語言的詞法分析在長度規(guī)則方面采用的是什么策略?
17、a+++++b所表示的是什么意思?有什么問題?
18、如何定義Bool變量的TRUE和FALSE的值。
19、C語言的const的含義是什么。在定義常量時,為什么推薦使用const,而不是#defin
e。
20、C語言的volatile的含義是什么。使用時會對編譯器有什么暗示。
一.2、問答題。
1、-----------------------------------------------------------
"匈牙利命名法"有什么優(yōu)缺點(diǎn)?(2分)
2、-----------------------------------------------------------
下面x, y, *p的值是多少,有什么問題?(2分)
int x, y, z = 2;
int *p=&z;
x=sizeof*p;
y=x/*p; /* x=?, *p=?, y=?, 有什么問題?*/
3、-----------------------------------------------------------
下面的語句是什么意思?如何聲明或定義才使它們更易懂?(10分)
int (*foo())();
int (*foo())[];
int (*foo[])();
(*(void(*)())0)();
void (*signal(int,void(*)(int)))(int);
4、-----------------------------------------------------------
本題(2分)。一般使用malloc時,需要進(jìn)行強(qiáng)制類型轉(zhuǎn)換,如:
char *s; s = (char *)malloc(31);
下面中???該如何填寫,才可以正確執(zhí)行強(qiáng)制類型轉(zhuǎn)換?
int (*monthp)[31]; monthp = (???)malloc(31);
5、-----------------------------------------------------------
關(guān)于C語言運(yùn)算符優(yōu)先級的記憶技巧是什么?(2分)
/* 下面r的值是多少 */
int hi, low, r;
hi=7;low=3;
r=hi= 0xa1 && c2 >= 0xa1)
return 1;
else
return 0;
}
6、-----------------------------------------------------------
下面x, y的值是多少,有什么問題?
int x = 10, y = 3;
x ^= y;
y ^= x;
x ^= y;
/* x=?, y = ? */
7、-----------------------------------------------------------
int days[]={31,28,31,30,31,30,31,31,30,31,30,31,};
int calendar[12][31];
int (*monthp)[31];
int *dayp;
int i;
memset(calendar, 0, sizeof(calendar));
i = 0;
for (monthp = calendar; monthp = 10) {
printnum(n/10);
}
putchar ("0123456789"[n%10]);
}
9、-----------------------------------------------------------
void * memchr(void *pv, unsigned char ch, size_t size)
{
unsigned char *pch = (unsigned char *) pv;
unsigned char *pchEnd = pch + size;
while (pch 0);
strcpy(str, pch);
}
12、-----------------------------------------------------------
void *memmove(void *pvTo, void pvFrom, size_t size)
{
char *pbTo = (char *)pvTo;
char *pbFrom = (char *)pvFrom;
((pbTo 0);
*pbTo++ = *pbFrom++;
return (pvTo);
}
14、-----------------------------------------------------------
#include
int main(int argc, char *argv[])
{
char s[]="0123456789";
int i = 0;
do {
printf ("%c", i++);
} while(s?1:printf("\n")-1);
return 0;
}
15、-----------------------------------------------------------
int fibonacci(int x)
{
if (x == 1 || x == 2)
return 1;
return fibonacci(x - 2) + fibonacci(x - 1);
}
16、-----------------------------------------------------------
這里有一個程序cdecl.c。寫出它的工作流程。寫出它的使用方法。
給出一個典型輸入用例,記錄下它的輸出。
一.4、綜合編程題。
要求:
1、完成需求,程序運(yùn)行正確。
2、工作原理文檔,使用文檔完整。
3、代碼規(guī)整優(yōu)美。注釋得當(dāng)。
4、運(yùn)行速度足夠快。
5、用工具分析出是哪些代碼或函數(shù)造成速度瓶頸。
1、-----------------------------------------------------------
編寫一個排序程序。被排序的文件有8MB大小,一行一個隨機(jī)整數(shù)(ASCII格式)。要求對
這些整數(shù)進(jìn)行
排序,并計算平均值,打印出排序所需的時間。(20分)
2、-----------------------------------------------------------
用dummy header技巧實(shí)現(xiàn)一個鏈表DEMO。要求具有create, insert, delete, search功
能。
編寫一個應(yīng)用程序,使用上面的函數(shù)。使用dummy header技巧有什么優(yōu)點(diǎn)。(20分)
3、-----------------------------------------------------------
用heapsort算法實(shí)現(xiàn)優(yōu)先隊列。要求具有create, insert, delete功能。
編寫一個應(yīng)用程序,使用上面的函數(shù)。使用heapsort算法有什么優(yōu)點(diǎn)。(20分)
用trie(一種多叉樹)實(shí)現(xiàn)一個字典。要求具有create, insert, delete, search功能。
編寫一個應(yīng)用程序,使用上面的函數(shù)。使用trie樹有什么優(yōu)點(diǎn)。(20分)
二、POSIX方面的知識。
二.1、簡答題。下面的題目必須全部答對才給分:(5分)
1、在UNIX環(huán)境中,編譯流程是什么?
2、ABI,ELF的英文全稱是什么
3、一般UNIX的程序有多少段,舉一個實(shí)際的例子說明。
4、如何在kernel二進(jìn)制代碼中找一個字符串。
5、段地址F000:FFF0轉(zhuǎn)換為線形地址的值是多少(16進(jìn)制表達(dá))。
6、在一個UNIX文件系統(tǒng)中,文件的唯一性標(biāo)志是什么?
二.2、問答題。
1、-----------------------------------------------------------
寫一些代碼。如何用文件實(shí)現(xiàn)信號燈?要求如果程序崩潰了,這個文件也將自動被刪除
。
為什么可以這樣實(shí)現(xiàn)信號燈?(5分)
傳統(tǒng)的signal函數(shù)信號處理為什么是不可靠的,信號和系統(tǒng)調(diào)用有何關(guān)系?(5分)
在圖形庫系統(tǒng)中往往提供timer的功能,除了使用ALARM信號外,你還可以使用什么系統(tǒng)
調(diào)用來實(shí)現(xiàn)timer?(5分)
2、-----------------------------------------------------------
寫一些代碼,演示如何正確使用write系統(tǒng)調(diào)用。注意看好手冊再回答。(2分)
如果一個文件以rw模式打開,在進(jìn)行read/write操作轉(zhuǎn)換時,需要進(jìn)行什么操作。(2分)
3、-----------------------------------------------------------
解釋終端結(jié)構(gòu)termios.c_cc的MIN/TIME數(shù)值變化的帶來read/write的特性。(5分)
如何理解終端、控制終端、虛擬終端、控制臺、tty等類同的概念?(5分)
4、-----------------------------------------------------------
解釋計算機(jī)中Copy-On-Write的概念。(2分)
調(diào)用fork之后,子進(jìn)程沒有繼承父進(jìn)程的屬性有哪些?(5分)
解釋為什么每個程序在裝入執(zhí)行之后,總是已經(jīng)預(yù)先打開了stdout、stdin、stderr?(2
分)
在fork之前,父進(jìn)程打開了一個文件。在fork之后,如果子進(jìn)程移動了文件指針,
父進(jìn)程的文件指針有什么變化;如果子進(jìn)程關(guān)閉了文件,父進(jìn)程有什么變化?為什么會
這樣?(5分)
標(biāo)準(zhǔn)輸入、輸出和錯誤輸出分別是什么類型的緩沖,這些緩沖在用戶空間還是在核心空
間?
怎樣關(guān)閉他們的緩沖?如果父進(jìn)程關(guān)閉了緩沖,在fork之后建立的子進(jìn)程是否也關(guān)閉了
緩沖?(5分)
vfork和fork相比,有什么特色?(2分)
system函數(shù)是否等同于fork+exec?(2分)
wait系統(tǒng)調(diào)用有多少種條件可以退出?(2分)
5、-----------------------------------------------------------
系統(tǒng)調(diào)用和庫函數(shù)調(diào)用有什么區(qū)別。(2分)
在linux2.4.x上的glibc和newlib(一種嵌入式C庫)的系統(tǒng)調(diào)用有什么不同?(2分)
在linux2.4.x上,對系統(tǒng)調(diào)用execve如果調(diào)用成功,它返回的值是多少。(2分)
6、-----------------------------------------------------------
列出你所知道的2個內(nèi)存跟蹤庫。(2分)
設(shè)計一個內(nèi)存跟蹤方案,為什么選擇這個方案(5分)
二.3、綜合編程題。
要求:
1、完成需求,程序運(yùn)行正確。
2、工作原理文檔,使用文檔完整。
3、代碼規(guī)整優(yōu)美。注釋得當(dāng)。
4、運(yùn)行速度足夠快。
1、-----------------------------------------------------------
這里有一個8MB的文件,編寫一個copy程序,拷貝這個文件,并計算所需時間。用工具分
析
出是哪些代碼或函數(shù)造成速度瓶頸。
提示:如果只是使用read/write調(diào)用,不是一個好的實(shí)現(xiàn)。(20分)
2、-----------------------------------------------------------
Linux系統(tǒng)中,什么時候會出現(xiàn)類似Y2K的問題。寫一個程序證明。(20分)
3、-----------------------------------------------------------
編寫一個程序,測試系統(tǒng)最小的睡眠時間間隔。(20分)
4、-----------------------------------------------------------
編寫一個pipe程序,測試有N個管道,size大小的buffer情況下,pipe的傳輸性能是多少
?(20分)
5、-----------------------------------------------------------
在ext2文件系統(tǒng)上,單個文件最大可以達(dá)到多少?
寫一個程序獲得這方面的限制。(20分)
三、Linux編程基本使用知識。
三.1、命令和shell
1)編寫一個腳本,統(tǒng)計一個目錄下面所有C代碼的行數(shù)。(2分)
2)編寫一個sed腳本,去除HTML文件中的HTML標(biāo)記。(2分)
3)編寫一個腳本獲得當(dāng)前系統(tǒng)eth0的IP地址。(2分)
4)編寫一個腳本以交互的方式,進(jìn)行DNS的設(shè)定。(2分)
5)使用ls命令編寫一個腳本,實(shí)現(xiàn)ls -R,遞歸列出當(dāng)前目錄下的所有目錄、文件。(2
分)
6)-----------------------------------------------------------
在一個目錄下,找soft-link files,用下面的命令,原理是可行的,但無法操作,
該如何解決?要2種方法。(2分)
ls -l | grep ->
7)-----------------------------------------------------------
如何把標(biāo)準(zhǔn)錯誤輸出,重定向到標(biāo)準(zhǔn)輸出上。(2分)
8)-----------------------------------------------------------
我們的系統(tǒng)中的軟件包是使用RPM管理的。要求下面的問題寫出shell命令和運(yùn)行結(jié)果。(
5分)
如何知道系統(tǒng)中安裝了幾個軟件包。
如何知道系統(tǒng)中安裝了哪幾類(group)軟件包。
如何知道kernel軟件包的簡述。
如何知道kernel軟件包的Changelog。
如何知道kernel軟件包有幾個文件。
如何知道kernel軟件包安裝后有多大。
三.2、編輯工具的使用。(各2分)
1)如何使用vi進(jìn)行塊拷貝、粘貼、刪除的操作
2)如何設(shè)置Tab的長度,以及自動縮進(jìn)的長度
3)如何使用tag進(jìn)行代碼閱讀
4)如何在1~10行,有確認(rèn)的進(jìn)把所有的RedHat改為RedFlag
5)在SourceNavigator中,如何跳到一個變量的聲明處?如何得知光標(biāo)當(dāng)前的位置在那
個函數(shù)體內(nèi)?
三.3、編譯器與調(diào)試器。(各2分)
1)如何使用gcc得到宏展開的中間代碼
2)如何通過gcc在命令行中傳入宏定義
3)在那一級優(yōu)化的情況下,內(nèi)聯(lián)函數(shù)才真正的內(nèi)聯(lián)到代碼中
4)gdb的watch命令如何使用,有何缺點(diǎn)
5)gdb中使用什么命令可以顯式調(diào)用的棧幀,如何查看某個棧幀上的局部變量
6)如何使用gdb調(diào)試多進(jìn)程
7)如何使能/禁止core dump?
三.4、庫。(各2分)
1)如何知道XSetIMValues這個符號在那個X的庫文件中
2)如何讀取C++的符號名,更具可讀性
3)請解釋動態(tài)庫的soname概念
4)解釋在鏈接時rpath選項的含義
三.5、Makefile。(10分)
如果有一個簡單的Test項目目錄如下:
# tree Test
Test
|-- common.h
|-- main.cpp
|-- test.cpp
`-- test.h
1)使用wildcard、patsubst函數(shù)編寫一個C++項目的Makefile文件
2)使用automake、autoconfig編寫一個支持configure選項的configure.in腳本
三.6、CVS。(10分)
1)如果一個CVS項目中,甲添加了一個子目錄模塊,那么乙在update時是否會自動檢
出這個新添加的子模塊?如果不能,那么你有什么好的解決方案?
2)如何在一個CVS項目中添加一個二進(jìn)制文件,這個二進(jìn)制文件可以進(jìn)行增量的版本管
理嗎?
3)如何檢出標(biāo)記(tag)為milestone-1的版本,如何創(chuàng)建以milestone-1為基礎(chǔ)的分支
milestone-1-b1,并如何把分支的修改合并到milestone-1的主分支上
三.7、Linux/GNU編程基本知識
1、-----------------------------------------------------------
Linux2.4.x有多少種類型的設(shè)備文件?分別寫出來。(2分)
2、-----------------------------------------------------------
glibc動態(tài)庫的搜尋次序是什么?(2分)
glibc 2.1.x 與 2.2.x的動態(tài)庫的搜尋次序有什么不同?為什么會采用現(xiàn)在的方案?(2
分)
三.3、綜合編程題。
要求:
1、完成需求,程序運(yùn)行正確。
2、工作原理文檔,使用文檔完整。
3、代碼規(guī)整優(yōu)美。注釋得當(dāng)。
4、運(yùn)行速度足夠快。
1、-----------------------------------------------------------
本題(20分)。寫一個程序,有三個功能:
a)取得CMOS中的當(dāng)前時間,按照YY:MM
![]()
D:HH:MM:SS格式輸出。
b)取得物理內(nèi)存的大小,格式化輸出。
c)取得從物理段地址F000:FFF0起,16個字節(jié)的值,每字節(jié)按照16進(jìn)制格式輸出。
2、-----------------------------------------------------------
本題(20分)。對串口編程,編寫一對類似ping的程序,作用在串口上,了解serial的聯(lián)
通情況。
定義協(xié)議
要求:
定義一個聯(lián)通和響應(yīng)協(xié)議。至少具有:發(fā)送、回復(fù)、超時三種狀態(tài)。除超時狀態(tài)外,所
有
狀態(tài)的數(shù)據(jù)必須經(jīng)過校驗(yàn)才可使用。
ping_serial_client
要求:
1,發(fā)送數(shù)據(jù)包;
2,等待回復(fù)數(shù)據(jù)包,直到超時;
3,如果有回復(fù)數(shù)據(jù)包,對數(shù)據(jù)包進(jìn)行校驗(yàn);
4,計算校驗(yàn)通過的數(shù)據(jù)包之間的時間差;
5,重復(fù)直到用戶退出;
6,統(tǒng)計丟包率,時間。
界面:
bash# ping_serial_client /dev/ttyS0 baud_value
??bytes from ttyS0, time=??ms
......
^C
--- ttyS0 ping statistics ---
?? packets transmitted, ?? received, ??% loss
time ??ms, min/avg/max = ??/??/?? ms
ping_serial_server
要求:
1,等待對方的發(fā)送數(shù)據(jù)包;
2,對發(fā)送數(shù)據(jù)包進(jìn)行校驗(yàn);
3,校驗(yàn)通過則回復(fù)數(shù)據(jù)包;
4,重復(fù)直到用戶退出;
界面:
bash# ping_serial_server /dev/ttyS0 baud_value
3、-----------------------------------------------------------
編寫一對socket程序,要求類似于network echo procotol。
Client每隔1秒把自己的IP地址輪流循環(huán)發(fā)送給一個Server.
Server接到IP后,在屏幕上打印對方IP;然后把自己的IP發(fā)送回去。
Client收到回復(fù)后,在屏幕上打印對方IP。
程序一直運(yùn)行,直到用戶退出。各自分類統(tǒng)計接收到的各IP的數(shù)據(jù)包的個數(shù)。
注意:Client可以向多個Server發(fā)送請求,Server也可以接收多個Client請求。
注意:輸出信息的美觀,和對錯誤的處理。
-----------------------------------------------------------
四、C++題目。
-----------------------------------------------------------
1。給定下面的代碼:
class Graph{
public:
Graph() { s_gCount++; }
virtual ~Graph() { s_gCount--;}
virtual int drawOut() = 0;
static int getTotalCount() { return s_gCount; }
protected:
int m_x;
int m_y;
static int s_gCount;
};
本文來自ChinaUnix博客,如果查看原文請點(diǎn):http://blog.chinaunix.net/u1/55352/showart_1431430.html |
|