哎臥槽,,終於知道如何用代碼號排版了!準備運維工程師面試,固然得很全面了,網絡+MYSQL+linux+OS,找一些有水準的題目練練,分析深入點。html
特麼的哪家公司會是我人生的第一家落腳地,反正勞資不將就,不甘心!前端
一、TCP爲何要進行三次握手?(考的頻率不是一點把點啊,命中率80%)node
答:主要是爲了防止已失效的鏈接請求報文段忽然又傳到了服務端,於是產生錯誤。mysql
分析:原本TCP鏈接已經斷開,可是因爲以前一個數據包在鏈接創建的過程當中,因爲網絡延遲問題遲遲沒有到達,當該失效報文到達服務端的時候,服務端又會認爲客戶端想要創建新的TCP鏈接,因而便會進行確認贊成創建鏈接,假如是2次握手,那麼鏈接創建成功,服務端就會一直等待客戶端傳輸數據,致使服務端浪費資源。linux
二、若是第三個ACK報文丟失了,會發生什麼狀況?(這算是比較不容易想到的了,命中率50%)ios
答:當客戶端收到服務端的SYN+ACK應答後,其狀態變爲ESTABLISHED,並會發送ACK包給服務端,準備發送數據了。若是此時ACK在網絡中丟失,過了超時計時器後,那麼Server端會從新發送SYN+ACK包,重傳次數根據/proc/sys/net/ipv4/tcp_synack_retries來指定,默認是5次。若是重傳指定次數到了後,仍然未收到ACK應答,那麼一段時間後,Server自動關閉這個鏈接。可是Client認爲這個鏈接已經創建,若是Client端向Server寫數據,Server端將以RST包響應,方能感知到Server的錯誤。web
三、TCP鏈接的時候,服務端在什麼狀況下會發送RST包?(這就是真的難了,沒學習過的不可能知道,命中率20%)面試
答:通常是發生錯誤,纔會發送RST包。(1)對方端口未打開sql
(2)TCP鏈接被終止(就是前面說的ACK包丟失,重傳次數到了,就要自動關閉)shell
(3)請求超時
(4)在一個已關閉的 socket 上收到數據
四、TCP和UDP區別(面試官最最最喜歡考的就是這個了,命中率高達90%)
答:(1)TCP稱爲傳輸控制協議,UDP稱爲用戶數據包協議,TCP是面向字節流的,而UDP是報文段
(2)TCP是經過三次握手以及序列號、重傳機制面向鏈接,從而保證可靠傳輸,而UDP沒有這些手段,只是將數據報簡單投遞給網絡層就算完成任務了,因此它是不可靠的。
(3)正由於TCP複雜的功能手段例如擁塞控制和流量控制,UDP跟他比起來,UDP系統開銷大大減少
(4)從數據包的格式來講,TCP不加填充選項的時候首部是20字節,而UDP固定首部8字節。同時,TCP具備很是複雜的報文格式,而UDP很簡單,好比源端口目的端口校驗和以及數據總長度
(5)TCP適合路由信息報文以及普通數據包的這樣的相似流量,而UDP適合傳輸大的流量,好比VOIP流量,視頻流量。
五、tcp爲何是可靠傳輸的?(這題也喜歡啊,網絡就考TCP協議和HTTP協議,變態一點出一個SSL協議, 讓你懵逼,命中率60%)
答:(1)自己面向鏈接的三次握手機制(2)序列號保證它無重複無遺漏。重傳機制用來對客戶端進行反饋,表示我已經收到你的信息了(3)TCP校驗和字段,若是在傳輸過程有錯誤,那麼到達目的端,進行校驗碼比對,就知道有無錯誤了
六、四次揮手釋放鏈接時,等待2MSL的意義?(四次揮手不常考,但考到不容易回答的漂亮,命中率30%)
第一,爲了保證A發送的最後一個ACK報文段可以到達B。這個ACK報文段有可能丟失,於是使處在LAST-ACK狀態的B收不到對已發送的FIN和ACK報文段的確認。B會超時重傳這個FIN和ACK報文段,而A就能在2MSL時間內收到這個重傳的ACK+FIN報文段。接着A重傳一次確認。
第二,就是防止上面提到的已失效的鏈接請求報文段出如今本鏈接中,A在發送完最後一個ACK報文段後,再通過2MSL,就可使本鏈接持續的時間內所產生的全部報文段都從網絡中消失。
七、網站打開太慢的緣由分析?(中檔題,命中率60%)
答:(1)網絡問題:ping、dig命令測試客戶機和服務端網絡狀況以及DNS解析問題,若是DNS能解析可是很慢的話,使用CDN
(2)前端問題:瀏覽器落後,頁面設計不佳
(3)服務端問題:(a)檢查系統負載、CPU、內存、網絡以及磁盤狀況。(b)PHP響應慢,依據資源狀況對FastCGI配置合適的參數(c)MySQL響應慢,SQL代碼效率低下,讀取慢,查詢慢查詢日誌,show processlist 查看當前數據庫狀態,看哪些請求停留較多,磁盤IO率太大,my.cnf配置文件優化不夠好(d)被***,
webserver進程數受限,甚至內網流量太高等緣由
參考文檔:http://www.wtoutiao.com/p/1a4rCZ2.html
八、tcp三次握手的過程當中,accept發生在三次握手哪一個階段?(騰訊題目)
答:accept發生在三次握手以後,accept只是把內核中的已完成鏈接隊列取出。
## connect纔是發生在三次握手階段,另外一個隊列是「未完成鏈接隊列,而且這兩個隊列總和的最大值是backlog
九、經常使用的HTTP方法有哪些?
GET: 用於請求訪問已經被URI(統一資源標識符)識別的資源,能夠經過URL傳參給服務器
POST:用於傳輸信息給服務器,主要功能與GET方法相似,但通常推薦使用POST方式。
PUT: 傳輸文件,報文主體中包含文件內容,保存到對應URI位置。
HEAD: 得到報文首部,與GET方法相似,只是不返回報文主體,通常用於驗證URI是否有效。
DELETE:刪除文件,與PUT方法相反,刪除對應URI位置的文件。
OPTIONS:查詢相應URI支持的HTTP方法。
TRACE:遠程診斷服務器
十、GET方法與POST方法的區別
區別一:
get重點在從服務器上獲取資源,post重點在向服務器發送數據;
區別二:
get傳輸數據是經過URL請求,以field(字段)= value的形式,置於URL後,並用"?"鏈接,多個請求數據間用"&"鏈接,如http://127.0.0.1/Test/login.action?name=admin&password=admin,這個過程用戶是可見的;
post傳輸數據經過Http的post機制,將字段與對應值封存在請求實體中發送給服務器,這個過程對用戶是不可見的;
區別三:
Get傳輸的數據量小,由於受URL長度限制,但效率較高;
Post能夠傳輸大量數據,因此上傳文件時只能用Post方式;
區別四:
get是不安全的,由於URL是可見的,可能會泄露私密信息,如密碼等;
post較get安全性較高;
區別五:
get方式只能支持ASCII字符,向服務器傳的中文字符可能會亂碼。
post支持標準字符集,能夠正確傳遞中文字符。
十一、HTTP請求報文與響應報文格式
請求報文包含三部分:
a、請求行:包含請求方法、URI、HTTP版本信息
b、請求首部字段
c、請求內容實體
響應報文包含三部分:
a、狀態行:包含HTTP版本、狀態碼、狀態碼的緣由短語
b、響應首部字段
c、響應內容實體
十二、常見的HTTP相應狀態碼
200:請求被正常處理
204:請求被受理但沒有資源能夠返回
206:客戶端只是請求資源的一部分,服務器只對請求的部分資源執行GET方法,相應報文中經過Content-Range指定範圍的資源。
301:永久性重定向
302:臨時重定向
303:與302狀態碼有類似功能,只是它但願客戶端在請求一個URI的時候,能經過GET方法重定向到另外一個URI上
304:發送附帶條件的請求時,條件不知足時返回,與重定向無關
307:臨時重定向,與302相似,只是強制要求使用POST方法
400:請求報文語法有誤,服務器沒法識別
401:請求須要認證
403:請求的對應資源禁止被訪問
404:服務器沒法找到對應資源
500:服務器內部錯誤
503:服務器正忙
十一、HTTP1.1版本新特性
a、支持長鏈接
b、高併發鏈接請求
c、斷點續傳
1三、URL和URI的對比(這是好題)
答:(1)URL是統一資源定位符,URI是統一資源標識符,URL是URI的一種
(2)URL用來標識某一個資源的具體位置,而URI標識某一類資源,如html、jpg、mp4
(3)組成部分不一樣,URL由協議名稱、主機地址端口號、路徑名構成,而URI由訪問資源的命名機制、主機名、路徑名構成。
(4)絕對路徑和相對路徑的區別
1四、Cookie&Session的格式、傳輸的內容(網易題目,真尼瑪難啊,我還打算筆試經過就去面試,這尼瑪找死啊)
答:(1)Set-Cookie:NAME=VALUE;Expires=DATE;Path=PATH;Domain=DOMAIN-NAME;SECURE
其中NAME是該Cookie的名稱,VALUE是該Cookie的值;Expires變量是一個只寫變量,它肯定了Cookie有效終止日期;Path屬性定義了Web服務器上哪些路徑下的頁面可獲取服務器設置的Cookie;Domain=DOMAIN-NAME它肯定了哪些Internet域中的Web服務器可讀取瀏覽器所存取的Cookie,即只有來自這個域的頁面纔可使用Cookie中的信息,Secure:在Cookie中標記該變量,代表只有當瀏覽器和WebServer之間的通訊協議爲加密認證協議時,瀏覽器才向服務器提交相應的Cookie。當前這種協議只有一種,即爲HTTPS。
Cookies以鍵值的方式記錄會話跟蹤的內容
(2)session包含一個session ID, SessionID是一個由24個字符組成的隨機字符串。
當用戶首次與Web服務器創建鏈接的時候,服務器會給用戶分發一個SessionID做爲標識。SessionID是一個由24個字符組成的隨機字符串。用戶每次提交頁面,瀏覽器都會把這個SessionID包含在HTTP頭中提交給Web服務器,這樣Web服務器就能區分當前請求頁面的是哪個客戶端。這個SessionID就是保存在客戶端的,屬於客戶端Session
1五、數據庫的組合索引和單索引,查詢的時候有什麼區別 ?
答:在多條件查詢時,聯合索引效率要高,查詢條件中出現聯合索引第一列,或者所有,則能利用聯合索引。而單一索引只要條件中出現索引列,不管在什麼位置,都能利用索引查詢。
1六、進程與線程區別,何時採用多進程,何時採用多線程?
答:(1)進程是CPU分配的基本單位,線程是CPU調度的基本單位
(2)進程獨佔資源,而一個進程中的多個線程共享資源,如地址空間和進程代碼段等
(3)相對於進程而言,線程是一個更切近執行體的概念,線程產生和撤銷快,線程通訊和切換也快。
(3)須要頻繁建立銷燬的優先用線程、多線程適合在對稱多處理機上運行,而多進程適合在跨主機上運行。
1七、進程間通訊方式,共享內存方式如何實現?
答:消息隊列、信號、信號量、管道通訊、套接字、共享內存
共享內存方式:這段共享內存由一個進程建立,但多個進程均可以訪問。
<1>建立/打開共享內存
<2>映射共享內存,即把指定的共享內存映射到進程的地址空間用於訪問
<3>撤銷共享內存映射
<4>刪除共享內存對象
1八、進程的調度方式,進程何時被調度,何時會退出?
答:調度方式:先來先服務、最高優先級、時間片輪轉法、最高響應比、多級反饋隊列。
何時調度:從阻塞到就緒,從就緒到運行,三個基本態的變化都會涉及到調度
何時退出:執行完畢或終止則退出。
1九、線程太多有什麼問題,任務太多怎麼處理?
答:線程太多,同步是個麻煩問題,任務太多,就不斷建立線程
20、shell:終端輸入字符串如何一個字符一個字符地讀到終端?(若是現場作,確定作不出來的)
答:
1 #!/bin/bash 2 read -p "please input the string: " STRING 3 num=1 4 while (( $num<=${#STRING} )) ##當num小於字符串總長度的時候 5 do 6 echo ${STRING}|cut -c $num ##截取第幾個字符 7 let num=num+1 8 done
2一、彙集索引與非彙集索引的區別?
答:(1)彙集索引的物理順序和索引順序一致,非彙集索引的物理順序和索引順序不一致
(2)先建立彙集索引,而後才能建立非彙集索引
(3)一個表只能有一個彙集索引,可是能夠有多個非彙集索引
(4)在彙集索引中,數據存儲在B+樹的葉子節點上,而非彙集索引的葉子節點存放的是索引值而不是數據
2二、事務特性
(1)一致性:將事務中所作的操做捆綁成一個原子單元,即對於事務所進行的數據修改等操做,要麼所有執行,要麼所有不執行。
(2)原子性:事務在完成時,必須使全部的數據都保持一致狀態,並且在相關數據中,全部規則都必須應用於事務的修改,以保持全部數據的完整性。事務結束時,全部的內部數據結構都應該是正確的。
(3)隔離性:由併發事務所作的修改必須與任何其餘事務所作的修改相隔離。事務查看數據時數據所處的狀態,要麼是被另外一併發事務修改以前的狀態,要麼是被另外一併發事務修改以後的狀態,即事務不會查看由另外一個併發事務正在修改的數據。這種隔離方式也叫可串行性。
(4)持久性:事務完成以後,它對系統的影響是永久的,即便出現系統故障也是如此。
2三、匹配文本中的key,並打印出該行及下面的5行?
grep -A5 key filename
2四、源碼編譯安裝apache,要求爲:安裝目錄爲/usr/local/apache,需有壓縮模塊,rewrite,worker模式;並說明在apache的workerMPM中,爲何ServerLimit要放到配置段最前面?
答:./configure --prefix=/usr/local/apache --enable-so --with-rewrite --with-mpm-worker
ServerLimit指定了Maxclients最大配置數目的上限值
2五、A文件的內容是1.1.1.1,B文件的內容是2.2.2.2 要求shell編程實現C文件的內容是1.1.2.2 ?(這是個好題啊)
答:sed 'H;N;s#\(1.1.\).*\n\(2.2\).*#\1\2#' a.txt b.txt ##徹底看不懂
2六、mysql中,給本地用戶webedit賦予webedit數據庫中test表的查詢權限,禁止其增長和刪除的權限
grant select on wededit.test to 'webedit'@'localhost';
revoke update,delete on webedit.text from 'webedit'@'localhost';
2七、目前,有一個文件,內容以下:
172.16.100.1
172.16.100.2
172.16.100.3
172.16.100.4
請使用while和ssh命令,登陸文件內的ip並執行hostname命令
#!/bin/bash
while read line
do
ssh root@$line hostname
done <test.txt
2八、請使用awk命令將以下兩份文件中名字相同的兩行合併起來(臥槽,這題是真難啊,若是是當場要求當場作,很難的)
A文件:
韓海林 21歲
海林韓 23歲
韓林海 22歲
林海韓 24歲
B文件:
韓林海 男
海林韓 男
韓海林 男
林海韓 男
輸出效果:
韓海林 21歲 男
awk 'NR==FNR{a[$1]=$2}NR>FNR{print $0,a[$1]}' 2.txt 1.txt > 3.txt
##NR是全部讀取的文件行數,而FNR是正在讀取文件的行數,NR最大值爲8,FNR則從新從1-4計數
參考文檔:http://www.linuxdiyf.com/linux/13007.html
2九、Linux查看某個進程的線程的3種方法
答:(1)ps -T -p 3306【進程pid】(2)top -H (3)htop
30、請寫出五種系統性能分析工具,並簡述其做用和特色
答:sysbench(磁盤IO性能)、Awstats(web服務日誌分析)、ab和httperf(測量web併發服務)、mysqlslap(mysql壓力測試)
3一、用什麼命令查詢指定IP地址的服務器端口?
nmap -p80,21,23 192.168.1.1
參考文檔:http://www.nxadmin.com/tools/600.html
3二、用什麼命令定義某個程序執行的優先級別?
nice renice
3三、如何讓history命令顯示具體時間?
vi ~/.bash_profile
export HISTTIMEFORMAT='%F %T'
source ~/.bash_profile
3四、查看Linux系統當前指定用戶的郵件隊列命令是
mailq 或者mail -u root
3五、查看文件系統的類型
df -Th /dev/sda1
3六、Ext4文件系統如何恢復rm命令刪除文件
Linux下刪除文件並非真實的刪除磁盤分區中的文件,而是將文件的inode節點中的扇區指針清除,同時釋放這些數據對應的數據塊,當釋放的數據塊被系統從新分配時,那些被刪除的數據就會被覆蓋,因此誤刪除數據後,應立刻卸載文件所在的分區,umount /dev/sda1
yum install e2fsprogs-devel libcom_err-devel -y 、
tar -jxf extundelete-0.2.0.tar.bz2
cd extundelete-0.2.0 2 && ./configure && make&& make install
文件恢復:extundelete /dev/sda1 --restore-file 文件名
目錄恢復:extundelete /dev/sda1 --restore-directory 目錄名
3七、簡述linux下編譯內核的意義與步驟?
答:編譯內核的意義在於讓硬件設備更穩定的發揮其應有的效能。
(1)下載內核源碼包,解壓並進入該目錄
(2)make mrproper --清理內核源代碼樹(清理垃圾信息)
(3)make menuconfig --配置內核以及內核模塊
(4)make dep --生成依賴關係
(5)make bzImage --生成新內核
(6)make moudulds --編譯新模塊
(7)make modules_install --安裝內核模塊
(8)make install --安裝內核
3八、你說下你技術的強項和不足?(50%要問)
答:強項:iptables、網絡基礎 不足:selinux和shell腳本
3九、若是給你300臺服務器,你該怎麼去管理?(對於一個應屆生來講,很難回答,但要是被問到了呢)
答:若是是linux服務器,那安裝的話使用kickstart,監控nagios少不了的,甚至zabbix,自動化部署用ansible或者puppet
若是是windows服務器,作域控和組策略
4九、簡述調整哪些內核參數?
答:主要分爲兩類:一類是core,一類是tcp,vi /etc/sysctl.conf,包括緩衝大小,窗口大小,tcp隊列大小,共享內存段
50、查看某個進程打開的文件數
答:lsof -p 3306 |wc -l