系統(tǒng)網(wǎng)絡(luò)50問
1、標(biāo)準(zhǔn)文件IO與文件IO的區(qū)別?
答:標(biāo)準(zhǔn)IO:標(biāo)準(zhǔn)I/O是ANSI C建立的一個標(biāo)準(zhǔn)I/O模型,是一個標(biāo)準(zhǔn)函數(shù)包和stdio.h頭文件中的定義,擁有必定的可移植性。標(biāo)準(zhǔn)IO庫處理很多細(xì)節(jié)。例如緩存分配,以優(yōu)化長度執(zhí)行IO等。標(biāo)準(zhǔn)的IO供給了三種類型的緩存:全緩存,行緩存不帶緩存。
文件IO:文件IO稱之為不帶緩存的IO(unbuffered I/O)。不帶緩存指的是每一個read,write都調(diào)用內(nèi)核中的一個系統(tǒng)調(diào)用。也就是一般所說的低級I/O——操作系統(tǒng)供給的基本IO服務(wù),與os綁定,特定于linix或unix平臺。
區(qū)別: 首先:兩者一個明顯的不同點(diǎn)在于,標(biāo)準(zhǔn)I/O默認(rèn)采取了緩沖機(jī)制,比如調(diào)用fopen函數(shù),不僅打開一個文件,而且建立了一個緩沖區(qū)(讀寫模式下將建立兩個緩沖區(qū)),還創(chuàng)建了一個包含文件和緩沖區(qū)相干數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)。低級I/O一般沒有采取緩沖,須要自己創(chuàng)建緩沖區(qū),不過其實(shí)在linix或unix系統(tǒng)中,都是有應(yīng)用稱為內(nèi)核緩沖的技術(shù)用于提高效率,讀寫調(diào)用是在內(nèi)核緩沖區(qū)和進(jìn)程緩沖區(qū)之間停止的數(shù)據(jù)復(fù)制。
其次從操作的設(shè)備上來區(qū)分,文件I/O重要針對文件操作,讀寫硬盤等,它操作的是文件描述符,標(biāo)準(zhǔn)I/O針對的是控制臺,打印輸出到屏幕等,它操作的是字符流。對于不同設(shè)備得特性不一樣,必須有不同api訪問才最高效。
2、設(shè)備文件類型有哪些?
答:Linux系統(tǒng)的設(shè)備文件分為三類:塊設(shè)備文件,字符設(shè)備文件和網(wǎng)絡(luò)設(shè)備文件。
塊設(shè)備文件通常指一些需要以塊的方式寫入的設(shè)備,如IDE硬盤、光驅(qū)等。
字符型設(shè)備文件通常指可以直接讀寫,沒有緩沖區(qū)的設(shè)備,如并口,虛擬控制臺等
網(wǎng)絡(luò)設(shè)備文件通常是指網(wǎng)絡(luò)設(shè)備訪問的BSDsocket接口,如網(wǎng)卡等。
3、不緩沖、行緩沖和全緩沖的區(qū)別
答:全緩沖:知道緩沖區(qū)唄填滿,才調(diào)用系統(tǒng)I/O函數(shù)。對于讀寫操作來說,知道讀入的內(nèi)容的字節(jié)數(shù)等于緩沖區(qū)大小或者文件已經(jīng)達(dá)到結(jié)尾,才進(jìn)行實(shí)際的I/O操作,將外存文件內(nèi)容讀入緩沖區(qū),對于寫操作來說,直到緩沖區(qū)被填滿,才進(jìn)行實(shí)際的I/O操作,緩沖區(qū)內(nèi)容寫到外存文件中。磁盤文件通常是全緩沖的。
行緩沖:直到遇到換行符’\n’,才調(diào)用系統(tǒng)I/O函數(shù),對于讀操作來說,遇到換行符才進(jìn)行I/O操作吧,講所讀內(nèi)容讀入緩沖區(qū);對于寫操作來說,遇到換行符才進(jìn)行I/O操作,將緩沖區(qū)內(nèi)容寫到外存中。由于緩沖區(qū)的大小是有限的,所以當(dāng)緩沖區(qū)被填滿時(shí),及時(shí)沒有遇到換行符,也同樣會進(jìn)行實(shí)際的I/O操作。標(biāo)準(zhǔn)輸入stdin和標(biāo)準(zhǔn)輸出stdout默認(rèn)都是行緩沖。
不緩沖:沒有緩沖區(qū),數(shù)據(jù)會立即讀入或者輸出到外存文件個設(shè)備上。標(biāo)準(zhǔn)出錯stderr是無緩沖的,這樣保證錯誤提示和輸出能夠及時(shí)反饋給用戶,供用戶排除錯誤。
4、進(jìn)程fork和vfork的區(qū)別
答:fork創(chuàng)建一個進(jìn)程時(shí),子進(jìn)程只是完全復(fù)制父進(jìn)程的資源,這樣得到的子進(jìn)程獨(dú)立于父進(jìn)程,具有良好的并發(fā)性,但是二者之間的通訊需要通過專門的通訊機(jī)制,如:PIPE,FIFO,IPC機(jī)制等。通過fork創(chuàng)建的子進(jìn)程系統(tǒng)開銷很大,需要將每種資源(數(shù)據(jù)空間,堆和棧)都復(fù)制一個副本。這些系統(tǒng)開銷并不是所有的情況下都是必須的。
vfork創(chuàng)建的子進(jìn)程共享地址空間,也就是說子進(jìn)程完全運(yùn)行在父進(jìn)程的地址空間上,子進(jìn)程對虛擬地址空間任何數(shù)據(jù)的修改同樣為父進(jìn)程所見。但vfork創(chuàng)建子進(jìn)程后,父進(jìn)程會被阻塞知道子進(jìn)程調(diào)用exec或exit。而fork的父子進(jìn)程運(yùn)行順序是不定的,通過vfork可以減少不必要的開銷。
5、守護(hù)進(jìn)程的編碼規(guī)則?
答:(1)調(diào)用umask將文件模式創(chuàng)建屏蔽字設(shè)置為0;
(2)創(chuàng)建子進(jìn)程,同時(shí)父進(jìn)程退出。
(3)調(diào)用setsid創(chuàng)建一個新的會話,并且擔(dān)任會話組的組長。
(4)改變當(dāng)前目錄為根目錄。
(5)重設(shè)文件權(quán)限掩碼。
(6)關(guān)閉不在需要的文件描述符。
(7)打開/dev/null使其具有文件描述符0、1、2,禁止使用標(biāo)準(zhǔn)輸入、輸出、錯誤設(shè)備
(8)使用syslog(/dev/log)輸出調(diào)試信息。
6、進(jìn)程通信中,同步信號與異步信號的差別?
答:異步信號:進(jìn)程通信在發(fā)送字符時(shí),異步信號所發(fā)送的字符之間的時(shí)間間隔可以是任意的,不需要阻塞等待,
同步信號:雙方必須要先建立同步,發(fā)送后等待接受,不可以任意收發(fā)。
7、讀鎖和寫鎖的特點(diǎn)是什么?
答:讀鎖與寫鎖互斥;讀鎖之間不互斥;寫鎖與寫鎖互斥。
一次只有一個線程可以占有寫模式你的讀寫鎖,但是可以有多個線程同時(shí)占有讀模式的讀寫鎖。
8、3個PV原語經(jīng)典模型是什么?
答:生產(chǎn)者-消費(fèi)者問題;讀者-寫者問題;哲學(xué)家就餐問題。
9、進(jìn)程的常見調(diào)度算法有哪些?
答:先來先服務(wù)算法(FIFO)、時(shí)間輪轉(zhuǎn)算法、優(yōu)先級算法
10、什么是進(jìn)程,什么是線程?
答:進(jìn)程是計(jì)算機(jī)中的程序關(guān)于某數(shù)據(jù)集合上的一次運(yùn)行活動,是系統(tǒng)進(jìn)行資源分配和調(diào)度的基本單位,是操作系統(tǒng)結(jié)構(gòu)的基礎(chǔ)。它是系統(tǒng)資源管理的最小單位。
線程,有時(shí)別稱為輕量級進(jìn)程,是程序執(zhí)行流的最小單元。線程是進(jìn)程中的一個實(shí)體,是被系統(tǒng)獨(dú)立調(diào)度和分配的基本單位,線程自己不擁有資源,只擁有一點(diǎn)兒在運(yùn)行中必不可少的資源,他可以與同屬一個進(jìn)程的其他線程共享進(jìn)程所擁有的全部資源。
11、有了進(jìn)程,為什么還要線程?
答:進(jìn)程有很多優(yōu)點(diǎn),它提供了多道編程,讓我們感覺我們每個人都用有自己的CPU和其他資源,可以提高自己的利用率。但是進(jìn)程只能在一個時(shí)間干一件事,在執(zhí)行過程中如果阻塞,整個程序就會掛起。線程提高了進(jìn)程的并發(fā)度,還可以有效的利用多處理器和多核計(jì)算機(jī)
12、進(jìn)程和線程的區(qū)別?
答:(1)進(jìn)程是系統(tǒng)進(jìn)行資源分配的最基本單位,有獨(dú)立的地址空間;線程是CPU調(diào)度的基本單位,沒有單獨(dú)的地址空間,有獨(dú)立的棧、局部變量、寄存器等。
(2)創(chuàng)建進(jìn)程的開銷大,包括創(chuàng)建虛擬地址空間等需要大量系統(tǒng)資源;線程開銷小,基本上只有一個內(nèi)核對象和一個堆棧。
(3)一個進(jìn)程無法直接訪問另一個進(jìn)程的資源;同一進(jìn)程內(nèi)的多個線程共享進(jìn)程的資源。
(4)進(jìn)程切換開銷大,線程切換開銷小;進(jìn)程間通信開銷大,線程間通信開銷小。
(5)線程屬于進(jìn)程,不能獨(dú)立執(zhí)行。每個進(jìn)程至少要有一個線程,成為主線程。
13、用什么函數(shù)創(chuàng)建進(jìn)程?
答:fork(); vfork(); clone(); exec函數(shù)族。
14、什么函數(shù)創(chuàng)建線程?
答:pthread_create()
15、進(jìn)程有返回值嗎?可以返回幾個?
答:有,可以返回兩個;例如fork()函數(shù),調(diào)用一次缺返回兩次;向父進(jìn)程返回子進(jìn)程的ID,向子進(jìn)程中返回0。
16、什么是僵尸進(jìn)程?有什么危害?以及處理僵尸進(jìn)程的方法。
答:一個進(jìn)程使用fork()創(chuàng)建子進(jìn)程,如果子進(jìn)程退出,而父進(jìn)程并沒有調(diào)用wait或者waitpid獲取子進(jìn)程的狀態(tài)信息,那么子進(jìn)程的進(jìn)程描述符仍然保存在系統(tǒng)中。我們稱之為僵尸進(jìn)程。
危害:浪費(fèi)系統(tǒng)資源,如果僵尸進(jìn)程過多,那么就會有大量的進(jìn)程號被僵尸進(jìn)程占用,但系統(tǒng)所能使用的進(jìn)程是有限。將會因?yàn)闆]有可用的進(jìn)程號而導(dǎo)致系統(tǒng)不能產(chǎn)生新的進(jìn)程。
處理方法:1.父進(jìn)程等待及調(diào)用wait或waitpid;2.殺死父進(jìn)程,父進(jìn)程死后僵尸進(jìn)程會變?yōu)楣聝哼M(jìn)程,過繼給init進(jìn)程,init始終會負(fù)責(zé)清理僵尸進(jìn)程,由它所產(chǎn)生的所有僵尸進(jìn)程也跟著消失。
17、什么是孤兒進(jìn)程?
答:一個父進(jìn)程退出,而他的一個或多個子進(jìn)程還在運(yùn)行,那么這些子進(jìn)程將會成為孤兒進(jìn)程。孤兒進(jìn)程將被init進(jìn)程收養(yǎng),并由init進(jìn)程對他們完成狀態(tài)收集工作。
18、什么是后臺進(jìn)程?
答:Linux后臺進(jìn)程也叫守護(hù)進(jìn)程,是運(yùn)行在后臺的一種特殊進(jìn)程。他獨(dú)立于控制終端并且周期性的執(zhí)行某種任務(wù)或等待處理某些發(fā)生的事件。
19、fork()一個子進(jìn)程后,父進(jìn)程的全局變量能不能使用?
答:fork后子進(jìn)程將會擁有父進(jìn)程的幾乎一切資源,父子進(jìn)程都各自有自己的全局變量。不能通用,不同于線程。對于線程,各個線程共享全局變量。
20、什么是脫離線程?
答:不向主線程返回信息,不需要主線程等待。
21、線程取消有幾種模式?
答:立即取消和延遲取消。立即取消是調(diào)用pthread_cancel的時(shí)候,不管線程當(dāng)前在干什么,馬上被結(jié)束掉。延遲取消是調(diào)用pthread_cancel后,線程運(yùn)行到一個取消點(diǎn)函數(shù)的時(shí)候 才會結(jié)束。
22、什么是線程取消點(diǎn)?
答:根據(jù)POSIX標(biāo)準(zhǔn),pthread_jion(), pthread_testcancel(), pthread_cond_wait(), pthread_cond_timewait(),sem_wait(),sigwait()函數(shù)以及read(),write()等會引起阻塞的系統(tǒng)調(diào)用都是線程取消點(diǎn)。
23、線程間的同步方式?
答:臨界區(qū)、互斥量、信號量、事件。
24、進(jìn)程間通信的方法有哪些?各自有什么優(yōu)缺點(diǎn)?那一種方法效率最高?
答:無名管道(親源進(jìn)程之間):管道是一種半雙工的通信方式,數(shù)據(jù)只能單向流動,而且只能在具有親緣關(guān)系的進(jìn)程間使用。進(jìn)程的親緣關(guān)系通常是指父子進(jìn)程關(guān)系。
有名管道(任意進(jìn)程之間):也是半雙工通信方式,但是允許在沒有親緣關(guān)系的進(jìn)程之間使用,管道是先進(jìn)先出的通信方式。
共享內(nèi)存(效率最高):共享內(nèi)存就是映射一段能被其他進(jìn)程所訪問的內(nèi)存,這段共享內(nèi)存由一個進(jìn)程創(chuàng)建,但多個進(jìn)程都可以訪問。共享內(nèi)存是最快的IPC方式,他是針對其他進(jìn)程間通信方式運(yùn)行效率低而專門設(shè)計(jì)的。
消息隊(duì)列(具備同步的效果):消息隊(duì)列是有消息的鏈表,存放在內(nèi)核中并由消息隊(duì)列標(biāo)識符標(biāo)識。消息隊(duì)列克服了信號傳遞消息少、管道只能承載無格式字節(jié)流以及緩沖區(qū)大小受限等缺點(diǎn)。
socket(不同主機(jī)之間的進(jìn)程通信):用于不同機(jī)器間的進(jìn)程通信。
信號量(同步機(jī)制):是一個計(jì)數(shù)器,可以用來控制多個進(jìn)程對共享資源的訪問。它常作為一種機(jī)制鎖,防止某進(jìn)程在防偽共享資源時(shí),其他進(jìn)程也訪問該資源。因此,主要作為進(jìn)程間以及同一進(jìn)程內(nèi)不同線程之間的同步手段。
內(nèi)存映射:
共享內(nèi)存效率最高
25、線程之間通過什么交換數(shù)據(jù)
答:全局變量;Message消息機(jī)制;CEvent對象
26、線程條件變量是起什么作用?
答:條件變量是利用線程間共享的全局變量進(jìn)行同步的一種機(jī)制,主要包括兩個動作:一個線程等待某個條件為真,而將自己掛起;另一個線程使得條件成立,并通知等待的線程繼續(xù)。為了防止競爭,條件變量的使用總是和一個互斥鎖結(jié)合在一起。當(dāng)條件變量沒有被鏈接到特定的斷言上去,當(dāng)一個條件變量與多個斷言相關(guān)聯(lián)的時(shí)候,線程被喚醒后就必須重新測試它所要的斷言。其次條件變量可以讓線程睡眠特定的時(shí)間。
27、啟動Linux Shell時(shí),默認(rèn)打開哪幾個文件描述符,他們的值分別是多少?
答:stdin;stdout;stderr; 0,1,2
28、內(nèi)核主要分為哪幾個子系統(tǒng)?
答:進(jìn)程管理系統(tǒng)、內(nèi)存管理系統(tǒng)、I/O管理系統(tǒng)和文件管理系統(tǒng)等四個子系統(tǒng)。
29、操作系統(tǒng)中進(jìn)程調(diào)度策略有哪幾種?
答:FCFS(先來先服務(wù))、優(yōu)先級、時(shí)間輪轉(zhuǎn)片、多級反饋。
30、進(jìn)程具有那些基本狀態(tài)?
答:新建、就緒、運(yùn)行、阻塞、退出
31、TCP和UDP的區(qū)別?
答:(1)TCP面向連接(三次握手機(jī)制)、通信前需建立連接;UDP面向無連接,通信前不需要建立連接;
(2)TCP保障可靠傳輸(按序、無差錯、不丟失、不重復(fù));UDP不保障可靠傳輸,使用最大努力交付;
(3)TCP面向字節(jié)流的傳輸,UDP面向數(shù)據(jù)報(bào)的傳輸。
32、TCP建立連接的時(shí)候三次握手,斷開連接時(shí)的四次握手的具體過程?
答:建立連接的三次握手-------
第一次握手是客戶端connect連接到server,server accept client的請求之后,向client端發(fā)送一個消息,相當(dāng)于說我都準(zhǔn)備好了,你連接上我了,這是第二次握手,第三次握手就是client向server發(fā)送的,就是對第二次握手消息的確認(rèn),之后server和client就開始通訊了。
斷開連接的四次握手-----
斷開連接的一端發(fā)送close請求是第一次握手,另外一端接收到斷開連接的請求之后需要對close進(jìn)行確認(rèn),發(fā)送一個消息,這是第二次握手,發(fā)送了確認(rèn)消息之后還要向?qū)Χ税l(fā)送close消息,要關(guān)閉對對端的連接,這是第三次握手,而在最初發(fā)送斷開連接的一端接收到消息之后,進(jìn)入到一個很重要的狀態(tài)time_wait狀態(tài),最后一次握手是最初發(fā)送斷開連接的一端接收到消息之后對消息的確認(rèn)。
33、connect方法會阻塞,請問有什么方法可以避免其長時(shí)間阻塞?
答:最常用且最有效的是加定時(shí)器;也可以采用非阻塞模式。
或者考慮采用異步傳輸機(jī)制,同步傳輸與異步傳輸?shù)闹饕獏^(qū)別在于同步傳輸中,如果recvfrom后會一直阻塞到運(yùn)行,從而導(dǎo)致調(diào)用線程暫停運(yùn)行;異步傳輸機(jī)制則不然,會立即返回。
34、網(wǎng)絡(luò)編程中設(shè)計(jì)并發(fā)服務(wù)器,使用多進(jìn)程與多線程,請問有何區(qū)別?
答案一:進(jìn)程是父進(jìn)程的復(fù)制品。子進(jìn)程獲得父進(jìn)程數(shù)據(jù)空間、堆和棧的復(fù)制品。
線程相對于進(jìn)程而言,線程是一個更加接近于執(zhí)行體的概念,他可以與同進(jìn)程的其他線程共享數(shù)據(jù),但擁有自己的棧空間,擁有獨(dú)立的執(zhí)行序列。
兩者都可以提高程序的并發(fā)度,提高程序運(yùn)行效率和響應(yīng)時(shí)間。
線程和進(jìn)程使用上各有優(yōu)缺點(diǎn):線程執(zhí)行開銷小,但不利于資源管理和保護(hù);而進(jìn)程正相反。同時(shí),線程適合于SMP機(jī)器上運(yùn)行,而進(jìn)程則可以跨機(jī)器遷移。
答案二:根本區(qū)別就一點(diǎn):用多進(jìn)程每個進(jìn)程有自己的地址空間,線程則共享地址空間,所有其他區(qū)別都是 由此而來的:
速度:線程產(chǎn)生的速度快,線程間的通訊快,切換快等, 以為它們在同一個地址空間內(nèi)。
資源利用率:線程的資源利用率比較好也是因?yàn)樗鼈冊谕粋€地址空間內(nèi)。
同步問題:線程使用公共變量、內(nèi)存是需要使用同步機(jī)制還是因?yàn)樗鼈冊谕粋€地址空間內(nèi)。
35、TCP為什么不是兩次連接而是三次握手?
答:如果A與B兩個進(jìn)程通信,如果僅是兩次連接,可能出現(xiàn)的一種情況是:A發(fā)送完請求報(bào)文以后,由于網(wǎng)絡(luò)情況不好,出現(xiàn)了網(wǎng)絡(luò)擁塞,即B延時(shí)很長時(shí)間后收到報(bào)文,即此時(shí)A將此報(bào)文認(rèn)定為失效的堆報(bào)文。B收到報(bào)文后,會向A發(fā)起連接。此時(shí)兩次握手完畢,B會認(rèn)為已經(jīng)建立了連接可以通信,B會一直等到A發(fā)送的連接請求,而A對失效的報(bào)文回復(fù)自然不會處理。一次會陷入B忙等的僵局,造成資源的浪費(fèi)。
36、TCP的重發(fā)機(jī)制是怎么實(shí)現(xiàn)的?
答:(1)滑動窗口機(jī)制,確認(rèn)收發(fā)的邊界,能讓發(fā)送方知道已經(jīng)發(fā)送了多少(已確認(rèn))、尚未確認(rèn)的字節(jié)數(shù),尚等待發(fā)送的字節(jié)數(shù);讓接收方知道(已經(jīng)確認(rèn)接收到的字節(jié)數(shù))。
(2)選擇重傳,用于對傳輸出錯的序列進(jìn)行重傳。
37、UDP分多少種形式,各有什么特點(diǎn)?
答:單播:一對一的通訊模式,服務(wù)器及時(shí)響應(yīng)客戶機(jī)的請求。
多播/組播:一對一組的通訊模式,需要相同數(shù)據(jù)流的客戶端加入相同的組共享一條數(shù)據(jù)流,節(jié)省了服務(wù)器的負(fù)載。
廣播:一對所有的通訊模式,所有主機(jī)都可以接收到所有信息,服務(wù)器流量負(fù)載極低。
38、解釋單體內(nèi)核和微內(nèi)核之間的區(qū)別?
答:單體內(nèi)核包含了所有功能:調(diào)度,文件系統(tǒng),設(shè)備驅(qū)動程序,網(wǎng)絡(luò),存儲管理等。
微內(nèi)核只有部分功能,基本調(diào)度,進(jìn)程通信,地址空間。
39、網(wǎng)絡(luò)I/O的五種模式?
答:阻塞I/O,非阻塞I/O,信號驅(qū)動,I/O復(fù)用,異步I/O。
40、TCP/IP五層模型?
答:應(yīng)用層,傳輸層,網(wǎng)絡(luò)層,數(shù)據(jù)鏈路層,物理層。
41、文件描述符和FILE*的關(guān)系?
答:文件描述符:在linux系統(tǒng)中打開文件就會獲得文件描述符,是一個小整數(shù)。每個新城在PCB中保存著一份文件描述符表,文件描述符就是這個表的索引
文件指針:C語言的標(biāo)準(zhǔn)庫使用文件指針作為文件的句柄,文件指針指向進(jìn)程用戶區(qū)的一種FILE類型的數(shù)據(jù)結(jié)構(gòu),F(xiàn)ILE結(jié)構(gòu)中包含一個文件描述符域和一個緩沖區(qū),文件描述符是文件描述符表的一個索引
42、TCP和UDP的用途?
答:TCP一般用于文件傳輸,發(fā)送或者接受郵件,遠(yuǎn)程登錄等等;
UDP一般用于即時(shí)通信,在線視頻,網(wǎng)絡(luò)語音通話等等。
43、TCP四次分手中,主動關(guān)閉方最后為什么要等待2MSL之后才關(guān)閉連接?
答:這是因?yàn)殡p方都同意關(guān)閉連接了,而且握手的四個報(bào)文也都協(xié)調(diào)和發(fā)送完畢,按理可以直接回到CLOSED狀態(tài);但是因?yàn)槿绻W(wǎng)絡(luò)是不可靠的,無法保證最后發(fā)送的ACK報(bào)文會一定被對方接受到,因此對方處于LAST_ACK狀態(tài)下的SOCKET可能會因?yàn)槌瑫r(shí)未收到ACK報(bào)文而重新發(fā)送FIN報(bào)文,所以這個TIME_WAIT狀態(tài)的作用就是用來重發(fā)可能丟失的ACK報(bào)文。
44、網(wǎng)絡(luò)中,如果客戶端突然關(guān)掉或者重啟,服務(wù)器怎么樣才能立刻知道?
答:若客戶端突然掉線或者重啟,服務(wù)器端會收到復(fù)位信號,每一種tcp/ip的實(shí)現(xiàn)不一樣,控制機(jī)制也不一樣。
45、TTL是什么?有什么用處?通常哪些工具會用到它?
答:TTL是Time To Live一般是hub count每經(jīng)過一個路由就會被減去一,如果他變成0,包會被丟掉。他的主要目的是防止包在有回路的網(wǎng)絡(luò)上死轉(zhuǎn),浪費(fèi)網(wǎng)絡(luò)資源。ping和traceroute用到它。
46、什么是IP協(xié)議?在哪個層面上?主要有什么作用?
答:IP協(xié)議是網(wǎng)絡(luò)層的協(xié)議,他是為了實(shí)現(xiàn)相互連接的計(jì)算機(jī)進(jìn)行通信設(shè)計(jì)的協(xié)議,它實(shí)現(xiàn)了自動路由功能,及自動尋徑功能。
47、描述RARP協(xié)議。
答:RARP是逆地址解析協(xié)議,作用是完成硬件地址到IP地址的映射,主要用于無盤工作站,因?yàn)榻o無盤工作站配置的IP地址不能保存。
工作流程:在網(wǎng)絡(luò)中配置一臺RARP服務(wù)器,里面保存著IP地址和MAC地址的映射關(guān)系,當(dāng)無盤工作站啟動后,就封裝一個RARP數(shù)據(jù)包,里面有其MAC地址,然后廣播到網(wǎng)絡(luò)上去,當(dāng)服務(wù)器收到請求包后,就查找對應(yīng)的MAC地址的IP地址裝入響應(yīng)報(bào)文中發(fā)回給請求者。以為需要廣播請求報(bào)文因此RARP只能作用于具有廣播能力的網(wǎng)絡(luò)。
48、TCP/IP五層模型各層的作用。
答:應(yīng)用層:應(yīng)用程序間溝通的層,如簡單的電子郵件傳輸(SMTP),文件傳輸協(xié)議(FTP),網(wǎng)絡(luò)遠(yuǎn)程訪問協(xié)議等。
傳輸層:在此層中,它提供了節(jié)點(diǎn)間的數(shù)據(jù)傳送服務(wù),如傳輸控制協(xié)議(TCP),用戶數(shù)據(jù)報(bào)協(xié)議(UDP).TCP和UDP給數(shù)據(jù)包加入傳輸數(shù)據(jù)并把它傳輸?shù)较乱粚又校@一層負(fù)責(zé)傳送數(shù)據(jù)等,并且確定數(shù)據(jù)已被送達(dá)并接收。
網(wǎng)絡(luò)層:是TCP/IP協(xié)議組中非常關(guān)鍵的一層,主要定義了IP地址格式,從而能夠使得不同應(yīng)用類型的數(shù)據(jù)在Internet上暢通的傳輸,IP協(xié)議就是一個網(wǎng)絡(luò)層協(xié)議。
數(shù)據(jù)鏈路層:這是TCP/IP軟件的最底層,負(fù)責(zé)就收IP數(shù)據(jù)包并通過網(wǎng)絡(luò)發(fā)送,或者從網(wǎng)絡(luò)上接受物理幀,抽出IP數(shù)據(jù)報(bào),交給IP層。
49、交換機(jī)和路由器分別實(shí)現(xiàn)的原理分別是什么?
答:交換機(jī)用于局域網(wǎng),利用主機(jī)的MAC地址進(jìn)行數(shù)據(jù)的傳輸,而不需關(guān)心IP數(shù)據(jù)包中的IP地址,它工作于數(shù)據(jù)鏈路層。路由器識別網(wǎng)絡(luò)是通過IP數(shù)據(jù)包中的IP地址的網(wǎng)絡(luò)號進(jìn)行的,所以為了保證數(shù)據(jù)包路由的正確性,每個網(wǎng)絡(luò)都必須有一個唯一的網(wǎng)絡(luò)號,路由通過IP數(shù)據(jù)包的IP地址進(jìn)行路由的(將數(shù)據(jù)包遞交給哪一個下一跳路由器)。路由器工作于網(wǎng)絡(luò)層,由于設(shè)備的發(fā)展,現(xiàn)在很多設(shè)備具有交換又具有路由功能,兩者的界限越來越模糊。
50、IP地址的分類。
答: 網(wǎng)絡(luò)號網(wǎng)絡(luò)范圍主機(jī)號
A類: 8bit 0------12724bit
B類: 16bit128.0--191.25516bit
C類: 24bit192.0.0---223.255.2558bit
D類: 前四位固定為1110,后面為多播地址,所以D類為多播地址
E類: 前五位固定為11110,后面保留為今后所用
51、程序什么時(shí)候應(yīng)該使用線程,什么時(shí)候單線程效率高?
答:(1)耗時(shí)的操作使用線程,提高應(yīng)用程序響應(yīng)。
(2)并行操作時(shí)使用線程,如C/S架構(gòu)的服務(wù)器端并發(fā)線程響應(yīng)用戶的請求
(3)多CPU系統(tǒng)中,使用線程提高CPU利用率
(4)改善程序結(jié)構(gòu)。一個既長又發(fā)雜的進(jìn)程可以考慮分為多個線程,成為幾個獨(dú)立或半獨(dú)立的運(yùn)行部分,這樣的程序會利于理解和修改。
其他情況都使用單線程。
52、使用線程是如何防止出現(xiàn)大的波峰?
答:意思是如何防止同時(shí)產(chǎn)生大量的線程。方法是使用線程池,線程池具有可以同時(shí)提高調(diào)度效率和限制資源使用的好處,線程池中的線程達(dá)到最大數(shù)時(shí),其他線程就會排隊(duì)等候。
53、什么是線程池?
答:線程池是指在初始化一個多線程應(yīng)用程序中創(chuàng)建一個線程集合,然后在需要執(zhí)行新的任務(wù)時(shí),重用這些線程而不是新建一個線程。(為一個線程預(yù)分配一個集合或者一個池來已被未來之需以及能夠在一個應(yīng)用程序中重用的技術(shù),稱作線程池)
54、線程池的作用以及為什么要用線程池?
答:作用是限制系統(tǒng)中執(zhí)行線程的數(shù)量。
根據(jù)系統(tǒng)的環(huán)境情況,可以自動或手動設(shè)置線程數(shù)量,達(dá)到運(yùn)行的最佳效果;線程少了 浪費(fèi)系統(tǒng)資源,多了造成系統(tǒng)資源擁擠,效率不高。用線程池控制線程的數(shù)量,其他線程排隊(duì)等候。一個任務(wù)執(zhí)行完畢,再從隊(duì)列中親緣取最前面的任務(wù)開始執(zhí)行。若是隊(duì)列里沒有等待進(jìn)程,線程池的這一資源處于等待。當(dāng)一個新任務(wù)需要運(yùn)行時(shí),如果線程池中有等待的工作的線程,就可以開始運(yùn)行了;否則進(jìn)入等待隊(duì)列。
為什么要用線程池:
(1)減少了創(chuàng)建線程和銷毀線程的次數(shù),每個工作線程都可以被重復(fù)利用,可以執(zhí)行多個任務(wù)。
(2)可以根據(jù)系統(tǒng)的承受能力,調(diào)整線程池中工作的線程的數(shù)目,防止因?yàn)橄倪^多的內(nèi)存,導(dǎo)致服務(wù)器死機(jī)。