面試準備——計算機原理基礎常見問題

一、TCP三次握手四次揮手

TCP連接的建立(三次握手)

最開始的時候客戶端和服務器都是處於CLOSED狀態。主動打開連接的爲客戶端,被動打開連接的是服務器

第一次握手:建立連接時,客戶端發送syn包(syn=x)到服務器,並進入SYN_SENT狀態,等待服務器確認;SYN:同步序列編號(Synchronize Sequence Numbers)。

第二次握手:服務器收到syn包,必須確認客戶的SYN(確認號是ack=x+1),同時自己也發送一個SYN包(初始化一個序列號syn=y),即SYN+ACK包,此時服務器進入SYN_RECV狀態;

第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=y+1),此包發送完畢,客戶端和服務器進入ESTABLISHED(TCP連接成功)狀態,完成三次握手。
在這裏插入圖片描述

TCP連接的釋放(四次揮手)

數據傳輸完畢後,雙方都可釋放連接。最開始的時候,客戶端和服務器都是處於ESTABLISHED狀態,然後客戶端主動關閉,服務器被動關閉

1)客戶端進程發出連接釋放報文,並且停止發送數據。釋放數據報文首部,FIN=1,其序列號爲seq=u(等於前面已經傳送過來的數據的最後一個字節的序號加1),此時,客戶端進入FIN-WAIT-1(終止等待1)狀態。 TCP規定,FIN報文段即使不攜帶數據,也要消耗一個序號。
2)服務器收到連接釋放報文,發出確認報文,ACK=1,ack=u+1,並且帶上自己的序列號seq=v,此時,服務端就進入了CLOSE-WAIT(關閉等待)狀態。TCP服務器通知高層的應用進程,客戶端向服務器的方向就釋放了,這時候處於半關閉狀態,即客戶端已經沒有數據要發送了,但是服務器若發送數據,客戶端依然要接受。這個狀態還要持續一段時間,也就是整個CLOSE-WAIT狀態持續的時間。
3)客戶端收到服務器的確認請求後,此時,客戶端就進入FIN-WAIT-2(終止等待2)狀態,等待服務器發送連接釋放報文(在這之前還需要接受服務器發送的最後的數據)。
4)服務器將最後的數據發送完畢後,就向客戶端發送連接釋放報文,FIN=1,ack=u+1,由於在半關閉狀態,服務器很可能又發送了一些數據,假定此時的序列號爲seq=w,此時,服務器就進入了LAST-ACK(最後確認)狀態,等待客戶端的確認。
5)客戶端收到服務器的連接釋放報文後,必鬚髮出確認,ACK=1,ack=w+1,而自己的序列號是seq=u+1,此時,客戶端就進入了TIME-WAIT(時間等待)狀態。注意此時TCP連接還沒有釋放,必須經過2∗∗MSL(最長報文段壽命)的時間後,當客戶端撤銷相應的TCB後,才進入CLOSED狀態。
6)服務器只要收到了客戶端發出的確認,立即進入CLOSED狀態。同樣,撤銷TCB後,就結束了這次的TCP連接。可以看到,服務器結束TCP連接的時間要比客戶端早一些。

爲什麼連接的時候是三次握手,關閉的時候卻是四次握手?

因爲當Server端收到Client端的SYN連接請求報文後,可以直接發送SYN+ACK報文。其中ACK報文是用來應答的,SYN報文是用來同步的。但是關閉連接時,當Server端收到FIN報文時,很可能並不會立即關閉SOCKET,所以只能先回復一個ACK報文,告訴Client端,“你發的FIN報文我收到了”。只有等到我Server端所有的報文都發送完了,我才能發送FIN報文,因此不能一起發送。故需要四步握手。
在這裏插入圖片描述
參考網址:
TCP的三次握手與四次揮手理解及面試題(很全面)
tcp 三次握手,四次揮手幾常見面試題

二、進程和線程的區別

根本區別:進程是操作系統資源分配的基本單位,而線程是任務調度和執行的基本單位。

在開銷方面:每個進程都有獨立的代碼和數據空間(程序上下文),程序之間的切換會有較大的開銷;線程可以看做輕量級的進程,同一類線程共享代碼和數據空間,每個線程都有自己獨立的運行棧和程序計數器(PC),線程之間切換的開銷小。

所處環境:在操作系統中能同時運行多個進程(程序);而在同一個進程(程序)中有多個線程同時執行(通過CPU調度,在每個時間片中只有一個線程執行)

內存分配方面:系統在運行的時候會爲每個進程分配不同的內存空間;而對線程而言,除了CPU外,系統不會爲線程分配內存(線程所使用的資源來自其所屬進程的資源),線程組之間只能共享資源。

包含關係:沒有線程的進程可以看做是單線程的,如果一個進程內有多個線程,則執行過程不是一條線的,而是多條線(線程)共同完成的;線程是進程的一部分,所以線程也被稱爲輕權進程或者輕量級進程。
多進程
進程是資源(CPU、內存等)分配的基本單位,它是程序執行時的一個實例。程序運行時系統就會創建一個進程,併爲它分配資源,然後把該進程放入進程就緒隊列,進程調度器選中它的時候就會爲它分配CPU時間,程序開始真正運行。
多線程
線程是程序執行時的最小單位,它是進程的一個執行流,是CPU調度和分派的基本單位,一個進程可以由很多個線程組成,線程間共享進程的所有資源,每個線程有自己的堆棧和局部變量。線程由CPU獨立調度執行,在多CPU環境下就允許多個線程同時運行。同樣多線程也可以實現併發操作,每個請求分配一個線程來處理。

線程的五種狀態
新建:剛剛創建出來,還沒start
就緒:調用start方法或睡醒或喚醒
運行:搶到CPU使用權
阻塞:調用sleep或wait方法
死亡:調用stop方法或任務正常執行完畢。

線程和進程各自有什麼區別和優劣呢?
進程有自己的獨立地址空間,每啓動一個進程,系統就會爲它分配地址空間,建立數據表來維護代碼段、堆棧段和數據段,這種操作非常昂貴,開銷大。而線程是共享進程中的數據的,使用相同的地址空間,因此CPU切換一個線程的花費遠比進程要小很多,同時創建一個線程的開銷也比進程要小很多。
線程之間的通信更方便,同一進程下的線程共享全局變量、靜態變量等數據,而進程之間的通信需要以通信的方式(IPC)進行。不過如何處理好同步與互斥是編寫多線程程序的難點。
但是多進程程序更健壯,多線程程序只要有一個線程死掉,整個進程也死掉了,而一個進程死掉並不會對另外一個進程造成影響,因爲進程有自己獨立的地址空間。

參考網址:
進程和線程的主要區別(總結)
進程和線程的區別

三、線程安全的機制

同步機制
兩個或兩個以上的線程在同時操作一個共享資源時仍然能得到正確的結果,則稱爲線程安全。
同步方法能夠保證同一時間只有一個線程執行方法體中的代碼。

參考網址:線程安全

四、常見的HTTP狀態碼有哪些?

200 OK

301 Moved Permanently 永久移除

302 Found

304 Not Modified

307 Temporary Redirect

400 Bad Request

401 Unauthorized

403 Forbidden

404 Not Found

410 Gone

500 Internal Server Error

501 Not Implemented

五、Post和get區別?

GET請求:請求的數據會附加在URL之後,以?分割URL和傳輸數據,多個參數用&連接。URL的編碼格式採用的是ASCII編碼,而不是uniclde,即是說所有的非ASCII字符都要編碼之後再傳輸。
POST請求:POST請求會把請求的數據放置在HTTP請求包的包體中。上面的item=bandsaw就是實際的傳輸數據。
因此,GET請求的數據會暴露在地址欄中,而POST請求則不會。

傳輸數據的大小
在HTTP規範中,沒有對URL的長度和傳輸的數據大小進行限制。但是在實際開發過程中,對於GET,特定的瀏覽器和服務器對URL的長度有限制。因此,在使用GET請求時,傳輸數據會受到URL長度的限制。
對於POST,由於不是URL傳值,理論上是不會受限制的,但是實際上各個服務器會規定對POST提交數據大小進行限制,Apache、IIS都有各自的配置。

安全性
POST的安全性比GET的高。這裏的安全是指真正的安全,而不同於上面GET提到的安全方法中的安全,上面提到的安全僅僅是不修改服務器的數據。比如,在進行登錄操作,通過GET請求,用戶名和密碼都會暴露在URL上,因爲登錄頁面有可能被瀏覽器緩存以及其他人查看瀏覽器的歷史記錄的原因,此時的用戶名和密碼就很容易被他人拿到了。除此之外,GET請求提交的數據還可能會造成Cross-site request frogery攻擊。

六、什麼是關聯查詢,有哪些?

將多個表聯合起來進行查詢,主要有內連接、左連接、右連接、全連接(外連接)。

七、OSI七層協議和TCP四層協議

OSI七層協議:

(速記:物數網傳會表應)
從下到上分別爲:
物理層:是參考模型的最低層。該層是網絡通信的數據傳輸介質,由連接不同結點的電纜與設備共同構成。主要跟功能是:利用傳輸介質爲數據鏈路層提供物理連接,負責處理數據傳輸並監控數據出錯率,以便數據流的透明傳輸。這一層的數據是比特。 協議:IEEE802等。
數據鏈路層:四參考模型的第二層。主要功能是:在物理層提供的服務基礎上,在通信的實體間建立數據鏈路連接,傳輸以“幀”爲單位的數據包,並採用差錯控制與流量控制方法,使有差錯的物理線路變成無差錯的數據鏈路。這一層通常還提供錯誤檢測和糾正,以確保數據的可靠傳輸。協議:ARP等。
網絡層:是參考模型的第三層。主要功能是:爲數據在節點之間傳輸創建邏輯鏈路,通過路由選擇算法爲分組通過通信子網選擇最適當的路徑,以及實現擁塞控制、網絡互連等功能。協議:IP
傳輸層:是參考模型的第四層。主要功能是:向用戶提供可靠地端到端服務,處理數據包錯誤、數據包次序,以及其他一些關鍵傳輸問題。傳輸層向高層屏蔽了下層數據通信的細節。因此,它是計算機通信體系結構中關鍵的一層。本層協議有:傳輸控制協議TCP(數據傳輸的單位是報文段)和用戶數據報協議UDP(數據傳輸的單位是用戶數據報)。
會話層:是參考模型的第五層。主要功能是:負責維擴兩個結點之間的傳輸連接,以便確保點到點傳輸不中斷,以及管理數據交換等功能。
表示層:是參考模型的第六層。主要功能是:用於處理在兩個通信系統中交換信息的表示方法,主要包括數據格式變換、數據加密與解密、數據壓縮與恢復等功能。
應用層:是參考模型的最高層。主要功能是:爲應用軟件提供了很多服務,比如文件服務器、數據庫服務、電子郵件與其他網絡軟件服務。直接爲用戶的應用進程提供服務,如 HTTPFTP協議等。

TCP/IP四層協議

應用層(對應OSI的應用層、表示層、會話層)、運輸層、網絡層、網絡接口層(對應OSI的數據鏈路層、物理層)

擴展
HTTPS,是以安全爲目標的 HTTP 通道,在HTTP的基礎上通過傳輸加密和身份認證保證了傳輸過程的安全性 。HTTPS 在HTTP 的基礎下加入SSL(Secure Sockets Layer 安全套接層),HTTPS 的安全基礎是 SSL,因此加密的詳細內容就需要 SSL。
SSL協議工作在應用層與傳輸層之間。

八、對分佈式的瞭解

Hadoop
Hive
MapReduce
Spark

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章