首页 > 技术文章 > 运维面试题

aloneysir 2019-07-12 14:10 原文

前言

近期时间在努力投简历加找工作中,将自己或者朋友遇到的面试题在此一一整理,后期将持续更新。。。

(由于博主起步阶段水平有限,接触的都是基础题目,大佬不要见笑)

1、测试网络连通性的命令

ping:最基础的就不解释了

tracent(trace router的缩写):判断数据包到目的地经过的哪些节点出现了错误;格式:tracert 主机名称或ip地址(具体详情自行百度)

2、CPU完全虚拟化和半虚拟化的区别?CPU可以虚拟出多少个vCPU?

cpu支持了硬件虚拟化,通过xen或kvm配置后及时完全虚拟化,cpu不支持就是半虚拟化。

被虚拟化出来的操作系统上执行的指令,会运行在被虚拟化出来的硬件上,就是完全虚拟化。kvm只支持完全虚拟化,xen可以完全虚拟化也可以半虚拟化。

总结:

看虚拟化技术是完全虚拟化还是半虚拟化,首先看虚拟化技术有没有修改内核,xen虚拟化技术需要修改内核,因此它有完全虚拟化和半虚拟化之分,kvm没有修改内核,因此,它只有完全虚拟化。

虚拟化是完全虚拟化还是半虚拟化,还是要看cpu是否支持硬件虚拟化,支持硬件虚拟化,就是完全虚拟化,不支持,就是半虚拟化。xen有两种选择,而kvm只有一种选择,所以,xen有完全虚拟化和半虚拟化之分,kvm只有完全虚拟化。

(本文内容来自作者icy2013,原文链接http://blog.51cto.com/qiufengsong/1321151)

3、新建服务器如何通过DHCP获取IP?

首先服务器发送DHCP Discover 数据包,这个过程是服务器使用udp的68端口来进行广播,用67端口接受。数据包中包含DHCP类型,上次分配ip,apipa分配地址。

DHCP服务器接收到后检查自己是否有有效的地址,返回一个广播消息。新建服务器接收到ip地址后用DHCP request包回应DHCP服务器,DHCP会问一下分配的那个ip有没有别的机器正在使用 ,然后回应新建服务器(租约ip地址、掩码、期限)

客户端收到后会广播ARP包检测ip冲突,如果冲突新建服务器将进行第二次的ip地址获取

4、VLAN是如何隔离的?二层VLAN和三层VLAN的区别?(这个问题本人也不是很明白,求大神解释)

VLAN是对连接到的第二层交换机端口的网络用户的逻辑分段,不受网络用户的物理位置限制而根据用户需求进行网络分段。一个VLAN可以在一个交换机或者跨交换机实现。VLAN可以根据网络用户的位置、作用、部门或者根据网络用户所使用的应用程序和协议来进行分组。基于交换机的虚拟局域网能够为局域网解决冲突域、广播域、带宽问题。

二层vlan是可以划分vlan的两层交换机 只能划分vlan不能设置vlan接口地址,没有路由功能 三层vlan是指三层交换机的vlan 可以设置vlan接口地址

5、命令统计Nginx日志access.log(目录是/var/usr/log)中访问量做多的3个ip

 

日志内容如下:

 

(45.127.65.16 -- (log:........) )

awk '{print $1}' /var/log/nginx/access.log |sort | uniq -c |sort -nr -k1 | head -n 3

awk:取日志中的第一列

sort:对数据排列,顺序有小到大

uniq -c :打印重复行次数

sort -nr -k1 :按照重复行出现次数倒序排列

head -n 3:取前3行

6、 iptables如何控制mysql的访问?如何防御ddos的攻击?

通过控制端口访问:iptable -A  INPUT -p tcp --dport 3306 -j ACCEPT

         iptable -A  OUTPUT -p tcp --sport 3306 -j ACCEPT

只允许指定ip访问: iptable -A  INPUT -p tcp --dport 3306  -s 指定ip -j ACCEPT

#防止SYN攻击 轻量级预防 
iptables -N syn-flood 
iptables -A INPUT -p tcp --syn -j syn-flood 
iptables -I syn-flood -p tcp -m limit --limit 3/s --limit-burst 6 -j RETURN 
iptables -A syn-flood -j REJECT

 

#防止DOS太多连接进来,可以允许外网网卡每个IP最多15个初始连接,超过的丢弃 
iptables -A INPUT -i eth0 -p tcp --syn -m connlimit --connlimit-above 15 -j DROP 
iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT

#用Iptables抵御DDOS (参数与上相同)
iptables -A INPUT  -p tcp --syn -m limit --limit 12/s --limit-burst 24 -j ACCEPT
iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT

(参考:https://www.cnblogs.com/fatt/p/6932380.html)

7、写一个shell脚本,将/usr/local/bak下大于1M的文件移到/tmp下

#! /bin/bash
cd /usr/local/bak
for filename in `ls -l | awk '$5>10240 print{$9}'`
    do
        mv $filename /tmp
    done

ls -l 默认显示的大小是以字节为单位 ,可以使用 ls -lh 来查看文件大小

或 find /usr/local/bak -type f -size +1M exec mv {} /tmp \;

8、查看应用服务流量使用情况

iftop

左边为服务器;中间为外网IP,左箭头流入,右箭头流出;右边为2s 10s 40s 的流量情况。

TX:发送流量  RX:接收流量  TOTAL:总流量  Cumm:运行iftop到目前时间的总流量  peak:流量峰值  rates:分别表示过去 2s 10s 40s 的平均流量

9、统计主机tcp的链接数量,并按链接状态分类

netstat -an | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

CLOSED:无连接是活动的或正在进行
LISTEN:服务器在等待进入呼叫
SYN_RECV:一个连接请求已经到达,等待确认
SYN_SENT:应用已经开始,打开一个连接
ESTABLISHED:正常数据传输状态
FIN_WAIT1:应用说它已经完成
FIN_WAIT2:另一边已同意释放
ITMED_WAIT:等待所有分组死掉
CLOSING:两边同时尝试关闭
TIME_WAIT:另一边已初始化一个释放
LAST_ACK:等待所有分组死掉

10、bash shell 中$0 $? $* $$ $#

$?  改bash文件名

$*  所有位置参数的内容,就是调用本bash shell的参数

$$  脚本运行的pid

$#  返回所有位置参数个数

11、如何将本地80端口的请求转发到8080端口,当前主机IP为192.168.16.2,其中本地网卡eth0

iptables -t nat -A PREROUTING -d 192.168.16.2 -p tcp --dport 80 -j DNAT --to 192.168.16.1:8080

12、从输入网页url到获取页面经历了哪些过程?

1. 查询DNS,获取域名对应的IP地址

浏览器搜索自身的DNS缓存,如果找到则返回IP;

否则,浏览器就向本地域名服务器请求查询IP,如果存在,则返回IP;

否则,本地域名服务器发起一个迭代DNS请求,查询到IP后返回给本地主机;

2. 浏览器获得域名对应的IP地址后,发起HTTP三次握手;

3. TCP/IP连接建立起来后,浏览器就可以向服务器发送http请求;

4. 服务器接受到这个请求,根据路径参数,经过后端的一些处理生成HTML页面,代码返回给浏览器;

5. 浏览器拿到完整的HTML页面代码开始解析和渲染,如果遇到引用的外部JS、CSS图片等静态资源,他们同样也是一个个的HTTP请求,都需要经过上面的步骤。

 更多题目请访问主页链接:https://www.cnblogs.com/aloneysir/

推荐阅读