研發類C++筆試題目

lostinai發表於2014-06-26

http://blog.csdn.net/chen825919148/article/details/8244401

1、vector和list的區別

區別:1)vector的物件實在一塊連續的記憶體空間上,而list的物件可以不在來連續的記憶體空間上。

   2)vector元素的隨機訪問的效率很高,插入和刪除效率較低,當vector儲存的物件的構造較為複雜時,移動vector的元素需要呼叫物件的拷貝建構函式,效率因而很低。vector是離散儲存的,訪問元素時需要從頭或者尾部開始時進行遍歷(不能隨機訪問),刪除和插入元素相比vector的效率高,不需要移動元素。vector的大小擴張通常是2倍的擴充套件。

  3)vector是單向的,list是雙向的。

  4)vector適用:物件數量變化少,簡單物件,隨機訪問元素頻繁;list適用:物件數量變化大,物件複雜,插入和刪除頻繁。


2、C++中const的一些常用方法

1)定義一個只讀的變數。(而非一個常量)

2)修飾函式的引數。當我們希望函式的實參不被改變時,用const修飾函式的形參,防止實參發生改變,特別是指標引數,防      止指標本身發生改變。

3)修飾類的成員函式,可以防止類的資料成員和this指標發生改變。

4 )修飾一個類的物件。

      例如:const CMyClass mc,這時的mc對類成員變數和成員函式的呼叫是有限制的:
      a、能讀取類的成員變數而不能去修改它;
      b、只能呼叫末端有const修飾的函式。


3、輸出陣列的K個最大值

使用STL中的partial_sort.

partial_sort使用的是堆排序,建堆的時間複雜度為O(n),調整堆的時間度雜度為o(logn),如果呼叫partial_sort時middle的值為last的值,則相當於呼叫sort,對所有元素排序,但是堆排序是穩定的排序。假如求的是m個元素的partial_sort,則,o(n) + m*o(logn);

相比使用sort()函式使用的快速排序,其時間複雜度為n(logn)。


4、對連結串列進行排序

struct Node

{

int key;

Node *next
};


5、 給出只允許程式單例執行的程式碼

在linux/unix環境下通過檔案所實現,見APUE-單例項守護程式。

為了正常運作,某些守護程式時實現為單例項的,也就是在忍一時刻只執行該守護程式的一個副本。例如,該守護程式可能需要互斥的訪問一個裝置。在cron守護進城的情況下,如果同時有多個實力執行,那麼每個飛奔都可能試圖開始某個預定的操作,於是造成了該作業系統的重複執行,很可能導致出錯。
使用檔案鎖和記錄鎖機制的方法可以用來保證一個守護進城只有一個副本在執行。如果每一個守護程式建立一個檔案,並且在整個檔案上加上一把寫鎖,那就只允許建立一把這樣的寫鎖。所以在此之後的如試圖在建立一把這樣的寫鎖就將失敗,一次後序的守護程式副本指明已有一個副本正在執行。
檔案和記錄鎖提供了一種方便的互斥機制。如果守護程式在整個檔案上得到一把寫鎖,那麼在該守護程式終止時,這把鎖江北自動的刪除。簡化了復原蘇圩的處理,出去了對以前的守護程式實力需要進城清理的有關操作。


6、讀出指定目錄下的txt檔案,統計txt檔案數目


7、tcp三次握手的序列圖


另一張試卷:

1、解釋MVC模型

2、IPC機制

3、判斷大端小端

  1. int Is_big_endian()  
  2. {  
  3.     int x =1;  
  4.     if(*(char*)&x==1)  
  5.         return 0;  
  6.     else  return 1;  
  7. }  
  8.   
  9. bool Is_big_endian()  
  10. {  
  11.     union check  
  12.     {  
  13.         int i;  
  14.         char ch;  
  15.     }c;  
  16.   
  17.     c.i = 1;  
  18.      return (c.ch!=1);  
  19. }  
  1. int Is_big_endian()  
  2. {  
  3.     int x =1;  
  4.     if(*(char*)&x==1)  
  5.         return 0;  
  6.     else  return 1;  
  7. }  
  8.   
  9. bool Is_big_endian()  
  10. {  
  11.     union check  
  12.     {  
  13.         int i;  
  14.         char ch;  
  15.     }c;  
  16.   
  17.     c.i = 1;  
  18.      return (c.ch!=1);  
  19. }  


4、判斷一個128位的整數是否為素數。

5、TCP伺服器伺服器端使用到的Socket API函式,按照使用的順序。

6、C++指標與引用的區別。

1)  指標是一個實體,而引用僅是個別名;
2)  引用使用時無需解引用(*),指標需要解引用;
3)  引用只能在定義時被初始化一次,之後不可變;指標可變;
4)  引用沒有 const,指標有 const,const 的指標不可變;
5)  引用不能為空,指標可以為空;
6)  “sizeof 引用”得到的是所指向的變數(物件)的大小,而“sizeof 指標”得到的是指標本身(所指向的變數或物件的地址)的大小;
        typeid(T) == typeid(T&) 恆為真,sizeof(T) == sizeof(T&) 恆為真,
              但是當引用作為成員時,其佔用空間與指標相同(沒找到標準的規定)。
7)  指標和引用的自增(++)運算意義不一樣;


7、C++的型別轉換操作符,給出例子。

8、STL中的兩種容器的實現

9、MFC和QT的訊息機制的區別

相關文章