技术面试会问很多技术问题吗?

其实我也没想到会去面试。我刚刚在智联上更新了简历,就陆续收到了很多猎头的邮件和电话。我真的没有准备好去面试,所以我拒绝了几家公司的面试。就因为很久没面试了,我也想去面试学习。我们闲话少说。给大家分享一下笔者10月4日上午18,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分钟为宜。说多了面试官会觉得你太啰嗦。说的太少没什么好处,因为会让人觉得你的体验太简单,没空间。一般情况下,你自我介绍的时候,面试官这个时候正在看你的简历。他需要一边听你介绍自己,一边看你的简历。三言两语介绍自己,他肯定恢复不了,形象会降低。同时,你在思维和逻辑上要清晰。最好根据简历上写的经历来介绍,这样可以把面试官的想法带给你,让他跟着你走。别扯一个字,扯一个字。少跟我说你的性格和爱好(最好什么都不要说)。你可以简单的列出你工作过的几家公司(最多列出三家/包括你现在的公司,注意顺序),你在那些公司负责什么工作,你用过什么技术。重点介绍一下你现在的公司负责哪些工作,可以稍微详细介绍一下,不至于让面试官感到困惑。

2.如何实现灰度发布?

作者回答:其实这个问题我没答好,就不写误导大家了。每个人都有享受的好方法。不过事后在知乎上看到一个网友的建议,不错。可以参考一下:/question/20584476

3.Mongodb熟悉吗?通常部署多少单位?

作者回答:有,已经部署了,但是没有深入研究。一般mongodb部署主从或者mongodb分段集群;建议部署三到五台服务器。MongoDB切片的基本思想是将集合切割成小块。这些块被分散成几个切片,每个切片只负责总数据的一部分。对于客户端来说,不需要知道数据是拆分的,也不需要知道服务器的哪个片段对应哪个数据。在数据分片之前,需要运行一个名为mongos的路由过程。这个路由器知道所有数据的存储位置,知道数据和芯片的对应关系。对于客户端,它只知道连接了一个普通的mongod。在请求数据的过程中,通过路由器上数据与芯片的对应关系,路由到目标数据所在的芯片。如果请求有响应,路由器会收集响应并将其发送回客户端。

4.如何发布和回滚,如何用jenkins实现?

作者回答:Release: jenkins配置代码路径(SVN或GIT),然后拉代码并标记。根据需要编译,编译后推送到发布服务器(在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代理。

7.您如何备份数据,包括数据库备份?

作者回答:在生产环境中,无论是应用数据还是数据库数据,在部署时都会有一个主从架构或者集群,这本身就是数据的热备份;其实可以考虑冷备份,使用专用服务器作为备份服务器。比如可以使用rsync+inotify实现数据的冷备份。如果是分布式包备份,一般情况下是有发布服务器的,分布式包每次分发都会保存。

摘要

总结一下面试中的一些注意点,作者可能也不对。为了运维工作的兄弟们能拿高薪,我们必须一起作证,一起进步,一起讨论:

首先,你要熟悉你的简历,你必须能说出一两件关于简历上写作技巧的事情,因为面试官会挑你简历上写的问题。比如你的简历上说你熟悉mysql数据库的部署、安装和原理。你立马写了这么一个技能。如果不熟悉,也要了解一下mysql的原理,给出一个大概的思路。如果面试官问你这篇文章,你答不上来,你在他心目中就失分了,基本上这次面试希望不大。

第二,如果面试官问你一个你听不懂的问题,就说不熟悉,没有详细研究过。不要装懂,扯一堆没用的话题来掩饰,只会让面试官反感你。

第三,准备充分,尽量多记原理知识。一般面试问的比较原则。很少有人问具体配置文件是怎么配置的。面试前,还要了解“职位描述”和“职位要求”。虽然有时候大部分人不会问工作要求的问题,但是要了解,要熟悉。

第四,面试结束后一定要总结,尽量记住面试官问的每一个问题,回去记录。如果你问了一个你不会的问题,你应该在事后马上去百度或者找朋友了解一下,了解一下,这样你就能记住这个工作,下次面试的时候再问同样的问题。

面试结束后,面试官找我谈工资,问我多少钱能满足我的要求,我不能透露。可以私聊,哈哈。后面作者会陆续更新之前的面试经历和问题,有需要的朋友可以转载或者收藏起来一起讨论。

基于大家的热烈气氛,笔者又花了一个下午的时间回忆整理了2065438+2007年2月24日在一家传媒公司的采访经历,地点在东三环附近(过去没有地铁,到四会要换乘公交车)。好在作者有做笔记的习惯,把之前面试的所有问题都记录下来。这段采访记忆犹新,因为这家公司已经发给笔者了。以下是对该公司工作要求的描述:

工作职责:

1,负责公司产品的版本控制、建设和发布管理;

2.负责公司统一配置库的管理,准确及时地管理和分配权限,定期完成配置备份;

3.负责公司内部开发/测试服务器的运行和管理;

4.负责Linux操作系统的安装、配置、监控和维护、问题处理、软件升级、数据备份、应急响应、故障排除等。,确保在线环境的稳定运行;

5.负责支持平台24×7的稳定运行,并进行前瞻性的容量规划;

6.负责公司机房服务器的日常维护以及网络系统的安装、部署和维护。

工作要求:

1,计算机相关专业本科以上学历,2年以上运维或配置管理工作经验;

2.熟悉至少一个监控系统,如Nagios/Zabbix/;

3.熟悉至少一个集群管理工具,如ansi ble/salt stack;

4.有使用集成发布工具进行发布和构建的经验者优先。比如:竹子或者詹金斯;;

5、熟悉Unix/Linux操作系统,熟悉Weblogic/tomcat等中间件,能够编写shell脚本,熟悉软件开发流程和流程产品,有一定的网络基础;

6.熟悉日志收集和处理系统,如rsyslog、flume

7.具有较强的安全意识,较强的沟通、协调和学习能力,良好的团队合作精神,工作积极主动。

过去之后,前台的姑娘带我去了他们公司的地下室。我扫了一眼周围,旁边好像有机房,因为我听到了服务器的声音。等了几分钟,面试官下来了。目测面试官比较瘦,看起来和我差不多大(应该不到120)。他说他是负责运维部门的,然后让我先自我介绍一下。这是例行公事,不可避免地要自我介绍,所以兄弟们必须练习自我介绍。然后开始问我问题,和面试官聊天还可以,问我的问题超过10个,我记得以下10个问题:

1的原理与LVS负载和Nginx负载有什么区别?

作者回答:我觉得采访官司没有对这个问题打招呼。通常,我会问,“LVS的负载均衡技术和调度算法是什么?”。我的回答是根据我说的问题。反正他频频点头。当然,作者的回答可能没有我下面整理的那么详细,我已经说清楚了。

LVS是Liunx虚拟服务器的缩写。利用LVS和linux操作系统提供的负载均衡技术,可以实现高性能、高可用性的服务器集群。一般来说,LVS位于整个集群系统的前端,由一个或多个负载调度器组成,分布在应用服务器上。它工作在第4层(即TCP/IP中的传输层),LVS是基于IP负载均衡技术的IPVS模块实现的,IPVS有三种负载均衡机制,分别是NAT、TUN和DR,具体如下:

VS/NAT:即(通过网络地址转换的虚拟服务器)

即网络地址转换技术实现了虚拟服务器。当用户请求到达调度器时,调度器将请求报文的目标地址(即虚拟IP地址)重写为选择的真实服务器地址,同时报文的目标端口也改为选择的真实服务器的对应端口,最终将报文请求发送到选择的真实服务器。从服务器获取数据后,真实服务器在向用户返回数据时,需要再次通过负载调度器将报文的源地址和端口更改为虚拟IP地址和对应的端口,然后将数据发送给用户,完成整个负载调度过程。

可以看到,在NAT模式下,用户请求和响应消息都必须由Director服务器地址重写。当用户请求越来越多时,调度器的处理能力就会被称为瓶颈。

VS/TUN:即(通过IP隧道的虚拟服务器)

即IP隧道技术实现虚拟服务器。其连接调度和管理与VS/NAT相同,但其消息转发方式不同。在VS/TUN中,调度器使用IP隧道技术将用户的请求转发到一个真实的服务器,该服务器将直接响应用户的请求,而不经过前端调度器。另外,对真实服务器的地理位置没有要求,可以和Director服务器位于同一个网段,也可以是独立的网络。因此,在TUN模式下,调度器将只处理用户的消息请求,集群系统的吞吐量大大提高。

VS/DR:即(通过直接路由的虚拟服务器)

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

回答负载调度算法,IPVS在八种负载调度算法中实现,常用的调度算法有四种(循环调度、加权循环调度、最少链路调度、加权最少链路调度)。一般来说,说这四种算法就够了,不需要详细解释这四种算法。只要你把以上三种负载均衡技术解释清楚,面试官对这个问题就满意了。接下来就简单说说和nginx的区别:

LVS的优势:

抗负载能力强,工作在第四层只做分发,不产生流量,这也决定了它在负载均衡软件中性能最强;没有流量,同时保证均衡器IO的性能不受大流量的影响;

工作稳定,有自己完整的热备方案,如LVS+Keepalived、LVS+heart beat;;

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

配置比较低,这是缺点也是优点。因为没有太多需要配置,所以不需要过多的接触,大大降低了人为失误的概率。

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的会话维护,Cookie的引导能力相对欠缺。

2.redis集群的原理,如何实现redis碎片化,贵公司的redis在哪些环境下使用?

作者回答道:reids集群原理:

其实它的原理不是三言两语能解释清楚的。在Redis 3.0版之前,不支持集群。官方推荐的最大节点数是1000,构建一个集群至少需要3(主)+3(从)。它是一种去中心化的分布式存储架构,数据可以在多个节点之间共享,从而解决了redis 3.0的高可用性和可扩展性问题。集群可以自动将数据拆分到多个节点,当集群中的一个节点出现故障时,redis可以继续处理客户端的请求。

Redis碎片:

分区是将数据分成多个Redis实例的过程,因此每个实例只包含所有键的子集。当数据量较大时,数据存储在多个数据库中,减少了单个节点的连接压力,实现了海量数据存储。分段部署方法一般分为以下三种:

(1)在客户端切片;该方法在客户端确定要连接的redis实例,然后直接访问对应的redis实例;

(2)切片试剂;这样,客户端不直接访问redis实例,也不知道要访问哪个redis实例,而是由代理转发请求和结果;工作过程如下:客户端先向代理发送请求,代理通过切片算法确定访问哪个redis实例,然后将请求发送给对应的redis实例,redis实例将结果返回给代理,代理最终将结果返回给客户端。

(3)在redis服务器上切片;这种方法称为“查询路由”。这样,客户机随机选择一个redis实例来发送请求。如果请求的内容不在当前redis实例中,它将负责将请求转发到正确的redis实例。在一些实现中,redis实例不会转发请求,而是将正确的redis的信息发送给客户端,客户端将请求发送给正确的redis实例。

redis在什么环境中使用:

Redis在java和php环境下使用,主要缓存登录用户信息数据、设备详情数据、会员签到数据等。

3.你如何统计和分类当前访问的IP?

作者回复:统计用户的访问IP,使用awk结合uniq和sort过滤访问. log日志可以很好的统计和排序。一般这样回答就够了。当然,你也可以说出其他的统计方式,这些都是你的加分项。

4.您将使用哪些虚拟化技术?

作者回答:vmware vsphere和kvm,我用vmware vsphere虚拟化的比较多,有几本书在生产环境用vmware vsphere和kvm,我在测试环境用。Vmware是一种原生架构虚拟化技术,即可以直接在硬件上运行。Kvm属于常驻架构的虚拟化技术,运行在系统之上。vmware vcenter

管理方便,图形化管理界面强大稳定,一般适合企业使用。KVM的管理界面有点差,需要管理人员花一些时间学习它的维护和管理技术。

5.如果有人反应过来,检索后端接口特别慢,你会怎么检查?

作者回答:其实这个问题没有具体的答案。只是看你的回答和面试官的契合度了。你能不能说到他想要的点,主要看你排忧解难的思路。我是这样说的:问清楚回应的人哪个服务应用或者接口访问页面慢,让他把页面或者相关网址发给你。首先,最直观的分析就是用浏览器按下F12,看哪块内容太慢(DNS解析,网络加载,大图,或者一个文件的内容等等。),而且如果有,对症下药解决(如果图片慢,优化图片,网络慢)其次,看后端服务日志。事实上,查看大多数问题的相关日志才是最有效的分析。最好使用tail -f F跟踪日志。当然,您必须单击Test来访问接口日志,然后才能将它们输出。最后排除sql,找到sql并在mysql中执行,看是否需要很长时间。如果需要很长时间,就要优化SQL问题。expain SQL并查看索引,然后相应地优化它。如果数据量太大,可以分表,也可以分数据库。如果SQL没有问题,可能是写的逻辑代码有问题。逐行检查代码,找到耗时的地方来转换和优化逻辑。

6.mysql数据库采用主从读写分离,主库读写从库。如果无法从图书馆阅读或者从图书馆阅读特别慢,你会怎么解决?

作者回答:我觉得这个问题的答案不太好。擅长mysql的朋友希望给点意见。在解决问题的前提下,先增加从库数量,暂时解决问题,然后抓取慢日志,分析sql语句,优化就优化了。速度慢或者硬件跟不上,需要升级;要么是软件需要调试优化,正在详细解决问题。

7.单核和多核cpu有什么区别?

作者回答:很少有面试官会问这样的问题,即使有也要老老实实回答。还好之前学过CPU。我是这么说的:双核CPU可以处理多个任务,为了处理好它们,把它们排队。单核CPU一次处理一个任务,轮流处理每个程序任务。双核的优势不是频率,而是同时处理多个事情。单核同时只能做一件事,比如你可以在后台同时下载BT,前台可以一边看电影一边复制文件,QQ。

8.机械磁盘和固态硬盘有什么区别?

作者回答:妈的,都什么年代了,还问了盘的问题。这个面试官有点搞笑。那也要回答:

HDD代表机械硬盘,SSD代表固态硬盘。首先从性能上来说,SSD几乎比机械硬盘好,SSD的读写速度肯定比机械硬盘快,因为SSD和机械硬盘的结构完全不同(具体结构不用解释)。其次,固态盘几乎没有噪音,而机械盘有噪音。另外,根据目前的市场情况,一般的机械盘容量大,价格低;固态盘容量小,价格高。但是企业还是更喜欢固态盘。

9.你用过哪些监控系统?

作者回答:这个监控问题又问了。2065 438+08 10月4日也被问过类似的问题。我用过zabbix,nagios,cacit等。但这次采访我只说用了zabbix和nagios。之后面试官让我谈谈两种监控的区别:

在网页功能和绘图方面:

Nagios简单直观,告警和数据在同一个页面,红色是问题项。不要在Nagios web上做任何配置。Nagios需要安装额外的插件,插件的绘制不够美观。

Zabbix监控数据和报警是分开的。查看问题项需要看触发器,数据要在最新的数据中查看。而且,zabbix还有很多其他的配置项。zabbix带有绘图功能,可以在一张图中手动显示多个监控项目。

在监测服务方面:

Nagios附带的监控项目很少。当监控一些变化时,例如多个分区和多个网卡,需要手动配置。

Zabbix自带了很多监控内容。感觉Zabbix从一开始就为你做了很多事情,尤其是自动发现和监控多个分区和多个网卡的时候,那一瞬间很惬意,很省心。

就批量配置和报警而言:

Nagios,对于主机的批量监控,需要使用脚本在服务器端添加主机,复制服务文件。Nagios使用脚本修改所有主机的服务文件并添加新服务。

Zabbix在服务器端配置自动注册规则。规则配置好之后,客户端的后续添加就不需要在服务器端操作了。Zabbix只需要在模板中手动添加一个监控项。

一般来说:

Nagios花很多时间写插件,Zabbix花很多时间探索函数。

Nagios比较容易上手,Nagios两天搞定,Zabbix两周搞定。

Zabbix绘图功能比Nagios更强大。

Zabbix对于批量监控和服务变更更加简洁;如果Nagios写一个自动化脚本,也很简单。问题是写自动化脚本非常费力。

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

作者回答:如果这个环境部署在云端(比如阿里云),就不用考虑硬件设计了。可以直接接入阿里云SLB+ECS+RDS的标准高可用高并发架构。外部服务直接加载SLB负载均衡技术,由阿里的SLB分发到后端ECS主机;部署多台ECS主机,应用拆分在不同的ECS主机上,尽可能细分服务。数据库使用RDS高可用性版本(一主一备的经典高可用性架构)或RDS金融版本(一主两备的三节点架构)。结合阿里的其他服务,完全可以,业务量上来了,主机不够用,ECS主机纵横扩展。

如果这个环境由IDC托管,那么您应该同时考虑硬件和软件(应用服务)。为了实现硬件的高可用性和高并发性,公司必须购买多套必须冗余的网络硬件设备(如负载设备F5、防火墙、核心层交换机和接入层交换机),特别是在网络设计中,设备之间必须有双线连接。如果所有的设备都是单机运行,其中一个挂了,你整个网络就瘫痪了,高可用高并发就无从谈起了。其次,我会考虑应用服务。我会采用成熟的开源方案LVS+Keepalived或者Nginx+Keepalived对外服务,redis集群和Mongodb集群做缓存层,kafka和zookeeper做中间件,fastDFS或者MFS做镜像存储。如果数据量大,可以采用hadoop。后端数据库可以采用“主从+MHA”。在这样的环境下,高可用高并发的架构是绝对满足的。