19道小米網運維工程師筆試真題


《19道小米網運維工程師筆試真題,你能通關嗎?》

題目轉至:馬哥Linux運維


第一部分: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的文件。


參考答案:

#/bin/bash
#by xianwei
#2017-9-5

echo "downloading the picture......"
for i in {1..100}
do
    wget "http://down.xiaomi.com/img/$i.png"
done

echo "download done!"
echo "find the file which is big than 500k"
find . -type f -size +500c -print


題目2:

一個文本文件info.txt的內容如下:

aa,201

zz,502

bb,1

ee,42

每行都是按照逗號分隔,其中第二列都是數字,請對該文件按照第二列數字從大到小排列。


參考答案:

root@vmUbu:/home/dell/shell# cat info.txt 
aa,201
zz,502
bb,1
ee,42
root@vmUbu:/home/dell/shell# cat info.txt  |sort -t "," -rnk 2
zz,502
aa,201
ee,42
bb,1
root@vmUbu:/home/dell/shell#

考察知識點:

    sort的使用  

        -r 逆序

        -n 按數字排序

        -k 指定列

        -t 指定分隔符號


題目3:

查看當前Linux服務器是否監聽80端口,如果在監聽,請找出其進程ID,並結束該進程。


參考答案

 說明:測試使用3306段口爲例。

 1)查看端口對應的進程ID和進程名,有兩種方法lsof和netstat

   netstat -tanp |grep 3306

   lsof -i:3306

root@vmUbu:/home/dell/shell# netstat -tanp |grep 3306 
tcp        0      0 127.0.0.1:3306          0.0.0.0:*             LISTEN      1309/mysqld
root@vmUbu:/home/dell/shell# lsof -i:3306            
COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mysqld  1309 mysql   16u  IPv4  19621      0t0  TCP localhost:mysql (LISTEN)

  2)過濾出ID號,並kill

方法一:使用for 

for i in `netstat -tanp |grep 3306 |awk '{print $NF}' |cut -d "/" -f 1`;do kill -9 $i;done

方法二:使用xargs

 netstat -tanp |grep 3306 |awk '{print $NF}' |cut -d "/" -f 1 |xargs -I '{}' kill -9 {}

方法三:使用awk

 netstat -tanp |grep 3306 |awk '{print $NF}' |cut -d "/" -f 1 |awk '{print "kill -9 "$0}' |bash


題目4:

使用curl或wget命令獲取http服務的header信息。


題目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,讀寫速度最快


參考答案:

    raid0 的讀速度比raid1,raid5要慢一些,因爲只從一個盤中讀取數據


題目7:

負載均衡,你瞭解的常用軟件有哪些?請寫出至少三種以上,並評價各自的缺點。


參考答案:

Nginx的缺點是:

1. Nginx僅能支持http、https和Email協議,這樣就在適用範圍上面小些,這個是它的缺點。 

2. 對後端服務器的健康檢查,只支持通過端口來檢測,不支持通過url來檢測。不支持Session的直接保持,但能通過ip_hash來解決。


LVS的缺點是:   

1. 軟件本身不支持正則表達式處理(僅僅支持4層負載均衡),不能做動靜分離;而現在許多網站在這方面都有較強的需求,這個是Nginx/HAProxy+Keepalived的優勢所在。 

2. 如果是網站應用比較龐大的話,LVS/DR+Keepalived實施起來就比較複雜了,特別後面有 Windows Server的機器的話,如果實施及配置還有維護過程就比較複雜了,相對而言Nginx/HAProxy+Keepalived就簡單多了。


請參考:http://www.ha97.com/5646.html  


題目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 的含義。


題目10:

WEB 服務 cookies 和 session 的區別。

參考答案:

1、cookie數據存放在客戶的瀏覽器上,session數據放在服務器上 

2、cookie不是很安全,別人可以分析存放在本地的COOKIE並進行 

3、session會在一定時間內保存在服務器上。當訪問增多,會比較佔用你服務器的性能 

4、單個cookie在客戶端的限制是3K,就是說一個站點在客戶端存放的COOKIE不能大於3K。


出處:http://blog.csdn.net/u010168160/article/details/47128443


題目11:

http 1.0 和 http 1.1下有何區別?http 2.0的主要變化或優勢有哪些?


參考答案:

    http 1.0使用短鏈接,http1.1使用長連接

    http2.0 性能和速度有很大提升。


第二部分:安全部分


題目12:

請列舉WEB常見安全問題(不少於三項),闡述其原理、危害。

題目13:

請列舉常見DOS***類型,並分別介紹其原理和防禦方法。

題目14:

服務器遭到***,作爲安全管理人員,你應做如何處理?

參考答案

    http://netsecurity.51cto.com/art/201608/515574.htm


第三部分:網絡部分


題目15:

請簡述TCP的三次握手過程。


題目16:

發現系統中存在大量TIME_WAIT,分析原因並提出三條以上優化建議。



第四部分:Python部分


題目17:

xrange和range的異同。

參考答案:

  1. xrange會比range性能優很多,因爲不需要一上來就開闢一塊很大的內存空間。

  2. range會直接生成一個list對象,而xrange則不會直接生成一個list,而是每次調用返回其中的一個值

題目18:

列表 A 和 B,使用Python快速獲取 A 和 B 中的共有元素。

參考答案:

for i in A:
    if i in B:
        print i

題目19:

有20臺服務器,需要在所有機器上 echo “123”,要求同時並行操作5臺服務器,請使用Python或shell寫出相關代碼。

# encoding:utf-8

import time
import sys
import os
import threadpool

def 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()


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章