##运维工程师面试题
###请自我介绍一下你自己? 备注:主要了解一下面试者除了简历上描述的基本信息外的信息,比如个人的最强的技能、最深入研究的知识领域、个性中最积极的部分、做过的最成功的事,主要的成就等,这些都可以和学习无关,也可以和学习有关;
###一.你对现在运维工程师的理解和以及对其工作的认识 运维工程师在公司当中责任重大,需要保证时刻为公司及客户提供最高、最快、最稳定、最安全的服务。运维工程师的一个小小的失误,很有可能会对公司及客户造成重大损失,因此运维工程师的工作需要严谨及富有创新精神。
###二.你在工作的过程中,遇到过你映像最深的是什么故障问题,你又是如何解决? 这个问题主要是了解排查故障的思路及用到的相关命令工具
###三.Linux中什么命令可以查看当前系统每个IP的连接数(说出命令名称即可,知道参数更好) netstat -n | awk '/^tcp/ {print $5}'| awk -F: '{print $1}' | sort | uniq -c | sort -rn
###四.TCP/IP原理说一下?TCP有哪几个状态,分别是什么意思? 以tcp/ip协议为核心,分五层。tcp工作在第4层,主要有tcp和udp协议。其中tcp是可靠协议,udp是不可靠协议。 tcp传输之前,需要建立连接,通过三次握手实现。
###五.简述TCP三次握手的过程? 客户端发送请求SYN,服务器端接收请求确认并回应SYN+ACK,客户端发回ACK回应…
###六.你会用什么方法查看某个应用服务的流量使用情况? 如果是单一应用的服务器,只需要用iftop、sar等工具统计网卡流量就可以。如果服务器跑了多个应用,可以使用nethogs工具实现,它的特别之处在于可以显示每个进程的带宽占用情况,这样可以更直观获取网络使用情况。
###七.linux系统中你会用到什么命令查看硬件使用状态信息? 这个命令就很多了,比如:lscpu(查看cpu信息)、free -m(查看内存信息)、df -h(查看硬盘分区信息)、top(还可以动态查看cpu、内存使用情况的信息),/proc/目录下也可以查看很多硬件信息。
###八.用什么命令可以查看上一次服务器启动的时间、上一次谁登录过服务器? w命令查看上次服务器启动时间。last命令 查看登录。
###九.符号链接与硬链接的区别 我们可以把符号链接,也就是软连接 当做是 windows系统里的 快捷方式。硬链接就好像是又复制了一份,举例说明: ln 3.txt 4.txt 这是硬链接,相当于复制,不可以跨分区,但修改3,4会跟着变,若删除3,4不受任何影响。 ln -s 3.txt 4.txt 这是软连接,相当于快捷方式。修改4,3也会跟着变,若删除3,4就坏掉了。不可以用了。
###十.列出Linux常见打包工具并写相应解压缩参数(至少三种) 常用的就是tar,gz,和zip tar结尾的,tar -cvf 打包,tar -xvf 解包 gz结尾的,tar -zcvf打包,tar -zxvf解包 zip结尾的,zip打包,unzip解包
###十一.花5分钟谈谈您在日常工作中运维Linux系统常用的一些操作命令。 (简单了解一下命令基础是否扎实,和常用的命令,主要了解对文件目录的操作,用户权限,进程管理等等)
###十二.谈谈您对nginx优化方面的经验,您了解到的有哪些方面?
(主要考察nginx的精通程度)
nginx常用优化内容主要包括如下内容:
1.隐藏版本信息
2.隐藏nginx要修改的源代码
3.更改nginx服务的默认用户
4.降权启动nginx
5.优化nginx进程个数
6.绑定不同的nginx进程到不同的CPU上
7.Nginx事件处理模型优化
8.调整nginx单个进程允许的客户端最大连接数
9.配置nginx worker进程对打打开文件数
10.开启高效文件传输模式
11.Nginx gzip压缩实现性能优化
12.编写脚本实现日志轮询
13.不记录不需要的日志
14.访问日志的权限设置
15.根据扩展名限制程序和文件访问
16.禁止访问指定目录下的所有文件和目录
17.限制网站来源的IP访问
18.配置nginx禁止非法域名解析访问企业网站
19.nginx防爬虫优化
20.控制nginx并发连接数量
###十三.Nginx是如何处理一个请求的? 首先,nginx在启动时,会解析配置文件,得到需要监听的端口与ip地址,然后在nginx的master进程里面 先初始化好这个监控的socket,再进行listen 然后再fork出多个子进程出来, 子进程会竞争accept新的连接。 此时,客户端就可以向nginx发起连接了。当客户端与nginx进行三次握手,与nginx建立好一个连接后,此时,某一个子进程会accept成功,然后创建nginx对连接的封装,即ngx_connection_t结构体接着,根据事件调用相应的事件处理模块,如http模块与客户端进行数据的交换,最后,nginx或客户端来主动关掉连接,到此,一个连接就寿终正寝了
###十四.什么是正向代理和反向代理? 正向代理就是一个人发送一个请求直接就到达了目标的服务器 反方代理就是请求统一被Nginx接收,nginx反向代理服务器接收到之后,按照一定的规 则分发给了后端的业务处理服务器进行处理了
###十五.请解释Nginx服务器上的Master和Worker进程分别是什么? Master进程:读取及评估配置和维持 Worker进程:处理请求
###十六.MySQL数据库如何实现读写分离? 1.通过程序实现读写分离(性能,效率最佳,推荐 PHP和Java程序都可以通过设置多个连接文件轻松的实现对数据库的读写分离,即当select时,就去连接读库的连接文件,当update、insert、delete是就去连接写库的连接文件。 2.通过软件实现读写分离 MySQL-proxy,Amoeba等代理软件也可以实现读写分离功能,但最常用最好用的还是程序实现读写分离。 3.开发dbproxy
###十七. MySQL主从复制故障如何解决? 1.stop slave 临时停止同步开关 2.set global sql_slave_skip_counter=1,将同步指针向下移动一个,也可以多个,如果多次不同步,可以重复操作。 3.start slave,重启主从复制开关
###十八.如何监控主从复制是否故障? 查看slave端的IO和SQL进程状态是否OK,同步延迟时间是否小于1分钟 mysql> show slave status\G Slave_IO_Running: Yes Slave_SQL_Running: Yes Seconds_Behind_Master: 0
###十九.mysql数据库的备份还原是怎么做的? 平时采用两种方法来做: 1)利用mysql自带的使用工具mysqldump和mysql来备份还原数据库 2)利用第三方的mysql管理工具比如:mysqladmin 3)停止mysqld服务拷贝数据文件
###二十.mysql数据库的备份还原是怎么做的? 平时采用两种方法来做: 1)利用mysql自带的使用工具mysqldump和mysql来备份还原数据库 2)利用第三方的mysql管理工具比如:mysqladmin 3)停止mysqld服务拷贝数据文件
###二十一.关于灰度发布的技术实现,您有了解吗?如何实现? 这是一个比较概念的话题,有各式各样的技术方案可以实现
###二十二.做自动化发布,除Jenkins持续集成工具,还有哪些好用的工具呢? 目前所知道的,一般都是Hudson或者Jenkins,后者是前者分支出来的。 这些工具有丰富的插件,灵活使用这些插件才是关键所在。
###二十三.服务器代码版本的管理,您是如何管理发布和回滚,比如用jenkins又是怎么实现? jenkins配置好代码路径(SVN或GIT),然后拉代码,打tag。需要编译就编译,编译之后推送到发布服务器(jenkins里面可以调脚本),然后从分发服务器往下分发到业务服务器上。 回滚:按照版本号到发布服务器找到对应的版本推送
###二十四.你会怎么统计当前访问的IP,并排序? 统计用户的访问IP,用awk结合uniq、sort过滤access.log日志就能统计并排序好。一般这么回答就够了,当然你还可以说出其它方式来统计,这都是你的加分项。
###二十五.假如有人反应,调取后端接口时特别慢,你会如何排查? 其实这种问题都没有具体答案,只是看回答的内容与实际情况契合度有多高,能不能说到点上,主要是看排查问题的思路。比如:问清楚反应的人哪个服务应用或者页面调取哪个接口慢,叫他把页面或相关的URL发给你,首先,最直观的分析就是用浏览器按F12,看下是哪一块的内容过慢(DNS解析、网络加载、大图片、还是某个文件内容等),如果有,就对症下药去解决(图片慢就优化图片、网络慢就查看内网情况等)。其次,看后端服务的日志,其实大多数的问题看相关日志是最有效分析,最好用tail -f 跟踪一下日志,当然你也要点击测试来访问接口日志才会打出来。最后,排除sql,,找到sql去mysql执行一下,看看时间是否很久,如果很久,就要优化SQL问题了,expain一下SQL看看索引情况啥的,针对性优化。数据量太大的能分表就分表,能分库就分库。如果SQL没啥问题,那可能就是写的逻辑代码的问题了,一行行审代码,找到耗时的地方改造,优化逻辑。
###二十六.说一下用过哪些监控系统? zabbix、nagios、 cacit等 使用nagios对服务器进行监控,其特点可实时实现手机短信、电子邮件、MSN、飞信报警。 使用cacti对流量进行监控 Nagios更易上手,Nagios两天弄会,Zabbix两周弄会。 Zabbix画图功能比Nagios更强大 Zabbix对于批量监控与服务更改,操作更简洁;Nagios如果写好自动化脚本后,也很简单,问题在于写自动化脚本很费神。