網易遊戲基礎架構工程師(SRE) 面經

  • 用過的Linux系統
    Kali
    Kali Linux是基於Debian的Linux發行版, 設計用於數字取證操作系統。Kali Linux預裝了許多滲透測試軟件,Metasploit,Wireshark ,BeEF,Hydra等。
    CentOS
    CentOS(Community Enterprise Operating System,中文意思是社區企業操作系統)是Linux發行版之一,它是來自於Red Hat Enterprise Linux依照開放源代碼規定釋出的源代碼所編譯而成。由於出自同樣的源代碼,因此有些要求高度穩定性的服務器以CentOS替代商業版的Red Hat Enterprise Linux使用。兩者的不同,在於CentOS完全開源。
    Deepin
    Deepin操作系統是由武漢深之度科技有限公司開發的Linux發行版。Deepin操作系統是一個基於Debian的Linux操作系統,專注於使用者對日常辦公、學習、生活和娛樂的操作體驗的極致,適合筆記本、桌面計算機和一體機。包含了所有需要的應用程序,網頁瀏覽器、幻燈片演示、文檔編輯、電子表格、娛樂、聲音和圖片處理軟件,即時通訊軟件等等。Deepin 的歷史可以追溯到 2004年,其前身 Hiweed Linux 是中國第一個基於 Debian的本地化衍生版,並提供輕量級的可用LiveCD,旨在創造一個全新的簡單、易用、美觀的 Linux 發行版。
  • 熟知的Linux命令
    常用的50個Linux命令
  • netstat有哪些信息
    netstat命令是一個監控TCP/IP網絡的非常有用的工具,它可以顯示路由表、實際的網絡連接以及每一個網絡接口設備的狀態信息。從整體上看,netstat的輸出結果可以分爲兩個部分,一個是Active Internet connections,稱爲有源TCP連接,另一個是Active UNIX domain sockets,稱爲有源Unix域套接口。輸出結果中,第一部分有5個輸出結果,顯示有源TCP連接的情況,而第二部分的輸出結果顯示的是Unix域套接口的連接情況。Proto顯示連接使用的協議;RefCnt表示連接到本套接口上的進程號;Types顯示套接口的類型;State顯示套接口當前的狀態;Path表示連接到套接口的其它進程使用的路徑名。
    在這裏插入圖片描述
  • netstat怎麼查看UDP和TCP連接
    查看TCP連接:netstat -nt
    在這裏插入圖片描述
    查看UDP連接:netstat -nua
    查看UDP和TCP連接:netstat -a
    在這裏插入圖片描述
  • free命令有哪些信息
    在這裏插入圖片描述
    free命令詳解
參數 釋義
total 內存總數,物理內存總數
used 已經使用的內存數
free 空閒的內存數
shared 多個進程共享的內存總數
buffers Buffer 緩存內存數
cached Page 緩存內存數
-buffers/cache 應用使用內存數
+buffers/cache 應用可用內存數
Swap 交換分區,虛擬內存

第一部分Mem行:
total 內存總數: 972M
used 已經使用的內存數: 135M
free 空閒的內存數: 694M
shared 當前已經廢棄不用,總是7M
對操作系統來講是Mem的參數,buffers/cached 都是屬於被使用,所以它認爲free只有93M。
我們通過free命令查看機器空閒內存時,會發現free的值很小。這主要是因爲,在Linux系統中有這麼一種思想,內存不用白不用,因此它儘可能的cache和buffer一些數據,以方便下次使用。但實際上這些內存也是可以立刻拿來使用的。
第二部分(-/+ buffers/cache):
(-buffers/cache) used內存數:135M (指的第一部分Mem行中的used – buffers – cached)
(+buffers/cache) free內存數: 694M(指的第一部分Mem行中的free + buffers + cached)
可見-buffers/cache反映的是被程序實實在在吃掉的內存,而+buffers/cache反映的是可以挪用的內存總數.
對應用程序來講是(-/+ buffers/cach).buffers/cached 是等同可用的,因爲buffer/cached是爲了提高程序執行的性能,當程序使用內存時,buffer/cached會很快地被使用。

  • 怎麼查看系統有哪些進程
    Windows:任務管理器
    在這裏插入圖片描述
    Linux:top命令
    在這裏插入圖片描述
  • top命令有什麼信息
    top顯示的信息
  • 軟鏈接瞭解嗎
    軟鏈接又叫符號鏈接,這個文件包含了另一個文件的路徑名。可以是任意文件或目錄,可以鏈接不同文件系統的文件。
    鏈接文件甚至可以鏈接不存在的文件,這就產生一般稱之爲”斷鏈”的現象,鏈接文件甚至可以循環鏈接自己。類似於編程語言中的遞歸。
    軟鏈接文件只是其源文件的一個標記,當刪除了源文件後,鏈接文件不能獨立存在,雖然仍保留文件名,但卻不能查看軟鏈接文件的內容了。
  • 一般什麼場景用軟鏈接
    ①修改path變量,指向軟連接jdk1.8和hadoop
vi /etc/profile

②生效配置修改

source /etc/profile

③檢查配置是否修改成功

java -version
javac -version
hadoop version
  • 軟鏈接和硬鏈接的區別
    ①定義不同
    軟鏈接又叫符號鏈接,這個文件包含了另一個文件的路徑名。可以是任意文件或目錄,可以鏈接不同文件系統的文件。
    硬鏈接就是一個文件的一個或多個文件名。把文件名和計算機文件系統使用的節點號鏈接起來。因此我們可以用多個文件名與同一個文件進行鏈接,這些文件名可以在同一目錄或不同目錄。
    ②限制不同
    硬鏈接只能對已存在的文件進行創建,不能交叉文件系統進行硬鏈接的創建;
    軟鏈接可對不存在的文件或目錄創建軟鏈接;可交叉文件系統;
    ③創建方式不同
    硬鏈接不能對目錄進行創建,只可對文件創建;
    軟鏈接可對文件或目錄創建;
    ④影響不同
    刪除一個硬鏈接文件並不影響其他有相同 inode 號的文件。
    刪除軟鏈接並不影響被指向的文件,但若被指向的原文件被刪除,則相關軟連接被稱爲死鏈接(即 dangling link,若被指向路徑文件被重新創建,死鏈接可恢復爲正常的軟鏈接)。

  • 你配置過Linux網絡嗎
    Linux網絡配置(博主博客)

  • 交換機和路由器的區別
    兩者都是連接互聯網的設備,它們之間主要區別就是,交換機發生在網絡的第二層數據鏈路層,而路由器發生在第三層網絡層。這個區別是兩者各自工作方式的根本區別。路由器可以根據IP地址尋找下一個設備,可以處理TCPIP協議,而上一篇我們講過交換機是根據MAC地址尋址的。
    交換機是分配網絡數據,路由器可以給網絡分配IP地址,分配給你地址而且可以隨時通過地址過來找到你。
    路由器可以在不同時間內把一個IP分配給多臺主機使用。交換機是通過MAC地址和識別各個不同的主機。

  • 一個進程的cpu使用率會超過100%嗎
    會。

  • 進程和線程的區別
    線程和進程的區別:①調度的基本單位:傳統OS中進程是作爲獨立調度和分派的基本單位,因而進程是能獨立運行的基本單位,在引入線程的OS中線程作爲調度和分派的基本單位,因而線程是能獨立運行的基本單位②併發性:在引入線程的OS中進程,線程進程都可併發執行③擁有資源:進程可以擁有資源並作爲系統中擁有資源的一個基本單位,線程本身並不擁有系統資源,而是僅有一點必不可少的能保證獨立運行的資源④獨立性:在同一進程中的不同線程之間的獨立性要比不同進程之間的獨立性低得多⑤系統開銷:在創建或撤銷進程時OS所付出的開銷比線程的大得多⑥支持多處理機系統:傳統進程即單線程進程只能運行在一個處理機上,多線程進程可以將一個進程的多個線程分配到多個處理機上.

  • Linux進程和線程有上限嗎
    ①linux系統支持的最大進程數
    限制1:既然系統使用pid_t表示進程號,那麼最大進程數不能超過pid_t類型的最大值。
    限制2:使用命令ulimit -u查看系統中限制的最大進程數,我的機器上是65535。/etc/security/limits.conf裏面是硬限制,ulimit -u是軟限制,內核參數kernel.pid_max也做了限制。
    限制3:受系統資源限制,創建一個新進程會消耗系統資源,最主要的就是內存,有人做過測試,在創建6千多個進程時,程序運行得很慢,通過vmstat命令觀察,發現swap內存的置入置出很頻繁,可以判斷是由於內存不足,使用虛擬內存,導致頻繁的IO操作,讓測試代碼變得很慢,所以創建過多進程時,系統的內存是重要衡量的一個方面。
    ⑥單進程最大線程數
    linux 系統中單個進程的最大線程數有其最大的限制 PTHREAD_THREADS_MAX,這個限制可以在 /usr/include/bits/local_lim.h 中查看,對 linuxthreads 這個值一般是 1024,對於 nptl 則沒有硬性的限制,僅僅受限於系統的資源, 這個系統的資源主要就是線程的 stack 所佔用的內存,用 ulimit -s 可以查看默認的線程棧大小,一般情況下,這個值是 8M。

  • TCP有哪些連接狀態
    TCP連接的狀態

  • 講一下三次握手
    TCP三次握手四次揮手(博主博客)

  • 三次握手最後一次丟包會發生什麼
    如果最後一個「ACK」包丟了,服務端因爲收不到「ACK」會走重傳機制,而客戶端此時進入 ESTABLISHED 狀態。

多數情況下,客戶端進入 ESTABLISHED 狀態後,則認爲連接已建立,會立即發送數據。但是服務端因爲沒有收到最後一個「ACK」包,依然處於 SYN-RCVD 狀態。
那麼這裏的關鍵,就在於服務端在處於 SYN-RCVD 狀態下,收到客戶端的數據包後如何處理?
這也是比較有爭議的地方,有些資料裏會寫到當服務端處於 SYN-RCVD 狀態下,收到客戶端的數據包後,會直接回復 RTS 包響應,表示服務端錯誤,並進入 CLOSE 狀態。
但是這樣的設定有些過於嚴格,試想一下,服務端還在通過三次握手階段確定對方是否真實存在,此時對方的數據已經發來了,那肯定是存在的。
所以當服務端處於 SYN-RCVD 狀態下時,接收到客戶端真實發送來的數據包時,會認爲連接已建立,並進入 ESTABLISHED 狀態。
實踐出真知,具體測試流程可以參考這篇文章:https://blog.csdn.net/zerooffdate/article/details/79359726
那麼實際情況,爲什麼會這樣呢?
當客戶端在 ESTABLISHED 狀態下,開始發送數據包時,會攜帶上一個「ACK」的確認序號,所以哪怕客戶端響應的「ACK」包丟了,服務端在收到這個數據包時,能夠通過包內 ACK 的確認序號,正常進入 ESTABLISHED 狀態。
TCP三次握手的異常情況

  • 服務器有大量TIME_WAIT是什麼原因
    我們首先要弄清楚TIME_WAIT狀態是什麼?TIME_WAIT狀態是主動關閉TCP連接的一方(即先發起FIN包的一方),在發送完最後一個ACK包後進入的狀態。系統需要在TIME_WAIT狀態下等待2MSL(maximum segment lifetime )後才能釋放連接(端口)。根據RFC 793 MSL是2分鐘,一般的TCP實現有30秒、1分鐘和2分鐘不等。進入TIME_WAIT狀態等待2MSL主要有兩個目的:一方面是主動關閉連接的一方在對方沒有收到最後一個ACK包時(這時對方還會重發FIN,收到兩個FIN的時間間隔一定小於2MSL)有時間可以重發ACK包,另一方面處於TIME_WAIT的連接(IP和端口組合)不能重用,這樣可以保證被重新分配的socket不會受到之前殘留的延遲重發報文影響。
    由於主動關閉TCP連接的一方纔會進入TIME_WAIT狀態,一般情況服務器端不會出現TIME_WAIT狀態,因爲大多數情況都是客戶端主動發起連接並主動關閉連接。但是某些服務如pop/smtp、ftp卻是服務端收到客戶端的QUIT命令後主動關閉連接,這就造成這類服務器上容易出現大量的TIME_WAIT狀態的連接,而且併發量越大處於此種狀態的連接越多。另外,對於被動關閉連接的服務在主動關閉客戶端非法請求或清理長時間不活動的連接時(這種情況很可能是客戶端程序忘記關閉連接)也會出現TIME_WAIT的狀態。
  • 怎麼優化上面這種情況
    服務器出現大量TIME_WAIT的解決辦法
  • shell和python有了解嗎
    有。
  • shell腳本怎麼查看上一條命令執行的結果
    通過 $? 獲取上一次命令執行的結果,0表示成功,非0表示失敗。
test -e /mnt/111
if [ $? -eq 0 ]; then
cd /mnt/111
echo "I come here"
else
mkdir /mnt/111
echo "It's created"
fi

也可以先將結果賦給一個變量 ret=echo $?,然後再判斷變量的值是否爲0。

  • shell腳本怎麼查看上一個進程的ID
    運行腳本或者程序後,使用echo $! 就可以得出剛運行進程的PID。
    shell獲取進程ID的方法

  • 怎麼調試shell腳本
    shell腳本調試
    ①直接調試
    ②使用shell腳本調試命令調試
    ③使用Linux系統命令調試

  • shell腳本重定向實現方式
    shell如何在腳本中重定向

  • 瞭解哪些文本處理命令
    常用文本處理命令

  • 怎麼使用awk輸出文本中每一行的最後一個字段,用空格分割,每行列數不定

awk '{print $NF}' 文件名

awk的使用

發佈了75 篇原創文章 · 獲贊 16 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章