待掌握的知識點

 

1.進程與線程的區別算法

2.進程間通訊的方式有哪些網絡

3.宏定義定義一個MIN 實現a,b中最小的那個數併發

4.爲何C++中調用C編譯後的。cpp文件,須要聲明「extern C」socket

5.冒泡排序分佈式

6.快速排序函數

7.堆排序測試

8.軟件測試人員在整個項目開發過程當中各個階段的做用,測試人員在項目上線後須要作些什麼?測試用例是在哪些階段作的?操作系統

9.操做系統的層次,以及每一層的做用計算機網絡

10.strcpy()線程

11.strcmp(),C語言實現

12.最大子序列的和和相應的序列

13.提供差錯控制的協議是?

14.IP協議是可靠的麼,面向鏈接的麼?

15.單鏈表逆轉

16.aToi, 兩個鏈表第一個公共節點

17.在C++如何調用。dll程序?

18.具備風險管理的軟件設計模型是,瀑布?螺旋?增加?。。。

19.進程的3種狀態

20.C++或C中的指針使用時須要注意的地方有哪些?

22。計算機網絡最大的功能是?

 

 

1.      進程與線程的區別

一。什麼是進程

    進程是具備必定獨立功能的程序關於某個數據集合上的一次運行活動,進程是系統進行資源分配和調度的一個獨立單位。

    線程是進程的一個實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位。

    系統資源:線程本身基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程序計數器,一組寄存器和棧),可是它可與同屬一個進程的其餘的線程共享進程所擁有的所有資源。一個線程能夠建立和撤銷另外一個線程;同一個進程中的多個線程之間能夠併發執行。

      進程的做用和定義:進程是爲了提升CPU的執行效率,減小由於程序等待帶來的CPU空轉以及其餘計算機軟硬件資源的浪費而提出來的。進程是爲了完成用戶任務所須要的程序的一次執行過程和爲其分配資源的一個基本單位,是一個具備獨立功能的程序段對某個數據集的一次執行活動。

 

二。線程和進程的區別:

一、 線程是進程的一部分,因此線程有的時候被稱爲是輕權進程或者輕量級進程。
二、 一個沒有線程的進程是能夠被看做單線程的,若是一個進程內擁有多個進程,進程的執行過程不是一條線(線程)的,而是多條線(線程)共同完成的。
三、 系統在運行的時候會爲每一個進程分配不一樣的內存區域,可是不會爲線程分配內存(線程所使用的資源是它所屬的進程的資源),線程組只能共享資源。那就是說,除了CPU以外(線程在運行的時候要佔用CPU資源),計算機內部的軟硬件資源的分配與線程無關,線程只能共享它所屬進程的資源。
四、 與進程的控制表PCB類似,線程也有本身的控制表TCB,可是TCB中所保存的線程狀態比PCB表中少多了。
五、 進程是系統全部資源分配時候的一個基本單位,擁有一個完整的虛擬空間地址,並不依賴線程而獨立存在。

 

三。線程相對進程的優勢

        進程切換比線程切換開銷大是由於進程切換時要切頁表,並且每每伴隨着頁調度,由於進程的數據段代碼段要換出去,以便把將要執行的進程的內容換進來。原本進程的內容就是線程的超集。並且線程只須要保存線程的上下文(相關寄存器狀態和棧的信息)就行了,動做很小。

 

2.進程間通訊的方式有哪些

Linux 進程間通訊的方式主要有:管道pipe, 消息隊列,共享存儲區,socket套接字,信號,信號量

 

進程間通訊主要包括管道, 系統IPC(Inter-Process Communication,進程間通訊)(包括消息隊列,信號,共享存儲), 套接字(SOCKET).

管道包括三種:1)普通管道PIPE, 一般有兩種限制,一是半雙工,只能單向傳輸;二是隻能在父子或者兄弟進程間使用. 2)流管道s_pipe: 去除了第一種限制,能夠雙向傳輸. 3)命名管道:name_pipe, 去除了第二種限制,能夠在許多並不相關的進程之間進行通信.

識別

系統IPC的三種方式類同,都是使用了內核裏的標識符來識別. FAQ1: 管道與文件描述符,文件指針的關係?

答: 其實管道的使用方法與文件相似,都能使用read,write,open等普通IO函數. 管道描述符來相似於文件描述符. 事實上, 管道使用的描述符,文件指針和文件描述符最終都會轉化成系統中SOCKET描述符. 都受到系統內核中SOCKET描述符的限制. 本質上LINUX內核源碼中管道是經過空文件來實現.

FAQ2: 管道的使用方法?

答: 主要有下面幾種方法: 1)pipe, 建立一個管道,返回2個管道描述符.一般用於父子進程之間通信. 2)popen, pclose: 這種方式只返回一個管道描述符,經常使用於通訊另外一方是stdin or stdout; 3)mkpipe:命名管道, 在許多進程之間進行交互.

FAQ3: 管道與系統IPC之間的優劣比較?

答: 管道: 優勢是全部的UNIX實現都支持, 而且在最後一個訪問管道的進程終止後,管道就被徹底刪除;缺陷是管道只容許單向傳輸或者用於父子進程之間.

系統IPC: 優勢是功能強大,能在絕不相關進程之間進行通信; 缺陷是關鍵字KEY_T使用了內核標識,佔用了內核資源,並且只能被顯式刪除,並且不能使用SOCKET的一些機制,例如select,epoll等.

FAQ4: WINDOS進程間通訊與LINUX進程間通訊的關係?

答: 事實上,WINDOS的進程通訊大部分移植於UNIX, WINDOS的剪貼板,文件映射等均可從UNIX進程通訊的共享存儲中找到影子.

FAQ5: 進程間通訊與線程間通訊之間的關係?

答: 由於WINDOWS運行的實體是線程, 狹義上的進程間通訊實際上是指分屬於不一樣進程的線程之間的通信.而單個進程之間的線程同步問題可歸併爲一種特殊的進程通訊.它要用到內核支持的系統調用來保持線程之間同步. 一般用到的一些線程同步方法包括:Event, Mutex,信號量Semaphore,臨界區資源等.

Linux

的進程間通訊(IPC,InterProcess Communication)通訊方法有管道、消息隊列、信號、共享內存、套接口等。

 

3.宏定義定義一個MIN 實現a,b中最小的那個數

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

4.爲何C++中調用C編譯後的。cpp文件,須要聲明「extern C」

5.冒泡排序

6.快速排序

7.堆排序

8.軟件測試人員在整個項目開發過程當中各個階段的做用,測試人員在項目上線後須要作些什麼?測試用例是在哪些階段作的?

9.操做系統的層次,以及每一層的做用

10.strcpy()

11.strcmp()C語言實現

12.最大子序列的和和相應的序列

13.提供差錯控制的協議是?

14.IP協議是可靠的麼,面向鏈接的麼?

Ip地址32 位,不可靠,無鏈接。惟一的。

15.單鏈表逆轉

16.aToi兩個鏈表第一個公共節點

17.C++如何調用。dll程序?

 

18.具備風險管理的軟件設計模型是,瀑布?螺旋?增加?。。。

  具備風險管理的是:螺旋模型

螺旋模型總結了瀑布模型和快速原型模型的特色,增長了風險管理。每到一個階段都會出一個新版本。

瀑布模型是本階段的輸出做爲下一個階段的輸入。

快速原型模型是 在較短的時間內開發出一個原型系統,以便用戶確認需求。

噴泉模型:對象驅動的、新型的

 

19.進程的3種狀態

   執行態、阻塞態、就緒態

進程的三種基本狀態

    進程在運行中不斷地改變其運行狀態。一般,一個運行進程必須具備如下三種基本狀態。

 就緒(Ready)狀態

    當進程已分配到除CPU之外的全部必要的資源,只要得到處理機即可當即執行,這時的進程狀態稱爲就緒狀態。

 執行(Running)狀態
當進程已得到處理機,其程序正在處理機上執行,此時的進程狀態稱爲執行狀態。

 阻塞(Blocked)狀態
正在執行的進程,因爲等待某個事件發生而沒法執行時,便放棄處理機而處於阻塞狀態。引發進程阻塞的事件可有多種,例如,等待I/O完成、申請緩衝區不能知足、等待信件(信號)等。

2.進程三種狀態間的轉換

一個進程在運行期間,不斷地從一種狀態轉換到另外一種狀態,它能夠屢次處於就緒狀態和執行狀態,也能夠屢次處於阻塞狀態。圖3_4描述了進程的三種基本狀態及其轉換。

 (1) 就緒→執行
處於就緒狀態的進程,當進程調度程序爲之分配了處理機後,該進程便由就緒狀態轉變成執行狀態。

 (2) 執行→就緒
處於執行狀態的進程在其執行過程當中,因分配給它的一個時間片已用完而不得不讓出處理機,因而進程從執行狀態轉變成就緒狀態。

 (3) 執行→阻塞
正在執行的進程因等待某種事件發生而沒法繼續執行時,便從執行狀態變成阻塞狀態。

 (4) 阻塞→就緒
處於阻塞狀態的進程,若其等待的事件已經發生,因而進程由阻塞狀態轉變爲就緒狀態。

 

例:

題目:某系統的狀態轉換圖如圖所示。

 

(1)分別說明引發狀態轉換一、二、三、4的緣由,並各舉一個事件。
(2)爲何在轉換圖中沒有就緒到阻塞和阻塞到運行的轉換方向?
(3)一個進程的狀態變換可以引發另外一個進程的狀態變換,說明下列因果變遷是否可能發生,緣由是什麼?
(a)3→1(b)2→1(c)3→2(d)3→4(e)4→1

答: (1)
1:就緒->執行, 當前運行進程阻塞,調度程序選一個優先權最高的進程佔有處理機;
2:執行->就緒, 當前運行進程時間片用完;
3:執行->阻塞,當前運行進程等待鍵盤輸入,進入了睡眠狀態。
4:阻塞->就緒,I/O操做完成,被中斷處理程序喚醒。

(2)就緒進程沒有佔有處理機,也即沒有通過運行,其狀態就不會改變。
阻塞狀態進程喚醒後先要進入就緒隊列,纔會被調度程序選中,進入了執行狀態。

(3)
(a) 3→1: 可能,當前運行進程阻塞,調度程序選一個優先級最高的進程佔有處理機。
(b)2→1:可能,當前運行進程優先級降低,調度程序選一個優先級最高的進程佔有處理機。
(c)3→2: 不可能,佔有CPU的一個進程不能同時進入兩個狀態;在單CPU的系統中,狀態3發生後,cpu沒有執行進程,故不會發生狀態轉換2。
(d)3→4:通常不可能,不相干的兩個事件。狀態轉換3是因爲運行進程等待資源而發生的,這並不會使得阻塞隊列中的進程獲得資源而進入就緒隊列。但在Unix中,當系統的0#進程因runin標誌而睡眠時,有(在內存)進程睡眠,就會喚醒0#進程,使其進入就緒狀態,以便將該進程和在盤交換區就緒進程交換位置。
(e)4→1:通常無關,但當就緒隊列爲空時,一個進程被喚醒轉入就緒隊列後,調度程序使該進程佔有處理機(可是同一個進程)。

 

20.C++C中的指針使用時須要注意的地方有哪些?

1.指針未初始化。 float * a; a 的值是亂七八糟的數字。能夠a=NULL,之後用到時可使用if(a==NULL)來判斷指針是否有效,不然不行。或者float* a=new float;

Float b; a=&b;

2.野指針。指針轉移。容易形成內存泄露

3.指針越界

4.指向局部變量的指針。注意做用域。

22。計算機網絡最大的功能是?

最大功能是:資源共享

其餘功能:數據通訊、提升可靠性和可用性(都可做爲其餘的備用機)、分佈式處理

 

計算機網絡主要具備以下4個功能。[1]

(1)數據通訊:計算機網絡主要提供傳真、電子郵件、電子數據交換(EDI)、電子公告牌(BBS)、遠程登陸和瀏覽等數據通訊服務。

(2)資源共享:凡是入網用戶均能享受網絡中各個計算機系統的所有或部分軟件、硬件和數據資源。爲最本質功能

(3)提升計算機的可靠性和可用性:網絡中的每臺計算機均可經過網絡相互成爲後備機。一旦某臺計算機出現故障,它的任務就可由其餘的計算機代爲完成,這樣能夠避免在單擊狀況下,一臺計算機發生故障引發整個系統癱瘓的現象,從而提升系統的可靠性。而當網絡中的某臺計算機負擔太重時,網絡又能夠將新的任務交給較空閒的計算機完成,均衡負載,從而提升了每臺計算機的可用性。

(4)分佈式處理:經過算法將大型的綜合性問題交給不一樣的計算機同時進行處理。用戶能夠根據須要合理選擇網絡資源,就近快速地進行處理。

相關文章
相關標籤/搜索