前言
最近因为公司层面的关系,我被迫营业开始了一些面试。
最近面的公司有:美团、阿里、字节、B站、携程等等。从面试中呢也有了一些感受,比如面试形式、内容、面试官的关注点、其他balabala...
一、关于面试
首先,关于面试这件事,我觉得除了解决我们工作问题之外,也是一项可以提升自己的途径。
记得之前看虫师、乙醇的博客的时候,得到了面试驱动成长的思想,我觉得是很有必要的。
- 可以让你获知当下的市场,对于测试工程师的能力要求,发生了哪些变化,你是否还可以保持在主流位置。
- 从面试官的问题,反推你在工作中的不足,有助于你后续工作的提升。
在互联网行业,技术更新迭代的频率还是很高的,这也让持续学习变成了从业人员的一项重要能力。在现在的招聘信息里,不管大小公司,对于测试的要求越来越高。除了业务能力之外,各种技术栈也随之而来,比如:java、python、CI/CD、Linux、自动化、mysql、各种中间件(MQ、Redis、ES)等等。如果你不能及时感知到这些变化,那么可能就会陷入被动的局面。
另外,在面试中,大概率会遇到一些你表达不好的问题,比如你在工作中除了完成基本工作外,还做了哪些质量保障的推进改善?这种问题就很值得事后反思归纳一下了,然后总结出问题,反逼我们去思考或者寻找解决方案,从而提升自己后续的工作。
所以,除了找工作要面试之外,阶段性的面试也比较重要,只不过这个周期要因人而定了。
二、面试前的准备
面试前的准备是非常重要的,视时间情况而定,尽量的从多方面去准备。
比如梳理你现在负责的业务、系统应用的架构、业务的核心、测试工作的重点等等。如果会涉及到其他技术栈的,还得看看代码知识、数据库、各种中间件等等。
总之不打无准备之仗,在有限的时间里,能做多少做多少。
三、关于岗位 Title
其实很多招聘中写的 title是测试开发工程师,但是基本上不是纯走测试开发的,还是要基于业务测试来的,在我看来还是属于高级/资深测试工程师。
对此,我个人的观点,测试的核心肯定还是基于业务走的,然后开发的技能是为了帮助测试提效的,所以我个人的预期也非纯测开(开发能力也不够),所以遇到这种title的也不用慌张,看清楚JD需求,只要hold住就可以试试。
四、美团三次技术面内容
虽然面的公司比较多,但是面试题展示就还是以美团为例了,因为很多公司的面试题都有相似之处。
一面
- 1. 自我介绍
- 2. 关于自动化:怎么做的,目前的进展,效果如何,遇到的困难
- 3. 你的框架搭建,最初是考虑了哪些因素去设计的
- 4. 如何维护自动化case?
- 5. 有没有用mock去解决问题?
- 6. 说说你工作以来做过的这些业务,你觉得在保证质量工作中,存在的差异性
- 7. 你在工作中发现的问题,自己做了什么事情去推动
- 8. 沟通下来,觉得你们流程问题还是比较多的,纯靠手工去保证么?
- 9. 开发冒烟执行后,测试如何判断是否通过
- 10. 算法题:判断15张扑克牌,随机5张,大小王任意配,是否是顺子
- 11. 看你用python多,聊聊python的一些数据结构,常用方法等等,都可以说
- 12. python中浅拷贝、深拷贝
- 13. 测试的接口都是什么协议的,对http协议有进一步了解么
- 14. 问代码是怎么学的?
二面
- 1. 自我介绍
- 2. 平时如何做测试工作的
- 3. 流程,规范相关
- 4. 推进遇到的难点,分析,解决
- 5. 聊聊最近印象深刻的项目或者bug
- 6. 聊聊自动化如何实施的,使用场景。针对你回答,抓细节点深问
- 7. 关于QA如何验证开发冒烟测试通过的方式
- 8. 问了数据库,索引。 优点缺点、常见索引类型、索引最左前缀原理
- 9. Redis缓存击穿,雪崩
- 10. 问了java相关基础,多线程
- 11. sql题:数据库单表查询,主要考察group by用法
- 12. 算法题:合并有序数组
- 13. 反问环节
三面
- 1. 自我介绍
- 2. 算法题:给定一个数组,判断是否有重复数据,最少3种方法实现。
- 3. 聊平常的工作内容,具体哪些业务,系统架构,如何交互
- 4. 用到消息队列,跟接口交互有什么区别,优缺点
- 5. 抓住简历上的项目,和你回答的内容,继续深问
- 6. 问你之前XX项目的测试重点是什么
- 7. 涉及到性能测试的,如何进行测试,关注哪些点,指标
- 8. 用例设计题:一个新客、老客、转新购买活动商品减优惠的需求
- 9. 聊做了哪些工具,怎么做的,前后端用到了什么
- 10. 自动化 怎么做的,做了哪些,测试数据是放在哪里。
- 11. 多接口串联的场景,自动化要怎么做?
上面就是3次技术面的内容了,跟后续的其他公司的内容对比后,我觉得是有很强代表性的。现在基于此,作一些归纳总结。
五、面试内容主要构成
我是异地,所以都是视频面。用的是牛客网,方便在线做题。三次面试时长均为1小时左右。
1. 自我介绍
自我介绍是必不可少的,看起来不起眼,但还是有必要精心准备一下。行云流水的自我介绍,与磕磕巴巴的说话,很显然前者更有利于面试官对你的第一印象。
我建议是组织精简的语言,概述出如下内容:
- 个人当前的状态,在职,离职。
- 任职的公司,所参与过的业务(多的话挑最具亮点的)。
- 在工作中,你做的事情(能凸显你的业务、技能亮点的)。
时长在 1 分钟内比较适宜,我自己是在 30s 左右(肚子里没货o(╥﹏╥)o)。太久容易引起反感,这毕竟是刚开始。而且说的久了你说的也多,说多容易出错。语言一定要组织好,按合理顺序表达。
2. 基于业务的问题
通常,面试官会根据你的描述,和简历上的内容,挑选其中的业务进行提问,并且根据你的回答进行追问。
所以,在面试之前还是要熟悉你要讲的项目的,从哪些方便?个人建议有:
- 项目背景,简短介绍。
- 项目概况,比如人力、周期等
- 你在项目中的主要工作。
- 项目的业务流程、系统架构图大概是什么样子,交互要说得清。
然后,面试官应该会选择其中的某些点进行细节的追问。比如你觉得项目的重点在哪里、复杂度有多高、质量保障中遇到的问题、如何解决的等等。你能扛得住追问的话,说明你的工作还是很细致的,细节的地方你都熟悉,印象分增加。
3. 基于技术栈的问题
问完业务,面试官会基于你简历体现的技术栈开始发问了。比如代码、自动化、CI\CD、linux、数据库、中间件等等。
我个人觉得要注意的点如下:
-
简历技术栈的熟练程度一定要真实。
不要会个 hello world 就写熟悉,该写了解就写了解。一点都不了解的,就别往简历上写了,省的给自己挖坑,一问准露馅。 -
测试用例设计
虽然是我们测试的基础技能,但是我觉得也是核心技能。通常你不用上来就直接设计1,2,3,4。可以先感受下题目,抛出你的一些疑问,然后再描述你的设计思路,最后进行细节点的描述。 -
给你XX接口你要如何测试
这种问题看着简单,实际有坑。最好不要上来就说正向、异常测试、输入校验等。其实面试官希望听到的答案是,你能做左移的角度去逐步分析这个待测接口,然后再决定如何的测试它。我曾经就有过这种情况,实际上我是知道这个坑的,但是难免也会忘记。但是好在面试官很nice,在你回答之后,他给出了他觉得怎么做会更好。但是这时候呢,你也可以挣扎一下,表示这个自己也是知道的,在实际当中也是如何做的。 -
对于各种中间件,最好有个了解。
可能你的业务系统简单,用不到一些中间件,比如mq、redis这些。但是用不到不妨碍你去学习了解,因为这些东西现在应用真的非常广,起码你要知道使用场景和原理,解决哪些问题,引入哪些问题等等。如果能答一些,肯定会比一问三不知要好很多。如果真的你实际没用到,也可以表述一下,仅自我学习的一些了解。 -
涉及到自动化
如果涉及到自动化的建设,那么你要知道项目使用的语言、框架等、项目的模块结构、项目拥有的能力、项目执行策略、项目的收益。另外,对于自动化,面试官很爱问对于测试数据的处理,mock相关的实际应用问题。 -
一些框架、库的知识,底层原理
比如你web自动化提到了用selenium,那么selenium底层实现原理是什么?你喜欢用pytest框架,为什么?与unittest相比,优点有哪些,你会用到框架的哪些特性等等。 -
数据库
数据库其实还好,考察的内容主要是:连表查询、group by、having等的用法。此外,索引也是经常问的,索引的介绍、原理、为什么快、索引越多越好? -
算法题
面大厂必备环节。难度为LeetCode上简单难度。有出现过原题,也有变形题,还有面试官现场手打的题目。但是考察的内容,基本上就是常用的数据容器的操作。
4. 持续学习、快速学习的能力
面试官可能会问你看过哪些书籍、哪些方向的,自己平时是怎么学习的,对自己的评价是什么样子的?重点是考察你的自我学习能力大概如何。这些问题就还是因人而异了,你根据你现在的情况组织一些不太过分的内容来回答即可。
我个人看的一些书籍(看得少)会有:代码语言、测试相关的、自动化的、性能的。除了书本以外,主要还有搜索引擎、博客、极客时间的、B站等等。
另外,关于学习提升这块,我觉得有 3 点很重要:
- 学习目标:能够知道自己的不足之处,知道该学哪些知识。
- 时间管理:如果能牺牲点刷视频信息流的时间来看点资料,博客,每天一点点,一个月、一年之后你肯定比现在的你强很多。
- 执行力:目标有了,时间有了,就看能不能坚持了。
当然了,学习还是要劳逸结合的,怎么去规划适合你的时间,可以好好思考下。
学习的过程中,如果能做笔记自然是最好了。因为在写的过程中,你会更深入体会知识点,有助于加深你的印象,以及理解。如果能分享出来也是极好的,也能帮助有需要的人,或者抛砖引玉,大家一起讨论。
5. 反问环节
通常面试官顾及礼仪的话,会有一个反问环节,但是没给你这个机会也不能直接说明什么,说不定人家真的hin忙?
我通常关心 2 个问题,问多了也过多占用别人的时间,当然有跟你聊的头圆的除外:
- 参与的业务,核心能力。有助于你了解对方的业务概况,复杂度,与你之前业务的关联性,对你未来的成长是否有积极意义。
- 研发规模。开发、测试的人力,有助于判断公司的研发力量情况,以及开发测试配比的情况。
六、面试之外的感受
到此,一场面试就结束了。有条件的话,建议记录下你印象深刻的内容,方便回去之后梳理总结。在这里,顺便谈谈一些其他的感受吧。
1. 心态调整
调整好心态,不管你现在处于哪种状态。尽量让自己面试时候的状态要好,要自信(不是自负)。胜败乃兵家常事,像我面试了这么多,我也不知道最后哪家可能走到最后,或者说一个也没有,哈哈。
那也没关系,失败无非就是2个问题:
- 火候不够。这个是自己表现确实差劲,自己都要吐槽。
- 背景与岗位不匹配。这个也会有的,但是这种情况下用人部门可能会流转你的简历给其他适合部门。
那不管是哪种,我觉得都应该汲取其中积极的一面,进一步提升自己。
2. 遇到很烂的面试官
我听朋友讲到,他遇到过一个面试官,喜欢揪住他不擅长的问题进行追问,然后还嘲笑他。
多的也不用说了,这种人就是个傻X,你千万别跟他一般计较。我遇到的面试官通常都会在你表示不了解后,就会换个问题,或者说根据你的回答,给予一定的引导。所以,像我朋友说的这种傻X一定是极少数的。
3. 随缘
随缘就好,我面的多了也很佛了。反正面不上更好的就进一步降低标准呗,反正不会饿死。
4. 外包公司
外包公司不是不能去,但是多数人可能对此不是优先选择,优缺点大家网上都可以搜到。所以,对于不考虑外包的童鞋,我整理了一些出现在我的视线中的公司:
- 软通动力
- 中软国际
- 浪潮集团
- 法本信息
- 华为&德科
华为德科这种OD岗位,就是跟德科签合同的华为外包,说优秀的可以转为华为正式岗,反正我是不信那几率的。
OK,以上就是最近的一些感想,祝大家顺利。