总结⼀下:运维⼯程师⾯试的经历及⾯试相关问题(下篇)
上⽂回顾【总结⼀下:运维⼯程师⾯试的经历及⾯试相关问题】
⼀次偶然的机会,笔者在⼀个招聘平台中刷新岗位的时候突然看到⼀个新发布的岗位,仔细⼀看是海外的岗位,上⾯写的待遇、福利、⼯作内容笔者都有点兴趣,由于笔者也没有尝试过海外⾯试的机会和感觉,所以就和发布这个岗位的猎头联系上了。
猎头问我要了简历,并把个⼈信息详细丰富了⼀下,⽐如有没有护照、⼯作了多久、个⼈职业规划、期望到⼿的薪资等等。猎头就把我的简历和详细的个⼈信息推荐出去了,过了⼏天时间,猎头通知我简历筛选通过了,约个时间可以进⾏技术⾯试(电话⾯试),然后就这样约在了2018年1⽉8号上午。
虽然这次是海外⾯试,但是⾯试官是我们华⼈,和⾯试官在电话中将近聊了2个⼩时左右,笔者聊的也⼝⼲⾆燥。这⼀次⾯试官将近问了40个左右的问题,量实⼤有点⼤,笔者也没记住这么多,⼤概记住了30多个问题,忘记开录⾳了,不然这些问题都能分享出来。别看是海外的⾯试官,其实这次所问的问题在我们国内的⾯试中也常常会问到的,我们先来看⼀下海外的公司的岗位要求吧:
岗位职责:
1、⽇常线上项⽬的需求处理;
2、新项⽬上线对接的相关⼯作;
3、⽇常运维⼯具开发、维护、优化;
4、监控业务的运⾏状态,及时处理项⽬运⾏中出现的故障,保障项⽬服务24x7稳定运⾏;
5、分析排除系统、数据库、⽹络、应⽤等故障及错误;
6、负责服务器的资源调配和系统安全、数据备份。
任职要求:
1. 熟悉linux操作系统,熟练使⽤⼀种或多种脚本语⾔(例如 Python/Perl/Shell);
2. 熟悉⾄少⼀种共有云技术,多种运维平台⼯具(Nagios, Zabbix,Puppet等)
3. 熟悉Nginx,Mysql, Redis, Keepalived, LVS等中间件的配置与调优;
4. 熟悉⽹络部署,多种数据机房故障的发现和排除的⼯具,有做个跨机房数据同步的优先;
5. 熟悉mysql、redis、mongoDB的安装、维护、性能优化;
6. 了解反向代理、负载均衡原理.
7. 有责任⼼,耐⼼,积极肯学的⼼态以及良好的沟通表达能⼒和团队合作精神;
其实这个要求,我在上⼀篇⽂章也说到过,⼤多数公司都写得差不多,很多公司⾃⼰懒的写,直接照搬别的公司发出来岗位要求,所以我们只要了解它就可以了,⾯试的时候不⼀定会问到这些岗位的要求说明,你看这家公司没有写熟悉TCP/IP,其实⾯试官这⼀次有问到TCP/IP这个问题的。这次技术⾯试后总体⾯试官还是⽐较满意,后来猎头通知我⼀⾯过了,准备安排2018年1⽉11号下午进⾏⼆⾯(跟我谈薪资、对海外⼯作的想法、⼈⽣规划等话题)。好了,不多说了,⼤家⾃⼰慢慢看我和⾯试官聊的技术问题吧。
1、介绍下⾃⼰?
1、介绍下⾃⼰?
笔者回答:不管是电话⾯试还是现场⾯试,⾃我介绍是避免不了的,上⼀篇⽂章我有详细介绍这块的内容,这⾥不做解释了,感兴趣的朋友参考我上⼀篇⽂章。
2、为什么想着要离开现在的公司?
笔者回答:虽然是⾯试技术,但也会有很多⾯试官会不经意的问你这个问题,看起来很随意的问题,其实这个问题⾥⾯隐藏了很多信息,最直观的就是看你这个⼈对企业的忠诚度、还能看你是不是⼼浮⽓燥的性格等等。如果你曾经频繁跳过槽,不管出于什么原因,笔者个⼈都不建议写在简历上,最好能够合并⼀些⼯作时间和单位,企业是很担⼼把你招来后会不会短时间你⼜跳槽了。当然如果都是因为企业经营不善倒闭所⾄,就没关系了。说到这⾥,就想起了笔者曾经⼀位同事,连续在好⼏家单位都⼲倒闭了,这我也不知道说啥好了。。。好了,咋们接着往下⾛。
3、TCP/IP原理说⼀下?TCP有哪⼏个状态,分别是什么意思?
笔者回答:以tcp/ip协议为核⼼,分五层。tcp⼯作在第4层,主要有tcp和udp协议。其中tcp是可靠协议,udp是不可靠协议。 tcp传输之前,需要建⽴连接,通过三次握⼿实现。
TCP三次握⼿状态:⾸先是closed状态,当发起连接后,进⼊Listen状态,当三次握⼿之后,进⼊EST状态。三次握⼿中间还有⼀个临时状态:SYN_SENT。SYN_SENT 当应⽤程序发送ack之后,进⼊EST状态,如果没有发送,就关闭closed.
4、有个客户说访问不到你们的⽹站,但是你们⾃⼰测试内⽹和外⽹访问都没问题。你会怎么排查并解决客户的问题?
笔者回答:我们⾃⼰测了都没问题,只是这个客户访问有问题,那肯定是要先联系到这个客户,能远程最好,问⼀下客户的⽹络是不是正常的,访问其它的⽹站有没有问题(⽐如京东、百度什么的)。如果访问其它⽹站有问题,那叫客户解决本⾝⽹络问题。如果访问其它⽹站都没问题,⽤ping和nslookup解析⼀下我们的⽹站是不是正常的,让客户⽤IP来访问我们的⽹站是否可⾏,如果IP访问没问题,那就是客户的DNS服务器有问题或者DNS服务器解析不到我们的⽹站。还有⼀种可能就是跨运营商访问的问题,⽐如我们的服务器⽤的是北⽅联通、⽽客户⽤的是南⽅移动,就也有可能突然在某个时间段访问不到,这种情况在庞⼤的中国⽹络环境中经常发⽣(⼀般是靠CDN解决)。还有可能就是我们的⽹站没有SSL证书,在公⽹是使⽤的是http协议,这种情况有可能就是没有⽤https协议⽹站被运营商劫持了。
5、redhat 6.X版本系统和 centos 7.X版本有啥区别?
笔者回答:桌⾯系统(6/GNOE2.x、7/GNOME3.x)、⽂件系统(6/ext4、7/xfs)、内核版本(6/2.6x、7/3.10x)、防⽕墙(6/iptables、7/firewalld)、默认数据库(6/mysql、7/mariadb)、启动服务(6/service启动、7/systemctl启动)、⽹卡(6/eth0、7/ens192)等。
6、你会⽤什么⽅法查看某个应⽤服务的流量使⽤情况?
笔者回答:如果是单⼀应⽤的服务器,只需要⽤iftop、sar等⼯具统计⽹卡流量就可以。如果服务器跑了多个应⽤,可以使⽤nethogs⼯具实现,它的特别之处在于可以显⽰每个进程的带宽占⽤情况,这样可
以更直观获取⽹络使⽤情况。
7、说⼀下你们公司怎么发版的(代码怎么发布的)?
笔者回答:我说什么来着,这个问题⼜问到了。发布:jenkins配置好代码路径(SVN或GIT),然后拉代码,打tag。需要编译就编译,编译之后推送到发布服务器(jenkins⾥⾯可以调脚本),然后从分发服务器往下分发到业务服务器上。
8、elk中的logstash是怎么收集⽇志的,在客户端的logstash配置⽂件主要有哪些内容?
笔者回答:input、output两⼤块配置;input中指定⽇志(type、path)等,output指定⽇志输出的⽬标(host、port)等。
9、ansible你⽤过它的哪些模块,ansbile同时分发多台服务器的过程很慢(它是逐台分发的),你想过怎么解决吗?
笔者回答:⽤过ansible的(copy file yum ping command shell)等模块;ansible默认只会创建5个进程,所以⼀次任务只能同时控制5台机器执⾏.那如果你有⼤量的机器需要控制,或者你希望减少进程数,那你可以采取异步执⾏.ansible的模块可以把task放进后台,然后轮询它.这使得在⼀定进程数下能让⼤量需要的机器同时运作起来.
10、nginx有哪⼏种调度算法,解释⼀下ip hash和轮询有啥不⼀样?
笔者回答:常⽤的有3种调度算法(轮询、ip hash、权重)。
轮询:upstream按照轮询(默认)⽅式进⾏负载,每个请求按时间顺序逐⼀分配到不同的后端服务器,如果后端服务器down掉,能⾃动剔除。
ip hash:每个请求按访问ip的hash结果分配,这样每个访客固定访问⼀个后端服务器,可以解决session的问题。
权重:指定轮询⼏率,权重(weight)和访问⽐率成正⽐,⽤于后端服务器性能不均的情况。
11、nginx你⽤到了哪些模块,在proxy模块中你配置过哪些参数?
笔者回答:⽤到过(负载均衡upstream、反向代理proxy_pass、location、rewrite等)。
proxy模块中配置过:proxy_set_header、proxy_connect_timeout、proxy_send_timeout、proxy_buffer_*
12、说⼀下iptables的原理,有哪些表、哪些链?怎么修改默认策略全部为DROP?
笔者回答:iptables是⼯作在TCP/IP的2、3、4层。你要说它的原理也不是⼏话能概括的,当主机收到⼀个数据包后,数据包先在内核空间中处理,若发现⽬的地址是⾃⾝,则传到⽤户空间中交给对应的应⽤程序处理,若发现⽬的不是⾃⾝,则会将包丢弃或进⾏转发。
4张表(raw表、mangle表、net表、filter表)
5条链(INPUT链、OUTPUT链、PORWARD链、PREROUTING链、POSTROUTING链)。
全部设置为DROP:
#iptables -P INPUT DROP
#iptables -P OUTPUT DROP
#iptables -P FORWARD DROP
⼩结:iptables远不⽌这⼏句话就能描述清楚的,也不是随便在⽹上趴些资料就能学好的,需要⾃⼰⽤起来,经过⼤量的实验和实战才能熟悉它,iptables真的很考验运维⼈员的技术⽔平,⼤家⼀定要⽤⼼学好这个iptables。
13、如何开启linux服务器路由转发功能?
笔者回答:echo "1" > /proc/sys/net/ipv4/ip_forward
14、nginx中rewrite有哪⼏个flag标志位(last、break、redirect、permanent),说⼀下都什么意思?
笔者回答:
•last : 相当于Apache的[L]标记,表⽰完成当前的rewrite规则
•break : 停⽌执⾏当前虚拟主机的后续rewrite指令集
•redirect : 返回302临时重定向,地址栏会显⽰跳转后的地址
•permanent : 返回301永久重定向,地址栏会显⽰跳转后的地址
301和302不能简单的只返回状态码,还必须有重定向的URL,这就是return指令⽆法返回301,302的原因了。这⾥ last 和 break 区别有点难以理解:
•last⼀般写在server和if中,⽽break⼀般使⽤在location中
•last不终⽌重写后的url匹配,即新的url会再从server⾛⼀遍匹配流程,⽽break终⽌重写后匹配
•break和last都能组织继续执⾏后⾯的rewrite指令
15、你在shell脚本中⽤过哪些语法,case语法会⽤到哪些地⽅?
笔者回答:⼀般会⽤到if语句、for语句、while语句、case语句以及function函数的定义;case语句为多选择语句,可以⽤case语句匹配⼀个值与⼀个模式,如果匹配成功,执⾏相匹配的命令。最典型的case语法会⽤到启动服务脚本的处理。
16、linux系统中你会⽤到什么命令查看硬件使⽤状态信息?
笔者回答:这个命令就很多了,⽐如:lscpu(查看cpu信息)、free -m(查看内存信息)、df -h(查看硬盘分区信息)、top(还可以动态查看cpu、内存使⽤情况的信息),/proc/⽬录下也可以查看很多硬件信息。
17、我要过滤⼀段⽂本()中第⼆列的内容?如果这段⽂件有很多特殊符号,⽐如⽤:(冒号)怎么过滤它的第⼆段?如果我要过滤这段⽂本中,其中有⼀⾏只有7个符如何实现?
笔者回答: awk '{print $2}'
awk -F':' '{print $2}'
18、⽐如开发想你查看tomcat⽇志,但是catalia.out特别⼤,你不可能⽤vi打开去看,你会怎么查看?如果你⽤ grep -i"error" 过滤只是包含error的⾏,我想同时过滤error上⾯和下⾯的⾏如何实现?
笔者回答:grep -i "error" catalia.out
grep -C 1 -i "error" catalia.out
参数-C:是匹配前后的⾏,后⾯1是匹配前后各1⾏
19、怎么编写⼀个定时计划任务?⾥⾯⽤到的最⼩单位是什么?
笔者回答:crontab -e,最⼩单位是分钟
20、zabbix如何修改其中监控的⼀台服务器中内存阈值信息,⽐如正常内存使⽤到了80%报警,我想修改为60%报警?
笔者回答:正常来说,⼀般会把监控的服务器统⼀加⼊到⼀个模板中,修改模板的其是某⼀项的监控项参数和告警阈值后,加⼊模板中的所有主机都会同步。如果单独想修改其中某⼀台服务器内存告警阈值,需要进⼊这台主机,单独创建⼀个告警Triggers,关联这台主机监控内存的项,配置好告警的阈值为60%即可实现。其实,zabbix⼀切都为图形化操作,如果没有接触过zabbix的朋友,可能听起来不太清楚。
21、mysql主从复制原理说⼀下?
笔者回答:mysql⽀持三种复制类型(基于语句的复制、基于⾏的复制、混合类开进的复制)。
如果你记不住太多内容,可以简单说明⼀下原理:
(1) master将改变记录到⼆进制⽇志(binary log)中(这些记录叫做⼆进制⽇志事件,binary log events);
(2) slave将master的binary log events拷贝到它的中继⽇志(relay log);
(3) slave重做中继⽇志中的事件,将改变反映它⾃⼰的数据。
如果你能详细记住它的原理,可以这么回答:
该过程的第⼀部分就是master记录⼆进制⽇志。在每个事务更新数据完成之前,master在⼆⽇志记录这些改变。MySQL将事务串⾏的写⼊⼆进制⽇志,即使事务中的语句都是交叉执⾏的。在事件写⼊⼆进制⽇志完成后,master通知存储引擎提交事务。
下⼀步就是slave将master的binary log拷贝到它⾃⼰的中继⽇志。⾸先,slave开始⼀个⼯作线程——I/O线程。I/O线程在master上打开⼀个普通的连接,然后开始binlog dump process。Binlog dump process从master的⼆进制⽇志中读取事件,如果已经跟上master,它会睡眠并等待master产⽣新的事件。I/O线程将这些事件写⼊中继⽇志。
SQL slave thread(SQL从线程)处理该过程的最后⼀步。SQL线程从中继⽇志读取事件,并重放其中的事件⽽更新slave的数据,使其与master中的数据⼀致。只要该线程与I/O线程保持⼀致,中继⽇志通常会位于OS的缓存中,所以中继⽇志的开销很⼩。
22、⽤什么命令可以查看上⼀次服务器启动的时间、上⼀次谁登录过服务器?
笔者回答:w命令查看上次服务器启动时间。last命令查看登录。
23、redis集原理说⼀下,正常情况下mysql有多个库,redis也有多个库,我怎么进⼊redis集中的第2个库?还有,我想查看以BOSS开头的值?redis持久化是如何实现(⼀种是RDS、⼀种是AOF),说⼀下他们有啥不⼀样?
笔者回答:这个redis原理的问题⼜问到了,看样⼦很多⾯试官都很关⼼这个redis,在上⼀篇⽂章笔者的⼀次⾯试也有这个⾯试问题。
【集原理】:其实它的原理不是三两句话能说明⽩的,redis 3.0版本之前是不⽀持集的,官⽅推荐最⼤的节点数量为1000,⾄少需要3(Master)+3(Slave)才能建⽴集,是⽆中⼼的分布式存储架构,可以在多个节点之间进⾏数据共享,解决了Redis⾼可⽤、可扩展等问题。集可以将数据⾃动切分(split)到多个节点,当集中的某⼀个节点故障
时,redis还可以继续处理客户端的请求。
【redis持久化】:持久化通俗来讲就是将内存中的数据写⼊硬盘中,redis提供了两种持久化的功能(RDB、AOF),默认使⽤RDB的⽅式。
RDB:全量写⼊持久化,⽽RDB持久化也分两种(SAVE、BGSAVE)。
SAVE是阻塞式的RDB持久化,当执⾏这个命令时redis的主进程把内存⾥的数据库状态写⼊到RDB⽂件(即上⾯的dump.rdb)中,直到该⽂件创建完毕的这段时间内redis将不能处理任何命令请求。
BGSAVE属于⾮阻塞式的持久化,它会创建⼀个⼦进程专门去把内存中的数据库状态写⼊RDB⽂件⾥,同时主进程还可以处理来⾃客户端的命令请求。但⼦进程基本是复制的⽗进程,这等于两个相同⼤⼩的redis进程在系统上运⾏,会造成内存使⽤率的⼤幅增加。
AOF:与RDB的保存整个redis数据库状态不同,AOF的持久化是通过命令追加、⽂件写⼊和⽂件同步三个步骤实现的。AOF是通过保存对redis服务端的写命令(如set、sadd、rpush)来记录数据库状态的,即保存你对redis数据库的写操作。
为了⼤家能够更好的理解redis持久化,笔者建议⼤家可以看下这两篇⽂章会⽐较好理解:
24、你在⼯作的过程中,遇到过你映像最深的是什么故障问题,你⼜是如何解决?
怎么查自己的ip笔者回答:这个问题主要也是考你排查故障的思路及⽤到的相关命令⼯具,其每个⼈在⼯作中都会遇到各种各样的问题(不管是⽹络问题、应⽤配置问题、还是APP打开慢/⽹站打开慢)等等。你只要记住⼀个你映像最为深刻、最为典型的故障就⾏。笔者也遇到过各种问题,我在这⾥就是写出来,怕误导了⼤家。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论