系統(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建立的一個(gè)標(biāo)準(zhǔn)I/O模型,是一個(gè)標(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)蹋偏。不帶緩存指的是每一個(gè)read便斥,write都調(diào)用內(nèi)核中的一個(gè)系統(tǒng)調(diào)用。也就是一般所說的低級(jí)I/O——操作系統(tǒng)供給的基本IO服務(wù)威始,與os綁定枢纠,特定于linix或unix平臺(tái)。
區(qū)別: 首先:兩者一個(gè)明顯的不同點(diǎn)在于黎棠,標(biāo)準(zhǔn)I/O默認(rèn)采取了緩沖機(jī)制晋渺,比如調(diào)用fopen函數(shù)镰绎,不僅打開一個(gè)文件,而且建立了一個(gè)緩沖區(qū)(讀寫模式下將建立兩個(gè)緩沖區(qū))木西,還創(chuàng)建了一個(gè)包含文件和緩沖區(qū)相干數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)畴栖。低級(jí)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重要針對(duì)文件操作扛门,讀寫硬盤等鸠信,它操作的是文件描述符,標(biāo)準(zhǔn)I/O針對(duì)的是控制臺(tái)论寨,打印輸出到屏幕等星立,它操作的是字符流。對(duì)于不同設(shè)備得特性不一樣葬凳,必須有不同api訪問才最高效绰垂。
2、設(shè)備文件類型有哪些火焰?
答:Linux系統(tǒng)的設(shè)備文件分為三類:塊設(shè)備文件劲装,字符設(shè)備文件和網(wǎng)絡(luò)設(shè)備文件。
塊設(shè)備文件通常指一些需要以塊的方式寫入的設(shè)備昌简,如IDE硬盤占业、光驅(qū)等。
字符型設(shè)備文件通常指可以直接讀寫纯赎,沒有緩沖區(qū)的設(shè)備谦疾,如并口,虛擬控制臺(tái)等
網(wǎng)絡(luò)設(shè)備文件通常是指網(wǎng)絡(luò)設(shè)備訪問的BSDsocket接口犬金,如網(wǎng)卡等念恍。
3、不緩沖晚顷、行緩沖和全緩沖的區(qū)別
答:全緩沖:知道緩沖區(qū)唄填滿峰伙,才調(diào)用系統(tǒng)I/O函數(shù)。對(duì)于讀寫操作來說音同,知道讀入的內(nèi)容的字節(jié)數(shù)等于緩沖區(qū)大小或者文件已經(jīng)達(dá)到結(jié)尾限府,才進(jìn)行實(shí)際的I/O操作,將外存文件內(nèi)容讀入緩沖區(qū)岖常,對(duì)于寫操作來說,直到緩沖區(qū)被填滿锅锨,才進(jìn)行實(shí)際的I/O操作,緩沖區(qū)內(nèi)容寫到外存文件中恋沃。磁盤文件通常是全緩沖的必搞。
行緩沖:直到遇到換行符’\n’,才調(diào)用系統(tǒng)I/O函數(shù),對(duì)于讀操作來說囊咏,遇到換行符才進(jìn)行I/O操作吧恕洲,講所讀內(nèi)容讀入緩沖區(qū);對(duì)于寫操作來說梅割,遇到換行符才進(jìn)行I/O操作霜第,將緩沖區(qū)內(nèi)容寫到外存中。由于緩沖區(qū)的大小是有限的户辞,所以當(dāng)緩沖區(qū)被填滿時(shí)泌类,及時(shí)沒有遇到換行符,也同樣會(huì)進(jìn)行實(shí)際的I/O操作底燎。標(biāo)準(zhǔn)輸入stdin和標(biāo)準(zhǔn)輸出stdout默認(rèn)都是行緩沖刃榨。
不緩沖:沒有緩沖區(qū),數(shù)據(jù)會(huì)立即讀入或者輸出到外存文件個(gè)設(shè)備上双仍。標(biāo)準(zhǔn)出錯(cuò)stderr是無緩沖的枢希,這樣保證錯(cuò)誤提示和輸出能夠及時(shí)反饋給用戶,供用戶排除錯(cuò)誤朱沃。
4苞轿、進(jìn)程fork和vfork的區(qū)別
答:fork創(chuàng)建一個(gè)進(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ù)制一個(gè)副本蹂安。這些系統(tǒng)開銷并不是所有的情況下都是必須的。
vfork創(chuàng)建的子進(jìn)程共享地址空間锐帜,也就是說子進(jìn)程完全運(yùn)行在父進(jìn)程的地址空間上田盈,子進(jìn)程對(duì)虛擬地址空間任何數(shù)據(jù)的修改同樣為父進(jìn)程所見。但vfork創(chuàng)建子進(jìn)程后缴阎,父進(jìn)程會(huì)被阻塞知道子進(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)建一個(gè)新的會(huì)話,并且擔(dān)任會(huì)話組的組長艺配。
(4)改變當(dāng)前目錄為根目錄察郁。
(5)重設(shè)文件權(quán)限掩碼。
(6)關(guān)閉不在需要的文件描述符转唉。
(7)打開/dev/null使其具有文件描述符0皮钠、1、2赠法,禁止使用標(biāo)準(zhǔn)輸入鳞芙、輸出、錯(cuò)誤設(shè)備
(8)使用syslog(/dev/log)輸出調(diào)試信息期虾。
6、進(jìn)程通信中驯嘱,同步信號(hào)與異步信號(hào)的差別镶苞?
答:異步信號(hào):進(jìn)程通信在發(fā)送字符時(shí),異步信號(hào)所發(fā)送的字符之間的時(shí)間間隔可以是任意的鞠评,不需要阻塞等待茂蚓,
同步信號(hào):雙方必須要先建立同步,發(fā)送后等待接受剃幌,不可以任意收發(fā)聋涨。
7、讀鎖和寫鎖的特點(diǎn)是什么负乡?
答:讀鎖與寫鎖互斥牍白;讀鎖之間不互斥;寫鎖與寫鎖互斥抖棘。
一次只有一個(gè)線程可以占有寫模式你的讀寫鎖茂腥,但是可以有多個(gè)線程同時(shí)占有讀模式的讀寫鎖。
8切省、3個(gè)PV原語經(jīng)典模型是什么最岗?
答:生產(chǎn)者-消費(fèi)者問題;讀者-寫者問題朝捆;哲學(xué)家就餐問題般渡。
9、進(jìn)程的常見調(diào)度算法有哪些?
答:先來先服務(wù)算法(FIFO)驯用、時(shí)間輪轉(zhuǎn)算法脸秽、優(yōu)先級(jí)算法
10、什么是進(jìn)程晨汹,什么是線程豹储?
答:進(jìn)程是計(jì)算機(jī)中的程序關(guān)于某數(shù)據(jù)集合上的一次運(yùn)行活動(dòng),是系統(tǒng)進(jìn)行資源分配和調(diào)度的基本單位淘这,是操作系統(tǒng)結(jié)構(gòu)的基礎(chǔ)剥扣。它是系統(tǒng)資源管理的最小單位。
線程铝穷,有時(shí)別稱為輕量級(jí)進(jìn)程钠怯,是程序執(zhí)行流的最小單元。線程是進(jìn)程中的一個(gè)實(shí)體曙聂,是被系統(tǒng)獨(dú)立調(diào)度和分配的基本單位晦炊,線程自己不擁有資源,只擁有一點(diǎn)兒在運(yùn)行中必不可少的資源宁脊,他可以與同屬一個(gè)進(jìn)程的其他線程共享進(jìn)程所擁有的全部資源断国。
11、有了進(jìn)程榆苞,為什么還要線程稳衬?
答:進(jìn)程有很多優(yōu)點(diǎn),它提供了多道編程坐漏,讓我們感覺我們每個(gè)人都用有自己的CPU和其他資源薄疚,可以提高自己的利用率。但是進(jìn)程只能在一個(gè)時(shí)間干一件事赊琳,在執(zhí)行過程中如果阻塞街夭,整個(gè)程序就會(huì)掛起。線程提高了進(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)資源;線程開銷小,基本上只有一個(gè)內(nèi)核對(duì)象和一個(gè)堆棧名党。
(3)一個(gè)進(jìn)程無法直接訪問另一個(gè)進(jìn)程的資源叹阔;同一進(jìn)程內(nèi)的多個(gè)線程共享進(jìn)程的資源。
(4)進(jìn)程切換開銷大传睹,線程切換開銷卸薄;進(jìn)程間通信開銷大欧啤,線程間通信開銷小睛藻。
(5)線程屬于進(jìn)程,不能獨(dú)立執(zhí)行邢隧。每個(gè)進(jìn)程至少要有一個(gè)線程店印,成為主線程。
13倒慧、用什么函數(shù)創(chuàng)建進(jìn)程按摘?
答:fork(); vfork(); clone(); exec函數(shù)族。
14纫谅、什么函數(shù)創(chuàng)建線程炫贤?
答:pthread_create()
15、進(jìn)程有返回值嗎付秕?可以返回幾個(gè)兰珍?
答:有,可以返回兩個(gè)盹牧;例如fork()函數(shù),調(diào)用一次缺返回兩次励幼;向父進(jìn)程返回子進(jìn)程的ID汰寓,向子進(jìn)程中返回0。
16苹粟、什么是僵尸進(jìn)程有滑?有什么危害?以及處理僵尸進(jìn)程的方法嵌削。
答:一個(gè)進(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)程過多,那么就會(huì)有大量的進(jìn)程號(hào)被僵尸進(jìn)程占用,但系統(tǒng)所能使用的進(jìn)程是有限蟹演。將會(huì)因?yàn)闆]有可用的進(jìn)程號(hào)而導(dǎo)致系統(tǒng)不能產(chǎn)生新的進(jìn)程风钻。
處理方法:1.父進(jìn)程等待及調(diào)用wait或waitpid;2.殺死父進(jìn)程酒请,父進(jìn)程死后僵尸進(jìn)程會(huì)變?yōu)楣聝哼M(jìn)程骡技,過繼給init進(jìn)程,init始終會(huì)負(fù)責(zé)清理僵尸進(jìn)程羞反,由它所產(chǎn)生的所有僵尸進(jìn)程也跟著消失布朦。
17、什么是孤兒進(jìn)程苟弛?
答:一個(gè)父進(jìn)程退出喝滞,而他的一個(gè)或多個(gè)子進(jìn)程還在運(yùn)行,那么這些子進(jìn)程將會(huì)成為孤兒進(jìn)程膏秫。孤兒進(jìn)程將被init進(jìn)程收養(yǎng)右遭,并由init進(jìn)程對(duì)他們完成狀態(tài)收集工作。
18缤削、什么是后臺(tái)進(jìn)程窘哈?
答:Linux后臺(tái)進(jìn)程也叫守護(hù)進(jìn)程,是運(yùn)行在后臺(tái)的一種特殊進(jìn)程亭敢。他獨(dú)立于控制終端并且周期性的執(zhí)行某種任務(wù)或等待處理某些發(fā)生的事件滚婉。
19、fork()一個(gè)子進(jìn)程后帅刀,父進(jìn)程的全局變量能不能使用让腹?
答:fork后子進(jìn)程將會(huì)擁有父進(jìn)程的幾乎一切資源,父子進(jìn)程都各自有自己的全局變量扣溺。不能通用骇窍,不同于線程。對(duì)于線程锥余,各個(gè)線程共享全局變量腹纳。
20、什么是脫離線程驱犹?
答:不向主線程返回信息嘲恍,不需要主線程等待。
21雄驹、線程取消有幾種模式佃牛?
答:立即取消和延遲取消。立即取消是調(diào)用pthread_cancel的時(shí)候医舆,不管線程當(dāng)前在干什么吁脱,馬上被結(jié)束掉桑涎。延遲取消是調(diào)用pthread_cancel后,線程運(yùn)行到一個(gè)取消點(diǎn)函數(shù)的時(shí)候 才會(huì)結(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()等會(huì)引起阻塞的系統(tǒng)調(diào)用都是線程取消點(diǎn)等曼。
23、線程間的同步方式凿蒜?
答:臨界區(qū)禁谦、互斥量、信號(hào)量废封、事件州泊。
24、進(jìn)程間通信的方法有哪些漂洋?各自有什么優(yōu)缺點(diǎn)遥皂?那一種方法效率最高?
答:無名管道(親源進(jìn)程之間):管道是一種半雙工的通信方式刽漂,數(shù)據(jù)只能單向流動(dòng)演训,而且只能在具有親緣關(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)存由一個(gè)進(jìn)程創(chuàng)建,但多個(gè)進(jìn)程都可以訪問蔼水。共享內(nèi)存是最快的IPC方式震糖,他是針對(duì)其他進(jìn)程間通信方式運(yùn)行效率低而專門設(shè)計(jì)的。
消息隊(duì)列(具備同步的效果):消息隊(duì)列是有消息的鏈表徙缴,存放在內(nèi)核中并由消息隊(duì)列標(biāo)識(shí)符標(biāo)識(shí)试伙。消息隊(duì)列克服了信號(hào)傳遞消息少嘁信、管道只能承載無格式字節(jié)流以及緩沖區(qū)大小受限等缺點(diǎn)于样。
socket(不同主機(jī)之間的進(jìn)程通信):用于不同機(jī)器間的進(jìn)程通信。
信號(hào)量(同步機(jī)制):是一個(gè)計(jì)數(shù)器潘靖,可以用來控制多個(gè)進(jìn)程對(duì)共享資源的訪問穿剖。它常作為一種機(jī)制鎖,防止某進(jìn)程在防偽共享資源時(shí)卦溢,其他進(jìn)程也訪問該資源糊余。因此秀又,主要作為進(jìn)程間以及同一進(jìn)程內(nèi)不同線程之間的同步手段。
內(nèi)存映射:
共享內(nèi)存效率最高
25贬芥、線程之間通過什么交換數(shù)據(jù)
答:全局變量吐辙;Message消息機(jī)制;CEvent對(duì)象
26蘸劈、線程條件變量是起什么作用昏苏?
答:條件變量是利用線程間共享的全局變量進(jìn)行同步的一種機(jī)制,主要包括兩個(gè)動(dòng)作:一個(gè)線程等待某個(gè)條件為真威沫,而將自己掛起贤惯;另一個(gè)線程使得條件成立,并通知等待的線程繼續(xù)棒掠。為了防止競(jìng)爭孵构,條件變量的使用總是和一個(gè)互斥鎖結(jié)合在一起。當(dāng)條件變量沒有被鏈接到特定的斷言上去烟很,當(dāng)一個(gè)條件變量與多個(gè)斷言相關(guān)聯(lián)的時(shí)候颈墅,線程被喚醒后就必須重新測(cè)試它所要的斷言。其次條件變量可以讓線程睡眠特定的時(shí)間溯职。
27精盅、啟動(dòng)Linux Shell時(shí),默認(rèn)打開哪幾個(gè)文件描述符谜酒,他們的值分別是多少叹俏?
答:stdin;stdout;stderr; 0,1,2
28、內(nèi)核主要分為哪幾個(gè)子系統(tǒng)僻族?
答:進(jìn)程管理系統(tǒng)粘驰、內(nèi)存管理系統(tǒng)、I/O管理系統(tǒng)和文件管理系統(tǒng)等四個(gè)子系統(tǒng)述么。
29蝌数、操作系統(tǒng)中進(jìn)程調(diào)度策略有哪幾種?
答:FCFS(先來先服務(wù))度秘、優(yōu)先級(jí)顶伞、時(shí)間輪轉(zhuǎn)片、多級(jí)反饋剑梳。
30唆貌、進(jìn)程具有那些基本狀態(tài)?
答:新建垢乙、就緒锨咙、運(yùn)行、阻塞追逮、退出
31酪刀、TCP和UDP的區(qū)別粹舵?
答:(1)TCP面向連接(三次握手機(jī)制)、通信前需建立連接骂倘;UDP面向無連接眼滤,通信前不需要建立連接;
(2)TCP保障可靠傳輸(按序历涝、無差錯(cuò)柠偶、不丟失、不重復(fù))睬关;UDP不保障可靠傳輸诱担,使用最大努力交付;
(3)TCP面向字節(jié)流的傳輸电爹,UDP面向數(shù)據(jù)報(bào)的傳輸蔫仙。
32、TCP建立連接的時(shí)候三次握手丐箩,斷開連接時(shí)的四次握手的具體過程摇邦?
答:建立連接的三次握手-------
第一次握手是客戶端connect連接到server,server accept client的請(qǐng)求之后屎勘,向client端發(fā)送一個(gè)消息施籍,相當(dāng)于說我都準(zhǔn)備好了,你連接上我了概漱,這是第二次握手丑慎,第三次握手就是client向server發(fā)送的,就是對(duì)第二次握手消息的確認(rèn)瓤摧,之后server和client就開始通訊了竿裂。
斷開連接的四次握手-----
斷開連接的一端發(fā)送close請(qǐng)求是第一次握手,另外一端接收到斷開連接的請(qǐng)求之后需要對(duì)close進(jìn)行確認(rèn)照弥,發(fā)送一個(gè)消息腻异,這是第二次握手,發(fā)送了確認(rèn)消息之后還要向?qū)Χ税l(fā)送close消息这揣,要關(guān)閉對(duì)對(duì)端的連接悔常,這是第三次握手,而在最初發(fā)送斷開連接的一端接收到消息之后给赞,進(jìn)入到一個(gè)很重要的狀態(tài)time_wait狀態(tài)机打,最后一次握手是最初發(fā)送斷開連接的一端接收到消息之后對(duì)消息的確認(rèn)。
33塞俱、connect方法會(huì)阻塞姐帚,請(qǐng)問有什么方法可以避免其長時(shí)間阻塞吏垮?
答:最常用且最有效的是加定時(shí)器障涯;也可以采用非阻塞模式罐旗。
或者考慮采用異步傳輸機(jī)制,同步傳輸與異步傳輸?shù)闹饕獏^(qū)別在于同步傳輸中唯蝶,如果recvfrom后會(huì)一直阻塞到運(yùn)行九秀,從而導(dǎo)致調(diào)用線程暫停運(yùn)行;異步傳輸機(jī)制則不然粘我,會(huì)立即返回鼓蜒。
34、網(wǎng)絡(luò)編程中設(shè)計(jì)并發(fā)服務(wù)器征字,使用多進(jìn)程與多線程都弹,請(qǐng)問有何區(qū)別?
答案一:進(jìn)程是父進(jìn)程的復(fù)制品匙姜。子進(jìn)程獲得父進(jìn)程數(shù)據(jù)空間畅厢、堆和棧的復(fù)制品。
線程相對(duì)于進(jìn)程而言氮昧,線程是一個(gè)更加接近于執(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)程每個(gè)進(jìn)程有自己的地址空間,線程則共享地址空間填渠,所有其他區(qū)別都是 由此而來的:
速度:線程產(chǎn)生的速度快弦聂,線程間的通訊快,切換快等氛什, 以為它們?cè)谕粋€(gè)地址空間內(nèi)莺葫。
資源利用率:線程的資源利用率比較好也是因?yàn)樗鼈冊(cè)谕粋€(gè)地址空間內(nèi)。
同步問題:線程使用公共變量枪眉、內(nèi)存是需要使用同步機(jī)制還是因?yàn)樗鼈冊(cè)谕粋€(gè)地址空間內(nèi)捺檬。
35、TCP為什么不是兩次連接而是三次握手贸铜?
答:如果A與B兩個(gè)進(jìn)程通信堡纬,如果僅是兩次連接聂受,可能出現(xiàn)的一種情況是:A發(fā)送完請(qǐng)求報(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)文后碗旅,會(huì)向A發(fā)起連接。此時(shí)兩次握手完畢镜悉,B會(huì)認(rèn)為已經(jīng)建立了連接可以通信祟辟,B會(huì)一直等到A發(fā)送的連接請(qǐng)求,而A對(duì)失效的報(bào)文回復(fù)自然不會(huì)處理侣肄。一次會(huì)陷入B忙等的僵局川尖,造成資源的浪費(fèi)。
36茫孔、TCP的重發(fā)機(jī)制是怎么實(shí)現(xiàn)的叮喳?
答:(1)滑動(dòng)窗口機(jī)制,確認(rèn)收發(fā)的邊界缰贝,能讓發(fā)送方知道已經(jīng)發(fā)送了多少(已確認(rèn))馍悟、尚未確認(rèn)的字節(jié)數(shù),尚等待發(fā)送的字節(jié)數(shù)剩晴;讓接收方知道(已經(jīng)確認(rèn)接收到的字節(jié)數(shù))锣咒。
(2)選擇重傳,用于對(duì)傳輸出錯(cuò)的序列進(jìn)行重傳赞弥。
37毅整、UDP分多少種形式,各有什么特點(diǎn)绽左?
答:單播:一對(duì)一的通訊模式悼嫉,服務(wù)器及時(shí)響應(yīng)客戶機(jī)的請(qǐng)求。
多播/組播:一對(duì)一組的通訊模式拼窥,需要相同數(shù)據(jù)流的客戶端加入相同的組共享一條數(shù)據(jù)流戏蔑,節(jié)省了服務(wù)器的負(fù)載。
廣播:一對(duì)所有的通訊模式鲁纠,所有主機(jī)都可以接收到所有信息总棵,服務(wù)器流量負(fù)載極低。
38改含、解釋單體內(nèi)核和微內(nèi)核之間的區(qū)別情龄?
答:單體內(nèi)核包含了所有功能:調(diào)度,文件系統(tǒng),設(shè)備驅(qū)動(dòng)程序骤视,網(wǎng)絡(luò)鞍爱,存儲(chǔ)管理等。
微內(nèi)核只有部分功能尚胞,基本調(diào)度,進(jìn)程通信帜慢,地址空間笼裳。
39、網(wǎng)絡(luò)I/O的五種模式粱玲?
答:阻塞I/O躬柬,非阻塞I/O,信號(hào)驅(qū)動(dòng)抽减,I/O復(fù)用允青,異步I/O。
40卵沉、TCP/IP五層模型颠锉?
答:應(yīng)用層,傳輸層史汗,網(wǎng)絡(luò)層琼掠,數(shù)據(jù)鏈路層,物理層停撞。
41瓷蛙、文件描述符和FILE*的關(guān)系?
答:文件描述符:在linux系統(tǒng)中打開文件就會(huì)獲得文件描述符戈毒,是一個(gè)小整數(shù)艰猬。每個(gè)新城在PCB中保存著一份文件描述符表,文件描述符就是這個(gè)表的索引
文件指針:C語言的標(biāo)準(zhǔn)庫使用文件指針作為文件的句柄埋市,文件指針指向進(jìn)程用戶區(qū)的一種FILE類型的數(shù)據(jù)結(jié)構(gòu)冠桃,F(xiàn)ILE結(jié)構(gòu)中包含一個(gè)文件描述符域和一個(gè)緩沖區(qū),文件描述符是文件描述符表的一個(gè)索引
42道宅、TCP和UDP的用途腊满?
答:TCP一般用于文件傳輸,發(fā)送或者接受郵件培己,遠(yuǎn)程登錄等等碳蛋;
UDP一般用于即時(shí)通信,在線視頻省咨,網(wǎng)絡(luò)語音通話等等肃弟。
43、TCP四次分手中,主動(dòng)關(guān)閉方最后為什么要等待2MSL之后才關(guān)閉連接笤受?
答:這是因?yàn)殡p方都同意關(guān)閉連接了穷缤,而且握手的四個(gè)報(bào)文也都協(xié)調(diào)和發(fā)送完畢,按理可以直接回到CLOSED狀態(tài)箩兽;但是因?yàn)槿绻W(wǎng)絡(luò)是不可靠的津肛,無法保證最后發(fā)送的ACK報(bào)文會(huì)一定被對(duì)方接受到,因此對(duì)方處于LAST_ACK狀態(tài)下的SOCKET可能會(huì)因?yàn)槌瑫r(shí)未收到ACK報(bào)文而重新發(fā)送FIN報(bào)文汗贫,所以這個(gè)TIME_WAIT狀態(tài)的作用就是用來重發(fā)可能丟失的ACK報(bào)文身坐。
44、網(wǎng)絡(luò)中落包,如果客戶端突然關(guān)掉或者重啟部蛇,服務(wù)器怎么樣才能立刻知道?
答:若客戶端突然掉線或者重啟咐蝇,服務(wù)器端會(huì)收到復(fù)位信號(hào)涯鲁,每一種tcp/ip的實(shí)現(xiàn)不一樣,控制機(jī)制也不一樣有序。
45抹腿、TTL是什么?有什么用處旭寿?通常哪些工具會(huì)用到它幢踏?
答:TTL是Time To Live一般是hub count每經(jīng)過一個(gè)路由就會(huì)被減去一,如果他變成0许师,包會(huì)被丟掉房蝉。他的主要目的是防止包在有回路的網(wǎng)絡(luò)上死轉(zhuǎn),浪費(fèi)網(wǎng)絡(luò)資源微渠。ping和traceroute用到它搭幻。
46、什么是IP協(xié)議逞盆?在哪個(gè)層面上檀蹋?主要有什么作用?
答:IP協(xié)議是網(wǎng)絡(luò)層的協(xié)議云芦,他是為了實(shí)現(xiàn)相互連接的計(jì)算機(jī)進(jìn)行通信設(shè)計(jì)的協(xié)議俯逾,它實(shí)現(xiàn)了自動(dòng)路由功能,及自動(dòng)尋徑功能舅逸。
47桌肴、描述RARP協(xié)議。
答:RARP是逆地址解析協(xié)議琉历,作用是完成硬件地址到IP地址的映射坠七,主要用于無盤工作站水醋,因?yàn)榻o無盤工作站配置的IP地址不能保存。
工作流程:在網(wǎng)絡(luò)中配置一臺(tái)RARP服務(wù)器彪置,里面保存著IP地址和MAC地址的映射關(guān)系拄踪,當(dāng)無盤工作站啟動(dòng)后,就封裝一個(gè)RARP數(shù)據(jù)包拳魁,里面有其MAC地址惶桐,然后廣播到網(wǎng)絡(luò)上去,當(dāng)服務(wù)器收到請(qǐng)求包后潘懊,就查找對(duì)應(yīng)的MAC地址的IP地址裝入響應(yīng)報(bào)文中發(fā)回給請(qǐng)求者姚糊。以為需要廣播請(qǐng)求報(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é)議就是一個(gè)網(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ù)鏈路層迹鹅。路由器識(shí)別網(wǎng)絡(luò)是通過IP數(shù)據(jù)包中的IP地址的網(wǎng)絡(luò)號(hào)進(jìn)行的卦洽,所以為了保證數(shù)據(jù)包路由的正確性,每個(gè)網(wǎng)絡(luò)都必須有一個(gè)唯一的網(wǎng)絡(luò)號(hào)斜棚,路由通過IP數(shù)據(jù)包的IP地址進(jìn)行路由的(將數(shù)據(jù)包遞交給哪一個(gè)下一跳路由器)逐样。路由器工作于網(wǎng)絡(luò)層,由于設(shè)備的發(fā)展,現(xiàn)在很多設(shè)備具有交換又具有路由功能脂新,兩者的界限越來越模糊挪捕。
50、IP地址的分類争便。
答: 網(wǎng)絡(luò)號(hào)網(wǎng)絡(luò)范圍主機(jī)號(hào)
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)用戶的請(qǐng)求
(3)多CPU系統(tǒng)中发绢,使用線程提高CPU利用率
(4)改善程序結(jié)構(gòu)。一個(gè)既長又發(fā)雜的進(jìn)程可以考慮分為多個(gè)線程垄琐,成為幾個(gè)獨(dú)立或半獨(dú)立的運(yùn)行部分边酒,這樣的程序會(huì)利于理解和修改。
其他情況都使用單線程狸窘。
52墩朦、使用線程是如何防止出現(xiàn)大的波峰?
答:意思是如何防止同時(shí)產(chǎn)生大量的線程翻擒。方法是使用線程池氓涣,線程池具有可以同時(shí)提高調(diào)度效率和限制資源使用的好處,線程池中的線程達(dá)到最大數(shù)時(shí)陋气,其他線程就會(huì)排隊(duì)等候劳吠。
53、什么是線程池恩伺?
答:線程池是指在初始化一個(gè)多線程應(yīng)用程序中創(chuàng)建一個(gè)線程集合赴背,然后在需要執(zhí)行新的任務(wù)時(shí),重用這些線程而不是新建一個(gè)線程晶渠。(為一個(gè)線程預(yù)分配一個(gè)集合或者一個(gè)池來已被未來之需以及能夠在一個(gè)應(yīng)用程序中重用的技術(shù)凰荚,稱作線程池)
54、線程池的作用以及為什么要用線程池褒脯?
答:作用是限制系統(tǒng)中執(zhí)行線程的數(shù)量便瑟。
根據(jù)系統(tǒng)的環(huán)境情況,可以自動(dòng)或手動(dòng)設(shè)置線程數(shù)量番川,達(dá)到運(yùn)行的最佳效果到涂;線程少了 浪費(fèi)系統(tǒng)資源脊框,多了造成系統(tǒng)資源擁擠,效率不高践啄。用線程池控制線程的數(shù)量浇雹,其他線程排隊(duì)等候。一個(gè)任務(wù)執(zhí)行完畢屿讽,再從隊(duì)列中親緣取最前面的任務(wù)開始執(zhí)行昭灵。若是隊(duì)列里沒有等待進(jìn)程,線程池的這一資源處于等待伐谈。當(dāng)一個(gè)新任務(wù)需要運(yùn)行時(shí)烂完,如果線程池中有等待的工作的線程,就可以開始運(yùn)行了诵棵;否則進(jìn)入等待隊(duì)列抠蚣。
為什么要用線程池:
(1)減少了創(chuàng)建線程和銷毀線程的次數(shù),每個(gè)工作線程都可以被重復(fù)利用履澳,可以執(zhí)行多個(gè)任務(wù)嘶窄。
(2)可以根據(jù)系統(tǒng)的承受能力,調(diào)整線程池中工作的線程的數(shù)目奇昙,防止因?yàn)橄倪^多的內(nèi)存护侮,導(dǎo)致服務(wù)器死機(jī)敌完。