神州數碼筆試經歷

30個選擇,兩個編程,總體不是很難,還是很基礎的東西~

有幾個不太確定的總結一下:

1.%o。太遙遠的都忘得不行了~

c語言書真是個寶貝~%o是以八進制形式輸出整數。%x是以十六進制數形式輸出整數。%e以指數形式輸出實數。%g用來輸出實數,它根據數值的大小自動選擇f或e格式(選擇輸出時占寬度較小的一種)輸出,且不輸出無意義的零。

2.進程和執行緒的區別

什麼是進程(process):普通的解釋就是,進程是程式的一次執行;而什麼是執行緒(thread),執行緒可以理解為進程中的執行的一段程式片段。在一個多任務環境中下面的概念可以幫助我們理解兩者間的差別:

進程間是獨立的,這表現在記憶體空間,上下文環境;執行緒運行在進程空間內。

一般來講(不使用特殊技術)進程是無法突破進程邊界存取其他進程內的存儲空間;而執行緒由於處於進程空間內,所以同一進程所產生的執行緒共享同一記憶體空間。

同一進程中的兩段代碼不能夠同時執行,除非引入執行緒。

執行緒是屬於進程的,當進程退出時該進程所產生的執行緒都會被強制退出並清除。

執行緒占用的資源要少於進程所占用的資源。

進程和執行緒都可以有優先權。

線上程系統中進程也是一個執行緒。可以將進程理解為一個程式的第一個執行緒。

說法一:進程是具有一定獨立功能的程式關於某個數據集合上的一次運行活動,進程是系統進行資源分配和調度的一個獨立單位.

執行緒是進程的一個實體,是cpu調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位.執行緒自己基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程式計數器,一組暫存器和棧),但是它可與同屬一個進程的其他的執行緒共享進程所擁有的全部資源.

一個執行緒可以創建和撤銷另一個執行緒;同一個進程中的多個執行緒之間可以並發執行

說法二:進程和執行緒都是由作業系統所體會的程式運行的基本單元,系統利用該基本單元實現系統對套用的並發性。進程和執行緒的區別在於:

簡而言之,一個程式至少有一個進程,一個進程至少有一個執行緒.

執行緒的劃分尺度小於進程,使得多執行緒程式的並發性高。

另外,進程在執行過程中擁有獨立的記憶體單元,而多個執行緒共享記憶體,從而極大地提高了程式的運行效率。

執行緒在執行過程中與進程還是有區別的。每個獨立的執行緒有一個程式運行的入口、順序執行序列和程式的出口。但是執行緒不能夠獨立執行,必須依存在應用程式中,由應用程式提供多個執行緒執行控制。

從邏輯角度來看,多執行緒的意義在於一個應用程式中,有多個執行部分可以同時執行。但作業系統並沒有將多個執行緒看做多個獨立的套用,來實現進程的調度和管理以及資源分配。這就是進程和執行緒的重要區別。

說法三:多執行緒共存於應用程式中是現代作業系統中的基本特徵和重要標誌。用過unix作業系統的讀者知道進程,在unix作業系統中,每個應用程式的執行都在作業系統核心中登記一個進程標誌,作業系統根據分配的標誌對應用程式的執行進行調度和系統資源分配,但進程和執行緒有什麼區別呢?

進程和執行緒都是由作業系統所體會的程式運行的基本單元,系統利用該基本單元實現系統對套用的並發性。進程和執行緒的區別在於:

執行緒的劃分尺度小於進程,使得多執行緒程式的並發性搞。

另外,進程在執行過程中擁有獨立的記憶體單元,而多個執行緒共享記憶體,從而極大地提高了程式的運行效率。

執行緒在執行過程中與進程還是有區別的。每個獨立的執行緒有一個程式運行的入口、順序執行序列和程式的出口。但是執行緒不能夠獨立執行,必須依存在應用程式中,由應用程式提供多個執行緒執行控制。

從邏輯角度來看,多執行緒的意義在於一個應用程式中,有多個執行部分可以同時執行。但作業系統並沒有將多個執行緒看做多個獨立的套用,來實現進程的調度和管理以及資源分配。這就是進程和執行緒的重要區別。

進程(process)是最初定義在unix等多用戶、多任務作業系統環境下用於表示應用程式在記憶體環境中基本執行單元的概念。以unix作業系統為例,進程是unix作業系統環境中的基本成分、是系統資源分配的基本單位。unix作業系統中完成的幾乎所有用戶管理和資源分配等工作都是通過作業系統對應用程式進程的控制來實現的。

c、c++、java等語言編寫的源程式經相應的編譯器編譯成執行檔後,提交給計算機處理器運行。這時,處在可執行狀態中的應用程式稱為進程。從用戶角度來看,進程是應用程式的一個執行過程。從作業系統核心角度來看,進程代表的是作業系統分配的記憶體、cpu時間片等資源的基本單位,是為正在運行的程式提供的運行環境。進程與應用程式的區別在於應用程式作為一個靜態檔案存儲在計算機系統的硬碟等存儲空間中,而進程則是處於動態條件下由作業系統維護的系統資源管理實體。多任務環境下應用程式進程的主要特點包括:

●進程在執行過程中有記憶體單元的初始入口點,並且進程存活過程中始終擁有獨立的記憶體地址空間;

●進程的生存期狀態包括創建、就緒、運行、阻塞和死亡等類型;

●從應用程式進程在執行過程中向cpu發出的運行指令形式不同,可以將進程的狀態分為用戶態和核心態。處於用戶態下的進程執行的是應用程式指令、處於核心態下的應用程式進程執行的是作業系統指令。

在unix作業系統啟動過程中,系統自動創建swapper、init等系統進程,用於管理記憶體資源以及對用戶進程進行調度等。在unix環境下無論是由作業系統創建的進程還要由應用程式執行創建的進程,均擁有唯一的進程標識(pid)。

說法四:應用程式在執行過程中存在一個記憶體空間的初始入口點地址、一個程式執行過程中的代碼執行序列以及用於標識進程結束的記憶體出口點地址,在進程執行過程中的每一時間點均有唯一的處理器指令與記憶體單元地址相對應。

java語言中定義的執行緒(thread)同樣包括一個記憶體入口點地址、一個出口點地址以及能夠順序執行的代碼序列。但是進程與執行緒的重要區別在於執行緒不能夠單獨執行,它必須運行在處於活動狀態的應用程式進程中,因此可以定義執行緒是程式內部的具有並發性的順序代碼流。

unix作業系統和microsoft windows作業系統支持多用戶、多進程的並發執行,而java語言支持應用程式進程內部的多個執行執行緒的並發執行。多執行緒的意義在於一個應用程式的多個邏輯單元可以並發地執行。但是多執行緒並不意味著多個用戶進程在執行,作業系統也不把每個執行緒作為獨立的進程來分配獨立的系統資源。進程可以創建其子進程,子進程與父進程擁有不同的可執行代碼和數據記憶體空間。而在用於代表應用程式的進程中多個執行緒共享數據記憶體空間,但保持每個執行緒擁有獨立的執行堆疊和程式執行上下文(context)。

基於上述區別,執行緒也可以稱為輕型進程 (light weight process,lwp)。不同執行緒間允許任務協作和數據交換,使得在計算機系統資源消耗等方面非常廉價。

執行緒需要作業系統的支持,不是所有類型的計算機都支持多執行緒應用程式。java程式設計語言將執行緒支持與語言運行環境結合在一起,提供了多任務並發執行的能力。這就好比一個人在處理家務的過程中,將衣服放到洗衣機中自動洗滌後將大米放在電飯鍋里,然後開始做菜。等菜做好了,飯熟了同時衣服也洗好了。

需要注意的是:在應用程式中使用多執行緒不會增加 cpu 的數據處理能力。只有在多cpu 的計算機或者在網路計算體系結構下,將java程式劃分為多個並發執行執行緒後,同時啟動多個執行緒運行,使不同的執行緒運行在基於不同處理器的java虛擬機中,才能提高應用程式的執行效率。

3.靜態成員

class test{

public:

test(){}

~test(){}

public:

//靜態成員函式

static int getcount(){

return m_ncount;

}

private:

//靜態數據成員

static int m_ncount;

};

int test::m_ncount=0;

靜態數據成員和普通數據成員區別較大,體現在下面幾點:

(1)普通數據成員屬於類的一個具體的對象,只有對象被創建了,普通數據成員才會被分配記憶體。而靜態數據成員屬於整個類,即使沒有任何對象創建,類的靜態數據成員變數也存在。

(2)因為類的靜態數據成員的存在不依賴與於任何類對象的存在,類的靜態數據成員應該在代碼中被顯示的初始化,一定要在類外進行,例如上例。

(3)外部訪問類的靜態成員只能通過類名來訪問,例如:test::getcount()。

(4)類的靜態成員函式無法直接訪問普通數據成員(可以通過類的指針等作為參數間接訪問),而類的任何成員函式都可以訪問類的靜態數據成員。

(5)靜態成員和類的普通成員一樣,也具有public、protected、private3種訪問級別,也可以具有返回值、const修飾符等參數。

套用舉例:

汽車製造商為統計汽車的產量,可以在在汽車類--car類中增加用於計數的靜態數據成員變數,比如在某個類car中聲明一個static int number;初始化為0。這個number就能被所有car的實例共用。在a的構造函數裡加上number++,在a的析構函數裡加上number--。那么每生成一個car的實例,number就加一,每銷毀一個car的實例(汽車報廢),number就減一,這樣,number就可以記錄在市場上car的實例。