




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
前端程序員面試分類真題27簡答題1.
請簡單介紹一下Web緩存機(jī)制,具體過程有哪幾步?正確答案:緩存的處理過程可以簡單地分為幾步,第一步是在緩存中搜索指定資源的副本,如果命中就執(zhí)行第二步;第二步就(江南博哥)是對資源副本進(jìn)行新鮮度檢測(也就是文檔是否過期),如果不新鮮就執(zhí)行第三步;第三步是與服務(wù)器進(jìn)行再驗證,驗證通過(即沒有過期)就更新資源副本的新鮮度,再返回這個資源副本(此時的響應(yīng)狀態(tài)碼為“304NotModified”),不通過就從服務(wù)器返回資源,再將最新資源的副本放入緩存中。[考點]網(wǎng)絡(luò)協(xié)議
2.
在瀏覽器中,一個頁面從輸入URL到加載完成,都有哪些步驟?正確答案:為了便于理解,將這個過程簡單地分為5步,如下所列:
(1)域名解析,根據(jù)域名找到服務(wù)器的IP地址。
(2)建立TCP連接,瀏覽器與服務(wù)器經(jīng)過3次握手后建立連接。
(3)瀏覽器發(fā)起HTTP請求,獲取想要的資源。
(4)服務(wù)器響應(yīng)HTTP請求,返回指定的資源。
(5)瀏覽器渲染頁面,解析接收到的HTML、CSS和JavaScript等文件。[考點]網(wǎng)絡(luò)協(xié)議
3.
請求方法GET和POST的區(qū)別有哪些?正確答案:主要區(qū)別有4個方面,如下所列:
(1)語義不同,GET是獲取數(shù)據(jù),POST是提交數(shù)據(jù)。
(2)HTTP規(guī)定GET比POST安全,因為GET只作讀取,不會改變服務(wù)器中的數(shù)據(jù)。但這只是規(guī)范,并不能保證請求方法的實現(xiàn)也是安全的。
(3)GET請求會把附加參數(shù)帶在URL上,而POST請求會把提交數(shù)據(jù)放在報文內(nèi)。在瀏覽器中,URL長度會被限制,所以GET請求能傳遞的數(shù)據(jù)有限,但HTTP其實并沒有對其作限制,都是瀏覽器在控制。
(4)HTTP規(guī)定GET是冪等的,而POST不是,所謂冪等是指多次請求返回相同的結(jié)果。實際應(yīng)用中,并不會這么嚴(yán)格,當(dāng)GET獲取動態(tài)數(shù)據(jù)時,每次的結(jié)果可能會有所不同。[考點]網(wǎng)絡(luò)協(xié)議
4.
請描述一下TCP3次握手的過程。正確答案:通信兩端(即客戶端和服務(wù)器)會先經(jīng)歷3次握手,然后才能建立TCP連接,具體過程如下所列:
(1)客戶端發(fā)送一個攜帶SYN標(biāo)志位的包,請求建立連接。
(2)服務(wù)器響應(yīng)一個攜帶SYN和ACK標(biāo)志位的包,同意建立連接。
(3)客戶端再發(fā)送一個攜帶ACK標(biāo)志位的包,表示連接成功,開始進(jìn)行數(shù)據(jù)傳輸。[考點]網(wǎng)絡(luò)協(xié)議
5.
TCP為什么采用3次握手,而不是2次握手?正確答案:因為2次握手不可靠。舉個簡單的例子,客戶端發(fā)了一個請求建立連接的包,由于網(wǎng)絡(luò)原因遲遲沒有抵達(dá)服務(wù)器,客戶端只得再發(fā)一次請求,這次成功抵達(dá)并完成了數(shù)據(jù)傳輸。過了一段時間,第一次延遲的請求也到了服務(wù)器,服務(wù)器并不知道這是無效請求,依舊正常響應(yīng)。如果是2次握手,那么這個時候就會建立一條無效的連接,而如果是3次握手,那么客戶端就能夠丟棄這條連接,避免了無謂的網(wǎng)絡(luò)開銷。[考點]網(wǎng)絡(luò)協(xié)議
6.
請描述一下TCP4次揮手的過程。正確答案:當(dāng)要斷開TCP連接時,通信兩端就會進(jìn)行4次揮手的操作。由于連接是雙向的,所以客戶端和服務(wù)器都要發(fā)送攜帶FIN標(biāo)志位的包,才算徹底斷開了連接,具體過程如下所列。
(1)客戶端發(fā)送一個攜帶FIN標(biāo)志位的包,請求斷開連接。
(2)服務(wù)器響應(yīng)一個攜帶ACK標(biāo)志位的包,同意客戶端斷開連接。
(3)服務(wù)器再發(fā)送一個攜帶FIN標(biāo)志位的包,請求斷開連接。
(4)客戶端最后發(fā)送一個攜帶ACK標(biāo)志位的包,同意服務(wù)器斷開連接。[考點]網(wǎng)絡(luò)協(xié)議
7.
為什么說HTTP不安全?正確答案:之所以說HTTP不安全,是由于以下3個原因:
(1)數(shù)據(jù)以明文傳遞,有被竊聽的風(fēng)險。
(2)接收到的報文無法證明是發(fā)送時的報文,不能保障完整性,因此報文有被篡改的風(fēng)險。
(3)不驗證通信兩端的身份,請求或響應(yīng)有被偽造的風(fēng)險。[考點]網(wǎng)絡(luò)協(xié)議
8.
HTTPS有哪些缺點?正確答案:HTTPS有如下4個缺點:
(1)通信兩端都需要進(jìn)行加密和解密,而這會消耗大量的CPU、內(nèi)存等資源,從而會增加服務(wù)器的負(fù)載。
(2)加密運算和多次握手降低了訪問速度。
(3)在開發(fā)階段,加大了頁面調(diào)試難度。因為信息都被加密了,所以用代理工具的話,需要先解密然后才能看到真實信息。
(4)用HTTPS訪問的頁面,頁面內(nèi)的外部資源都得用HTTPS請求,包括腳本中的Ajax請求。[考點]網(wǎng)絡(luò)協(xié)議
9.
什么是運營商劫持?有什么辦法預(yù)防?正確答案:運營商是指提供網(wǎng)絡(luò)服務(wù)的ISP(InternetServiceProvider),例如三大基礎(chǔ)運營商:中國電信、中國移動和中國聯(lián)通。運營商為了牟取經(jīng)濟(jì)利益,有時候會劫持用戶的HTTP訪問,最明顯的特征就是在頁面上植入廣告,而這些植入廣告有些是購物廣告,有些卻是淫穢廣告,它們都非常影響界面體驗和公司形象。為了避免被劫持,可以讓服務(wù)器支持HTTPS協(xié)議,HTTPS傳輸?shù)臄?shù)據(jù)都被加密過了,此時運營商就無法再注入廣告代碼了,這樣頁面就不會再被劫持了。[考點]網(wǎng)絡(luò)協(xié)議
10.
HTTP/1.1有哪些不足?正確答案:此處列舉了HTTP/1.1中5個比較有代表性的不足。
(1)在傳輸中會出現(xiàn)隊首阻塞問題。
(2)響應(yīng)不分輕重緩急,只會按先來后到的順序執(zhí)行。
(3)并行通信需要建立多個TCP連接。
(4)服務(wù)器不能主動推送客戶端想要的資源,只能被動地等待客戶端發(fā)起請求。
(5)由于HTTP是無狀態(tài)的,所以每次請求和響應(yīng)都會攜帶大量冗余信息。[考點]網(wǎng)絡(luò)協(xié)議
11.
二進(jìn)制分幀層是HTTP/2.0性能增強(qiáng)的關(guān)鍵,它是如何增強(qiáng)性能的?正確答案:二進(jìn)制分幀層改變了通信兩端交互數(shù)據(jù)的方式,原先都是以文本傳輸,現(xiàn)在要先對數(shù)據(jù)進(jìn)行二進(jìn)制編碼,再把數(shù)據(jù)分成一個一個的幀,接著把幀送到數(shù)據(jù)流中,最后對方接收幀并拼成一條消息,再處理請求。在2.0版本中,通信的最小單位是幀(frame),若干個幀組成一條消息(message),若干條消息在數(shù)據(jù)流(stream)中傳輸,一個TCP連接可以分出若干條數(shù)據(jù)流,因此HTTP/2.0只要建立一次TCP連接就能完成所有傳輸。[考點]網(wǎng)絡(luò)協(xié)議
12.
TCP中的隊首阻塞是怎么回事?正確答案:TCP是一種可靠的通信協(xié)議,中途如果出現(xiàn)丟包,那么發(fā)送方就會根據(jù)重發(fā)機(jī)制再發(fā)一次丟失的包,由于通信兩端都是串行處理請求的,因此接收端在這個包到達(dá)之前,不會再處理后面的請求,這種現(xiàn)象稱為隊首阻塞。[考點]網(wǎng)絡(luò)協(xié)議
13.
數(shù)字簽名和加密的區(qū)別是什么?正確答案:數(shù)字簽名使用發(fā)送方的密鑰對,發(fā)送方使用自己的私有密鑰進(jìn)行加密,而接收方只需要發(fā)送方的公開密鑰就可以解密,是一種一對多的關(guān)系,只要持有發(fā)送方公開密鑰的人都可以驗證數(shù)字簽名的正確性。
加密是一種以密碼方式發(fā)送信息的方法,指的是如下過程:發(fā)送方利用接收方的公鑰對要發(fā)送的明文進(jìn)行加密,接收方利用自己的私鑰進(jìn)行解密,其中公鑰和私鑰是相對的,任何一個作為公鑰,則另一個就為私鑰。所以,加密使用的是接收方的密鑰對,這是一種多對一的關(guān)系,任何知道接收方公開密鑰的人都可以向接收方發(fā)送加密信息,只有唯一擁有接收方私有密鑰的人才能對信息解密。
另外,數(shù)字簽名采用的是非對稱密鑰加密算法,它能保證發(fā)送信息的完整性、身份認(rèn)證和不可否認(rèn)性,而數(shù)字加密采用的是對稱密鑰加密算法和非對稱密鑰加密算法相結(jié)合的方法。[考點]網(wǎng)絡(luò)安全
14.
什么是MAC地址?正確答案:MAC地址,也稱為物理地址,用來定義網(wǎng)絡(luò)設(shè)備的位置,它總共有48位,以十六進(jìn)制表示,由兩大塊組成:IEEE(電氣電子工程師學(xué)會)分配給廠商的識別碼和廠商內(nèi)部定義的唯一識別碼,如下所示。
00-36-76-47-D6-7A[考點]網(wǎng)絡(luò)安全
15.
什么是IP地址?正確答案:IP地址是指互聯(lián)網(wǎng)協(xié)議地址,是為網(wǎng)絡(luò)中的每臺主機(jī)(例如計算機(jī)、路由器等)分配的一個數(shù)字標(biāo)簽。IP地址應(yīng)用在OSI參考模型中的網(wǎng)絡(luò)層,能保證通信的正常。常用的IP地址分為兩大類:IPv4與IPv6。
IPv4由32位二進(jìn)制數(shù)組成,但為了便于記憶,常以4段十進(jìn)制數(shù)字表示,每組用點號(.)隔開,如下所示。
192.169:253.1
在IP地址后面常會帶著一組以255開頭的數(shù)字,這被稱為子網(wǎng)掩碼(如下所示),用來標(biāo)識IP地址所在的子網(wǎng)。在網(wǎng)絡(luò)中傳輸數(shù)據(jù)可簡單理解成現(xiàn)實生活中的送快遞,送快遞的時候需要知道具體地址,而具體地址由省、市、區(qū)、街道、門牌號等部分組成,對應(yīng)到網(wǎng)絡(luò)中,IP地址就相當(dāng)于門牌號,而子網(wǎng)掩碼則相當(dāng)于省、市、區(qū)、街道。
50
IPv4的地址數(shù)量是有限的,而今互聯(lián)網(wǎng)發(fā)展迅猛,資源遲早會枯竭,為了從根本上解決這個問題,IETF規(guī)劃并制定了IPv6標(biāo)準(zhǔn)。IPv6有128位,分為8組,每組4個十六進(jìn)制數(shù),用冒號(:)隔開,如下所示。
CFDE:086E:0291:08d3:760A:04DD:CCAB:2145[考點]網(wǎng)絡(luò)安全
16.
請簡單介紹一下REST。正確答案:REST并不是一個單詞,它是RepresentationalStateTransfer的縮寫,表示表述性狀態(tài)轉(zhuǎn)移。它既不是標(biāo)準(zhǔn),也不是協(xié)議,而是一組架構(gòu)約束條件和設(shè)計指導(dǎo)原則,是一種基于HTTP、URI、XML等現(xiàn)有協(xié)議與標(biāo)準(zhǔn)的開發(fā)方式。常說的RESTful是一種遵守REST設(shè)計的架構(gòu)風(fēng)格。[考點]網(wǎng)絡(luò)安全
17.
什么是RESTfulAPI?如何設(shè)計RESTfulAPI?正確答案:RESTfulAPI是指符合REST設(shè)計風(fēng)格的WebAPI。為了使得接口安全、易用、可維護(hù)以及可擴(kuò)展,一般設(shè)計RESTfulAPI時需要考慮以下幾個方面:
(1)通信用HTTPS安全協(xié)議。
(2)在URL中加入版本號,例如“vl/animals”。
(3)URL中的路徑(endpoint)不能有動詞,只能用名詞。
(4)用HTTP方法對資源進(jìn)行增刪改查的操作。
(5)用HTTP狀態(tài)碼傳達(dá)執(zhí)行結(jié)果和失敗原因。
(6)為集合提供過濾、排序、分頁等功能。
(7)用查詢字符串或HTTP首部Accept進(jìn)行內(nèi)容協(xié)商,指定返回結(jié)果的數(shù)據(jù)格式。
(8)及時更新文檔,每個接口都有對應(yīng)的說明。[考點]網(wǎng)絡(luò)安全
18.
動態(tài)鏈接庫和靜態(tài)鏈接庫的優(yōu)缺點是什么?正確答案:所謂庫指的是把一些常用函數(shù)的目標(biāo)文件打包在一起,提供相應(yīng)函數(shù)的接口,便于程序員使用。具體而言,它是別人寫好的、現(xiàn)有的、成熟的、可以復(fù)用的代碼,只需要知道其接口如何定義,便可以簡單方便地使用。而靜態(tài)鏈接庫(StaticLinkLibrary,LIB)與動態(tài)鏈接庫(DynamicLinkLibrary,DLL)都是共享代碼的方式。以下將對這兩種方式進(jìn)行介紹與對比分析。
動態(tài)鏈接庫:在Windows操作系統(tǒng)中動態(tài)鏈接庫的后綴為.dll,其中有3個最重要的DLL,分別是Keme132.dll、User32.dll和GDI32.dll。Linux操作系統(tǒng)中動態(tài)鏈接庫的后綴為.so。動態(tài)鏈接庫的代碼是在可執(zhí)行程序運行時才載入內(nèi)存的,在編譯過程中僅簡單地引用,因此,它的代碼體積較小。動態(tài)鏈接庫的使用方式分為兩種:一種是靜態(tài)加載,即在應(yīng)用程序啟動時加載;一種是動態(tài)加載,即該動態(tài)鏈接庫在被使用時才被應(yīng)用程序加載。
動態(tài)鏈接庫的優(yōu)點很多,主要有以下幾點:
(1)更加節(jié)省內(nèi)存,并減少頁面交換。多個應(yīng)用程序可以使用同一個動態(tài)鏈接庫,啟動多個應(yīng)用程序的時候,只需要將動態(tài)鏈接庫加載到內(nèi)存一次即可。
(2)開發(fā)模塊好,可以更為容易地將更新應(yīng)用于各個模塊,而不會影響該程序的其他部分,從而具有很強(qiáng)的可維護(hù)性和可擴(kuò)展性。例如,有一個大型網(wǎng)絡(luò)游戲,如果把整個數(shù)百MB甚至數(shù)GB的游戲代碼都放在一個應(yīng)用程序里,未來的修改工作將會非常費時,而如果把不同功能的代碼分別放在數(shù)個動態(tài)鏈接庫中,則無須重新生成或安裝整個程序就可以應(yīng)用更新,但前提是要求設(shè)計者對功能劃分得比較好。
(3)不同編程語言編寫的程序只要按照函數(shù)調(diào)用約定設(shè)計就可以調(diào)用同一個DLL函數(shù)。
動態(tài)鏈接庫的缺點如下:
(1)不能解決引用計數(shù)。
(2)使用動態(tài)鏈接庫的應(yīng)用程序不是自完備的,它依賴的DLL模塊也要存在,如果使用載入時進(jìn)行動態(tài)鏈接,程序啟動時發(fā)現(xiàn)DLL不存在,系統(tǒng)將終止程序并給出錯誤信息,而使用運行時進(jìn)行動態(tài)鏈接,系統(tǒng)不會終止,但由于DLL中的導(dǎo)出函數(shù)不可用,程序會加載失敗。
(3)可能造成DLL地獄。DLL地獄(DLLHell)指的是在微軟的Windows系統(tǒng)中,因為動態(tài)鏈接庫的版本或兼容性的問題而造成程序無法正常運行的情況。
靜態(tài)鏈接庫:函數(shù)和數(shù)據(jù)被編譯進(jìn)一個二進(jìn)制文件(通常擴(kuò)展名為.lib)。靜態(tài)鏈接庫的代碼在編譯過程中已經(jīng)被載入可執(zhí)行程序,因此,它的體積較大。在使用靜態(tài)鏈接庫的情況下,編譯鏈接可執(zhí)行文件時,鏈接器從庫中復(fù)制這些函數(shù)和數(shù)據(jù)并把它們和應(yīng)用程序的其他模塊組合起來創(chuàng)建最終的可執(zhí)行文件(.exe文件)。靜態(tài)鏈接庫作為代碼的一部分,在編譯時被鏈接。
靜態(tài)鏈接庫的優(yōu)點有以下兩點:①代碼的裝載速度快,因為編譯時它只會把需要的那部分內(nèi)容鏈接進(jìn)去,所以,其執(zhí)行速度比動態(tài)鏈接庫略快;②只需保證在開發(fā)者的計算機(jī)中有正確的.lib文件即可,在以二進(jìn)制形式發(fā)布程序時不需考慮在用戶的計算機(jī)上.lib文件是否存在及其版本問題,可避免DLL地獄等問題。
當(dāng)然,靜態(tài)鏈接庫的缺點也是很明顯的,如果一個靜態(tài)鏈接庫被多個應(yīng)用程序使用,則會被裝載多次,浪費內(nèi)存。[考點]操作系統(tǒng)基本概念
19.
實時操作系統(tǒng)的基本特性是什么?正確答案:實時操作系統(tǒng)(Real-TimeOperatingSystem,RTOS)是指當(dāng)外界事件或數(shù)據(jù)產(chǎn)生時,能夠接收并以足夠快地速度予以處理,其處理的結(jié)果又能在規(guī)定的時間之內(nèi)控制生產(chǎn)過程或?qū)μ幚硐到y(tǒng)做出快速響應(yīng),調(diào)度一切可利用的資源完成實時任務(wù),并控制所有實時任務(wù)協(xié)調(diào)一致運行的操作系統(tǒng)。
通過上述定義可知,實時操作系統(tǒng)具有以下基本特性:響應(yīng)及時;處理事務(wù)的能力較強(qiáng)、速度較快;可靠性高。[考點]操作系統(tǒng)基本概念
20.
輪詢?nèi)蝿?wù)調(diào)度和搶占式調(diào)度有什么區(qū)別?正確答案:在多任務(wù)系統(tǒng)中,在同一時刻通常會有多個任務(wù)處于活動狀態(tài),操作系統(tǒng)此時就需要對資源進(jìn)行管理,在任務(wù)間實現(xiàn)資源(CPU、內(nèi)存等)的共享。任務(wù)調(diào)度是指基于給定時間點、給定時間間隔或者給定執(zhí)行次數(shù)自動執(zhí)行任務(wù)。輪詢?nèi)蝿?wù)調(diào)度與搶占式任務(wù)調(diào)度的區(qū)別在于搶占式調(diào)度中優(yōu)先級高的任務(wù)可以搶占CPU,而輪詢的不能。
具體而言,輪詢調(diào)度的原理是每一次把來自用戶的請求輪流分配給內(nèi)部服務(wù)器,從1開始,直到N(內(nèi)部服務(wù)器個數(shù)),然后重新開始循環(huán)。只有在當(dāng)前任務(wù)主動放棄CPU控制權(quán)的情況下(比如任務(wù)掛起),才允許其他任務(wù)(包括高優(yōu)先級的任務(wù))控制CPU。其優(yōu)點是簡潔,它無須記錄當(dāng)前所有連接的狀態(tài),所以,它是一種無狀態(tài)調(diào)度,但缺點是不利于后面的請求及時得到響應(yīng)。搶占式調(diào)度允許高優(yōu)先級的任務(wù)打斷當(dāng)前執(zhí)行的任務(wù),搶占CPU的控制權(quán)。這有利于后面的高優(yōu)先級任務(wù)也能及時得到響應(yīng),但實現(xiàn)相對較復(fù)雜,并且可能出現(xiàn)低優(yōu)先級任務(wù)長期得不到調(diào)度的情況。[考點]進(jìn)程與線程
21.
線程與進(jìn)程的區(qū)別和聯(lián)系分別是什么?線程是否具有相同的堆棧?DLL是否具有獨立的堆棧?正確答案:進(jìn)程是死的,只是一些資源的集合,真正的程序執(zhí)行都是線程來完成的,程序啟動的時候操作系統(tǒng)創(chuàng)建了一個主線程,每個線程有自己的堆棧。DLL(DynamicLinkLibrary,動態(tài)鏈接庫)中是否具有獨立的堆棧,這個問題不好回答,或者說這個問題本身就有問題。因為DLL中的代碼是被某些線程所執(zhí)行,只有線程擁有堆棧,如果DLL中的代碼是由EXE中的線程所調(diào)用,那么這個時候是不是說這個DLL沒有自己獨立的堆棧呢?如果DLL中的代碼是由DLL自己創(chuàng)建的線程所執(zhí)行,那么是不是說DLL有獨立的堆棧呢?以上講的是堆棧。如果對于堆來說,每個DLL有自己的堆,所以,如果是從DLL中動態(tài)分配的內(nèi)存,最好是從DLL中刪除;如果是從DLL中分配內(nèi)存,然后在EXE中,或者另外一個DLL中刪除,很有可能導(dǎo)致程序崩潰。[考點]進(jìn)程與線程
22.
程序什么時候應(yīng)該使用線程?正確答案:程序在以下幾種情況下使用線程:
(1)耗時的操作應(yīng)使用線程,以提高應(yīng)用程序響應(yīng)效率。
(2)并行操作時使用線程,例如基于C/S架構(gòu)的服務(wù)器端并發(fā)線程響應(yīng)用戶的請求。
(3)在多CPU系統(tǒng)中,使用線程提高CPU利用率。
(4)改善程序結(jié)構(gòu)。一個既長又復(fù)雜的進(jìn)程可以考慮分為多個線程,成為幾個獨立或半獨立的運行部分,這樣的程序會利于理解和修改。[考點]進(jìn)程與線程
23.
請回答以下關(guān)于進(jìn)程、線程以及程序的有關(guān)問題。
(1)進(jìn)程和線程的區(qū)別是什么?
(2)多線程程序有什么優(yōu)點與缺點?
(3)多進(jìn)程程序有什么優(yōu)點與缺點?與多線程相比,有什么區(qū)別?正確答案:進(jìn)程和線程的關(guān)系如下:
(1)一個線程只能屬于一個進(jìn)程,而一個進(jìn)程可以有多個線程,但至少有一個線程。
(2)資源分配給進(jìn)程,同一進(jìn)程的所有線程共享該進(jìn)程的資源。
(3)處理機(jī)分給線程,即真正在處理機(jī)上運行的是線程。
(4)線程在執(zhí)行過程中,需要協(xié)作同步。不同進(jìn)程的線程間要利用消息通信的辦法實現(xiàn)同步。線程指的是進(jìn)程內(nèi)的一個執(zhí)行單元,也是進(jìn)程內(nèi)的可調(diào)度實體。
進(jìn)程和線程的相同點如下:
(1)二者都具有ID、一組寄存器、狀態(tài)、優(yōu)先級以及所要遵循的調(diào)度策略。
(2)每個進(jìn)程都有一個進(jìn)程控制塊,線程也擁有一個線程控制塊。
(3)線程和子進(jìn)程共享父進(jìn)程中的資源;線程和子進(jìn)程獨立于它們的父進(jìn)程,競爭使用處理器資源;線程和子進(jìn)程的創(chuàng)建者可以在線程和子進(jìn)程上實行某些控制,例如創(chuàng)建者可以執(zhí)行取消、掛起、繼續(xù),或者修改線程和子進(jìn)程的優(yōu)先級;線程和子進(jìn)程可以改變屬性并創(chuàng)建新的資源。
進(jìn)程和線程的不同點如下:
(1)線程是進(jìn)程的一部分,一個沒有線程的進(jìn)程是可以被看作單線程的,如果一個進(jìn)程內(nèi)擁有多個線程,進(jìn)程的執(zhí)行過程不是一條線(線程),而是多條線(線程)共同完成的。
(2)啟動一個線程所花費的空間遠(yuǎn)遠(yuǎn)小于啟動一個進(jìn)程所花費的空間,而且,線程間彼此切換所需的時間也遠(yuǎn)遠(yuǎn)小于進(jìn)程間切換所需要的時間。
(3)系統(tǒng)在運行的時候會為每個進(jìn)程分配不同的內(nèi)存區(qū)域,但是不會為線程分配內(nèi)存(線程所使用的資源是它所屬的進(jìn)程的資源),同一個進(jìn)程內(nèi)的線程可以共享進(jìn)程的資源。對不同進(jìn)程來說,它們具有獨立的數(shù)據(jù)空間,要進(jìn)行數(shù)據(jù)的傳遞只能通過通信的方式進(jìn)行,這種方式不僅費時,而且很不方便。而一個線程的數(shù)據(jù)可以直接為其他線程所用,這不僅快捷,而且方便。
(4)與進(jìn)程的控制表PCB相似,線程也有自己的控制表TCB,但是TCB中所保存的線程狀態(tài)比PCB表中少多了。
(5)進(jìn)程是系統(tǒng)資源分配的一個基本單位,擁有一個完整的虛擬空間地址,并不依賴線程而獨立存在。
多線程的優(yōu)點如下:
無須跨進(jìn)程邊界;程序邏輯和控制方式簡單;所有線程可以直接共享內(nèi)存和變量等;線程方式消耗的總資源比進(jìn)程方式少。
多線程的缺點如下:
每個線程與主程序共用地址空間,受限于2GB地址空間;線程之間的同步和加鎖控制比較麻煩;一個線程的崩潰可能影響到整個程序的穩(wěn)定性;到達(dá)一定的線程數(shù)后,即使再增加CPU也無法提高性能,例如WindowsServer2003,大約1500個線程就快到極限了(線程堆棧設(shè)定為1M),如果設(shè)定線程堆棧為2M,還達(dá)不到1500個線程;線程能夠提高的總性能有限,而且線程多了之后,線程本身的調(diào)度也很煩瑣,需要消耗較多的CPU。
多進(jìn)程的優(yōu)點如下:
每個進(jìn)程互相獨立,不影響主程序的穩(wěn)定性,子進(jìn)程崩潰也沒關(guān)系;通過增加CPU,就可以擴(kuò)充性能;可以盡量減少線程加鎖/解鎖的影響,即使線程運行的模塊算法效率低,也可極大提高性能;每個子進(jìn)程都有2GB地址空間和相關(guān)資源,總體能夠達(dá)到的性能上限非常大。
多線程的缺點如下:
邏輯控制復(fù)雜,需要和主程序交互;需要跨進(jìn)程邊界,如果有大數(shù)據(jù)量傳送,就不太適用,適用于小數(shù)據(jù)量傳送、密集運算、多進(jìn)程調(diào)度開銷比較大的情況;最好是多進(jìn)程和多線程結(jié)合,即根據(jù)實際需要,每個CPU開啟一個子進(jìn)程,這個子進(jìn)程再開啟多線程,就可以對若干同類型的數(shù)據(jù)進(jìn)行處理。當(dāng)然,也可以利用多線程+多CPU+輪詢方式來解決問題。
方法和手段是多樣的,關(guān)鍵是實現(xiàn)方便又能夠滿足要求,代價也合適。[考點]進(jìn)程與線程
24.
請簡要介紹Windows內(nèi)存管理的機(jī)制。正確答案:內(nèi)存管理是指軟件運行時對計算機(jī)內(nèi)存資源進(jìn)行分配和使用的技術(shù),其最主要目的是高效、快速地分配,并且在適當(dāng)?shù)臅r候釋放和回收內(nèi)存資源。
在講解Windows內(nèi)存管理前,首先介紹幾個基本的概念,它們是物理內(nèi)存、虛擬內(nèi)存。
物理內(nèi)存:即插在主板上的內(nèi)存條。它是固定的,內(nèi)存條的容量多大,物理內(nèi)存就有多大(集成顯卡系統(tǒng)除外)。但是需要注意的是,如果運行很多程序或者程序本身很大,就會導(dǎo)致占用大量的物理內(nèi)存,甚至導(dǎo)致物理內(nèi)存被消耗殆盡。
虛擬內(nèi)存:考慮到代碼必須在物理內(nèi)存中才能被運行,而現(xiàn)在的操作系統(tǒng)中運行著非常多的應(yīng)用程序,內(nèi)存中不一定能夠完全放下,所以,引出了虛擬內(nèi)存的概念。虛擬內(nèi)存指在硬盤上劃分一塊頁面文件,充當(dāng)內(nèi)存使用,而這塊內(nèi)存卻不是實實在在存在的。當(dāng)程序運行時,有一部分資源還沒有用上或者同時打開幾個程序卻只操作其中一個程序時,系統(tǒng)沒必要將程序所有的資源都塞在物理內(nèi)存中,于是,系統(tǒng)將這些暫時不用的資源放在虛擬內(nèi)存上,等到需要時再調(diào)出來使用,并把那些不常用的程序片斷放入虛擬內(nèi)存,當(dāng)需要用到它的時候再載入物理內(nèi)存中。
除了以上提及的這些內(nèi)容是內(nèi)存管理所需要做的事情以外,內(nèi)存管理還有另外一件事需要做,即計算程序片段在主存中的物理位置,以便CPU調(diào)度。對于Windows系統(tǒng)而言,其內(nèi)存管理主要包括頁式存儲管理、段式存儲管理和段頁式存儲管理等。以下將分別對其進(jìn)行講解。
頁式存儲管理:用戶程序的地址空間被劃分成若干固定大小的區(qū)域,稱為“頁”,相應(yīng)地,內(nèi)存空間分成若干個物理塊,頁和塊的大小相等??蓪⒂脩舫绦虻?/p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 分紅股合作合同范本
- 公司建材購銷合同范本
- 車輛運輸肉類合同范本
- 供貨合同范本范文
- 養(yǎng)殖股東協(xié)議合同范本
- 華為購車合同范本
- 區(qū)代理商合同范本
- 儲料倉合同范本
- 制作標(biāo)識標(biāo)牌合同范本
- 合理借款合同范例
- 動畫劇本創(chuàng)作課件
- 40篇英語短文搞定高考3500個單詞
- 【企業(yè)會計信息化存在的問題及解決對策開題報告】
- 痘痘肌膚的各種類型
- (完整版)設(shè)計管理
- 中國嚴(yán)重膿毒癥膿毒性休克治療指南2023年
- 材料性能學(xué)(第2版)付華課件0-緒論-材料性能學(xué)
- GB/T 3403.2-2013塑料粉狀脲-甲醛和脲/三聚氰胺-甲醛模塑料(UF-和UF/MF-PMCs)第2部分:試樣制備和性能測定
- GB/T 21835-2008焊接鋼管尺寸及單位長度重量
- 2023年湖南省普通高中學(xué)業(yè)水平考試數(shù)學(xué)版含答案
- 積極情緒的力量
評論
0/150
提交評論