2011-10-15騰訊校園招聘筆試題目與參考答案

 

這裏的題目收集於網上,真實信應該是真的

 

1,下列排序算法中,初始數據集的排序程序對算法性能無影響的是()

A,插入排序B,堆排序 C,冒泡排序,D,快速排序

 答案:B,冒泡的複雜度恆定爲O(n^2),插入排序最差是O(n^2),最優化爲O(n);堆排序建堆的時間是O(n),但是,排序的過程是O(nlogn),固定不變;

冒泡排序雖然大家都認爲是O(n^2),但是,優化的冒泡是使用一個flag的,如果flag不變,說明不需要 再交換元素了,最優可以到O(n),快速排序不解釋,最差的情況每一次只分出一個元素,最差是O(n^2),最優的時候是O(nlogn)

 

2,關於cache的描述中,以下說法正確的是()

CPU內的Cache容量應該大於CPU外的Cache容量

Cache的設計思想是在合理成本下提高命中率

Cache的設計目標是容量儘可能地與主存儲容量相當

在容量確定的情況下,替換算法的時間複雜度是影響Cache命中的關鍵因素

答案BCache一般比較小,但是,速度會更快,CPU內的Cache容量顯然小於CPU外的,其設計原理是利用程序的局部性原理,即一斷數據現在被訪問,可能一會又會被訪問,目標是提高數據的訪問速度,其命中率的關鍵因素與替換算法有關係,而不是替換算法的複雜度

 

3,數據存儲在磁盤上的方式直接影響IO性能,現在假設一個磁道有10個物理塊,一批數據的存儲如下:

 

 

1

2

3

4

5

6

7

8

9

10

記錄

R1

R2

R3

R4

R5

R6

R7

R8

R9

R10

磁盤的轉速度是20ms/R,這批數據一次只能被處理一個記錄,把這個記錄讀到緩衝區裏面,再處理,處理一個記錄需要4ms,起始時磁頭位於R1,問把這10個記錄全部完需要多少時間。()

A180ms    B200ms    C204ms    D220ms

答案C,要知道的是磁片會一直轉,當第一個記錄被處理完是,磁片已經轉到R4這個地方了(讀需要2ms,處理需要4ms),下一個記錄是R2,爲了讀取R2,磁片必需轉過R5R6…R10再到R2。一直這樣算下去,結果是204

 

4,以下不是私有IP的是()

A10.6.207.84   B172.23.30.28        C172.32.50.80        D192.168.1.100

答案C有地址有以下三斷

10.0.0.0~10.255.255.255         192.168.0.0~192.168.255.255

172.160.0~172.31.255.255

 

5,下列關於一個類的靜態成員的描述中,不正確的是()

A、該類的對象共享其靜態成員變量的值

B、靜態成員變量可被該類的所有方法訪問

C、該類的靜態方法只能訪問該類的靜態成員變量

D、該類的靜態數據成員變量的值不可修改

 

答案D,靜態變量(static變量)是一個類的變量,是這個類所有的對象公共的,這個類的所有函數都可以訪問與修改(如果是const就算了),因此選D

 

 

6,已知一個線性表(382574635248),假定採用散列函數hkey) = key%7計算散列地址,並散列存儲在散列表A0....6】中,若採用線性探測方法解決衝突,則在該散列表上進行等概率成功查找的平均查找長度爲()

A.5            B7     C2.0 D2.3

答案:C

依次進行取模運算求出哈希地址:

A

0

1

2

3

4

5

6

記錄

63

48

 

38

25

74

52

查找次數

1

3

 

1

1

2

4

由於是等概率查找,所以結果爲:1/6*1+3+1+1+2+4= 2.0

 

7,表達式X=A+B*(C--D)/E的後綴表示形式可以爲()

AXAB+CDE/-*=   BXA+BC-DE/*=   CXABCD-*E/+=   DXABCDE+*/=

 

答案C,後綴是波蘭表達式,前綴是逆波蘭表達式,這個最好搞清楚一下,還要搞清楚他們與二叉樹的訪問的關係。

 

8,()設計模式將抽象部分與它的實現部分相分離。

A Singleton(單例)          B Bridge(橋接)

C Composite(組合)        DFacade(外觀)

答案B,在Singleton的核心結構中只包含一個被稱爲單例類的特殊類。通過單例模式可以保證系統中一個類只有一個實例而且該實例易於外界訪問,從而方便對實例個數的控制並節約系統資源。如果希望在系統中某個類的對象只能存在一個,單例模式是最好的解決方案;

在軟件系統中,某些類型由於自身的邏輯,它具有兩個或多個維度的變化,那麼如何應對這種“多維度的變化”?如何利用面嚮對象的技術來使得該類型能夠輕鬆的沿着多個方向進行變化,而又不引入額外的複雜度?這就要使用Bridge模式。

組合設計模式不解釋,就是包含

外觀設計模式有個最大的特點將細粒度的對象包裝成粗粒度的對象,應用程序通過訪問這個外觀對象,來完成細粒度對象的調用,外觀模式一般是分佈式應用和系統架構中的應用服務層的設計中常用的方式

 

9,下面程序的輸出結果爲多少?

1. void Func(charstr_arg[100])

2. {

3. printf("%d\n",sizeof(str_arg));

4. }

5.

6. int main(void)

7. {

8. char str[]="Hello";

9. printf("%d\n",sizeof(str));

10. printf("%d\n",strlen(str));

11. char *p = str;

12. printf("%d\n",sizeof(p));

13. Func(str);

14.

答案:輸出結果爲:6 5 4 4

注意當數組傳給函數的時候(函數調用),會退化成指針,指針與機器的位數有關,32位系統是32bit,64位系統是64bit,sizeof應用在字符串身上的時候要計算在後面加的一個\0,比如,sizeof(A\0B\0)應該是5,因爲最後還會加一個0,但是,strlen卻是碰到0就結束,因此strlen(A\0B\0)應該是1.

 

10、下面程序的輸出結果爲多少?

1. void Func(charstr_arg[2])

2. {

3. int m = sizeof(str_arg);

4. int n = strlen(str_arg);

5. printf("%d\n",m);

6. printf("%d\n",n);

7. }

8.intmain(void)

9. {

10.charstr[]="Hello";

11. Func(str);

12. }

 

答案:輸出結果爲:4  5,數組傳遞給函數的時候會退化成指針,在函數原型裏面看到char x[10]和char x[90]一樣,都當成char *處理,strlen會一直數,直到‘\0‘爲止。

 

11,到商店裏買200的商品返還100優惠券(可以在本商店代替現金)。請問實際上折扣是多少?

 

答案5折,n元最後可以買2n元的東西,首先,n元可以獲取n/2的優惠券,繼續是n/4的優惠券...最後一直可以買到2n元的東西,果斷5折

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章