1. 程式人生 > >騰訊2011.10.15校園招聘會筆試題

騰訊2011.10.15校園招聘會筆試題

1、下面的排序演算法中,初始資料集的排列順序對演算法的效能無影響的是(B

A、插入排序                      B、堆排序                    C、氣泡排序                     D、快速排序

2、以下關於Cache的敘述中,正確的是(B

A、CPU中的Cache容量應大於CPU之外的Cache容量

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

C、Cache的設計目標是容量儘可能與主存容量相等

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

3、資料儲存在磁碟上的排列方式會影響I/O服務的效能,一個圓環的磁軌上有10個物理塊,10個數據記錄R1------R10存放在這個磁軌上,記錄的安排順序如下表所示:

物理塊

1

2

3

4

5

6

7

8

9

10

邏輯記錄

R1

R2

R3

R4

R5

R6

R7

R8

R9

R10

假設磁碟的旋轉速度為20ms/周,磁碟當前處在R1的開頭處,若系統順序掃描後將資料放入單緩衝區內,處理資料的時間為4ms(然後再讀取下個記錄),則處理這10個記錄的最長時間為(C

A、180ms                           B、200ms                          C、204ms                             D、220ms

2+4+((2+4)+2*8)*9=204

4、隨著IP網路的發展,為了節省可分配的註冊IP地址,有一些地址被拿出來用於私有IP地址,以下不屬於私有IP地址範圍的是(C

A、10.6.207.84                              B、172.23.30.28                     C、172.32.50.80               D、192.168.1.100

私有IP地址共有三個範圍段:

A:     10.0.0.0~10.255.255.255 /8   B:      172.16.0.0~172.31.255.255 /12   C:   192.168.0.0~192.168.255.255 /16

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

A、該類的物件共享其靜態成員變數的值                              B、靜態成員變數可被該類的所有方法訪問                 

C、該類的靜態方法只能訪問該類的靜態成員變數                 D、該類的靜態資料成員變數的值不可修改

6、已知一個線性表(38,25,74,63,52,48),假定採用雜湊函式h(key) = key%7計算雜湊地址,並雜湊儲存在散列表A【0....6】中,若採用線性探測方法解決衝突,則在該散列表上進行等概率成功查詢的平均查詢長度為(C

A、1.5                  B、1.7                           C、2.0                       D、2.3

依次進行取模運算求出雜湊地址:

A

0

1

2

3

4

5

6

記錄

63

48

38

25

74

52

查詢次數

1

3

1

1

2

4

74應該放在下標為4的位置,由於25已經放在這個地方,所以74往後移動,放在了下標為5的位置上了。

由於是等概率查詢,所以結果為:1/6*(1+3+1+1+2+4)= 2.0

7、表示式“X=A+B*(C--D)/E”的字尾表示形式可以為(C

A、XAB+CDE/-*=                     B、XA+BC-DE/*=                      C、XABCD-*E/+=                         D、XABCDE+*/=

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

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

C、 Composite(組合)                                   D、 Facade(外觀)

9、下面程式的輸出結果為多少?

  1. void Func(char str_arg[100])  
  2. {  
  3.     printf("%d\n",sizeof(str_arg));  
  4. }  
  5. int main(void)  
  6. {  
  7.     char str[]="Hello";  
  8.     printf("%d\n",sizeof(str));  
  9.     printf("%d\n",strlen(str));  
  10.     char *p = str;  
  11.     printf("%d\n",sizeof(p));  
  12.     Func(str);  
  13. }  

輸出結果為:6   5     4      4

對字串進行sizeof操作的時候,會把字串的結束符“\0”計算進去的,進行strlen操作求字串的長度的時候,不計算\0的。

陣列作為函式引數傳遞的時候,已經退化為指標了,Func函式的引數str_arg只是表示一個指標,那個100不起任何作用的。

10、C++將父類的解構函式定義為虛擬函式,下列正確的是哪個?
A、釋放父類指標時能正確釋放子類物件
B、釋放子類指標時能正確釋放父類物件
C、這樣做是錯誤的
D、以上全錯

C++的多型肯定是使用父類的指標指向子類的物件,所以肯定是釋放子類的物件,如果不使用虛擬函式的話,父類的指標就只能夠釋放父類的物件。

11、下列哪一個不屬於關係資料庫的特點?
A、資料冗餘度小
B、資料獨立性高
C、資料共享性好
D、多使用者訪問

12、下面程式的輸出結果為多少?

  1. void Func(char str_arg[2])  
  2. {  
  3.     int m = sizeof(str_arg);     //指標的大小為4
  4.     int n = strlen(str_arg);     //對陣列求長度,str_arg後面的那個2沒有任何意義,陣列已經退化為指標了
  5.     printf("%d\n",m);  
  6.     printf("%d\n",n);  
  7. }  
  8. int main(void)  
  9. {  
  10.     char str[]="Hello";  
  11.     Func(str);  
  12. }  

輸出結果為:      4         5

strlen只是對傳遞給Func函式的那個字串求長度,跟str_arg中的那個2是沒有任何關係的,即使把2改為200也是不影響輸出結果的。。

13、typedef char *String_t; 和 #define String_d char * 這兩句在使用上有什麼區別?
答:typedef char *String_t 定義了一個新的類型別名,有型別檢查。而#define String_d char * 只是做了個簡單的替換,無型別檢查,前者在編譯的時候處理,後者在預編譯的時候處理。
同時定義多個變數的時候有區別,主要區別在於這種使用方式String_t  a,b;  String_d  c,d;    a,b ,c都是char*型別,而d為char型別
由於typedef還要做型別檢查。。#define沒有。。所以typedef比#define安全。。

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

16、給定能隨機生成整數1到5的函式,寫出能隨機生成整數1到7的函式。

參考 http://blog.csdn.net/hxz_qlh/article/details/12978771

17、對一個正整數作如下操作:如果是偶數則除以2,如果是奇數則加1,如此進行直到1時操作停止,求經過9次操作變為1的數有多少個?

第9次操作:結果1由2產生。1個被運算元
8:結果2只能由4產生。1個被運算元
7:結果4由8、3產生。2個
6:結果8由16、7產生;結果3由6產生。共3個
5:結果16由32、15產生;結果7由14產生;結果6由12、5產生。共5個…
每次操作,偶數(2除外)都由該數減1和該數的2倍得來,奇數只由該數的2倍得來
各次操作的操作物件個數為:1,1,2,3,5,8,13,21,34,…
本題可以通過所給的變換規律,由易到難,確定操作可變為1的陣列成斐波拉契數列,再根據所發現的規律求出經過9次操作變為1的數的個數。

演算法程式設計題:

1、給定一個字串,求出其最長的重複子串。
思路:使用字尾陣列,對一個字串生成相應的字尾陣列後,然後再排序,排完序依次檢測相鄰的兩個字串的開頭公共部分。
這樣的時間複雜度為:

生成字尾陣列 O(N)
排序 O(NlogN*N) 最後面的 N 是因為字串比較也是 O(N)
依次檢測相鄰的兩個字串 O(N * N)
總的時間複雜度是 O(N^2*logN),