[轉]搜狐2012.9.15校園招聘會筆試題

1、不定項選擇題
一、如下程序的打印結果是()
[cpp]  view plain copy
  1. #include<iostream>  
  2. using namespace std;  
  3.   
  4. void swap_int(int a , int b)  
  5. {  
  6.     int temp = a;  
  7.     a = b;  
  8.     b = temp;  
  9. }  
  10.   
  11. void swap_str(char* a , char* b)  
  12. {  
  13.     char* temp = a;  
  14.     a = b;  
  15.     b = temp;  
  16. }  
  17.   
  18. int main(void)  
  19. {  
  20.     int a = 10;  
  21.     int b = 5;  
  22.     char* str_a = "hello world";  
  23.     char* str_b = "world hello";  
  24.     swap_int(a , b);  
  25.     swap_str(str_a , str_b);  
  26.     printf("%d %d %s %s\n", a , b , str_a , str_b);  
  27.   
  28.     return 0;  
  29. }  
A、10 5 hello world world hello      B、10 5 world hello hello world
C、5 10 hello world world hello     D、5 10 hello world world hello
二、如下程序打印的兩個字符分別是(A)

[cpp]  view plain copy
  1. typedef struct object object;  
  2. struct object  
  3. {  
  4.     char data[3];  
  5. };  
  6.   
  7. int main(void)  
  8. {  
  9.     object obj_array[3] = { {'a','b','c'},  
  10.                             {'d','e','f'},  
  11.                             {'g','h','i'} };  
  12.     object* cur =  obj_array;  
  13.     printf("%c %c\n", *(char*)((char *)(cur)+2) , *(char*)(cur+2));  
  14.   
  15.     return 0;  
  16. }  
A、c g           B、b d          C、g g          D、g c
三、C/C++語言:請問在64位平臺機器下 sizeof(string_a) , sizeof(string_b)大小分別是(A)

[cpp]  view plain copy
  1. char *string_a = (char *)malloc(100*sizeof(char));  
  2. char string_b[100];  
A、8 100      B、100 8      C、100 100      D、8 8
四、假設二叉排序樹的定義是:一、若它的左子樹不爲空,則左子樹全部節點均小於它的根節點的值;二、若右子樹不爲空,則右子樹全部節點的值均大於根節點的值;三、它的左右子樹也分別爲二叉排序樹。下列哪一種遍歷以後獲得一個遞增有序數列(B)
A、前序遍歷    B、中序遍歷     C、後序遍歷      D、廣度遍歷
五、往一個棧順序push下列元素:ABCDE,其pop可能的順序,下列不正確的是(C)
A、BACDE    B、ACDBE     C、AEBCD   D、AEDCB
六、1100|1010 , 1001^1001 , 1001&1100分別爲(A)
A、1110  0000   1000   B、1000  1001  1000
C、1110  1001   0101   D、1000  1001  1000
七、二叉樹是一種樹形結構,每一個節點至多有兩顆子樹,下列必定是二叉樹的是(AC)
A、紅黑樹     B、B樹      C、AVL樹      D、B+樹
八、int A[2][3] = {1,2,3,4,5,6}; , 則A[1][0]和*(*(A+1)+1)的值分別是(A)
A、4 5     B、4 3        C、3 5       D、3 4
九、序列16 14 10 8 7 9 3 2 4 1的說法下面哪個正確(A)
A、大頂堆   B、小頂堆  C、不是堆   D、二叉排序樹 
十、輸入若已是排好序的,下列排序算法最快的是(A)
A、插入排序   B、Shell排序   C、合併排序   D、快速排序
十一、一種既有利於短做業又兼顧長期做業的調度方式是(D)
A、先來先服務     B、均衡調度      C、最短做業優先      D、最高響應比優先
十二、同一進程下的線程能夠共享(B)
A、stack        B、data section        C、register set      D、thread ID
1三、系統中的「顛簸」是由(B)引發的。
A、內存容量不足      B、缺頁率高      C、交換信息量大       D、缺頁率反饋模型不正確
1四、8瓶酒一瓶有毒,用人測試。每次測試結果8小時後纔會得出,而你只有8個小時的時間。問最少須要(B)人測試?
A、2         B、3         C、4            D、6
是3我的,若是你學過數的2進制編碼,就容易說了:
8瓶酒的編碼以下:
0: 000
1: 001
2: 010
3: 011
4: 100
5: 101
6: 110
7: 111
3我的分別喝3個位上爲1的編碼,因此:
第一個:1,3,5,7
第二個:2,3,6,7
第三個:4,5,6,7
把中毒的人的位填1的二進制數,就是毒酒的編號。
1五、下列關於網絡編程錯誤的是(AB)
A、TCP創建和關閉鏈接都只須要三次握手
B、UDP是可靠服務
C、主動關閉的一端會出現TIME_WAIT狀態
D、服務端編程會調用listen(),客戶端也能夠調用bind()
1六、進程間通信有哪幾種形式(ABCD)
A、Socket
B、Pipe
C、Shared memory
D、Signal

1七、TCP/UDP下面正確的是(AC)
A、TCP provide connection-oriented,byte-stream service;
B、Both TCP and UDP provide reliability service;
C、TCP also provides flow control;
D、Both TCP and UDP provide retransmission mechanism;
1八、分佈式系統設計包括(ABCDE)
A、容錯,design for fault
B、多數據中心的數據一致性
C、數據/服務可靠性
D、可擴展性
E、要知足ACID特性
1九、10個不一樣的球,放入3個不一樣的桶內,共有(C)種方法。  3^10
A、1000      B、720     C、59049     D、360
20、87的100次冪除以7的餘數是多少(D)
A、1     B、2     C、3     D、4
2、簡答題:
一、
(1)請描述進程和線程的區別?
(2)多線程程序有什麼優勢、缺點?
(2)多進程程序有什麼優勢、缺點?與多線程相比,有何區別?

二、編程題:
寫代碼,反轉一個單鏈表,分別以迭代和遞歸的形式來實現

[cpp]  view plain copy
  1. typedef struct node LinkNode;  
  2. struct node  
  3. {  
  4.     int data;  
  5.     LinkNode* next;  
  6. };  
// 返回新鏈表頭節點
LinkNode *reverse_link(LinkNode *head)
LinkNode *reverse_link_recursive(LinkNode *head)

[cpp]  view plain copy
  1. // 返回新鏈表頭節點  
  2. LinkNode *reverse_link(LinkNode *head)  
  3. {  
  4.     if(head == NULL)  
  5.         return NULL;  
  6.     LinkNode *prev , *curr , *reverse_head , *temp;  
  7.     prev = NULL , curr = head;  
  8.     while(curr->next)  
  9.     {  
  10.         temp = curr->next;  
  11.         curr->next = prev;  
  12.         prev = curr;  
  13.         curr = temp;  
  14.     }  
  15.     curr->next = prev;  
  16.     reverse_head = curr;  
  17.     return reverse_head;  
  18. }  
  19.   
  20. LinkNode *reverse_link_recursive(LinkNode *head)  
  21. {  
  22.     if(head == NULL)  
  23.         return NULL;  
  24.     LinkNode *curr , *reverse_head , *temp;  
  25.     if(head->next == NULL)    // 鏈表中只有一個節點,逆轉後的頭指針不變  
  26.         return head;  
  27.     else  
  28.     {  
  29.         curr = head;  
  30.         temp = head->next;    // temp爲(a2,...an)的頭指針  
  31.         reverse_head = reverse_link_recursive(temp);   // 逆轉鏈表(a2,...an),並返回逆轉後的頭指針  
  32.         temp->next = curr;    // 將a1連接在a2以後  
  33.         curr->next = NULL;  
  34.     }  
  35.     return reverse_head;      // (a2,...an)逆轉鏈表的頭指針即爲(a1,a2,...an)逆轉鏈表的頭指針  
  36. }  
三、給一個數組,元素都是整數(有正數也有負數),尋找連續的元素相加之和爲最大的序列。
如:一、-二、三、五、-四、6 連續序列三、五、-四、6的和最大。
如元素全爲負數,則最大的和爲0,即一個也沒有選。
/*
array[]     輸入數組
n           數組元素個數
            返回最大序列和
*/
int find_max_sum(int array[] , int n)

[cpp]  view plain copy
  1. int find_max_sum(int array[] , int n)  
  2. {  
  3.     int i , max , sum;  
  4.     sum = max = array[0];  
  5.     for(i = 1 ; i < n ; ++i)  
  6.     {  
  7.         if(sum < 0)  
  8.             sum = array[i];  
  9.         else  
  10.             sum += array[i];  
  11.         if(sum > max)  
  12.             max = sum;  
  13.     }  
  14.     if(max < 0)  
  15.         max = 0;  
  16.     return max;  
  17. }  
3、設計題
一、設計一個圖片存儲系統:假設有一個相冊系統,每一個用戶不限制上傳的圖片數目,每張相片壓縮後都在1M之內,需求以下:
(1)文件數量太大,採用傳統的文件系統存儲致使目錄系統很是臃腫,訪問速度變得緩慢;
(2)單機存儲容量已經遠遠不能承載全部的文件;
(3)上傳以後,用戶只有讀取操做和刪除操做,不支持修改,整個系統讀寫比例10:1

思路:可使用分佈式的文件系統,以爲hadoop的HDFS很符合要求,這是hadoop對googleGDFS的實現。
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息