1. 首頁
  2. 面試

百度面試題

百度面試題

一、選擇題:15 分 共 10 題

1. 已知一個線性表(38,25,74,63,52,48),採用的雜湊函式為 Hash($Key)=$Key mod 7,將元素雜湊到表長為7的雜湊表中儲存。請選擇後面兩種衝突解決方法分別應用在該散列表上進行等機率成功查詢的平均查詢長度,拉鍊法,線性探測法.

A. 1.0 B. 1.5 C. 1.7 D. 2.0 E. 2.3

F. 7/6 G. 4/3 H. 3/2

2. 需要將OS緩衝區的資料重新整理到硬碟,可以呼叫的函式有(多選):

A.fflush() B. fsync() C. sync() D.writev()

3. 下面哪個shell語句不能打印出使用者主目錄的路徑?

A. echo "$HOME" B. echo ~

C. echo `$HOME` D. echo $HOME

4. 最壞情況下,合併兩個大小為n的已排序陣列所需要的比較次數

A.2n B.2n-1 C.2n+1 D.2n-2

5. 一個B類網的子網掩碼是255.255.240.0,這個子網能擁有的最大主機數是:

A. 240 B. 255 C.4094 D. 65534

6. 以下程式碼執行後,val的.值是___:

unsigned long val = 0;

char a = 0x48;

char b = 0x52;

val = b << 8 | a;

A 20992 B 21064 C 72 D 0

7. 記憶體的速度遠遠高於磁碟速度,所以為了解決這個矛盾,可以採用:

A 並行技術 B 虛存技術 C 緩衝技術 D 通道技術

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. 同一程序下的執行緒可以共享以下

A. stack B. data section

C. register set D. thread ID

10. 以下哪種操作最適合先進行排序處理?

A 找最大、最小值 B 計算算術平均值

C 找中間值 D 找出現次數最多的值

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

1. (6分)下面是一個http請求:

GET /baidu/blog/item/6605d1b4eb6433738ad4b26d.html HTTP/1.1

Host: hi.baidu.com

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.0.6) Gecko/20060728 Firefox/1.5.0.6

Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5

Accept-Language: zh-cn,zh;q=0.5

Accept-Encoding: gzip,deflate

Accept-Charset: gb2312,utf-8;q=0.7,*;q=0.7

Keep-Alive: 300

Connection: keep-alive

Referer: http://hi.baidu.com/baidu

Cookie: BAIDUID=AFB70E986AC48B336ABAB7505CDD1C76;

請解釋以下各欄位基本含義: Host、User-Agent、Accept-Charset、Connection、Referer、Cookie

2. (14分)函式A將字串str1轉成小寫,並打印出轉化前後的字串。另外,改錯時不能改變函式的介面和主要思路。改錯時,請指出行號。

1 #include

2 #include

3

4

5 char* str1 = "ABDFLjlero我們都是saf";

6

7 char* ToLower(char s[])

8 {

9 static size_t i=sizeof(s);

10

11 for (i; i>=0; i--) {

12 if (s>"A" && s<"Z") {

13 s += 26;

14 }

15 }

16 return s;

17 }

18

19 int A()

20 {

21 printf("old str[%s] after lower[%s]n", str1, ToLower(str1));

22 }

三、程式設計題:30分 共1題

注意:要求提供完整程式碼,如果可以編譯執行酌情加分。

1. 兩個已排序的整型陣列,求交集,最快演算法

輸入:兩個已排序的整型陣列(int a[m], b[n])

輸出:兩個陣列的交集

四、設計題:35分 共1題

注意:請儘可能詳細描述你的資料結構、系統架構、設計思路等。建議多寫一些虛擬碼或者流程說明。

1. 考慮一個字串替換的過程,在一個文字檔案中含有一些文字內容和一些需要替換的變數,變數的格式為“$Var$”,原來的“$”使用“$$”進行轉義,原來的“$$”表示為“$$$”。我們將含有變數的檔案稱為模板(檔名為t),文字檔案的平均長度為100K。另外,還有一系列的變數檔案,裡面為變數名和變數值的對應關係(檔名為1.v , 2.v… n.v),每個變數檔案包含的變數數在百萬數量級,且變數排列次序不定。現要求將,模板裡的變數分別用變數檔案裡的變數替換,並將生成的檔案寫成 (1.r, 2.r… n.r)。

要求:從演算法和實現上和實現技術上的細節對程式進行最佳化,儘量使程式高效。程式執行環境為2G記憶體,4CPU。闡明主要思路,給出偽碼和說明,可以著重指出你使用的最佳化技術。

例子:模板檔案為

This is an $FF$ $$. I like $FF$ and $FA$。

變數檔案為

1.v

FF : banana

FA : apple

2.v

FA: 蘋果

FF : 香蕉

則生成檔案為

1.r

This is an banana $$. I like banana and apple。

2.r

This is an香蕉 $$. I like 香蕉and蘋果。