十二條Linux運維面試必備經典筆試/面試題,來挑戰一下吧!
又到了一年一度的秋招,作為運維方向,看了一些面經,收集了一些筆試面試題,總結了一下,貼出來僅供參考,有錯誤的地方還請指出。
1.Linux設置環境變量
暫時的:export MYNAME=”new name”
echo $MYNAME
new name
永久的:通過改變/etc/profile實現
EG: export CLASSPATH=./java_HOME/lib;$JAVA_HOME/jre/lib
更改文件后執行 source /etc/profile
2.TCP連接的特點
(1)面向連接:采用C/S模型
(2)全雙工
(3)安全可靠:
①流量控制:解決接收方不能不及時處理數據的問題
②擁塞控制:解決因網絡通信延遲帶來的數據丟失問題
③差錯控制:解決數據被破壞、重復、時序和丟失的問題
(4)基于字節流
3.為什么TCP連接需要三次握手,兩次不可以嗎?為什么?
兩次不可以
三次握手連接過程
(1)建立連接時,客戶端發送SYN(SYN=j)包到服務器,并進入SYN_SEND狀態,等待服務器響應、、確認
(2)服務器收到SYN包,必須確認客戶端的SYN(ACK=j+1),同時自己也發送一個SYN包,即SYN+ACK包此時服務器進入SYN_RECV狀態
(3)客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢客戶端和服務器端進入ESTABLISHED狀態,完成三次握手
為了保證服務端能收到客戶端的信息并能做出正確的響應而進行前兩次握手,為了保證客戶端能夠收到服務端的信息并能做出正確的響應而進行后兩次響應
4、代理的實現原理
代理服務器有很多種,大體分為三類:HTTP、FTP、SOCKS,其中又分為透明代理和不透明代理,透明代理一般是網關,為硬件
過程:
(1)客戶端先和代理服務器通訊,建立TCP連接,目的IP是代理服務器的IP
(2)客戶端發出GET命令,GET命令中包含URL或IP地址、明文
(3)代理服務器將其中的URL轉換為IP地址,可能會有DNS,將源數據包中的數據拷貝下來,去掉URL,重新組包再發出去
(4)代理服務器和真實服務器通訊,源IP是代理服務器的IP
5、TCP和UDP分別有什么優缺點
TCP:
優點:可靠、穩定
TCP的可靠體現在TCP在傳輸數據之前,會有三次握手來建立連接,而且在數據傳遞時,有確認、窗口、重傳、擁塞控制機制,在數據傳完之后,還會斷開連接用來節約系統資源
缺點:慢,效率低,占用系統資源高,易被攻擊
在傳遞數據之前要先建立連接,這會消耗時間,而且在數據傳遞時,確認機制、重傳機制、擁塞機制等都會消耗大量時間,而且要在每臺設備上維護所有的傳輸連接。然而,每個鏈接都會占用系統的CPU、內存等硬件資源。因為TCP有確認機制、三次握手機制,這些也導致TCP容易被利用,實現DOS、DDOS、CC等攻擊
UDP:
優點:快,比TCP稍安全
UDPm沒有TCP擁有的各種機制,是一個無狀態的傳輸協議,所以傳遞數據非常快,沒有TCP的這些機制,被攻擊利用的機制就少一些,但是也無法避免被攻擊
缺點:不可靠,不穩定
因為沒有TCP的那些機制,UDP在傳輸數據時,如果網絡質量不好,就會很容易丟包,造成數據的缺失
適用場景:
TCP:當對網絡通訊質量有要求時,比如HTTP、HTTPS、FTP等傳輸文件的協議, POP、SMTP等郵件傳輸的協議
UDP:對網絡通訊質量要求不高時,要求網絡通訊速度要快的場景
6、面向對象和面向過程的區別
面向過程就是分析出解決問題所需要的步驟,然后用函數把這些步驟一步一步實現,使用的時候一個一個依次調用就行。
面向對象是把構成問題事物分解成各個對象,建立對象的目的不是為了完成一個步驟,而是為了描述某個事物在整個解決問題的步驟中的行為。面向對象是以功能來劃分問題,而不是步驟
7、HTTP請求的過程與原理
HTTP是一種無狀態的,指的是協議對于事務處理沒有記憶能力,服務器不知道客戶端是什么狀態。也就是說,打開一個服務器上的網頁和你之前打開這個服務器上的網頁之間沒有任何聯系。HTTP遵循請求/應答模型
(1)建立TCP連接
(2)Web瀏覽器向Web服務器發送請求命令
(3)Web瀏覽器發送請求頭信息
(4)Web服務器應答
(5)Web服務器發送應答頭信息
(6)Web服務器向瀏覽器發送數據
(7)Web服務器關閉TCP連接
HTTP的長連接與短連接:
在HTTP/1.0中,默認使用的是短連接。也就是說,瀏覽器和服務器每進行一次HTTP操作,就建立一次連接,但任務結束就中斷連接,在服務端不保留連接的有關信息。
從 HTTP/1.1起,默認使用長連接,用以保持連接特性。使用長連接的HTTP協議,會在響應頭有加入這行代碼:
Connection:keep-alive
在使用長連接的情況下,當一個網頁打開完成后,客戶端和服務器之間用于傳輸HTTP數據的 TCP連接不會關閉,如果客戶端再次訪問這個服務器上的網頁,會繼續使用這一條已經建立的連接。Keep-Alive不會永久保持連接,它有一個保持時間,可以在不同的服務器軟件(如Apache)中設定這個時間。實現長連接要客戶端和服務端都支持長連接。
HTTP協議的長連接和短連接,實質上是TCP協議的長連接和短連接。
長連接短連接操作過程
短連接的操作步驟:
建立連接----數據傳輸-----關閉連接。。。建立連接-----數據傳輸----關閉連接
長連接的操作步驟:
建立連接---數據傳輸。。(保持連接)。。數據傳輸---關閉連接
長連接和短連接的優點和缺點
長連接可以省去較多的TCP建立和關閉的操作,減少浪費,節約時間。對于頻繁請求資源的客戶來說,較適用長連接。但是會存在一個問題,隨著客戶端連接越來越多,server早晚有扛不住的時候,這時候server端需要采取一些策略,如關閉一些長時間沒有讀寫事件發生的連接,這樣可以避免一些惡意連接導致server端服務受損;如果條件再允許就可以以客戶端機器為顆粒度,限制每個客戶端的最大長連接數,這樣可以完全避免某一個客戶端連累后端服務。
短連接對于服務器來說管理較為簡單,存在的連接都是有用的連接,不需要額外的控制手段。但如果客戶請求頻繁,將在TCP的建立和關閉操作上浪費時間和帶寬。
HTTP報文格式:
請求消息格式:
-
請求行
-
頭部行
-
附屬行
響應消息格式:
-
狀態行
-
頭部行
8、常見HTTP狀態碼
成功的狀態碼(基本以2開頭):這一類型的狀態碼,代表請求已成功被服務器接收、理解、并接受
200--請求已成功,請求所希望的響應頭或數據體將隨此響應返回
202--服務器已接受請求,但尚未處理
205--服務器成功處理了請求,且沒有返回任何內容
內容被重定向(基本以3開頭):需要客戶端采取進一步的操作才能完成請求
301--被請求的資源已永久移動到新位置
302--請求的資源臨時從不同的 URI響應請求
303--對應當前請求的響應可以在另一個 URI 上被找到,而且客戶端應當采用 GET 的方式訪問那個資源
305--被請求的資源必須通過指定的代理才能被訪問
307--請求的資源臨時從不同的URI 響應請求
請求失敗的狀態碼(基本以4開頭):
400--語義有誤,當前請求無法被服務器理解。除非進行修改,否則客戶端不應該重復提交這個請求或者請求參數有誤
401--當前請求需要用戶驗證
403--服務器已經理解請求,但是拒絕執行
404--請求的網頁不存在
405--請求行中指定的請求方法不能被用于請求相應的資源
408--請求超時
服務器端的錯誤(基本以5開頭):了服務器在處理請求的過程中有錯誤或者異常狀態發生
500--服務器內部錯誤
503--服務器暫時不可用
9、什么是死鎖
進程死鎖,它是操作系統或系統軟件運行的一種狀態:在多任務系統下,當一個或多個進程等待系統資源,而資源又被進程本身或其他進程占用時,就形成了死鎖
產生死鎖的原因:
①系統資源不足
②進程運行推進的順序不合適
③資源分配不當等
產生死鎖的四個必要條件:
①互斥條件:一個資源每次只能被一個進程使用
②請求與保持條件:一個進程因請求資源而阻塞時,對已獲得的資源保持不放
③不剝奪條件:進程已獲得的資源,在未使用完之前,不能強行剝奪
④循環等待條件:若干進程之間形成一種頭尾相連的循環等待資源關系
避免死鎖的方法:
①有序的資源分配法
②銀行家算法
解決死鎖:
①進行系統的重新啟動(最簡單粗暴)
②撤銷進程,剝奪資源
銀行家算法
銀行家算法是一種最有代表性的避免死鎖的算法
我們可以把操作系統看作是銀行家,操作系統管理的資源相當于銀行家管理的資金,進程向操作系統請求分配資源相當于用戶向銀行家貸款。操作系統按照銀行家制定的規則為進程分配資源,當進程首次申請資源時,要測試該進程對資源的最大需求量,如果系統現存的資源可以滿足它的最大需求量則按當前的申請量分配資源,否則就推遲分配。當進程在執行中繼續申請資源時,先測試該進程已占用的資源數與本次申請的資源數之和是否超過了該進程對資源的最大需求量。若超過則拒絕分配資源,若沒有超過則再測試系統現存的資源能否滿足該進程尚需的最大資源量,若能滿足則按當前的申請量分配資源,否則也要推遲分配。
10、close_wait
在被動關閉連接的情況下,在已經接收到FIN,但是還沒有發送自己FIN的時刻,連接處于close_wait狀態。通常來講,close_wait狀態持續的時間應該很短,如SYN_RECV狀態,但是在一些特殊情況下,就會出現連接長時間處于close_wait狀態的情況。出現大量close_wait的現象,主要原因是某種情況下對方關閉了socket連接,但是我方忙于讀或者寫。沒有關閉連接,代碼需要判斷socket,一旦讀到0,斷開連接,read返回負,檢查一下errno,如果不是AGAIN,就斷開連接。
11、time_wait
主動關閉的socket端會進入此狀態,并且持續2MSL(最大分節生命期)時間長度,這是一個IP數據包能在互聯網上生存的最長時間,超過這個時間將在網絡消失。
作用:
a:可靠的實現TCP全雙工連接的終止
b:允許老的重復分節在網絡中消失
12、進程間通信機制
管道、消息隊列、共享內存(速度最快)、信號量、文件映射、匿名/命名管道