总结⼀下:运维⼯程师⾯试的经历及⾯试相关问题
2018年1⽉4号⾯试
笔者其实没有想到去⾯试,只是在智联上更新了⼀下简历,就陆陆续续接到很多猎头的邮件和电话,实在是没准备好要去⾯试,就推掉了⼏家公司的⾯试了。正因为笔者也很久没有⾯试了,笔者也想去⾯试学习⼀下,闲话少说,下⾯就分享给⼤家笔者在2018年1⽉4号上午10点30分的⾯试经历:
⾸先,猎头或者公司⼈资会把公司的介绍及岗位要求发到你邮箱(或者QQ、),下⾯这份是猎头发给我的岗位说明,为了职业道德操守,公司的介绍和⾯试通知信息我就不贴出来了,我就把岗位要求贴出来:
职位描述:
1、 负责应⽤服务器的安装、配置、优化与维护;
2、 负责应⽤系统的⽇志信息备份、管理、维护与分析;
3、 负责应⽤系统的⽇常监测于维护、故障处理、性能分析与优化;
4、 负责应⽤部署系统、环境配置系统、监控系统的开发、部署、升级与维护,建设⾼性能的运维平台。
岗位要求:
1、 熟悉Linux操作系统的基础知识,熟练使⽤Linux常⽤操作命令;
2、 熟练配置Nginx、HAproxy 等应⽤相关软件的部署、配置与优化维护;
3、 熟悉⽹络基础知识、熟悉TCP/IP的⼯作原理,会配交换机或路由器,能熟练的对⽹络情况进⾏分析
4、 熟悉shell/perl/python中的⼀种或多种进⾏运维程序的开发;
5、 熟悉Nagios,Ganglia等监控软件
看着上⾯的要求⼤家是不是觉得要求也不⾼啊,你要细看就会发现,这家公司要求的还挺多,不仅要会⽹络知识(熟悉TCP/IP好像是每家单位的都会写这样的要求),还要会开发技能。相信很多做运维的兄弟在⽹络这⼀块是个头疼的事情,都对交换机和路由器不怎么会配置和管理。
然后,笔者详细了解他们公司,了解岗位要求,在突击复习⼀下可能会问到的知识点和技术点。到了⾯试的这天时间,早早的起床,把⽛⼀定要刷⼲净,特别是有⼝臭的兄弟,最好准备点⼝⾹糖,到达⾯试公司前嚼块⼝⾹糖,以免因为⼝⽓的原因熏到⾯试官,让你在⾯试官⼼⾥减分。早点要记得吃,如果你是下午⾯试的话也要吃午饭,吃早点了精⽓神就有了。还要注意,带上你的简历和⼀⽀笔,虽然他们那边也会有你的简历,为了以防万⼀还是准备好简历。
最后,关键点来了,就是和⾯试官沟通了,有笔试的公司会让你做些⾯试题,没有笔试就直接和⾯试官聊了,下⾯是我和⾯试官沟通完之后记住的⼀些问题,分享给⼤家看⼀下,笔者⼀共记住了7个问题,好像还有两个问题实在想不起来了,如果⼤家有更恰当的回答⼀定要贴出来⼀起探讨和进步:
1、介绍下⾃⼰?(⼏乎每家公司⾸先都会让你做个⾃我介绍,好像是必修课⼀样)
笔者回答:此处省略笔者的⾃我介绍,笔者建议介绍⾃⼰的时间不宜过长,3-4分钟为宜,说多了⾯试官会觉得你太啰嗦了。说太少了也不⾏,那样会让⼈感觉你的经历太简单了、太空了。正常情况下,⼀般你在做⾃我介绍的同时,⾯试官这个时候在看你的简历,他需要⼀边看简历、⼀边听你介绍⾃⼰,如果你说个⼏句话就把⾃⼰介绍完了,他肯定还没缓过神来,对你的映像会减分的。在介绍的同时思维要清晰,逻辑要清楚,最好是根据你简历上写的经历来介绍,这样可以把⾯试官的思路带到你这⾥来,让他思路跟着你⾛。不要东扯⼀句,西扯⼀句。竟量少介绍⾃⼰的性格、爱好(最好能不说就不说),你可以简单罗列⼲过⼏家公司(最多罗列3家公司/也包含⽬前所在的公司,注意顺序不要乱),都在那⼏家公司负责什么⼯作,都⽤过什么技术,在着重介绍⼀下你⽬前所在的公司是负责哪些⼯作的,可以稍微详细⼀点介绍,不要让⾯试官听着晕头转向的感觉。
2、灰度发布如何实现?
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的原理,能说出个⼤概意思。万⼀⾯试官问到了你写的这⼀条,你都答不上来,那在他⼼⾥你⼜减分了,基本上这次⾯试希望不⼤。
第⼆,如果⾯试官问到你不会的问题,你就说这个不太熟悉,没有具体研究过,千万别不懂装懂,还扯⼀堆没⽤的话题来掩饰,这样只会让⾯试官反感你。
第三,准备充分,竟可能多的记住原理性的知识,⼀般⾯试问的多的就是原理。很少问具体的配置⽂件是怎么配置的。⾯试前也要了解清楚“职位描述”和“岗位要求”,虽然有时候⼤多数不会问到岗位要求的问题,但也要了解和熟悉。
第四,⾯试完后⼀定要总结,尽量记住⾯试官问的每⼀个问题,回去记录下来,如果问到不会的问题,事后要⽴马查百度或者朋友搞清楚、弄明⽩,这样你才能记劳,下次⾯试说不定⼜问到同样的问题。
问完之后,⾯试官就跟我聊薪资待遇了,问我多少钱能达到⾃⼰的要求,我就不便透露了,可以私聊,
哈哈,后续笔者会陆陆续续更新以前⾯试的经历和问题,有需要的朋友可以转载或者收藏起来⼀起讨论。
2017年2⽉24号⾯试
基于⼤家热情⾼昂的⽓氛,笔者⼜花了⼀个下午的时间回忆并整理在2017年2⽉24号笔者在东三环边上(快到东四环了,没有地铁过去,到了四惠还要转公交车)的⼀家传媒公司的⾯试经历,还好笔者有做笔记的习惯,把之前⾯试的问题都记录在案,这⼀次的⾯试笔者可是记忆犹新,因为这次这家公司都跟笔者发offer了,实在是真⼼不想去这家公司就原因推掉了,⼤家可别学我这么不靠谱。下⾯是这家公司中的岗位要求说明:
1、负责公司产品的版本控制、构建和发布管理;
2、负责公司统⼀配置库管理⼯作,权限管理与分配准确及时,定期完成配置备份;
3、负责公司内部开发/测试服务器的运⾏管理⼯作;
4、负责Linux操作系统的安装、配置、监控和维护、问题处理、软件升级、 数据备份、应急响应、故障排除等、保证线上环境的稳定运⾏;
怎么查自己的ip5、负责⽀撑平台24×7稳定运⾏,并进⾏前瞻性容量规划;
6、负责公司机房服务器⽇常维护及⽹络系统安装、部署、维护⼯作。
岗位要求:
1、计算机相关专业本科及以上学历,2年以上运维或配置管理⼯作经验;
2、⾄少熟悉⼀种监控系统搭建,如Nagios/Zabbix/等;
3、⾄少熟悉⼀种集管理⼯具,如Ansible/SaltStack等;
4、有使⽤集成发布⼯具发布构建经验优先。⽐如:bamboo或者Jenkins;
5、熟悉Unix/Linux操作系统,熟悉Weblogic/tomcat等中间件,能够编写shell脚本,熟悉软件开发过程及过程产品,有⼀定的⽹络基础;
6、熟悉rsyslog, flume等⽇志收集和处理系统;
7、具有强烈的安全意识及较强的沟通协调和学习能⼒,良好的团队合作精神,⼯作积极主动。
过去之后,前台美眉把我带到他们公司的地下室,我扫视了⼀下周围的环境,貌似旁边就是机房,因为我听到服务器的声⾳。等了⼏分钟,⾯试官下来了,⾯试官⽬测⽐较瘦,看着跟我⾝材差不多(应该不
到120),他说他是负责运维部的,然后开始就叫我先⾃我介绍,都是⼀个套路,免不了介绍的,所以兄弟们⼀定要把⾃我介绍练好。然后开始问我问题了,跟⾯试官聊得还⾏,问我应该有不下10个以上的问题,我记住了下⾯有10个问题:
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的区别:
抗负载能⼒强、⼯作在第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⽂件,加⼊新增服务。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论