运维面试、笔试题

摘要

。。。

基础

  • 常用的linux系统有哪些,简述特点和区别
1
2
3
4
5
6
centos
redhat
Fedora
ubuntu
Debian
Kali 渗透测试
  • linux系统是由哪些部分组成的
1
Linux系统一般有4个主要部分:内核、shell、文件系统和应用程序。内核、shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序、管理文件并使用系统。
  • 一条命令查看系统已经启动服务所监听的端口
1
2
netstat -ntlp
ss -tln
  • lsof命令查看80端口
1
lsof -i :80
  • cpu状态的wait和idle的区别,user和sys的区别
1
2
3
4
5
6
7
1.3% us — 用户空间占用CPU的百分比。
1.0% sy — 内核空间占用CPU的百分比。
0.0% ni — 改变过优先级的进程占用CPU的百分比
97.3% id — 空闲CPU百分比
0.0% wa — IO等待占用CPU的百分比
0.3% hi — 硬中断(Hardware IRQ)占用CPU的百分比
0.0% si — 软中断(Software Interrupts)占用CPU的百分比
  • raid的几种级别
1
2
3
4
RAID0 分区
RAID1 镜像
raid10(01)镜像分区(分区镜像)
raid5
  • nginx、lvs、haproxy区别
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
LVS的优点:
1、抗负载能力强、工作在第4层仅作分发之用,没有流量的产生,这个特点也决定了它在负载均衡软件里的性能最强的;无流量,同时保证了均衡器IO的性能不会受到大流量的影响;
2、工作稳定,自身有完整的双机热备方案,如LVS+Keepalived和LVS+Heartbeat;
3、应用范围比较广,可以对所有应用做负载均衡;
4、配置性比较低,这是一个缺点也是一个优点,因为没有可太多配置的东西,所以并不需要太多接触,大大减少了人为出错的几率;
LVS的缺点:
1、软件本身不支持正则处理,不能做动静分离,这就凸显了Nginx/HAProxy+Keepalived的优势。
2、如果网站应用比较庞大,LVS/DR+Keepalived就比较复杂了,特别是后面有Windows Server应用的机器,实施及配置还有维护过程就比较麻烦,相对而言,Nginx/HAProxy+Keepalived就简单多了。

Nginx的优点:
1、工作在OSI第7层,可以针对http应用做一些分流的策略。比如针对域名、目录结构。它的正则比HAProxy更为强大和灵活;
2、Nginx对网络的依赖非常小,理论上能ping通就就能进行负载功能,这个也是它的优势所在;
3、Nginx安装和配置比较简单,测试起来比较方便;
4、可以承担高的负载压力且稳定,一般能支撑超过几万次的并发量;
5、Nginx可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点;
6、Nginx不仅仅是一款优秀的负载均衡器/反向代理软件,它同时也是功能强大的Web应用服务器。LNMP现在也是非常流行的web环境,大有和LAMP环境分庭抗礼之势,Nginx在处理静态页面、特别是抗高并发方面相对apache有优势;
7、Nginx现在作为Web反向加速缓存越来越成熟了,速度比传统的Squid服务器更快,有需求的朋友可以考虑用其作为反向代理加速器;
Nginx的缺点:
1、Nginx不支持url来检测。
2、Nginx仅能支持http和Email,这个它的弱势。
3、Nginx的Session的保持,Cookie的引导能力相对欠缺。

HAProxy的优点:
1、HAProxy是支持虚拟主机的,可以工作在4、7层(支持多网段);
2、能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作;
3、支持url检测后端的服务器;
4、它跟LVS一样,本身仅仅就只是一款负载均衡软件;单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的;
5、HAProxy可以对Mysql读进行负载均衡,对后端的MySQL节点进行检测和负载均衡,不过在后端的MySQL slaves数量超过10台时性能不如LVS;
6、HAProxy的算法较多,达到8种;
  • iptables四表五链
1
2
3
4
5
6
7
8
9
10
filter表——过滤数据包
Nat表——用于网络地址转换(IP、端口)
Mangle表——修改数据包的服务类型、TTL、并且可以配置路由实现QOS
Raw表——决定数据包是否被状态跟踪机制处理

INPUT链——进来的数据包应用此规则链中的策略
OUTPUT链——外出的数据包应用此规则链中的策略
FORWARD链——转发数据包时应用此规则链中的策略
PREROUTING链——对数据包作路由选择前应用此链中的规则(所有的数据包进来的时侯都先由这个链处理)
POSTROUTING链——对数据包作路由选择后应用此链中的规则(所有的数据包出来的时侯都先由这个链处理)
  • 查找目录/data/logs/下修改时间大于30天的文件,并删除
1
find /data/logs -mtime +30 | xargs rm -f
  • 统计establish状态连接数有多少
1
2
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’
ss -ant | awk '{++S[$1]} END {for(a in S) print a, S[a]}’
  • ext3文件分区,touch文件报错(磁盘已满),dh -H显示只用了50%。分析原因
1
inode满了
  • /etc/fstab里面字段的含义
1
2
3
4
5
6
第一列可以是实际分区名
第二列是挂载点
第三列为此分区的文件系统类型 (ext3)
第四列是挂载的选项,用于设置挂载的参数。 (defaults: rw, suid, dev, exec, auto, nouser, and async.)
第五列是dump备份设置。 0 忽略
第六列是fsck磁盘检查设置。 0 不检查
  • cdn的原理
1
2
3
CDN是一种组合技术,其中包括源站、缓存服务器、智能DNS、客户端等几个重要部分。

用户请求域名,解析得到cname,继续解析cname,用户根据地理位置通过dns视图获取ip,向此ip的缓存服务器发起请求,缓存服务器向源站请求,获取内容保存在本地一份,给用户一份
  • ansible常用模块
1
command、shell、copy、file、template
  • http和tcp的区别,http头里面是什么样的,都有什么
1
http是基于tcp的,创建tcp连接需要三次握手,是有一定的开销的
  • nginx里面last和break的区别
  • ansible相关
    • ansible的原理
    • 常用模块以及作用
    • ansible的jinjia2用来做什么的
    • command和shell模块的区别
  • salt相关
  • 常用的jenkins模块
  • redis memcache区别,redis集群
  • http1.0、1.1、2.0的区别
1
2
3
4
5
6
7
8
9
10
11
1.0和1.1之间

1.0需要用keep-alive参数告知服务器创建一个长连接
1.1默认支持长连接
1.1是可以只发送headers的,1.1有host域

1.1和2.0
多路复用
2.0支持连接的多路复用
2.0支持headers的数据压缩
2.0支持静态资源的服务器推送
  • 查看 http 的并发请求数与其 TCP 连接状态
1
netstat -n | awk '/^tcp/ {++b[$NF]} END {for(a in b) print a, b[a]}'
  • 简述用户通过一个浏览器访问一个网站,整个过程都发生了什么
1
用户在浏览器输入一个域名发起请求,首先会请求dns获取域名对应的ip地址,然后浏览器请求ip,首先建立tcp连接,然后发送请求命令,发送头部信息,服务器应答返回状态码,头部信息,发送数据,最后关闭tcp连接。

java方向

  • jvm调优都调什么

php方向

  • 常见的php框架
1
ci yii cake think zend
  • php故障排查
  • php调优
  • php的两种运行模式

云服务

网络

  • tcp三次握手,同时客户端和服务端的状态是什么
  • tcp四次挥手,同时客户端和服务端的状态是什么
  • 为什么连接是三次,断开是四次
  • 抓包

提高

  • A、B、C三台机器,A有私钥,B、C机器有公钥,如何做可以让A登录B之后可以直接登录C
  • 进程和线程的区别
  • 写出两种linux进程间通讯的方法
  • select(poll,epoll)机制

浏览器地址栏输入域名回车访问、f5刷新、ctrl+f5强制刷新

回车访问

  • 浏览器第一次访问一个域名,如果本地没有缓存会按照顺序请求静态资源缓存到本地
  • 静态资源缓存会有几个headers的标记,etag、last-modified以及过期时间
  • 第二次浏览器请求,浏览器发现本地有这个静态资源的缓存,并且还没到过期时间,就会直接使用缓存不会向server重复发请求

F5刷新(不考虑etag的情况)

  • f5刷新的时候会强制要求浏览器(针对静态资源)发送一个request请求,头部信息标记if-modified-since,对应的值是last-modified的值
  • server发现文件没有修改会返回一个304,如果有修改会返回200

ctrl+f5

  • 强制刷新的时候不仅不会发送文件是否有修改的标记,还会添加一个no-cache的标记
  • 要求无论是中间代理、缓存服务器还是server都不能返回缓存,而是要加载一个最新的资源

至于f5为什么不能一直刷新缓存,是因为跟缓存时间,缓存策略,是否强制缓存。另外跟浏览器也有关系。同时中间有缓存服务器或者代理也会影响f5刷新不能加载最新资源。

数据库

  • redis和memcache区别
  • redis集群
  • mysql数据库的备份是怎么做的(多种方式)
  • 什么是主键?什么是外键?什么是索引?索引的优缺点是什么?
  • mysql中innodb和myisam的区别,生产环境怎么选用
  • mysql的锁粒度是什么?有几种锁级别?特性是什么?
  • 事务隔离的四种级别是什么?分别代表什么意思?
  • redis两种保存快照(持久化)的方式是什么?区别?
1
2
3
4
5
6
快照持久化(RDB):
缺点:耗时、耗性能、耗内存。不可控,容易丢失数据
默认开启,一次性把redis中全部的数据保存一份存储在硬盘中,如果数据非常多(10-20G)就不合适频繁操作该持久化操作。

AOF持久化:
把用户执行的每个“写”指令(添加/修改/删除)都备份到文件中,还原数据的时候就是执行具体写指令而已。
  • 左连接和右连接的区别
  • 慢查询监控
  • xtrabackup的原理和实现
  • mysqldump如何在事务模式下运行
  • 如何采用lvm快照机制对数据库做一致性备份

python

  • 将元组转成列表,将列表转成元组
  • 写出一段python代码删除一个列别中的重复元素
  • 介绍一下range用法
  • 如何在一个function里面设置一个全局变量
  • 列表和元组的区别是什么
  • python里面有哪些数据结构
  • 将一个数字转成字符串
  • lambda是什么