- 相關推薦
神州數(shù)碼筆試經(jīng)歷
30個選擇,兩個編程,總體不是很難,還是很基礎的東西~
有幾個不太確定的總結一下:
1.%o。太遙遠的都忘得不行了~
C語言書真是個寶貝~%o是以八進制形式輸出整數(shù)。%x是以十六進制數(shù)形式輸出整數(shù)。%e以指數(shù)形式輸出實數(shù)。%g用來輸出實數(shù),它根據(jù)數(shù)值的大小自動選擇f或e格式(選擇輸出時占寬度較小的一種)輸出,且不輸出無意義的零。
2.進程和線程的區(qū)別
什么是進程(Process):普通的解釋就是,進程是程序的一次執(zhí)行;而什么是線程(Thread),線程可以理解為進程中的執(zhí)行的一段程序片段。在一個多任務環(huán)境中下面的概念可以幫助我們理解兩者間的差別:
進程間是獨立的,這表現(xiàn)在內存空間,上下文環(huán)境;線程運行在進程空間內。
一般來講(不使用特殊技術)進程是無法突破進程邊界存取其他進程內的存儲空間;而線程由于處于進程空間內,所以同一進程所產生的線程共享同一內存空間。
同一進程中的兩段代碼不能夠同時執(zhí)行,除非引入線程。
線程是屬于進程的,當進程退出時該進程所產生的線程都會被強制退出并清除。
線程占用的資源要少于進程所占用的資源。
進程和線程都可以有優(yōu)先級。
在線程系統(tǒng)中進程也是一個線程?梢詫⑦M程理解為一個程序的第一個線程。
說法一:進程是具有一定獨立功能的程序關于某個數(shù)據(jù)集合上的一次運行活動,進程是系統(tǒng)進行資源分配和調度的一個獨立單位.
線程是進程的一個實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位.線程自己基本上不擁有系統(tǒng)資源,只擁有一點在運行中必不可少的資源(如程序計數(shù)器,一組寄存器和棧),但是它可與同屬一個進程的其他的線程共享進程所擁有的全部資源.
一個線程可以創(chuàng)建和撤銷另一個線程;同一個進程中的多個線程之間可以并發(fā)執(zhí)行
說法二:進程和線程都是由操作系統(tǒng)所體會的程序運行的基本單元,系統(tǒng)利用該基本單元實現(xiàn)系統(tǒng)對應用的并發(fā)性。進程和線程的區(qū)別在于:
簡而言之,一個程序至少有一個進程,一個進程至少有一個線程.
線程的劃分尺度小于進程,使得多線程程序的并發(fā)性高。
另外,進程在執(zhí)行過程中擁有獨立的內存單元,而多個線程共享內存,從而極大地提高了程序的運行效率。
線程在執(zhí)行過程中與進程還是有區(qū)別的。每個獨立的線程有一個程序運行的入口、順序執(zhí)行序列和程序的出口。但是線程不能夠獨立執(zhí)行,必須依存在應用程序中,由應用程序提供多個線程執(zhí)行控制。
從邏輯角度來看,多線程的意義在于一個應用程序中,有多個執(zhí)行部分可以同時執(zhí)行。但操作系統(tǒng)并沒有將多個線程看做多個獨立的應用,來實現(xiàn)進程的調度和管理以及資源分配。這就是進程和線程的重要區(qū)別。
說法三:多線程共存于應用程序中是現(xiàn)代操作系統(tǒng)中的基本特征和重要標志。用過UNIX操作系統(tǒng)的讀者知道進程,在UNIX操作系統(tǒng)中,每個應用程序的執(zhí)行都在操作系統(tǒng)內核中登記一個進程標志,操作系統(tǒng)根據(jù)分配的標志對應用程序的執(zhí)行進行調度和系統(tǒng)資源分配,但進程和線程有什么區(qū)別呢?
進程和線程都是由操作系統(tǒng)所體會的程序運行的基本單元,系統(tǒng)利用該基本單元實現(xiàn)系統(tǒng)對應用的并發(fā)性。進程和線程的區(qū)別在于:
線程的劃分尺度小于進程,使得多線程程序的并發(fā)性搞。
另外,進程在執(zhí)行過程中擁有獨立的內存單元,而多個線程共享內存,從而極大地提高了程序的運行效率。
線程在執(zhí)行過程中與進程還是有區(qū)別的。每個獨立的線程有一個程序運行的入口、順序執(zhí)行序列和程序的出口。但是線程不能夠獨立執(zhí)行,必須依存在應用程序中,由應用程序提供多個線程執(zhí)行控制。
從邏輯角度來看,多線程的意義在于一個應用程序中,有多個執(zhí)行部分可以同時執(zhí)行。但操作系統(tǒng)并沒有將多個線程看做多個獨立的應用,來實現(xiàn)進程的調度和管理以及資源分配。這就是進程和線程的重要區(qū)別。
進程(Process)是最初定義在Unix等多用戶、多任務操作系統(tǒng)環(huán)境下用于表示應用程序在內存環(huán)境中基本執(zhí)行單元的概念。以Unix操作系統(tǒng)為例,進程是Unix操作系統(tǒng)環(huán)境中的基本成分、是系統(tǒng)資源分配的基本單位。Unix操作系統(tǒng)中完成的幾乎所有用戶管理和資源分配等工作都是通過操作系統(tǒng)對應用程序進程的控制來實現(xiàn)的。
C、C++、Java等語言編寫的源程序經(jīng)相應的編譯器編譯成可執(zhí)行文件后,提交給計算機處理器運行。這時,處在可執(zhí)行狀態(tài)中的應用程序稱為進程。從用戶角度來看,進程是應用程序的一個執(zhí)行過程。從操作系統(tǒng)核心角度來看,進程代表的是操作系統(tǒng)分配的內存、CPU時間片等資源的基本單位,是為正在運行的程序提供的運行環(huán)境。進程與應用程序的區(qū)別在于應用程序作為一個靜態(tài)文件存儲在計算機系統(tǒng)的硬盤等存儲空間中,而進程則是處于動態(tài)條件下由操作系統(tǒng)維護的系統(tǒng)資源管理實體。多任務環(huán)境下應用程序進程的主要特點包括:
●進程在執(zhí)行過程中有內存單元的初始入口點,并且進程存活過程中始終擁有獨立的內存地址空間;
●進程的生存期狀態(tài)包括創(chuàng)建、就緒、運行、阻塞和死亡等類型;
●從應用程序進程在執(zhí)行過程中向CPU發(fā)出的運行指令形式不同,可以將進程的狀態(tài)分為用戶態(tài)和核心態(tài)。處于用戶態(tài)下的進程執(zhí)行的是應用程序指令、處于核心態(tài)下的應用程序進程執(zhí)行的是操作系統(tǒng)指令。
在Unix操作系統(tǒng)啟動過程中,系統(tǒng)自動創(chuàng)建swapper、init等系統(tǒng)進程,用于管理內存資源以及對用戶進程進行調度等。在Unix環(huán)境下無論是由操作系統(tǒng)創(chuàng)建的進程還要由應用程序執(zhí)行創(chuàng)建的進程,均擁有唯一的進程標識(PID)。
說法四:應用程序在執(zhí)行過程中存在一個內存空間的初始入口點地址、一個程序執(zhí)行過程中的代碼執(zhí)行序列以及用于標識進程結束的內存出口點地址,在進程執(zhí)行過程中的每一時間點均有唯一的處理器指令與內存單元地址相對應。
Java語言中定義的線程(Thread)同樣包括一個內存入口點地址、一個出口點地址以及能夠順序執(zhí)行的代碼序列。但是進程與線程的重要區(qū)別在于線程不能夠單獨執(zhí)行,它必須運行在處于活動狀態(tài)的應用程序進程中,因此可以定義線程是程序內部的具有并發(fā)性的順序代碼流。
Unix操作系統(tǒng)和Microsoft Windows操作系統(tǒng)支持多用戶、多進程的并發(fā)執(zhí)行,而Java語言支持應用程序進程內部的多個執(zhí)行線程的并發(fā)執(zhí)行。多線程的意義在于一個應用程序的多個邏輯單元可以并發(fā)地執(zhí)行。但是多線程并不意味著多個用戶進程在執(zhí)行,操作系統(tǒng)也不把每個線程作為獨立的進程來分配獨立的系統(tǒng)資源。進程可以創(chuàng)建其子進程,子進程與父進程擁有不同的可執(zhí)行代碼和數(shù)據(jù)內存空間。而在用于代表應用程序的進程中多個線程共享數(shù)據(jù)內存空間,但保持每個線程擁有獨立的執(zhí)行堆棧和程序執(zhí)行上下文(Context)。
基于上述區(qū)別,線程也可以稱為輕型進程 (Light Weight Process,LWP)。不同線程間允許任務協(xié)作和數(shù)據(jù)交換,使得在計算機系統(tǒng)資源消耗等方面非常廉價。
線程需要操作系統(tǒng)的支持,不是所有類型的計算機都支持多線程應用程序。Java程序設計語言將線程支持與語言運行環(huán)境結合在一起,提供了多任務并發(fā)執(zhí)行的能力。這就好比一個人在處理家務的過程中,將衣服放到洗衣機中自動洗滌后將大米放在電飯鍋里,然后開始做菜。等菜做好了,飯熟了同時衣服也洗好了。
需要注意的是:在應用程序中使用多線程不會增加 CPU 的數(shù)據(jù)處理能力。只有在多CPU 的計算機或者在網(wǎng)絡計算體系結構下,將Java程序劃分為多個并發(fā)執(zhí)行線程后,同時啟動多個線程運行,使不同的線程運行在基于不同處理器的Java虛擬機中,才能提高應用程序的執(zhí)行效率。
3.靜態(tài)成員
class test{
public:
test(){}
~test(){}
public:
//靜態(tài)成員函數(shù)
static int getCount(){
return m_nCount;
}
private:
//靜態(tài)數(shù)據(jù)成員
static int m_nCount;
};
int test::m_nCount=0;
靜態(tài)數(shù)據(jù)成員和普通數(shù)據(jù)成員區(qū)別較大,體現(xiàn)在下面幾點:
(1)普通數(shù)據(jù)成員屬于類的一個具體的對象,只有對象被創(chuàng)建了,普通數(shù)據(jù)成員才會被分配內存。而靜態(tài)數(shù)據(jù)成員屬于整個類,即使沒有任何對象創(chuàng)建,類的靜態(tài)數(shù)據(jù)成員變量也存在。
(2)因為類的靜態(tài)數(shù)據(jù)成員的存在不依賴與于任何類對象的存在,類的靜態(tài)數(shù)據(jù)成員應該在代碼中被顯示的初始化,一定要在類外進行,例如上例。
(3)外部訪問類的靜態(tài)成員只能通過類名來訪問,例如:test::getCount()。
(4)類的靜態(tài)成員函數(shù)無法直接訪問普通數(shù)據(jù)成員(可以通過類的指針等作為參數(shù)間接訪問),而類的任何成員函數(shù)都可以訪問類的靜態(tài)數(shù)據(jù)成員。
(5)靜態(tài)成員和類的普通成員一樣,也具有public、protected、private3種訪問級別,也可以具有返回值、const修飾符等參數(shù)。
應用舉例:
汽車制造商為統(tǒng)計汽車的產量,可以在在汽車類--car類中增加用于計數(shù)的靜態(tài)數(shù)據(jù)成員變量,比如在某個類car中聲明一個static int number;初始化為0。這個number就能被所有car的實例共用。在A的構造函數(shù)里加上number++,在A的析構函數(shù)里加上number--。那么每生成一個car的實例,number就加一,每銷毀一個car的實例(汽車報廢),number就減一,這樣,number就可以記錄在市場上car的實例。
【神州數(shù)碼筆試經(jīng)歷】相關文章:
最新神州數(shù)碼筆試題02-25
神州數(shù)碼筆試后的感覺08-10
神州數(shù)碼面試經(jīng)歷11-06
神州數(shù)碼筆試試題分享11-21
筆試經(jīng)歷回憶,筆試經(jīng)歷分享11-21
神州數(shù)碼筆試后的一些感覺07-16
神州數(shù)碼筆試后的一些感覺02-18
google筆試的經(jīng)歷12-12
尼爾森筆試經(jīng)歷11-06
友邦 筆試經(jīng)歷11-21