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