常見筆試題總結

1.冒泡排序編程

 1     int a[5] = {96,73,12,46,98};
 2     int i = 0,j = 0,t = 0;
 3 
 4     for (j = 0;j < 4;j++) {
 5         for (i = 0;i < 4 - j;i++) {
 6             if (a[i] > a[i+1]) {
 7                 t = a[i];
 8                 a[i] = a[i+1];
 9                 a[i+1] = t;
10             }
11         }
12     }
View Code

 

2.操做系統中,進程能夠分爲(系統進程)和(用戶進程)兩類安全

3.ISO七層模型是什麼?TCP/UDP是屬於哪一層?TCP/UDP有何優缺點?網絡

  - 物理層,數據鏈路層,網絡層,傳輸層,會話層,表示層,應用層數據結構

  - TCP/UDP屬於傳輸層併發

  - TCP、UDP優缺點分析ide

    * TCP:全雙工,點對點的鏈接;提供三大服務:可靠數據傳輸,擁塞控制,流量控制函數

    * UDP:無需創建鏈接,分組首部開銷小,應用層控制數據什麼時候發送更爲精細。性能

4.字符串拷貝有sprintf, strcpy及memcpy函數,請問其區別,哪一個效率高?測試

  - memcpy一次讀取全部源數據,然後一次性傳到目標地址,效率最高spa

  - strcpy須要逐個判斷字符串是否結束,一字節一字節讀取,比上述慢

  - sprintf須要檢測輸出格式的步驟,因此會更慢

5.C++語言中類成員函數的重載、覆蓋和隱藏的區別?

  - 重寫和重載主要有如下幾點區別

    * 範圍區別:被重寫的和重寫函數在兩個類中,而重載和被重載的函數在同一個類中

    * 參數區別:被重寫函數和重寫函數逇參數列表必定相同,而重載函數參數列表必定不一樣

    * virtual的區別:重寫的基類中被重寫的函數必需要有virtual修飾,而重載函數均可以

  - 隱藏和重寫,重載的區別

    * 範圍區別:隱藏和重寫同樣,不在同一個類中

    * 參數區別:當參數列表不一樣時,不管基類是否有virtual,基類的函數都會被隱藏,而不是重寫。

6.指針和引用有什麼區別?傳引用比傳指針更安全,爲何?

  - 相同點:

    都是地址概念。指針內容爲內存地址,而引用則是某塊內存的別名

  - 不一樣點:

    * 指針是一個實體,而引用僅是別名

    * 引用只能在定義時被初始化一次,以後不可變。而指針能夠改變

    * 引用不能爲空,而指針能夠爲空

    * sizeof,自增運算符等,其意義不一樣 

  - 安全性:引用比指針多了類型檢查。

7.進程同步機制及進程間通訊途徑?

  - 進程同步:信號量

  - 進程間通訊方式:管道,信號,系統IPC(消息隊列、信號量、共享內存),SOCKET

8.靜態連接和動態連接的優缺點?

  - 靜態連接庫優缺點:

    * 代碼裝載速度快,執行速度比動態連接快

    * 只須要在開發者電腦保證靜態庫的存在便可,程序發佈後無需靜態庫

    * 代碼體積大

    * 內存中可能存在多份相同指令,形成空間浪費

  - 動態連接庫優勢:

    * 節省內存空間

    * 庫文件和可執行文件相互獨立,當接口不改變狀況下,更新庫文件對可執行文件不影響

    * 節省磁盤空間

    * 程序運行時,依賴動態庫文件

9.談談對進程,程序和線程的理解

  - 進程:做爲操做系統的最小執行單元,當程序運行時,操做系統會分配一個進程的數據結構,同時分配4GB(32位機)的資源空間,包括系統環境變量區,堆區,棧區,數據區,文本區。然後期計算機的發展,爲了提升CPU的利用率,將操做系統調度單元進一步細化爲線程,即同一個進程包含多個線程時,就會有併發問題出現。而線程,必須依賴進程空間而存在,即一個可執行程序的執行,至少應該會分配到一個進程,一個線程資源。

  - 程序:映像文件在存儲介質上的一種組織形式,由域組成。域分爲加載域和運行域,運行域通常在內存地址中,而加載域在硬盤中存在。域最多由三個輸出段組成,輸出端包含可讀寫代碼段RW和只讀代碼段RO以及ZI。

10.簡述隊列,棧,堆的異同

  隊列和棧都是線性存儲結構,可是二者的插入和刪除數據的操做不一樣,隊列是「先進先出」,棧是「後進後出」,堆區是「順序隨意」

11.談談對編程規範的理解或認識:

  編程規範可總結爲:程序的可行性,可讀性,可移植性以及可測試性

12.寫一個「標準」宏MIN

  #define  MIN(a, b)  ((a) <= (b)? (a):(b)) 

13.typedef和define有什麼區別?

  - 用法不一樣

  - 執行時間不一樣:typedef是編譯過程的一部分,帶類型檢查,define在預編譯部分

  - 做用域不一樣

  - 對指針的操做不一樣

14.static做用?

  static在C中主要用於定義全局靜態變量,定義局部靜態變量,定義靜態函數。

15.如何避免「野指針」?

  - 指針變量聲明沒有被初始化

  - 指針p在被free以後,沒有置爲NULL

  - 指針操做超越了變量的做用範圍

16.中斷處理函數:

  - 不能有返回值

  - 不能傳遞參數

  - 避免作浮點運算

  - pirntf常常有重入和性能上的問題

17.構造函數是否爲虛函數?

  不能。而且不能在構造函數中調用虛函數,由於這樣執行的是父類的對應函數,由於其自己尚未構造好。析構函數能夠是虛函數。

相關文章
相關標籤/搜索