转载:测试工程师面试心得
昨晚正式收到支付宝的Offer,提交完离职申请,我的求职过程也就告于段落了。写下这篇文章,希望我的这些经历可以对正在求职的你能有点启发。 首先,交代下我的背景,这样大家看的时候,就可以有个对比参照。我2010年7月份毕业于南京晓庄学院计算机专业,一所二本学校,经常用大学班主任的气话来调侃“我是一所三流学校里面的二流学生”。在大学期间,成绩一般,没拿过一等,唯一一次有机会拿二等,还因为一门公共课挂科而取消资格,但也扎扎实实学过一些专业课程,比如数据库、网络、C++编程。考研,挂了。大学毕业那会,因为一直在实习,就没正儿八经投过几份简历(现在再看我大学毕业时的简历,真是一塌糊涂),那时候面试过金蝶,失败,富士通的笔试都没过。所以可以讲,我毕业那会基本没有面试经验。
后来,没办法就厚脸皮,外包进入实习的那家很牛逼的杀毒软件公司,入行软件测试。这一待就是二十九个月。 在这两年五个月的时间里,开始我对软件测试知之甚少(大学课程中,也就软件工程课中提到过软件测试),利用工作间隙一点点学习:测试理论、Java、Python、设计模式,甚至学习过servlet、JSP,Spring框架……,现在看学的好混乱啊。同时,项目中接触到了自动化测试,就给自己定位要学好自动化测试。学习过程就不细述了,最后经过不断学习,我敢贴在自己简历中的技术背景是这样的: 从八月底开始,到十二月初我差不多投递了80多封求职简历(还不算在51Job中申请的职位),80+的求职邮件,收到了差不多40封邮件反馈。九月中旬,陆陆续续进入面试高峰期,有时,一周面三家单位,投的都是外地公司,所以接到都是四十分钟以上的电话面试。在这三个半月的时间里,我经历着“希望-失望-又有希望-再一次失望”这样的煎熬,一次次失败,逼得我不断反思,我问自己问题出在哪?一遍遍修改求职简历,从措辞到排版,到最后甚至计较该用什么字体,字体大小设置多大看起来比较美观。一遍遍独白面试第一部分的“自我介绍”,该如何有条理的把自己这两年所学,所做的事情阐述出来。更为重要的事,我开始整理这两年所学,梳理那些测试理论,编程语言,项目经验。 在决定换工作的时候,自己首先需要弄明白为什么要换工作?真的到了非换不可的地步了吗?我不赞成轻率地、频繁地换工作,在我看来换一份工作成本还是蛮大的。但当我在这一个项目两年以上,当日常工作游刃有余,没有压力时,当我不是很清楚地知道我该学些什么的时候,我知道该make change了。
上周周会,看到项目未来半年的WBS,看到那些摊派到我头上的任务,我知道我做了正确的决定。促成我换工作的另一个原因是,这两年多来,我一直待在同一个项目组,测试的是IBM的Domino邮件服务器相关,单一的项目经验,对我自身的发展有很大局限。况且在Domino日趋衰败大背景下,我想出去呼吸点互联网公司的气息。 在这里,顺便谈下我对外包的看法。这两年多来,我一直是外包到一家跨国的杀毒软件公司,从事测试。在这里我遇到了我工作中的两位Mentor(Rongting & Paul,当然他们是Regular),从他们那我学到了做事的方法,带着我学习提高,解答了我的很多问题,对我帮助很大。遇到了现在的Leader,他对我的信任、认可,让我能有机会做更多的事,像设计测试用例、自动化测试开发、性能测试等。整个Team氛围都很open, 能有机会参加基本所有的项目会议,参与讨论。一毕业就能有机会,在这样的大公司,在各种规范的流程指导下学习工作,我真的受益匪浅。我知道这是我的幸运,不同的项目对外包的工作,管理都是不太一样,和Leader有很大关系。另一个项目外包的同事,进组一年多了,都没机会设计测试用例。这里我想讲的是,虽然外包总给不了人一种归属感,但同时也让你有机会和一群比你厉害的人一起工作,要利用这样的工作机会向同事请教、学习,迅速提高自己。还有一点很重要,一定要自信,如果你觉得你能胜任,就可以争取点不同的任务。 当决定好要换工作后,下面就要开始准备你的简历了。简历是你的敲门砖,用人单位看完你简历后,觉得合适,通过简历筛选,才能够获得面试机会。
简历首先要真实,真实反映你所干过的活,所承担的角色,你的贡献,真实反映你的技术背景。面试官一般会围绕你提供的简历,展开提问,你简历上所描述的,你一定要很有把握。第二点,简历拿出来要有亮点。一位测试前辈老师,看完我的简历给我建议是“如果你觉得自己是实力派的人,在简历中要突出你的能力,过去的业绩亮点。”最后一点,如果应聘的是外企,或则职位描述是用英文来写的,一定要附上中英文简历,要准备一份拿得出手的英文简历哦!锦上添花的是,如果你的简历排版简洁(中文简历一般不超过两页),美观,也会为你加分不少。 如何获取职位信息?当我发现我在大型招聘网站(如51job,智联招聘)申请那些我向往的职位都没消息后,我就放弃在这类网站上申请职位了,还发现在这些招聘网站上发布信息的就是那么几家公司,后来都懒得登入这些网站看了。那我的职位信息是从哪来的呢?答案是专业技术论坛,就测试而言,很多公司会在51testing中发布职位信息,我的简历很大一部分都是投给了这些职位。一般还都能收到反馈,即使简历不合要求。十月份的时候,我发现很多人会在weibo上发布职位信息,就开始关注weibo中发布的测试岗位了。后来,要我的那两家公司也都是我在weibo上看到的信息,投的简历。现在想想,在大型招聘网站发布信息的都是HR,他们要在海量候选人中选择,被刷的概率更高。而利用论坛,weibo这些媒介发布信息的都是项目组的leader,他们将身边的一些岗位需求发布出来,有合适的候选人就内推,将来如果你面试成功,他们也可以获得一笔奖金。还有一个好处是,面试结果后,你可以发邮件请帮你推荐的人,查询面试结果。
附上技术博客链接、Github账号,如果平日里你有写技术博客的习惯,或者参加过开源项目,有Github账号,都可以把链接帖在简历上。在面试的过程中,不只一次听面试官跟我讲,“我看过你写的文章,觉得写得挺不错”。这些都会为你的面试加分。 利用好面试提问环节,一般面试结束前,面试官都会问你,有没有神马问题问他的?可以好好利用这个环节,一个漂亮的提问会为你加分哦! 下面谈谈,我面试过一些的公司,以及这些公司对测试工程师的要求,可能具体的面试题记得不是很清了,就写个大概印象吧。 目前所在的杀毒软件公司 —— 对我帮助很大的一场面试 这是上半年的一场面试,之所以放在这讲,因为这场面试让我认识到自身的一些不足。三月份的时候,在51job上看到南京焦点科技的专场招聘信息,周六下午没事就过去了,后来顺利通过笔试面试,拿到Offer。
在我和Leader谈准备离开的时候,Leader又帮我争取到了面试我所外派的这家公司的机会。这算不上一次正式的面试,是周会结束后和QA Manager的一个小时左右的交流。一开始,是我讲进入项目组以来,我学到的知识,干的活,还有就是介绍自动化测试相关的。后来就是老板的提问,到现在我还记得这些问题: 作为一名QA,你是怎么理解“质量”这个概念的? Java的垃圾回收机制、内类的几种方式、堆和栈区别 在写自动化代码中,用到了哪些设计模式? 最近读过的关于软件测试的书,文章?有哪些给你留下了比较深的印象? 职业发展规划 回答这些提问时,我发现自己对测试的理解还是不深,对Java中的很多概念还是比较模糊。我突然意识到自己是有多浮躁。面试结束后,老板给了我些建议,弄清基本概念,多读一些优秀的开源代码,不要贪多,一定要深入学习下去。那次面试后,我放弃了焦点科技的Offer,继续留在项目组,又系统学习了Java编程思想,学习Junit那些框架的源码,并开了这个技术博客,逼自己要定期写文章。
四战IBM —— 英语口语要求较高 从八月底到十二月初,这短短几个月里,我先后面试过IBM三个不同项目组,前后经历四波面试。七月初的时候,在Lotus中国社区看到Domino组在招测试工程师,就试着投了简历,后来也一直没消息。八月底的一个周二,刚下班接到了北京IBM的电话,约周四上午电话面试。因为现在测试的产品是Hook在Domino邮件服务器上的,在介绍所做的项目是,面试官问得很细致。接着细诉了,关键字实现、框架流程等。下面就是面试官提问: 一些STAF/STAX的服务命令。 自动化测试如何和CI系统集成。 Domino中邮件路由过程 算法题:一个字符串,如“This is a test !” ,输出“test a is This”,要考虑空间。 设计模式:对单例模式的理解,有几种实现方式。 Python: 字符串查找 口语题:你安排了一次团队活动,现在去给老板汇报,讲清楚:时间、地点、交通、具体活动安排。第二轮的时候,面试官会问,如果有一名RD手头有活,不愿意参加,你怎么说服他参加。
这次面试,答得最差的题是口语题,基本是结巴着讲完的。准备面试的时候,没在网上搜过面经,根本没想过会有口语考核。血的教训啊,我后来面试外企的时候,都会提前问下有没有口语。这里顺便讲下有意思的事,面试完后,我在一个Lotus技术QQ群里问,有没有IBMer,问面试IBM多长时间有结果,没想到的是,居然有人小窗找我,是NW,NW是IBM Lotus Notes组的工程师,NW讲,看到群里的QQ名,猜出了我就是前两天面试的人。原来,我的简历就是他挑选出来的。这个世界真小。后来他帮我查了面试结果,“HELD – wait for manager interview if no bettercandidate”,评价是“Java基础扎实,有自动化开发经验,但口语有待提高”。
后来也没有接到进一步的消息,哎,感叹当了次备胎,失败了。 九月份的时候,在人人网IBM公共主页看到宁波研发中心招聘测试工程师,投简历,电话面试,也没消息了。十月份在weibo中看到发布招聘测试工程师,要求懂Java,有自动化开发经验。投简历,一轮电话面试,居然是IBM System i 项目组,二轮电话面试,后来又没消息了。需要说的是,这两个组的面试也都有英文对话。 十一月底的时候,在weibo中看到老高发的招聘信息,要求“Java编程有所涉猎。软件测试流程和工具熟练掌握。对自动化测试,尤其是GUI程序的自动化测试有扎实经验”。后来知道老高是IBM Lotus Notes组的老板。老高将我的简历给了Domino组的老板沙。周一的时候,沙约我视频面试,当时在Office,没法进行,下午沙和另一位同事,电话面试了40分钟,视频面试推迟到晚上。视频最后,沙问了我期望薪水、到岗时间,最后沙讲,年底了headcount很紧,明年应该会有名额。第二天问NW,NW帮我查了面试结果,从面试记录上看,通过了。周三的时候,收到电话让我填写内部推荐的一个表格,就在我以为没问题的时候,接下来的周一,沙打电话给我,肯定了技术,但是因为年底没有名额了,来年再看。让keep in touch ,坑爹啊! 百度 —— 技术要求很高 六月份的时候,Paul让我给他一份简历,项目组缺人,结果那次简历没通过筛选。十一月份中旬的时候,百度又在招人,Paul问我要了最新的简历,又帮我推荐了次。Paul还给我讲了可能会问到哪一类的题目,比如算法。当时项目比较忙,考虑到时间有限,我就没花心思去准备算法。这个决定让我很后悔。面试也是,首先自我介绍,介绍所做的项目,在项目中的角色,做了哪些事情。来看看Baidu一面的问题: 在自动化实施过程中成本最大的一部分是什么 在实现自动化过程遇到的最大困难,是如何解决的?
Java: HashMap与HashTable的区别 Java: 对抽象类与接口的理解 设计模式:如何实现线程安全的单例模式 设计模式:监听者模式 算法题:判断一个链表是否有环 算法题:字符串左旋 算法题:二叉树中,两个节点间的最大路径。 面试到最后,想死的心都有,算法题懵了。后来在网上搜面经,发现这些都是常见的算法面试题,如果事先稍微准备下,就不会这么被动了。面试结束后,Paul帮我查了下面试结果,Pending。Paul让我准备第二轮面试,接下来的一周,我都在复习算法知识。一周后的周四,二面百度: 自动化框架的实现,为什么这么做? 自动化过程中遇到的难点,困难? 面向对象的特性,简单阐述这些特性带来的优势 接口与抽象类的区别 异常类处理机制 反射机制,在实际写代码中应用 final,finally,finalize的区别 有没有用过spring框架 测试用例设计题:就linux下的CP命令设计测试用例。 如果让你设计一些log监控系统,你会从哪些方面考虑? 二面表现一般,但因为一面算法部分答得太差,最后没能进入三面。我的感觉,百度对技术要求真的很高,测试人员面试考算法的很少。如果大家将来面试百度,可以在网上找找相关的面经,做做类似的算法题,会有很大帮助。 红帽软件(Redhat) —— 各种假设 我是几乎同时接到百度、支付宝、Redhat的面试邀请的。相比其他公司,红帽好像更注重员工的工作习惯的考核。红帽的一面顺利通过,二面结束一周后,查看面试状态“no longer in consideration”。在技术上面的问题,我有印象的好像有这么几道,“自动化框架,关键字实现的Java代码总共有多少行”,“Python程序共有多少个module”,“两个Linux系统之间如何传文件” 。来看看其他问题: 如果让你带实习生,实习生每天有很多问题,这可能会打乱你的工作,你会怎么处理? 如果到了预订日期,你的工作还没完成,你会怎么办? 当你和其他同事,在技术方案的选择上发生争执,怎么办?你会如何说服他 用十个以内的词来形容你自己 用英文描述下你的兴趣爱好 其他一些公司 Dell开始提供面试机会的是一个开发岗位,因为我觉得不合适,HR帮我推荐了一个虚拟化的职位,因为这是一个纯手工测试的岗位,我个人不是太感冒,面试一轮后就没消息了,我想说的是,Dell的HR manager Ripple是我遇到过的最nice的HR了,你有任何疑问邮件咨询,她会第一时间电话解答,并邮件确认。赞一个。
HP的职位是我在51job中看到的,但也是发邮件申请的,面试挺顺利的,最后谈到了薪资这一块,但后来居然没消息了,接着传来了HP在裁员的消息。360的面试,就记得问过我,“闰秒”,“32位系统,和64位系统下的测试有何不同”,说实话,这两问题我真不知道。赛门铁克,面过,没留下任何印象。VMWare很向往的一家公司,但自动化测试偏重于UI方面的,问过的技术问题:hashmap与hasptable的区别,讲讲java collection framework的了解,Java反射机制。
支付宝 —— make it 投完简历不到一周时间,周四下午的四点多钟接到电话,有点奇怪的是支付宝并没有像其他公司一样,事先约定面试时间,而是直接就开始面试了。面试进行了四十多分钟,比较顺利,最后面试我的女生问,支付宝需要经常加班,你可以接受吗? 接下来的周一,接到支付宝HR到杭州面试的邀请。面试定在周五中午十一点,我是周四晚上到杭州的,住在支付宝附近的汉庭,晚上快十一点了,支付宝大楼依旧灯火通明。第一轮,是两位工程师面的,挺顺利的。很从容的拿着笔在白板墙上讲解自动化框架、流程。面试官问了: 自动化测试执行时间,容错处理机制 Robot Framework 框架的优缺点 自动化测试下一步的有哪些可以提高的地方 Java的多态机制 平日工作是如何设计测试用例,讲解下目前所测产品的一个模块的测试用例设计策略 在整个项目周期中,测试要做哪些事情 第一轮面试,大概进行了一个小时十分钟,接着休息了五分钟后,进入第二轮面试。第二轮面试,面试官是测试总监、HR。
第二轮面试,简单阐述了目前的项目,我所做的事情。后来就是提问了: C++和Java对内存的操作有何区别?Java的垃圾回收机制为什么不能避免内存泄露问题? 熟悉哪些网络协议? 不同网段的两台机器是如何通信的? 考研了吗 大学同学都从事哪些方面的工作(hr问) 最后,面试结束后,总监问我有什么问题?这个环节我准备的问题是,之前项目周四学习小组一起学习ET时,看taobao的探索式测试白皮书时,提出的疑问。听到这个问题后,总监笑了,说这个问题问得好,但我没法解答你,我也疑惑呢。 当我走出面试的那个房间时,我心里有80%的把握。接下来的两周是漫长的等待,因为支付宝面试不通过是发拒信的,我不时刷新我的邮箱,期盼着结果。最后实在忍不住,托帮我投递简历的人,查看了面试状态,答复“结果还好,但还没最后结果还在确认中”。第三周的时候,接到HR电话,聊了下薪资期望。
第四周,开始有点睡不踏实了,真的很渴望这份Offer,我打电话一再和HR确认,周五晚上六点五十,收到了最终Offer。 结束语:大学毕业的那年春天去国展中心的招聘会,人头攒动,那时候的我很茫然,不知道自己能找到什么样的工作,也不是很清楚自己想要什么样的工作。这两年来我一直在努力,慢慢的我知道了自己想要找什么样的工作,渐渐地我也知道了我能找到什么样的工作。这条路,谈不上曲折,我一步步踏踏实实地走来。