一、選擇題:15分 共10題
1. 在排序方法中,關鍵碼比較次數與記錄地初始排列無關的是 .
A. Shell排序 B. 歸并排序 C. 直接插入排序 D. 選擇排序

2. 以下多線程對int型變量x的操作,哪幾個需要進行同步:
A. x=y;  B. x++;  C. ++x;  D. x=1;

3. 代碼
void func() {
static int val;

}
中,變量val的內存地址位于:
A. 已初始化數據段   B.未初始化數據段   C.堆   D.棧

4. 同一進程下的線程可以共享以下:
A. stack B. data section
C. register set D. thread ID

5. TCP和IP分別對應了OSI中的哪幾層?
A. Application layer
B. Data link layer
C. Presentation layer
D. Physical layer
E. Transport layer
F. Session layer
G. Network layer

6. short a[100],sizeof(a)返回?
A 2 B 4 C 100 D 200 E 400

7. 以下哪種不是基于組件的開發技術_____。
A XPCOM B XP C COM D CORBA

8. 以下代碼打印的結果是(假設運行在i386系列計算機上):
struct st_t
{
int status;
short* pdata;
char errstr[32];
};

st_t st[16];
char* p = (char*)(st[2].errstr + 32);
printf("%d", (p - (char*)(st)));

A 32 B 114
C 120 D 1112

9. STL中的哪種結構是連續形式的存儲:
A map B set C list D vector

10. 一個棧的入棧序列是A,B,C,D,E,則棧的不可能的輸出序列是( )
A、EDCBA; B、DECBA; C、DCEAB; D、ABCDE

二、簡答題:20分,共2題

1. (5分)重復多次fclose一個打開過一次的FILE *fp指針會有什么結果,并請解釋。
考察點:導致文件描述符結構中指針指向的內存被重復釋放,進而導致一些不可預期的異常。

2. (15分)下面一段代碼,想在調用f2(1)時打印err1,調用f2(2)時打印err4,但是代碼中有一些問題,請做盡可能少的修改使之正確。

1 static int f1(const char *errstr, unsigned int flag) {
2 int copy, index, len;
3 const static char **__err = {“err1”, “err2”, “err3”, “err4”};
4
5 if(flag & 0x10000)
6 copy = 1;
7 index = (flag & 0x300000) >> 20;
8
9 if(copy) {
10 len = flag & 0xF;
11 errstr = malloc(len);
12 if(errstr = NULL)
13 return -1;
14 strncpy(errstr, __err[index], sizeof(errstr));
15 } else
16 errstr = __err + index;
17 }
18
19 void f2(int c) {
20 char *err;
21
22 swtch(c) {
23 case 1:
24 if(f1(err, 0x110004) != -1)
25 printf(err);
26 case 2:
27 if(f2(err, 0x30000D) != -1)
28 printf(err);
29 }
30 }

三、編程題:30分 共1題
注意:要求提供完整代碼,如果可以編譯運行酌情加分。

1. 求符合指定規則的數。
給定函數d(n) = n + n的各位之和,n為正整數,如 d(78) = 78+7+8=93。 這樣這個函數可以看成一個生成器,如93可以看成由78生成。
定義數A:數A找不到一個數B可以由d(B)=A,即A不能由其他數生成。現在要寫程序,找出1至10000里的所有符合數A定義的數。
輸出:
1
3


四、設計題:35分 共1題
注意:請盡可能詳細描述你的數據結構、系統架構、設計思路等。建議多寫一些偽代碼或者流程說明。

1. 假設一個mp3搜索引擎收錄了2^24首歌曲,并記錄了可收聽這些歌曲的2^30條URL,但每首歌的URL不超過2^10個。系統會定期檢查這些URL,如果一個URL不可用則不出現在搜索結果中。現在歌曲名和URL分別通過整型的SONG_ID和URL_ID唯一確定。對該系統有如下需求:
1) 通過SONG_ID搜索一首歌的URL_ID,給出URL_ID計數和列表
2) 給定一個SONG_ID,為其添加一個新的URL_ID
3) 添加一個新的SONG_ID
4) 給定一個URL_ID,將其置為不可用

限制條件:內存占用不超過1G,單個文件大小不超過2G,一個目錄下的文件數不超過128個。

為獲得最佳性能,請說明設計的數據結構、搜索算法,以及資源消耗。如果系統數據量擴大,該如何多機分布處理?