1. Internet 是有ARPANET發展而來
2. NFS(Network File System)即網絡文件系統
3. OSI參考模型七層:物理層,數據鏈路層,網絡層(IP,路由器,三層交換機),傳輸層(TCP/UDP),會話層,表示層,應用層
4. 軟件測試:黑盒/白盒測試:
黑盒測試:主要就是測試代碼的功能與輸入有效性在問題, 以便于了解或使用系統的內部結構及知識。
輸入類型 | 輸入數據 | 預期輸出 | 實際輸出 | 測試狀態 |
---|---|---|---|---|
正確的數值 | 5+5= | 10 | 10 | 正確 |
帶非法字符的數值 | &+&….= | 出現異常 | 出現異常 | 正確 |
加減乘除 | 5*5= | 25 | 25 | 正確 |
非法運算符 | 5@2= | 提示只能輸入+-*/ | 提示只能輸入+-*/ | 正確 |
分母為0 | 3/0= | 提示分母不能為0 | 提示分母不能為0 | 正確 |
白盒測試:在設計測試的過程中,我們通過測試程序的內部結構,了解代碼的完善程度,發現錯誤,減少代碼。
測試用例 | 用例說明 | 覆蓋代碼 | 測試結果 |
---|---|---|---|
5-5 | 數值的輸入 | interceResult(4-9) | 運行成功 |
2.9 | 非法運算符 | interResult(7-9) | 運行成功,提示輸入錯誤重新輸入 |
1-1 | 是否運行減法 | interceptOperation(4-64) | 運行成功 |
2+2 | 是否運行加法 | interceptOperation(4-64) | 運行成功 |
3*3 | 是否運行乘法 | interceptOperation(4-64) | 運行成功 |
4/4 | 是否運行除法 | InterceptOperation(4-64) | 運行成功 |
5/0 | 分母不能為0 | ispassString(16-18) | 運行成功,提示分母不能為0,重新輸入 |
6e。 | 非法字符 | interceResult(7-9) | 運行成功,提示算式錯誤重新輸入 |
5. 程序錯誤的主要三種情況:
a) 編譯鏈接錯誤(語法錯誤):
編譯鏈接錯誤又分為編譯錯和鏈接錯。
編譯錯就是普通意義上的語法錯誤,編譯器進行語法檢查不通過,也就是程序違背了計算機語言的語法,例如:括號不匹配、變量名拼寫錯誤、用保留字定義變量名等;
初學者有時寫了函數的聲明,但是缺少函數的定義,此時就會出現鏈接錯。b)運行錯誤:
運行錯是程序可以執行,但是在執行過程中發生異常,提前退出程序。
最常見的是指針越界,打開文件失敗繼續讀取文件,總而言之是讓計算機執行一些不能執行的語句。
c)邏輯錯誤:
邏輯錯是程序也能運行,就是結果不對,主要原因有:程序算法本身錯誤,程序和算法不同義等。
例如:新手經常將判斷相等的 == 寫成 = 賦值,往往就會導致邏輯錯。
6. C++函數的三種傳遞方式(具體講解):
- 值傳遞 :形參是實參的拷貝,改變形參的值并不會影響外部實參的值。從被調用函數的角度來說,值傳遞是單向的(實參->形參),參數的值只能傳入,不能傳出。當函數內部需要修改參數,并且不希望這個改變影響調用者時,采用值傳遞。
- 指針傳遞:形參為指向實參地址的指針,當對形參的指向操作時,就相當于對實參本身進行的操作.
- 引用傳遞:形參相當于是實參的“別名”,對形參的操作其實就是對實參的操作,在引用傳遞過程中,被調函數的形式參數雖然也作為局部變量在棧中開辟了內存空間,但是這時存放的是由主調函數放進來的實參變量的地址。被調函數對形參的任何操作都被處理成間接尋址,即通過棧中存放的地址訪問主調函數中的實參變量。正因為如此,被調函數對形參做的任何操作都影響了主調函數中的實參變量。
7.逆波蘭表達式:
博客園中關于逆波蘭表達式的講解
8. 虛析構函數:
虛析構函數,一個基類的析構函數寫成虛函數,并用基類指針刪除派生類的對象時,會調用派生類的析構函數,否則會造成內存泄露。
9. TCP和UDP的區別:
1,TCP面向連接(如打電話要先撥號建立連接);UDP是無連接的,即發送數據之前不需要建立連接
2、TCP提供可靠的服務。也就是說,通過TCP連接傳送的數據,無差錯,不丟失,不重復,且按序到達;UDP盡最大努力交付,即不保證可靠交付
3、TCP面向字節流,實際上是TCP把數據看成一連串無結構的字節流;UDP是面向報文的
UDP沒有擁塞控制,因此網絡出現擁塞不會使源主機的發送速率降低(對實時應用很有用,如IP電話,實時視頻會議等)
4、每一條TCP連接只能是點到點的;UDP支持一對一,一對多,多對一和多對多的交互通信,
5,TCP的邏輯通信信道是全雙工的可靠信道,UDP則是不可靠信道
10. 進程間通訊方式及優缺點
- 管道:有名管道和無名管道(范例)
- 無名管道:是半雙工的,數據只能向一個方向流動;需要雙方通信時,需要建立起兩個管道;只能用于父子進程或者兄弟進程之間(具有親緣關系的進程)。
- 有名管道:和無名管道基本相同,但也有不同點:無名管道只能由父子進程使用;但是通過命名管道,不相關的進程也能交換數據。
- 共享內存:被多個進程共享的一部分物理內存。共享內存是進程間共享數據的一種最快的方法,一個進程向共享內存區域寫入了數據,共享這個內存區域的所有進程就可以立刻看到其中的內容。(范例)
- 消息隊列:為了防止出現因多個程序同時訪問一個共享資源而引發的一系列問題,我們需要一種方法,它可以通過生成并使用令牌來授權,在任一時刻只能有一個執行進程訪問代碼的臨界區域。臨界區域是指執行數據更新的代碼需要獨占式地執行。(范例)
- 信號量:就是一個消息的鏈表。可以把消息看作一個記錄,具有特定的格式。進程可以向其中按照一定的規則添加新消息;另一些進程則可以從消息隊列中讀走消息(范例)
- 套接字(socket):套接口也是一種進程間的通信機制,與其他通信機制不同的是它可以用于不同及其間的進程通信。
11. 線程間同步方式(范例)
- 鎖機制
- 互斥鎖:提供了以排它方式阻止數據結構被并發修改的方法。
- 讀寫鎖:允許多個線程同時讀共享數據,而對寫操作互斥。
- 條件變量:可以以原子的方式阻塞進程,直到某個特定條件為真為止。對條件測試是在互斥鎖的保護下進行的。條件變量始終與互斥鎖一起使用。
- 信號量機制:包括無名線程信號量與有名線程信號量
- 信號機制:類似于進程間的信號處理。
線程間通信的主要目的是用于線程同步,所以線程沒有象進程通信中用于數據交換的通信機制。
12. 線程和進程的比較(范例)
進程是程序的實例,具有一定的獨立功能。
線程是進程的一個實體,是CPU調度和分派的基本單位,他是比進程更小的能獨立運行的基本單位。線程基本上不擁有系統資源,只擁有一點在運行中必不可少的資源,但是他可以與同屬于一個進程的其他線程共享擁有的全部資源。
區別:進程有獨立的地址空間,一個進程崩潰后,在保護模式下不會對其它進程產生影響,而線程只是一個進程中的不同執行路徑。線程有自己的堆棧和局部變量,但線程之間沒有單獨的地址空間,一個線程死掉就等于整個進程死掉