面試必備!19個運維工程師面試集錦,都答對直接進大廠?
第一部分:Linux基礎
題目1:
有一百個圖片文件,它們的地址都是
http://down.xiaomi.com/img/1.png
http://down.xiaomi.com/img/2.png
…
一直到 http://down.xiaomi.com/img/100.png
如何批量下載這100個圖片文件,并找出其中大于500KB的文件。
$: echo http://down.xiaomi.com/img/{1..100}.png > url.txt
#得到的100個圖片的url地址是以空格分隔的,我們可以用vim編輯該文件,把空格替換成回車
:s/ /\r/g
#再用 wget 命令批量下載
wget -i url.txt -P .
#最后查找大于500k的文件
find . -size +500k
題目2:
一個文本文件 info.txt 的內(nèi)容如下:
aa,201
zz,502
bb,1
ee,42
每行都是按照逗號分隔,其中第二列都是數(shù)字,請對該文件按照第二列數(shù)字從大到小排列。
awk -v FS=',' '{print $2}' info.txt |sort -rn
題目3:
查看當前 Linux 服務器是否監(jiān)聽80端口,如果在監(jiān)聽,請找出其進程ID,并結(jié)束該進程。
kill `lsof -i:80 | tail -2 | awk '{print $2}'`
題目4:
使用 curl 或 wget 命令獲取 http 服務的 header 信息。
curl -I www.baidu.comwget --server-response www.baidu.com
題目5:
關于 Linux 的用戶賬號,下面說法正確的有:
A.用戶的密碼,是以明文形式存儲在 /etc/passwd 文件中的
B.用戶的密碼,是以密文形式存儲在 /etc/passwd 文件中的
C.用戶的密碼,是以密文形式存儲在 /etc/shadow 文件中的
D.用戶登錄的時候,會把用戶的密碼明文與保存的密碼做對比
答案:C
題目6:
對于N塊硬盤組成的硬盤陣列,下面的說法哪個是錯誤的:
A.raid1 與 raid5 相比,讀取數(shù)據(jù)的速度 raid5 更快
B.raid1 與 raid5 相比,raid5 的磁盤空間利用率更高
C.raid1 在 (N-1)塊磁盤損壞的情況下,不影響數(shù)據(jù)的完整性
D.raid0 相比于raid1、raid5,讀寫速度最快
題目7:
負載均衡,你了解的常用軟件有哪些?
請寫出至少三種以上,并評價各自的缺點。
(1)nginx
缺點:
1.nginx僅能支持http,https和email協(xié)議,這樣就在使用范圍上面小了。
2.對后端服務器的健康檢查,只支持通過端口來檢測,不支持通過url來檢測。不支持session的直接保持,但能通過ip_hash來解決。
3.nginx工作在應用層,所以負載均衡會受到socket個數(shù)影響。
(2)LVS
缺點:
1.軟件本身不支持正則表達式處理,不能做動靜分離;而現(xiàn)在許多網(wǎng)站在這方面都要較強需求,這個就是Nginx/HAproxy + Keepalived的優(yōu)勢所在。
2.如果網(wǎng)站比較龐大的話,LVS+Keepalived實施起來就比較復雜了,特別是有Windows Server機器。
(3)HAproxy
1.HAProxy可以對Mysql讀進行負載均衡,對后端的MySQL節(jié)點進行檢測和負載均衡,不過在后端的MySQL slaves數(shù)量超過10臺時性能不如LVS。
2.如果是用作有關網(wǎng)站負載均衡工作的話,HAproxy比不上Nginx,因為Nginx本身就提供有HTTP服務。
題目8:
執(zhí)行 $ time sleep 2
,輸出如下:
real0m2.003s
user 0m0.004s
sys0m0.000s
請說明 real、user、sys三者具體代表的意思和區(qū)別。
real時間是指掛鐘時間,也就是命令開始執(zhí)行到結(jié)束的時間。這個短時間包括其他進程所占用的時間片,和進程被阻塞所花費的時間。
user時間是指進程花費在用戶模式的CPU時間,這是唯一真正用于執(zhí)行進程所花費的時間,其他進程和花費阻塞狀態(tài)中的時間沒有計算在內(nèi)。
sys時間是指花費在內(nèi)核模式中的CPU時間,代表在內(nèi)核中執(zhí)行系統(tǒng)調(diào)用所花費的時間,這也就是真正由進程使用的CPU時間。
題目9:
nginx rewrite 規(guī)則中 last、break、redirect、permanent 的含義
1.rewrite break -url重寫后,直接使用當前資源,不再執(zhí)行l(wèi)ocation里余下的語句,完成本次請求,地址欄url不變。2.rewrite last -url重寫后,馬上發(fā)起一個新的請求,再次進入server塊,重試location匹配,超過10次匹配不到報500錯誤,地址欄不變3.rewrite redirect返回302臨時重定向,地址欄顯示重定向后的url,,爬蟲不會更新url(臨時)4.rewrite permanent返回301永久重定向,地址欄顯示重定向后的url,爬蟲更新url
題目10:
WEB 服務 cookies 和 session 的區(qū)別
Session是在服務端保存的一個數(shù)據(jù)結(jié)構,用來跟蹤用戶的狀態(tài),這個數(shù)據(jù)可以保存在集群,數(shù)據(jù)庫,文件中。
Cookie是客戶端保存用戶信息的一種機制,用來記錄用戶的一些信息,也是實現(xiàn)Session的一種方式。
題目11:
http 1.0 和 http 1.1 下有何區(qū)別?http 2.0 的主要變化或優(yōu)勢有哪些?
區(qū)別:
1.HTTP/1.0協(xié)議使用非持久連接,即在非持久連接下,一個tcp連接只傳輸一個Web對象;
2.HTTP/1.1默認使用持久連接(然而,HTTP/1.1協(xié)議的客戶機和服務器可以配置成使用非持久連接)。在持久連接下,不必為每個Web對象的傳送建立一個新的連接,一個連接中可以傳輸多個對象!
http2.0的優(yōu)勢:
1.采用二進制格式傳輸數(shù)據(jù),而非http1.1文本格式,二進制格式在協(xié)議的解析和優(yōu)化擴展上帶來了很多的優(yōu)勢和可能。
2.對消息頭采用Hpack進行壓縮傳輸,能夠節(jié)省消息頭占用的網(wǎng)絡流量,http1.1每次請求,都會攜帶大量冗余的頭信息,浪費了很多帶寬資源。
3.異步連接多路復用。
4.Server Push,服務器端能夠更快的把資源推送到客戶端。
5.保持與HTTP1.1語義的向后兼容性也是該版本的一個關鍵。
第二部分:安全部分
題目12:
請列舉 WEB 常見安全問題(不少于三項),闡述其原理、危害。
sql注入:拖庫,撞庫,爆破,刪除數(shù)據(jù)
跨站腳本攻擊:向web頁面里插入惡意html代碼 用戶瀏覽該頁面時,嵌入其中的html代碼會被執(zhí)行
失效的身份認證和會話管理
題目13:
請列舉常見DOS攻擊類型,并分別介紹其原理和防御方法。
Land攻擊:向某個設備發(fā)送數(shù)據(jù)包,并將數(shù)據(jù)包的源IP和目的IP都設置成攻擊目標的地址。
Teardrop攻擊:利用OS處理分片重疊保溫的漏洞進行攻擊。
DDos分布式拒絕服務攻擊:攻擊者攻破了多個系統(tǒng)。并利用這些系統(tǒng)去集中攻擊其他目標。成千上萬的主機發(fā)送大量的請求,受害設備因為無法處理而拒絕服務。
Ping of Death攻擊:通過構造出重緩沖區(qū)大小異常的ICMP包進行攻擊,不斷ping。。
Smurf攻擊:攻擊者冒充受害主機的IP地址,向一個大的網(wǎng)絡發(fā)送echo request的定向廣播包,此網(wǎng)絡的許多主機都作出回應,受害主機會受到大量的echo reply消息。
SYN Flooding攻擊:利用TCP連接的3此握手過程進行攻擊。攻擊者主機使用無效的IP地址,與受害主機進行TCP3次握手。在完成第二步后,受害主機就會處于開放會話
的請求之中,但會話并未真正完成。受害主機必須等待連接超時,之后才能清除未完成的對話。在此期間,受害主機將會連續(xù)收到這樣的請求,最終因耗盡用來管理繪畫資源的資源而停止響應。
題目14:
服務器遭到入侵,作為安全管理人員,你應做如何處理?
系統(tǒng)遭受攻擊并不可怕,可怕的是面對攻擊束手無策,下面就詳細介紹下在服務器遭受攻擊后的一般處理思路。
1.切斷網(wǎng)絡
所有的攻擊都來自于網(wǎng)絡,因此,在得知系統(tǒng)正遭受黑客的攻擊后,首先要做的就是斷開服務器的網(wǎng)絡連接,這樣除了能切斷攻擊源之外,也能保護服務器所在網(wǎng)絡的其他主機。
2.查找攻擊源
可以通過分析系統(tǒng)日志或登錄日志文件,查看可疑信息,同時也要查看系統(tǒng)都打開了哪些端口,運行哪些進程,并通過這些進程分析哪些是可疑的程序。這個過程要根據(jù)經(jīng)驗和綜合判斷能力進行追查和分析。下面的章節(jié)會詳細介紹這個過程的處理思路。
3.分析入侵原因和途徑
既然系統(tǒng)遭到入侵,那么原因是多方面的,可能是系統(tǒng)漏洞,也可能是程序漏洞,一定要查清楚是哪個原因?qū)е碌模⑶疫€要查清楚遭到攻擊的途徑,找到攻擊源,因為只有知道了遭受攻擊的原因和途徑,才能刪除攻擊源同時進行漏洞的修復。
4.備份用戶數(shù)據(jù)
在服務器遭受攻擊后,需要立刻備份服務器上的用戶數(shù)據(jù),同時也要查看這些數(shù)據(jù)中是否隱藏著攻擊源。如果攻擊源在用戶數(shù)據(jù)中,一定要徹底刪除,然后將用戶數(shù)據(jù)備份到一個安全的地方。
5.重新安裝系統(tǒng)
永遠不要認為自己能徹底清除攻擊源,因為沒有人能比黑客更了解攻擊程序,在服務器遭到攻擊后,最安全也最簡單的方法就是重新安裝系統(tǒng),因為大部分攻擊程序都會依附在系統(tǒng)文件或者內(nèi)核中,所以重新安裝系統(tǒng)才能徹底清除攻擊源。
6.修復程序或系統(tǒng)漏洞
在發(fā)現(xiàn)系統(tǒng)漏洞或者應用程序漏洞后,首先要做的就是修復系統(tǒng)漏洞或者更改程序bug,因為只有將程序的漏洞修復完畢才能正式在服務器上運行。
7.恢復數(shù)據(jù)和連接網(wǎng)絡
將備份的數(shù)據(jù)重新復制到新安裝的服務器上,然后開啟服務,最后將服務器開啟網(wǎng)絡連接,對外提供服務。
第三部分:網(wǎng)絡部分
題目15:
請簡述TCP的三次握手過程。
首先Client端發(fā)送連接請求報文,Server端接受連接后回復ACK報文,并為這次連接分配資源。Client端接收到ACK報文后也向Server段發(fā)生ACK報文,并分配資源,這樣TCP連接就建立了
題目16:
發(fā)現(xiàn)系統(tǒng)中存在大量TIME_WAIT,分析原因并提出三條以上優(yōu)化建議。
對于一個處理大量短連接的服務器,如果是由服務器主動關閉客戶端的連接,將導致服務器端存在大量的處于TIME_WAIT狀態(tài)的socket, 嚴重影響服務器的處理能力,甚至耗盡可用的socket,停止服務.
TIME_WAIT是TCP協(xié)議用以保證被重新分配的socket不會受到之前殘留的延遲重發(fā)報文影響的機制,是必要的邏輯保證.
解決方法:
1、縮短TIME_WAIT的等待時間
2、允許將TIME-WAIT sockets重新用于新的TCP連接
3、開啟TIME-WAIT sockets的快速回收
4、使用長連接
第四部分:Python部分
題目17:
xrange 和 range 的異同。
range([start,] stop[, step]),根據(jù)start與stop指定的范圍以及step設定的步長,生成一個序列。xrange生成的不是一個數(shù)組,而是一個生成器。
題目18:
列表 A 和 B,使用Python快速獲取 A 和 B 中的共有元素。
a = set(A)b = set(B)print(a.intersection b)
題目19:
import time
import sys
import os
import threadpool
def cmd(ip):
#需先設置遠程無密碼執(zhí)行命令
os.system(‘ssh ip echo "123" 2>&1’)
time.sleep(2)
pool = threadpool.ThreadPool(5) #創(chuàng)建一個線程池,包括線程數(shù)10個
requests = threadpool.makeRequests(cmd, ip_list)#傳遞函數(shù)和參數(shù)
[pool.putRequest(req) for req in requests]#將請求放入線程池進行處理
pool.wait()