运维工程师面试题总结

运维工程师面试的相关问题

一、下面是这家公司中的岗位要求说明:

职位描述:

1、 负责应用服务器的安装、配置、优化与维护;

2、 负责应用系统的日志信息备份、管理、维护与分析;

3、 负责应用系统的日常监测于维护、故障处理、性能分析与优化;

4、 负责应用部署系统、环境配置系统、监控系统的开发、部署、升级与维护,建设高性能的运维平台。

岗位要求:

1、 熟悉Linux操作系统的基础知识,熟练使用Linux常用操作命令;

2、 熟练配置Nginx、HAproxy 等应用相关软件的部署、配置与优化维护;

3、 熟悉网络基础知识、熟悉TCP/IP的工作原理,会配交换机或路由器,能熟练的对网络情况进行分析

4、 熟悉shell/perl/python中的一种或多种进行运维程序的开发;

5、 熟悉Nagios,Ganglia等监控软件

看着上面的要求大家是不是觉得要求也不高啊,你要细看就会发现,这家公司要求的还挺多,不仅要会网络知识(熟悉TCP/IP好像是每家单位的都会写这样的要求),还要会开发技能。相信很多做运维的兄弟在网络这一块是个头疼的事情,都对交换机和路由器不怎么会配置和管理。

注意:详细了解他们公司,了解岗位要求,在突击复习一下可能会问到的知识点和技术点、带上你的简历和一支笔 。

面试题:

1、介绍下自己?(几乎每家公司首先都会让你做个自我介绍,好像是必修课一样)

笔者回答:此处省略笔者的自我介绍,笔者建议介绍自己的时间不宜过长,3-4分钟为宜,说多了面试官会觉得你太啰嗦了。说太少了也不行,那样会让人感觉你的经历太简单了、太空了。正常情况下,一般你在做自我介绍的同时,面试官这个时候在看你的简历,他需要一边看简历、一边听你介绍自己,如果你说个几句话就把自己介绍完了,他肯定还没缓过神来,对你的映像会减分的。在介绍的同时思维要清晰,逻辑要清楚,最好是根据你简历上写的经历来介绍,这样可以把面试官的思路带到你这里来,让他思路跟着你走。不要东扯一句,西扯一句。竟量少介绍自己的性格、爱好(最好能不说就不说),你可以简单罗列干过几家公司(最多罗列3家公司/也包含目前所在的公司,注意顺序不要乱),都在那几家公司负责什么工作,都用过什么技术,在着重介绍一下你目前所在的公司是负责哪些工作的,可以稍微详细一点介绍,不要让面试官听着晕头转向的感觉。

 

2、灰度发布如何实现?

笔者回答:其实对这个问题笔者也答的不好,就不写出来误导大家了。大家有好的方法可以共享出来。不过笔事后在知呼上看到了一位网友的建议觉得不错,大家可以参考看一下 :https://www.zhihu.com/question/20584476

 

3、Mongodb熟悉吗,一般部署几台?

笔者回答:部署过,没有深入研究过,一般mongodb部署主从、或者mongodb分片集群;建议3台或5台服务器来部署。MongoDB分片的基本思想就是将集合切分成小块。这些块分散到若干片里面,每个片只负责总数据的一部分。  对于客户端来说,无需知道数据被拆分了,也无需知道服务端哪个分片对应哪些数据。数据在分片之前需要运行一个路由进程,进程名为mongos。这个路由器知道所有数据的存放位置,知道数据和片的对应关系。对客户端来说,它仅知道连接了一个普通的mongod,在请求数据的过程中,通过路由器上的数据和片的对应关系,路由到目标数据所在的片上,如果请求有了回应,路由器将其收集起来回送给客户端。

 

4、如何发布和回滚,用jenkins又是怎么实现?

笔者回答:发布:jenkins配置好代码路径(SVN或GIT),然后拉代码,打tag。需要编译就编译,编译之后推送到发布服务器(jenkins里面可以调脚本),然后从分发服务器往下分发到业务服务器上。

回滚:按照版本号到发布服务器找到对应的版本推送

 

5、Tomcat工作模式?

笔者回答:Tomcat是一个JSP/Servlet容器。其作为Servlet容器,有三种工作模式:独立的Servlet容器、进程内的Servlet容器和进程外的Servlet容器。

进入Tomcat的请求可以根据Tomcat的工作模式分为如下两类:

Tomcat作为应用程序服务器:请求来自于前端的web服务器,这可能是Apache, IIS, Nginx等;

Tomcat作为独立服务器:请求来自于web浏览器;

 

6、监控用什么实现的?

笔者回答:现在公司的业务都跑在阿里云上,我们首选的监控就是用阿里云监控,阿里云监控自带了ECS、RDS等服务的监控模板,可结合自定义报警规则来触发监控项。上家公司的业务是托管在IDC,用的是zabbix监控方案,zabbix图形界面丰富,也自带很多监控模板,特别是多个分区、多个网卡等自动发现并进行监控做得非常不错,不过需要在每台客户机(被监控端)安装zabbix agent。

 

7、你是怎么备份数据的,包括数据库备份?

笔者回答:在生产环境下,不管是应用数据、还是数据库数据首先在部署的时候就会有主从架构、或者集群,这本身就是属于数据的热备份;其实考虑冷备份,用专门一台服务器做为备份服务器,比如可以用rsync+inotify配合计划任务来实现数据的冷备份,如果是发版的包备份,正常情况下有台发布服务器,每次发版都会保存好发版的包。

 

探讨:

第一,你要对自己的简历很熟悉,简历上的写的技能自己一定要能说出个一二,因为面试官的很多问题都会挑你简历上写的问。比如你简历上写了这么一条技能“熟悉mysql数据库的部署安装及原理”。你即然写了这么一条技能,你在怎么不熟悉你也要了解mysql的原理,能说出个大概意思。万一面试官问到了你写的这一条,你都答不上来,那在他心里你又减分了,基本上这次面试希望不大。

 

第二,如果面试官问到你不会的问题,你就说这个不太熟悉,没有具体研究过,千万别不懂装懂,还扯一堆没用的话题来掩饰,这样只会让面试官反感你。

 

第三,准备充分,竟可能多的记住原理性的知识,一般面试问的多的就是原理。很少问具体的配置文件是怎么配置的。面试前也要了解清楚“职位描述”和“岗位要求”,虽然有时候大多数不会问到岗位要求的问题,但也要了解和熟悉。

 

第四,面试完后一定要总结,尽量记住面试官问的每一个问题,回去记录下来,如果问到不会的问题,事后要立马查百度或者找朋友搞清楚、弄明白,这样你才能记劳,下次面试说不定又问到同样的问题。

二、下面是这家公司中的岗位要求说明:

岗位职责:
1、负责公司产品的版本控制、构建和发布管理;
2、负责公司统一配置库管理工作,权限管理与分配准确及时,定期完成配置备份;
3、负责公司内部开发/测试服务器的运行管理工作;
4、负责Linux操作系统的安装、配置、监控和维护、问题处理、软件升级、 数据备份、应急响应、故障排除等、保证线上环境的稳定运行;
5、负责支撑平台24×7稳定运行,并进行前瞻性容量规划;
6、负责公司机房服务器日常维护及网络系统安装、部署、维护工作。

岗位要求:

1、计算机相关专业本科及以上学历,2年以上运维或配置管理工作经验;
2、至少熟悉一种监控系统搭建,如Nagios/Zabbix/等;
3、至少熟悉一种集群管理工具,如Ansible/SaltStack等;
4、有使用集成发布工具发布构建经验优先。比如:bamboo或者Jenkins;
5、熟悉Unix/Linux操作系统,熟悉Weblogic/tomcat等中间件,能够编写shell脚本,熟悉软件开发过程及过程产品,有一定的网络基础;
6、熟悉rsyslog, flume等日志收集和处理系统;
7、具有强烈的安全意识及较强的沟通协调和学习能力,良好的团队合作精神,工作积极主动。

面试题:

1、LVS负载的原理,和Nginx负载有啥区别?

笔者回答:这个问题我觉得面试官司没问好,正常都会这么问“LVS有哪些负载均衡技术和调度算法?"。我回答就是按我说的这种问法回答的,反正他也频繁点头,当然,笔者回答的可能没有下面我整理出来的那么详细,大概意思我都说明白了。

LVS是Liunx虚拟服务器的简称,利用LVS提供的负载均衡技术和linux操作系统可实现高性能、高可用的服务器集群,一般LVS都是位于整个集群系统的最前端,由一台或者多台负载调度器(Director
Server)组成,分发给应用服务器(Real Server)。它是工作在4层(也就是TCP/IP中的传输层),LVS是基于IP负载均衡技术的IPVS模块来实现的,IPVS实现负载均衡机制有三种,分别是NAT、TUN和DR,详述如下:

 VS/NAT: 即(Virtual Server via Network Address
Translation)

也就是网络地址翻译技术实现虚拟服务器,当用户请求到达调度器时,调度器将请求报文的目标地址(即虚拟IP地址)改写成选定的Real Server地址,同时报文的目标端口也改成选定的Real Server的相应端口,最后将报文请求发送到选定的Real Server。在服务器端得到数据后,Real Server返回数据给用户时,需要再次经过负载调度器将报文的源地址和源端口改成虚拟IP地址和相应端口,然后把数据发送给用户,完成整个负载调度过程。

可以看出,在NAT方式下,用户请求和响应报文都必须经过Director Server地址重写,当用户请求越来越多时,调度器的处理能力将称为瓶颈。

 VS/TUN :即(Virtual Server via IP Tunneling)

也就是IP隧道技术实现虚拟服务器。它的连接调度和管理与VS/NAT方式一样,只是它的报文转发方法不同,VS/TUN方式中,调度器采用IP隧道技术将用户请求转发到某个Real Server,而这个Real Server将直接响应用户的请求,不再经过前端调度器,此外,对Real
Server的地域位置没有要求,可以和Director Server位于同一个网段,也可以是独立的一个网络。因此,在TUN方式中,调度器将只处理用户的报文请求,集群系统的吞吐量大大提高。

 VS/DR: 即(Virtual Server via Direct Routing)

也就是用直接路由技术实现虚拟服务器。它的连接调度和管理与VS/NAT和VS/TUN中的一样,但它的报文转发方法又有不同,VS/DR通过改写请求报文的MAC地址,将请求发送到Real Server,而Real Server将响应直接返回给客户,免去了VS/TUN中的IP隧道开销。这种方式是三种负载调度机制中性能最高最好的,但是必须要求Director
Server与Real Server都有一块网卡连在同一物理网段上。

回答负载调度算法,IPVS实现在八种负载调度算法,我们常用的有四种调度算法(轮叫调度、加权轮叫调度、最少链接调度、加权最少链接调度)。一般说了这四种就够了,也不会需要你详细解释这四种算法的。你只要把上面3种负载均衡技术讲明白面试官就对这道问题很满意了。接下来你在简单说下与nginx的区别:

LVS的优点:

·        
抗负载能力强、工作在第4层仅作分发之用,没有流量的产生,这个特点也决定了它在负载均衡软件里的性能最强的;无流量,同时保证了均衡器IO的性能不会受到大流量的影响;

·        
工作稳定,自身有完整的双机热备方案,如LVS+Keepalived和LVS+Heartbeat;

·        
应用范围比较广,可以对所有应用做负载均衡;

·        
配置性比较低,这是一个缺点也是一个优点,因为没有可太多配置的东西,所以并不需要太多接触,大大减少了人为出错的几率。

LVS的缺点:

·        
软件本身不支持正则处理,不能做动静分离,这就凸显了Nginx/HAProxy+Keepalived的优势。

·        
如果网站应用比较庞大,LVS/DR+Keepalived就比较复杂了,特别是后面有Windows Server应用的机器,实施及配置还有维护过程就比较麻烦,相对而言,Nginx/HAProxy+Keepalived就简单一点

Nginx的优点:

·        
工作在OSI第7层,可以针对http应用做一些分流的策略。比如针对域名、目录结构。它的正则比HAProxy更为强大和灵活;

·        
Nginx对网络的依赖非常小,理论上能ping通就就能进行负载功能,这个也是它的优势所在;

·        
Nginx安装和配置比较简单,测试起来比较方便;

·        
可以承担高的负载压力且稳定,一般能支撑超过几万次的并发量;

·        
Nginx可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点;

·        
Nginx不仅仅是一款优秀的负载均衡器/反向代理软件,它同时也是功能强大的Web应用服务器。LNMP现在也是非常流行的web环境,大有和LAMP环境分庭抗礼之势,Nginx在处理静态页面、特别是抗高并发方面相对apache有优势;

·        
Nginx现在作为Web反向加速缓存越来越成熟了,速度比传统的Squid服务器更快,有需求的朋友可以考虑用其作为反向代理加速器;

Nginx的缺点:

·        
Nginx不支持url来检测。

·        
Nginx仅能支持http和Email,这个它的弱势。

·        
Nginx的Session的保持,Cookie的引导能力相对欠缺。

 

2、redis集群的原理,redis分片是怎么实现的,你们公司redis用在了哪些环境?

笔者回答:reids集群原理:

其实它的原理不是三两句话能说明白的,redis 3.0版本之前是不支持集群的,官方推荐最大的节点数量为1000,至少需要3(Master)+3(Slave)才能建立集群,是无中心的分布式存储架构,可以在多个节点之间进行数据共享,解决了Redis高可用、可扩展等问题。集群可以将数据自动切分(split)到多个节点,当集群中的某一个节点故障时,redis还可以继续处理客户端的请求。

redis分片:

分片(partitioning)就是将你的数据拆分到多个 Redis 实例的过程,这样每个实例将只包含所有键的子集。当数据量大的时候,把数据分散存入多个数据库中,减少单节点的连接压力,实现海量数据存储。分片部署方式一般分为以下三种:

(1)在客户端做分片;这种方式在客户端确定要连接的redis实例,然后直接访问相应的redis实例;

(2)在代理中做分片;这种方式中,客户端并不直接访问redis实例,它也不知道自己要访问的具体是哪个redis实例,而是由代理转发请求和结果;其工作过程为:客户端先将请求发送给代理,代理通过分片算法确定要访问的是哪个redis实例,然后将请求发送给相应的redis实例,redis实例将结果返回给代理,代理最后将结果返回给客户端。

(3)在redis服务器端做分片;这种方式被称为“查询路由”,在这种方式中客户端随机选择一个redis实例发送请求,如果所请求的内容不再当前redis实例中它会负责将请求转交给正确的redis实例,也有的实现中,redis实例不会转发请求,而是将正确redis的信息发给客户端,由客户端再去向正确的redis实例发送请求。

redis用在了哪些环境:

java、php环境用到了redis,主要缓存有登录用户信息数据、设备详情数据、会员签到数据等

 

3、你会怎么统计当前访问的IP,并排序?

笔者回答:统计用户的访问IP,用awk结合uniq、sort过滤access.log日志就能统计并排序好。一般这么回答就够了,当然你还可以说出其它方式来统计,这都是你的加分项。

 

4、你会使用哪些虚拟化技术?

笔者回答:vmware vsphere及kvm,我用得比较多的是vmware vsphere虚拟化,几本上生产环境都用的vmware vsphere,kvm我是用在测试环境中使用。vmware 是属于原生架构虚拟化技术,也就是可直接在硬件上运行。kvm属于寄居架构的虚拟化技术,它是依托在系统之上运行。vmware vcenter

管理上比较方便,图形管理界面功能很强大,稳定性强,一般比较适合企业使用。KVM管理界面稍差点,需要管理人员花费点时间学习它的维护管理技术。

 

5、假如有人反应,调取后端接口时特别慢,你会如何排查?

笔者回答:其实这种问题都没有具体答案,只是看你回答的内容与面试官契合度有多高,能不能说到他想要的点上,主要是看你排查问题的思路。我是这么说的:问清楚反应的人哪个服务应用或者页面调取哪个接口慢,叫他把页面或相关的URL发给你,首先,最直观的分析就是用浏览器按F12,看下是哪一块的内容过慢(DNS解析、网络加载、大图片、还是某个文件内容等),如果有,就对症下药去解决(图片慢就优化图片、网络慢就查看内网情况等)。其次,看后端服务的日志,其实大多数的问题看相关日志是最有效分析,最好用tail -f 跟踪一下日志,当然你也要点击测试来访问接口日志才会打出来。最后,排除sql,,找到sql去mysql执行一下,看看时间是否很久,如果很久,就要优化SQL问题了,expain一下SQL看看索引情况啥的,针对性优化。数据量太大的能分表就分表,能分库就分库。如果SQL没啥问题,那可能就是写的逻辑代码的问题了,一行行审代码,找到耗时的地方改造,优化逻辑。

 

6、mysql数据库用的是主从读写分离,主库写,从库读,假如从库无法读取了、或者从库读取特别慢,你会如何解决?

笔者回答:这个问题笔者觉得回答的不太好,对mysql比较在行的朋友希望能给点建议。以解决问题为前提条件,先添加从库数量,临时把问题给解决,然后抓取slow log ,分析sql语句,该优化就优化处理。慢要不就是硬件跟不上,需要升级;要不就是软件需要调试优化,等问题解决在细化。

 

7、cpu单核和多核有啥区别?

笔者回答:很少有面试官会问这样的问题,即然问到了,也要老实回答。还好笔者之前了解过CPU,我是这么说的:双核CPU就是能处理多份任务,顺序排成队列来处理。单核CPU一次处理一份任务,轮流处理每个程序任务。双核的优势不是频率,而是对付同时处理多件事情。单核同时只能干一件事,比如你同时在后台BT下载,前台一边看电影一边拷贝文件一边QQ。

 

8、机械磁盘和固态硬盘有啥区别?

笔者回答:我擦,啥年代了,还问磁盘的问题,这面试官有点逗啊。那也要回答啊:

HDD代表机械硬盘,SSD代表固态硬盘。首先,从性能方面来说,固态硬盘几乎完胜机械硬盘,固态硬盘的读写速度肯定要快机械硬盘,因为固态硬盘和机械硬盘的构造是完全不同的(具体的构造就没必要解释了)。其次,固态盘几乎没有噪音、而机械盘噪音比较大。还有就是,以目前的市场情况来看,一般机械盘容量大,价格低;固态盘容量小,价格偏高。但是企业还是首选固态盘。

 

9、说一下用过哪些监控系统?

笔者回答:这个监控的问题又问到了,笔者在2018年1月4号也被问到类似这样的问题,笔者曾经用过zabbix、nagios、 cacit等。但是在这次面试中只说用过zabbix和nagios。说完了之后,面试官就让我说一下这两个监控有啥区别:

从web功能及画图来讲:

Nagios简单直观,报警与数据都在同一页面, 红色即为问题项。Nagios web端不要做任何配置。  Nagios需要额外安装插件,且插件画图不够美观。

 Zabbix监控数据与报警是分开的,查看问题项需要看触发器,查看数据在最新数据查看。而且zabbix有很多其它配置项,  zabbix携带画图功能,且能手动把多个监控项集在一个图中展示。

从监控服务来讲:

Nagios自带的监控项很少。对一些变动的如多个分区、多个网卡进行监控时需要手动配置。

Zabbix自带了很多监控内容,感觉zabbix一开始就为你做了很多事,特别是对多个分区、多个网卡等自动发现并进行监控时,那一瞬间很惊喜,很省心的感觉。

从批量配置和报警来讲:

Nagios对于批量监控主机,需要用脚本在server端新增host,并拷贝service文件。  
Nagios用脚本来修改所有主机的services文件,加入新增服务。

Zabbix在server端配置自动注册规则,配置好规则后,后续新增client端不需要对server端进行操作。  Zabbix只需手动在模板中新增一监控项即可。

总体来讲:

Nagios要花很多时间写插件,Zabbix要花很多时间探索功能。

Nagios更易上手,Nagios两天弄会,Zabbix两周弄会。

Zabbix画图功能比Nagios更强大

Zabbix对于批量监控与服务更改,操作更简洁;Nagios如果写好自动化脚本后,也很简单,问题在于写自动化脚本很费神。

 

10、给你一套环境,你会如何设计高可用、高并发的架构?

笔者回答:如果这套环境是部署在云端(比如阿里云),你就不用去考虑硬件设计的问题。可直接上阿里云的SLB+ECS+RDS这套标准的高可用、高并发的架构。对外服务直接上SLB负载均衡技术,由阿里的SLB分发到后端的ECS主机;ECS主机部署多台,应用拆分在不同的ECS主机上,尽量细分服务。数据库用RDS高可用版本(一主一备的经典高可用架构)、或者用RDS金融版(一主两备的三节点架构)。在结合阿里其它的服务就完全OK,业务量上来了,主机不够用了,直横向扩容ECS主机搞定。

如果这套环境托管在IDC,那么你就要从硬件、软件(应用服务)双面去考虑了。硬件要达到高可用、高并发公司必须买多套网络硬件设备(比如负载设备F5、防火墙、核心层交换、接入层交换)都必须要冗余,由其是在网络设计上,设备之间都必须有双线连接。设备如果都是跑的单机,其中一个设备挂了,你整个网络都瘫痪了,就谈不上高可用、高并发了。其次在是考虑应用服务了,对外服务我会采用成熟的开源方案LVS+Keepalived或者Nginx+Keepalived,缓存层可以考虑redis集群及Mongodb集群,中间件等其它服务可以用kafka、zookeeper,图片存储可以用fastDFS或MFS,如果数据量大、又非常多,那么可采用hadoop这一套方案。后端数据库可采用 “主从+MHA”。这样一套环境下来是绝对满足高可用、高并发的架构。

三、

1、修复并检测/dev/sdb

答:

 

2、Tomcat容器和jetty容器的特点和区别

答:

 

3、分配只读帐号

答:

 

4、如何用zabbix帐号能运行oracle帐号下的sqlplus命令

答:

 

5、写一个脚本,简单检测192.168.1.0/23网段里的机器,区分出存活和离线的主机(所有服务器默认接收并回应正常ICMP请求包),并写入到两个不同的文件或者输出到终端

答:

6、列出您熟悉的开源软件(主流互联网应用软件),并列出每个程序主配置文件的路径和名称

答:

7、Mysql主从复制的关键配置项

答:

8、Nginx的主要功能以及原理

答:

9、写出新建LVM分区,并挂载到/data目录的命令和步骤

答:

10、 如何使用sh调试shell脚本,如何调试python脚本?

答:

11、 如何显示分区/dev/sdb的Inodes值,并调整这个值

答:

12、 写出“mount –o remount ,rw /”命令的作用及使用场景

答:

13、 统计/home/wwwroot/目录下的文件数(包括子目录中文件)

答:

14、 统计当前系统每个IP的连接数据

答:

15、 保存当前磁盘的分区表

答:

16、 ESXI
5.5挂载ISCSI存储的步骤

答:

17、 写出Vcenter HA配置时的关键配置点(项)

答:

18、 写出IPTABLES 的所有规则表及链名称

答:

19、 如何让一台Linux服务器的普通用户使用tomcat对外提供80端口服务,有哪些方案。

答:

20、 写出一个ngin代理IIS web服务器的的配置文件,域名www.abc.com 。并为这个域名启用HTTPS,配置HTTP请求自动转发到HTTPS服务器。

答:

四、

一、有文件file1

1、查询file1里面空行的所在行号

答:awk
‘{if(KaTeX parse error: Expected group after '^' at position 4: 0~/^̲/)print NR}’ file or grep -n ^$ file |awk ‘BEGIN{FS=”:”}{print
$1}’

2、查询file1以abc结尾的行

答:grep
abc$ file1

3、打印出file1文件第1到第3行

答:sed -n
‘1,3p’ file1

head -3 file1

二、如何将本地80端口的请求转发到8080端口,当前主机IP为192.168.2.1

答:-A
PREROUTING -d 124.42.60.109 -p tcp -m tcp –dport 80 -j DNAT
–to-destination 10.0.0.18:9000

三、crontab

在11月份内,每天的早上6点到12点中,每隔2小时执行一次/usr/bin/httpd.sh 怎么实现

答:0
6-12/2 * 11 * /usr/bin/httpd.sh

四、编写个shell脚本将/usr/local/test 目录下大于100K的文件转移到/tmp目录下

答:

#!/bin/bash

for file in
ls /root

do

if [ -f $file ]; then

if [ ls -l $file|awk '{print $5}' -gt 10000 ]; then

mv $file /tmp/

fi

fi

done

五、简述raid0
raid1 raid5 三种工作模式的工作原理及特点。

答:RAID 0:连续以位或字节为单位分割数据,并行读/写于多个磁盘上,因此具有很高的数据传输率,但它没有数据冗余,因此并不能算是真正的RAID结构。RAID 0只是单纯地提高性能,并没有为数据的可靠性提供保证,而且其中的一个磁盘失效将影响到所有数据。因此,RAID 0不能应用于数据安全性要求高的场合。

RAID 1:它是通过磁盘数据镜像实现数据冗余,在成对的独立磁盘上产生互为备份的数据。当原始数据繁忙时,可直接从镜像拷贝中读取数据,因此RAID 1可以提高读取性能。RAID 1是磁盘阵列中单位成本最高的,但提供了很高的数据安全性和可用性。当一个磁盘失效时,系统可以自动切换到镜像磁盘上读写
,而不需要重组失效的数据。简单来说就是:镜象结构,类似于备份模式,一个数据被复制到两块硬盘上。

RAID10:高可靠性与高效磁盘结构

一个带区结构加一个镜象结构,因为两种结构各有优缺点,因此可以相互补充。

主要用于容量不大,但要求速度和差错控制的数据库中。

RAID5:分布式奇偶校验的独立磁盘结构,它的奇偶校验码存在于所有磁盘上,任何一个硬盘损坏,都可以根据其它硬盘上的校验位来重建损坏的数据。支持一块盘掉线后仍然正常运行。

六、oracle数据库备份方式

答:物理备份:开启网络监听,备份数据库文件。

RMAN备份:通过表空间文件在RMAN模式对ORACLE数据备份。

七、如何查看占用端口8080的进程

答:lsof
-i:8080

八、请写出apache2.X版本的两种工作模式,以及各自工作原理。如何查看apache当前所支持的模块,并且查看是工作在哪种模式下?

答案:

prefork(多进程,每个进程产生子进程)和worker(多进程,每个进程生成多个线程)

prefork的工作原理是,控制进程在最初建立“StartServers”个子进程后,为了满足MinSpareServers设置的需要创建一个进程,等待一秒钟,继续创建两个,再等待一秒钟,继续创建四个……如此按指数级增加创建的进程数,最多达到每秒32个,直到满足MinSpareServers设置的值为止。这就是预派生(prefork)的由来。这种模式可以不必在请求到来时再产生新的进程,从而减小了系统开销以增加性能。

worker是2.0 版中全新的支持多线程和多进程混合模型的MPM。由于使用线程来处理,所以可以处理相对海量的请求,而系统资源的开销要小于基于进程的服务器。但是,worker也使用了多进程,每个进程又生成多个线程,以获得基于进程服务器的稳定性。这种MPM的工作方式将是Apache 2.0的发展趋势。

可以通过命令httpd -l 可以查看apache当前的模块,如果带有worker.c就是工作在worker模式下,如果有prefork.c就是工作在prefork.c的模式下。

九、你使用过监控软件吗?说说其特点

答:使用nagios对服务器进行监控,其特点可实时实现手机短信、电子邮件、MSN、飞信报警。

使用cacti对流量进行监控。

十、你对现在运维工程师的理解和以及对其工作的认识

答:运维工程师在公司当中责任重大,需要保证时刻为公司及客户提供最高、最快、最稳定、最安全的服务。运维工程师的一个小小的失误,很有可能会对公司及客户造成重大损失,因此运维工程师的工作需要严谨及富有创新精神。

十一、linux下常用的DNS服务软件是什么,举出几种常用的DNS记录,如果域名abc.com配置好了一台邮件服务器,IP地址为202.106.0.20,我该如何做相关的解析?是否了解bind的智能解析,如果了解请简述一下其原理

答案:

1)常用的DNS软件是bind

2)A记录 地址记录

MX记录 邮件交换记录

CNAME记录 别名域记录

3)修改abc.com域名的配置文件,增加以下记录

IN
MX 10 mail.abc.com.

mail
IN A 202.106.0.20

4)bind根据请求解析客户端的IP地址,做出不同的解析,其原理是在配置文件中,设定了view,在每个view都有客户端的IP地址段,bind服务器根据请求解析客户端的IP地址,匹配不同的view,再根据该view的配置,到相应的配置文件进行查询,将结果返回给请求的客户端。

十二、通过apache访问日志access.log统计IP和每个地址访问的次数,按访问量列出前10名。

日志格式样例如下

192.168.1.247
– - [02/Jul/2010:23:44:59 +0800] “GET /
HTTP/1.1″ 200 19

答案:

cat access_log
| awk ‘{print $1}’ | uniq -c|sort -rn|head -10

//这个别的方法也能统计,但有些命令是必要的 awk , sort,uniq ,主要看是否这些命令都使用了。

十三、如何用mysql命令进行备份和恢复?以test库为例,创建一个备份,并再用此备份进行恢复。

答:mysqldump
-u root -p test > test.sql

mysql -u root -p test < test.sql

//主要考对方msqldump

test.sql 和 mysql < test.sql

十四、你认为在系统调优方面都包括哪些工作,以linux为例,请简明阐述,并举一些参数为例。

答案:

系统调优包括内核参数优化和应用优化2个方面,对方只要从这两方面来说,就可以了,尽量能有些经验的阐述。

有个文件如下:

http://a.domain.com/1.html

http://b.domain.com/1.html

http://c.domain.com/1.html

http://a.domain.com/2.html

http://b.domain.com/2.html

http://a.domain.com/3.html

要求:得到主机名(和域名),并统计哪个网址出现的次数,并排序。可以shell或C。

得到的结果应该是:

3 a.domain.com

2 b.domain.com

1 c.domain.com

[root@mail ~]#
awk ‘BEGIN{FS=”/”}{arr[$3]++}END{for(i
in arr) print arr[i],i}’ list| sort
-r 答案

3 a.domain.com

2 b.domain.com

1 c.domain.com

Related
posts(相关文章):

shell语法中test命令例子详解

test的命令比较多,而且非常好用,初始的时候,可以使用test进行判断,后期熟悉的话可以用[]取代test,进行判断,在这里仅使用test进行判断语句的逻辑关系。
首先可一个语法:判断条件 && 语句一||语句二
如果判断条件为真的话,执行&&后的语句一,||后的语句二执行;如果判断条件为假的话,&&后的语句一不执行,只执行||后的语句二。下面,test的每一个判断语句,都将举一个例子实际运行一下,例子更加直观的说明问题。

一、某个文件是否存在或具有某个类型的判断
1、test –e File 文件是否存在
[root@myfreelinux tmp]# test -e 3.txt && echo “exist” || echo “not
exist”
not exist
[root@myfreelinux tmp]# test -e 2.txt && echo “exist” || echo “not
exist”
exist

2、test –f File 文件存在并且是普通文件,ls -l时属性第一位是“-”的文件
[root@myfreelinux tmp]# ls -l 1.txt mapping-root
-rw-r–r– 1 root root 0 06-23 14:52 1.txt
srwxr-xr-x 1 root root 0 05-13 13:53 mapping-root
[root@myfreelinux tmp]# test -f mapping-root && echo “is a ascii file”
|| echo “is not a ascii file”
is not a ascii file
[root@myfreelinux tmp]# test -f 1.txt && echo “is a ascii file” || echo
“is not a ascii file”
is a ascii file
3、test –d File 文件存在并且是目录
[root@myfreelinux tmp]# test -d ~ && echo “is a directory” || echo “is
not a directory”
is a directory
4、test –b File 文件存在并且是块设备文件
[root@myfreelinux tmp]# ls -l /dev/hdc
brw-rw—- 1 root disk 22, 0 06-15 15:29 /dev/hdc
[root@myfreelinux tmp]# test -b /dev/hdc && echo “is a block device” ||
echo “is not a block device”
is a block device
5、test –c File 文件存在并且是字符设备文件
[root@myfreelinux tmp]# ls -l /dev/tty1
crw–w—- 1 root tty 4, 1 06-15 15:39 /dev/tty1
[root@myfreelinux tmp]# test -c /dev/tty1 && echo “is a character
device” || echo ” is not a character device”
is a character device
6、test –S File 文件存在并且是一个套接字,注意是大写的S
[root@myfreelinux tmp]# ls -l /var/run/pcscd.comm
srwxrwxrwx 1 root root 0 06-15 15:32 /var/run/pcscd.comm
[root@myfreelinux tmp]# test -S /var/run/pcscd.comm && echo “is a
socket file” || echo “is not a socket file”
is a socket file
7、test –p File 文件存在并且是一个管道文件
[root@myfreelinux tmp]# ls -l /var/run/autofs.fifo-net
prw——- 1 root root 0 06-15 15:32 /var/run/autofs.fifo-net
[root@myfreelinux tmp]# test -p /var/run/autofs.fifo-net && echo “is a
FIFO file” || echo “is not a FIFO file”
is a FIFO file
8、test –L File 文件存在并且是一个符号链接(同-h),即是否是软连接
test –h File 文件存在并且是一个符号链接(同-L),即是否是软连接
[root@myfreelinux tmp]# ln 1.txt l.txt1 硬链接文件
[root@myfreelinux tmp]# ln -s 2.txt 2.txt2 建立软连接
[root@myfreelinux tmp]# test -L 1.txt1 && echo “is a soft link” || echo
” is not a soft link” 1.txt1是一个硬链接文件不是软连接文件
is not a soft link
[root@myfreelinux tmp]# test -L 2.txt2 && echo “is a soft link” || echo
“is not a soft link” 2.txt2是一个软连接文件,连接到2.txt
is a soft link
[root@myfreelinux tmp]# test -h 2.txt && echo “is a soft link” || echo
“is not a soft link” 2.txt文件本身不是一个软连接文件
is not a soft link

二、文件权限检测
1、test –r File 文件存在并且“可读”
[root@myfreelinux tmp]# ls -l 1.txt
-rw-r–r– 2 root root 0 06-23 14:52 1.txt
[root@myfreelinux tmp]# test -r 1.txt && echo “is writable” || echo “is
not writable”
is writable
[root@myfreelinux tmp]# test -r 1.txt && echo “is readable” || echo “is
not readable”
is readable
2、test –w File 文件存在并且“可写”
[root@myfreelinux tmp]# test -w 1.txt && echo “is writable” || echo “is
not writable”
is writable
3、test –x
File 文件存在并且“可执行”
[root@myfreelinux tmp]# test -x 1.txt && echo ” is exectable”|| echo
“is not exectable”
is not exectable
4、test –u
File 文件存在并且设置了它的“SUID”位
[root@myfreelinux tmp]# test -u 1.txt && echo “set user id” || echo
“not set user id”
not set user id
[root@myfreelinux tmp]# test -u /bin/su && echo “set user id ” || echo
” not set user id”
set user id
5、test –g
File 文件存在并且是设置了“SGID”
[root@myfreelinux tmp]# ls -l /usr/bin/wall
-r-xr-sr-x 1 root tty 10484 2008-09-18 /usr/bin/wall
[root@myfreelinux tmp]# test -g 1.txt && echo “site group id ” || echo
“not site group id”
not site group id
[root@myfreelinux tmp]# test -g /usr/bin/wall && echo “site group id”
|| echo “not site group id”
site group id
6、test –k File 文件存在并且设置了“sticky bit”位
[root@myfreelinux tmp]# ls -ld /tmp
drwxrwxrwt 4 root root 4096 06-23 15:25 /tmp
[root@myfreelinux tmp]# test -k ~ && echo “site sticky bit” || echo
“not site sticky bit”
not site sticky bit
[root@myfreelinux tmp]# test -k /tmp && echo “site ticky bit” || echo ”
not site sitcky bit”
site ticky bit
7、test -s File
检测文件名是否是一个“非空白文件”
[root@myfreelinux tmp]# test -s 1.txt && echo “is not a blank file” ||
echo “is a blank file”
is a blank file
[root@myfreelinux tmp]# echo “111”>1.txt
[root@myfreelinux tmp]# test -s 1.txt && echo “is not a blank file” ||
echo “is a blank file”
is not a blank file
8、test –G File 文件存在并且属于有效组ID
[root@myfreelinux ~]# chown 700:700 1.txt
[root@myfreelinux ~]# ls -l 1.txt
-rw-r–r– 1 700 700 0 Jun 23 20:55 1.txt
[root@myfreelinux ~]# ls -l 2.txt
-rw-r–r– 1 root root 0 Jun 23 20:56 2.txt
[root@myfreelinux ~]# test -G 1.txt && echo “belong to a group” || echo
“not belong to a group”
not belong to a group
[root@myfreelinux ~]# test -G 2.txt && echo “belong to a group” || echo
“not belong to a group”
belong to a group
9、test –O File 文件存在并且属于有效用户ID,注意是大写的“O”
[root@myfreelinux ~]# test -O 1.txt && echo “blong to a user” || echo
“not belong to a user”
not belong to a user
[root@myfreelinux ~]# test -O 2.txt && echo “belong to a user” || echo
“not belong to a user”
belong to a user
10、test –t
FD 文件描述符是在一个终端打开的

三、两个文件的比较
1、test File1 –ef
File2
两个文件具有同样的设备号和i结点号,主要是判断硬链接文件
[root@myfreelinux tmp]# ln test.txt test1.txt 建立一个硬链接
[root@myfreelinux tmp]# ls -l test.txt test1.txt
-rw-r–r– 2 root root 0 06-23 14:17 test1.txt
-rw-r–r– 2 root root 0 06-23 14:17 test.txt
[root@myfreelinux tmp]# test test.txt -ef test1.txt && echo “is hard
link” || echo “is not hard link”
is hard link
2、test File1 –nt
File2
文件1newer than文件2
[root@myfreelinux tmp]# touch 1.txt
[root@myfreelinux tmp]# touch 2.txt
[root@myfreelinux tmp]# test 2.txt -nt 1.txt && echo “newer than” ||
echo “not newer than”
newer than
[root@myfreelinux tmp]# test 1.txt -nt 2.txt && echo “newer than” ||
echo “not newer than”
not newer than
3、test File1 –ot
File2
文件1older than文件2
[root@myfreelinux tmp]# test 1.txt -ot 2.txt && echo “older than” ||
echo “not older than”
older than
[root@myfreelinux tmp]# test 2.txt -ot 1.txt && echo “older than” ||
echo “not older than”
not older than

四、两个整数之间的判断
1、test 整数1 –eq 整数2
整数equal
[root@myfreelinux tmp]# test 3 -eq 4 && echo “is equal” || echo “is not
equal”
is not equal
2、test 整数1 –ge 整数2
整数1greater than or equal整数2
[root@myfreelinux tmp]# test 4 -ge 3 && echo “greater than or equal” ||
echo “not greater or equal”
greater than or equal
[root@myfreelinux tmp]# test 4 -ge 4 && echo “greater than or equal” ||
echo “not greater or equal”
greater than or equal
3、test 整数1 –gt 整数2
整数1greater整数2
[root@myfreelinux tmp]# test 4 -gt 3 && echo “greater” || echo “not
greater”
greater
[root@myfreelinux tmp]# test 3 -gt 4 && echo “greater” || echo “not
greater”
not greater
4、test 整数1 –le 整数2
整数1less than or equal整数2
[root@myfreelinux tmp]# test 3 -le 4 && echo “less than or equal” ||
echo “not less than or equal”
less than or equal
[root@myfreelinux tmp]# test 4 -le 3 && echo “less than or equal” ||
echo “not less than or equal”
not less than or equal
5、test 整数1 –lt 整数2
整数1less than整数2
[root@myfreelinux tmp]# test 3 -lt 4 && echo “less than” || echo ” not
less than”
less than
6、test 整数1 –ne 整数2
整数1not equal整数2
[root@myfreelinux tmp]# test 4 -ne 4 && echo ” not equal ” || echo
“equal”
equal
[root@myfreelinux tmp]# test 3 -ne 4 && echo “not equal” || echo
“equal”
not equal
五、判断字符串的数据
1、test –z 字符串
字符串的长度为零,则判断为true
[root@myfreelinux ~]# test -z “” && echo ” is null” || echo “is not
null”
is null
2、test –n 字符串 字符串的长度非零则判断为true,如果为空,则返回FALSE
[root@myfreelinux ~]# string=””
[root@myfreelinux ~]# test -n “” && echo “is not null” || echo “is
null”
is null
[root@myfreelinux ~]# test -n “KaTeX parse error: Expected 'EOF', got '&' at position 9: string” &̲& echo “is not …字符串”1=”KaTeX parse error: Expected 'EOF', got '#' at position 53: …@myfreelinux ~]#̲ string1=abc [r…string” = “KaTeX parse error: Expected 'EOF', got '&' at position 10: string1” &̲& echo “two str…字符串1″!=”KaTeX parse error: Expected 'EOF', got '#' at position 54: …@myfreelinux ~]#̲ test “string1” != “$string” && echo “two string
is not equal” || echo “two string is equal”
two string is equal
六、多重条件判断
1、if test (表达式为真)
[root@myfreelinux tmp]# touch test.txt
[root@myfreelinux tmp]# ls -l test.txt
-rw-r–r– 1 root root 0 06-23 14:17 test.txt
[root@myfreelinux tmp]# test -r test.txt && echo “readable” || echo “no
readable”
readable
2、if test !表达式为假
[root@myfreelinux tmp]# test ! -x test.txt && echo “no exectable” ||
echo “exectable”
no exectable
3、test 表达式1 –a 表达式2
两个表达式都为真
[root@myfreelinux tmp]# test -r test.txt -a -w test.txt && echo
“readable and writable” || echo “no readable or writable or both”
readable and writable
4、test 表达式1 –o 表达式2
两个表达式有一个为真
[root@myfreelinux tmp]# test -r test.txt -o -x test.txt && echo
“readable or exectable” || echo “no readable exectable”
readable or exectable

五、

一份360的运维面试题

2012年04月16日 13:46:37 zhengdl126 阅读数:183

公司名称:奇虎360
招聘职位:运维工程师
职位需求:
1、精通FreeBSD/Linux系统安装配置和系统参数优化设置。
2、三年以上IDC、服务器运维经验。
3、精通apache、nginx等web服务器和参数的配置优化。
4、熟悉MySQL数据库优化者佳。
5、熟悉cisco、H3C路由器和交换机配置者佳。
6、工作有条理,工作习惯良好,有一定的故障处理能力。
7、可承受较大的工作压力,对待工作认真负责,有较强的工作责任心。

以下是面试题:
1、写一个脚本查找最后创建时间是3天前,后缀是*.log的文件并删除。
2、写一个脚本将某目录下大于100k的文件移动至/tmp下。
3、写一个脚本将数据库备份并打包至远程服务器192.168.1.1 /backup目录下。
4、写一个防火墙配置脚本,只允许远程主机访问本机的80端口。
5、写一个脚本进行nginx日志统计,得到访问ip最多的前10个(nginx日志路径:/home/logs/nginx/default/access.log)。
6、写出下列命令的含义
(1)MaxKeepAliveRequests
100
(2)Options FollowSymLinks

Order Deny Allow

Deny from all
Allow from 192.168.1.1
7、写一个脚本把指定文件里的/usr/local替换为别的目录。
8、请简单阐述运维工程师的职责。

PS:此测试题是内部拿到的,我并非360的人,更不是HR,大家仅供参考。

出现几率比较高的:
1、简要描述Linux的启动过程?
2、简要叙述下列端口所运行的服务
21、22、23、25、110、143、873、3306
3、TCP断头最小长度是___字节?
4、让某普通用户能进行cp /dir1/file1 /dir2的命令时,请说明dir1 file1最小具有什么权限?
5、简述TCP三次握手的过程?

====================================================================

1、写一个脚本查找最后创建时间是3天前,后缀是*.log的文件并删除。
find / -name “*.log” -ctime +3 -exec rm -f {} ;
2、写一个脚本将某目录下大于100k的文件移动至/tmp下。
for i in find /test -type f -size +100k;do cd /test && mv $i
/tmp;done
3、写一个脚本将数据库备份并打包至远程服务器192.168.1.1 /backup目录下。
mount 192.168.1.1:/backup /mnt
cd /mnt
/usr/local/mysql/bin/mysqldump -hlocalhost -uroot test >test.sql
tar czf test.sql.tar.gz test.sql
rm -f test.sql
4、写一个防火墙配置脚本,只允许远程主机访问本机的80端口。
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -F
iptables -X
iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -P INPUT DROP

5、写一个脚本进行nginx日志统计,得到访问ip最多的前10个(nginx日志路径:/home/logs/nginx/default/access.log

awk ‘{a[$1]++}END{for (j in a) print a[j],j}’
/home/logs/nginx/default/access.log|sort -nr|head -10

=======================================

1、写一个脚本查找最后创建时间是3天前,后缀是*.log的文件并删除。
find . -mtime +3 -name ‘*.log’ -ok rm {} ;

2、写一个脚本将某目录下大于100k的文件移动至/tmp下。
find . -size +100k -exec cp {} /tmp ;

4、写一个防火墙配置脚本,只允许远程主机访问本机的80端口。
iptables -F
iptables -X
iptables -A INPUT -p tcp --dport 80 -j accept
iptables -A INPUT -p tcp -j REJECT

5、写一个脚本进行nginx日志统计,得到访问ip最多的前10个(nginx日志路径:/home/logs/nginx/default/access.log)。
cd /home/logs.nginx/default
sort -m -k 4 -o access.logok access.1 access.2 access.3 …
cat access.logok |awk ‘{print $1}’|sort -n|uniq -c|sort -nr |head -10

6.写出下列命令的含义
(1)MaxKeepAliveRequests
100 连接的最大请求数
(2)Options FollowSymLinks
允许192.168.1.1可以列目录

Order Deny Allow

Deny from all
Allow from 192.168.1.1
7.替换文件中的目录
sed ‘s:/user/local:/tmp:g’  filename

出现几率比较高的:
1、简要描述Linux的启动过程?
BIOS启动引导(从mbr中装载启动管理器grub)----GRUB启动引导(装载kernel和initrd到内存)-----内核启动参数-sys init初始化…

2、简要叙述下列端口所运行的服务
21、22、23、25、110、143、873、3306 ftp ssh
telnet snmp pop3 IMAP rsync

3、TCP断头最小长度是__64_字节?
4、让某普通用户能进行cp /dir1/file1 /dir2的命令时,请说明dir1 file1最小具有什么权限?
rx
5、简述TCP三次握手的过程?
客户端发送请求SYN,服务器端接收请求确认并回应SYN+ACK,客户端发回ACK回应…

你可能感兴趣的:(运维工程师面试题总结)