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