知乎号主:程序员面试秘籍
大厂面试真题、简历模板、近40篇面试经验文章、接口、自动化测试、性能测试、安全测试学习资源、学习路线指引。关注我,都给你
感激相遇,愿你我皆有所获
今天给大家介绍我朋友三石的面试经历,他毕业于三本院校,学的是电子信息技术专业,在外包公司做了2年功能测试随后又跳槽去了创业公司待了3年,3年里从事性能测试+自动化测试也成长了不少,期间我也给了他不少的帮助和鼓励,他从2021年4月份到10月份面了近50家公司,
这段时间他基本上每周2面,称得上是面霸,今天就给大家分享下他的「面霸之旅」。
目录
面试成果
一、跳槽原因
二、面试计划
三、面试技巧
3.1 简历准备
3.2 如何谈项目(重要)
3.3 基础知识 & 算法
... ...
他的面试感想
总结
工作时长:2年功能测试 + 1年性能测试 + 1年自动化测试
投递岗位:测试工程师 / 测试开发工程师
面试时间:2021.4﹣2021.10
最总成绩:半年时间内面47家公司,平均每周2家,拿到10家 offer : 美团、知乎、滴滴、B 站、Shopee,最终他选了美团拿了23K+的薪资
跳槽的原因千万种,总结下来无非3种:
钱没给够
受委屈了
三石第一份工作在上海一家外包公司只有7K,所以他干了2年薪资只涨了1K,所以他第一次跳槽前者,所以他跳到了一家创业公司1干就是3年,薪资耶涨成12K左右,而且他的组长对他不错,教会了他性能测试、自动化测试,但后面他组长因为个人发展原因走了,来了1个新组长,新组长来了开始压迫三石,各种脏活累活都扔给他了,组长当甩手掌柜,所以三石第二次跳槽是因为受委屈了。
不能裸辞也不能裸面,所以他坚持这2点为前提的情况下,给自己了梳理面试的计划:
1、找准目标岗位
2、匹配岗位差异
3、制定合理学习 & 刷题时间
2.1 找准目标岗位
他的目标和岗位很清晰:
要涨薪
要测开岗位 或 进入大厂
我建议他在boss直聘/拉钩招聘app上 看看测开要求的技能,然后看看自己目前那些技能有,还差哪些技能,有针对性的去学习相关技能 和 刷对应的面试题型,虽然不能行业的测开要求的业务能力不同,但基础的通用能力是一样的:
熟练 编程语言java/python、有过工具开发或者自动化平台搭建的经验。
熟练 Mysql / DB2等数据库,除了基础数据增删改成,常用性能优化掌握 / 高级函数运用 / 数据库原理熟悉
熟练 Linux 常用命令 即脚本编写
熟悉 测试理论、自动化测试框架 及 主流测试工具
熟悉 服务器测试,了解HTTP协议、RPC协议、Web架构,了解常用消息处理、缓存、数据库相关中间件
80%的 测开 或 高级测试工程师招聘要求都包含以上的内容,其实就是:语言、数据库、Linux、自动化、常见协议进行深入掌握,同时也是区别功能测试 / 初中级测试地方
除了以上的通用能力以外,还有一些硬性要求:
本科及以上学历,计算机相关专业
3年以上java开发或测试开发经验
银行交易系统相关项目经验
除了通用要求,每个行业或者公司可能有自己硬性要求,比如:学历本科、开发经验3年以上、做过该行业的项目。
一般以上要求是公司层面提出来的,及时你本人特别优秀,若上面要求没达标,投了简历也可能是石沉大海,但如果有内部员工的内推那就不一样了,因为它可能帮你绕过这道坎
2.2 匹配岗位差异
他觉得自己薄弱点在「编程」与 「mysql」上面,虽然自己做过自动化+性能测试的工作,但自己也只是测试的「执行者」,之前都是他老大搭建的 自动化框架,很多基础的功能函数都是老大封装编写的,自己做的都是边角料的工作,所以他想到了真正面试的时候肯定过不了面试官那关,所以之前三石也和温大大一直再讨论,如何将做过的自动化项目深入下去,过面试官那关,温大大分析了下,其实感觉自动化没深入的原因在于:自动化框架本来也不是你搭建,很多细节你不了解也是正常的,所以你可以带着以下几个问题再次去学习下这个框架:
前后端的数据如何传参数。
用例与数据如何分离管理。
如何封装基础的类,让用例复用性高。
如何统计自动化覆盖率。
自动化框架底层是运行如何的,尝试一步步debug一下,看一下框架启动的时候运行加载了哪些函数。
最重要的是:面试的时候一定要说清楚自动化框架这里面哪些功能是你自己实现的,哪些是公共的,一定要说清楚怎么设计这块case的,期间遇到什么问题,自己又是怎么解决的。
至于「mysql」对于三石来说也存在同样的问题,自己平时增删改查用的比较多,至于mysql的优化这些压根不设计,很多时候性能测试发现有问题,直接扔给研发或者老大,自己也从未重视过这点。
除了自动化框架之外,简历里面应该体现 语言掌握的程度,例:python由浅入深:基础语法掌握、常用功能函数掌握、装饰器、面向对象编程、进程与线程、IO编程、web开发,总的来说根据项目需要去学习对应的高级编程语法,在简历里面需要写出来
2.3 制定合理学习 & 刷题时间
我们说知道了自己「很弱」不可怕,可怕的是不知道自己「很弱」,有了以上的「薄弱点」后,三石结合自己实际项目经验制定了一些学习的线路:
系统性的学习了一遍 自动化框架,主要挑重点学习,重点就是上面提到的那些问题:如何传参、如何用例与数据分离等等。
尝试重构之前老大写的底层函数,让代码编程更简洁、复用性更强,具体从代码设计角度:开闭原则、单一职责这些方面来考虑。
尝试深层次的进行一次框架级别的bug,看框架如何运行的,搞懂底层原理。
思考自动化的价值,太早介入自动化研发频繁修改没意义,太晚介入也没意义了,所以什么时候介入自动化,介入到什么程度都非常考究。
mysql 深入可以从优化1个sql慢查询开始,过程是:定位慢查询、进行索引优化、搞清楚索引优化底层的B+树原理
跟自己的实际项目结合起来学习,做事情前先问自己:有更好的解决方法吗,它底层是如何实现的。有的同学想说万一我的目标技能跟我工作不搭边怎么办,这时你可能就得花晚上 或
者 周末的时间来找项目深入学习了
刷题主要刷以上技能点对应的面试题:
1.自动化测试框架+测试基础知识
2.项目经历
3.Mysql
4.Linux
5.网络知识
6.消息队列
7.算法-常见基础算法题
8.解决问题能力 + 未来思考能力
针对第6点需要特别说明下 算法目前对于很多大厂来说是个敲门砖,即使你进去的时候用不上算法,很多公司都会考你算法题目,建议可以去牛客网去刷一些常见top20的简单 & 中级的算法题目
3.1 简历准备
网上有很多简历模版,大家可自取,需要注意的是:
线下面试,记得带一份简历,以免面试官没打印简历;
线上面试,对着简历讲项目,以免遗漏细节;
简历多发给几个信得过的、比自己有经验的朋友看,让他们给修改建议,实在找不到人也可以加作者好友,让我帮你看下;
只写技术相关的东西,社招就别写一些没必要的内容,比如大学的普通奖项,如果犹豫要不要写,那就干脆别写;
把项目和个人技能花时间写好,个人评价
3.2 如何谈项目(重要)
需要跟面试官讲清楚 项目的「业务+框架」,更重要的是用「数据」需要突显项目里面的「亮点」,也是分为3步:
摸清「业务」
吃透「数据流」
提炼「亮点」
「细节」烂熟于心,简历上的每个技术点
栗子
下面以业务「电商领域」测试工程师为例子进行说明,部分模块做了简化处理,方便理解
项目-业务
我做的是电商平台的购物车模块的质量保证,用户通过多端入口(微信/app/小程序)对商品进行下单然后发起支付,生成订单且完成支付。
业务表达尽量清晰、精简,表述清楚自己所负责的系统、它的业务逻辑以及测试的覆盖范围
项目-数据流/架构
数据流通过 app/微信 作为入口,通过网络传输、解析(tcp/dns)
将订单信息通过http发送网管(nginx),然后网管(nginx)负载到对应后端server上
通过查询 radis 上获取关键信息(用户/商品),经过商品系统/支付系统处理后,生成订单信息然后存储到mysql上
结果数据返回给前端。
建议将项目里面的技术画1个流程图,要求尽可能全貌的去描述自己涉及的技术框架,不要陷入细节描述(等到面试官提问时再详细到具体细节去)
项目-总结
这里面的 app/tcp/dns/http/nginx/redis/mysql 是你传递给面试官你项目中涉及到技术点,所以后面这些话题都是围绕着这些技术点展开。
提炼项目中用到的一些关键技术点,然后围绕这些技术点问自己3个问题:这个技术点解决什么问、它的底层实现细节是如何的、技术点常用的面试题有哪些
亮点-数据化成绩
前期:全链路业务质量保证,拆解每个环节的业务场景,确保业务场景都能覆盖到。
中期:通过抓包工具 filter 获取接口参数,使用 postman 模拟接口请求,保证业务快速迭代。
后期:引入自动化测试框架 pytest,将某些可自动化的场景自动化。
收益:因为引入一些filter、postman 以及 pytest自动化框架大大提升了测试效率,发布时间由之前1月1次缩短到1周1次,提升了400%的发布速度,3个月期间发现问题 50个,占整体问题数 30%,释放了qa人力2人/月。
项目里面的亮点一定要具体,用数据来说明:用什么工具/方法解决什么问题,产生了什么样的效果,并且这些一定是你自己真实做过的,不可胡编乱造
亮点-总结
1、业务场景如何设计,例:用户加购场景设计,对自己的业务场景烂熟于心从「功能」、「性能」、「安全」、「易用性」角度去设计场景,面试官可能会问。
2、上面提到的 filter、postman,体现在简历里面一定特别注意,如果只是简单使用则写「熟悉」,面试官可能会问:工具一些「基础」使用一些参数的含义。
3、pytest 自动化框架,这个应该是「亮点」所以需要重点准备,但也要根据实际项目情况来写,不可「胡编乱造」,面试官可能会问:
如何传递参数,
如何做到数据与用例分离、
如何提高自动化效率、
自动化覆盖率如何统计
4、「收益」这里需要用「具体数据」去体现你在项目里面的「价值」。
针对这些亮点,面试官可能会从你描述的项目或技术点里面提一些问题,需要你提前想好,并想一下如何回答
细节 - 抽取关键技术,反复演练
1、等你前期的「项目」与「亮点」介绍的差不多了,这是应该面试官「提问」了
2、他会基于你前面的「项目」里面的一些技术展开提问,也有可能在你介绍项目过程中提问,所以在准备项目的时候一定要对项目中的一些技术点,抽取「关键技术点」,然后去掌握地毯式恶补这些知识。
3、更重要一点是,面试官可能不会直白的问你的mysql有哪些技术点, 而是问:如果页面刷新很慢,你是如何排查与解决的,
你需要引导面试官:
页面刷新慢可能是前端、网络、后端的问题,
前端排查需要 xx步骤、
网络排查需要 xx步骤、
后端排查到是 xx步骤,最终查到是mysql的慢查询,
那么可能就需要优化sql,自然引出索引优化一些知识点
4、所以当你知道面试官咨询的「技术细节」是从你的回答本身出发,那么你不妨可以演练下,说项目的同时,问问自己:这里面涉及哪些「技术点」,这些「技术点」可能涉及到的技术细节有哪些,从而达到临危不乱。
面试官可能会从一个问题着手,层层递进逼问这个问题如何产生、这个问题如何排查、这个问题又是如何解决,反复的深扣里面的一些技术点
小建议:你可以先面试几家小公司,累计经验,把所有被问到的问题都记录下来,弄清楚后,在之后其他面试中确保自己不会被问到
3.3 基础知识 & 算法
像一些通用基础知识:
网络、数据库、Linux、编程语言 的一些八股文,面试前尽量去刷刷,即便你看过了但在面试中被问到时忘记了也没关系,每次把问到的基础知识记录下来,以后你就知道哪些是重点了。
算法题目肯定是有刷的必要的,特别是中高级/测开工程师,但不要花太多时间在算法上,把常见的题目刷刷,有算法感觉,面试时写不出来的话能说出思路也挺好。
面试造火箭,干货拧螺丝,所以不太纠结基础知识 & 算法点,平时固定1-2小时看看刷刷,有点感觉和印象,不要太抠细节
3.4 内推很有用
获得面试机会概率很高,80%以上都是内推,都有面试机会的。
内推更方便了解岗位及团队信息。
如果与内推人足够熟悉,薪资也可以大致了解下。
面试进度更清楚,或许能加快流程。比如 BAT 这种大厂一般进度会比较慢,但走的内推,直接主管觉得你不错可能直接跟HR说要你了。
如果没有朋友内推,也可以找自己信任的猎头内推,也是有帮助,毕竟他跟公司内部人员打过交道,知道一些有用信息,同时也希望你能通过面试,他拿提成。
3.5 面试公司顺序:小、中、大
建议从中小公司开始面试,更多的是找面试感觉,
小公司和大公司面试的侧重点也太一样
中小公司要求上来就能干货对学历、背景不太看重
大公司比较看重全面的素质:不光是项目与技能,还会看重一些人才的潜力与学习技能
3.6 岗位匹配很重要
投简历的时候需要看工作内容是否符合自己预期,不能仅仅看职位名称,如果是面试官是 测试负责人可以在面试前具体聊聊工作内容,这样提高面试效率。
具个例子:测试开发工程师其实有很多细分的工作方向,
搞工程效能的,主要负责:工具或平台开发类的开发工作。
搞性能测试专项的,主要负责:业务组内性能测试工作,以及系统平台告警监控工具开发。
搞自动化测试专项的,主要负责:基于业务的自动化用例实现等工作。
中途发现这个公司的工作内容不符合自己预期,并且面试问题对自己收获也不是很大,主动跟 HR 说终止后续面试,节约时间
多投简历才是王道
三石在第一天就练习了40多个岗位,但回复他的只有几个,从此之后他看到有合适的,就疯狂投递简历。只要你的简历不是特别优秀,就没多少人愿意回复你的,更多的是一些外包公司每天会联系你。
保持自己爱学习 & 谦虚的态度
很多时候即便自己回答不出来面试官的问题,也谦虚请教一句:为什么是这样的呢,正常的面试官会告诉你耐心告诉你,同时觉得你很好学。同时及时发现面试官有些回答跟你理解的不一致:也别打断面试官讲话、语气也别太强硬,你想想你愿意找一个每天跟自己吵架的人作为同事么
面试前多背通用问题
1.你碰到的难题,怎么解决的(考察:技术面试官会问技术相关的)
2.你最有成就感的一件事 (考察:你身上的闪光点,尽量说跟工作相关的事情)
3.你经历过什么挫折,你的优缺点 (考察:你受挫能力,是否能爬起来)
4.平时怎么学习的,最近有看过哪些书这些问题可以提前准备下(考察:你自主学习能力) 以上的问题需要提前想好怎么回答,如果因为这些问题留下不好印象,太不值了
梳理知识 & 重新学习
由于市场大批量流入自认优秀的测试员,使得多数公司不得不降低了期望,但是真正有实力的测试员,基本没有受到什么影响,要跳槽还是很容易的。如果对现在的工作不满意,又没有足够的经验,不妨先静下心来进修一番。
目前就大量招聘信息来说,想要高薪得会以下几点:
懂自动化测试基础,懂Appium操作,元素定位、操作、等待、滑动等,深入讲解PO、unittest、yaml、配置文件、测试报告等知识,基于关键字驱动、Pytest和jenkins持续集成完成App测试框架设计与开发、测试工具、比如性能测试工具loadrunner,自动化测试工具selenium、Appium。
在行业混迹8年,接下来我想分享一下这些年来,我对于技术一些归纳和总结,和自己对作为一名高级测试者需要掌握哪些技能的笔记分享,希望能帮助到有心在技术这条道路上一路走到黑的朋友!
我和朋友特意花了一段时间整理编写了下面的这套《自动化测试工程师学习路线》,不想停留在各种都会一点的朋友可以参考一下。
1.前期的面试计划很重要,确定你要去的公司,然后查漏补缺,看哪些技能需要加强的,自己就专门花时间补。
2.面试中项目是重中之重,所以需要好好准备。
3.基础知识的八股文有时间尽量刷刷,也是敲门砖,能力再强也可能被八股文卡住。
4.中小公司看重项目,大公司看重:项目+基础+算法,还可能有学历。
5.即使1-2次面试挂了也没关系,并不能说明你能力有问题,只是说明你跟他们职位不匹配,多尝试,多总结,总能找到适合自己的公司。
点击下面卡片关注本博主个人公众号可以获取更多技术干货,包括自动化测试学习资料,知识体系大纲,40篇面试经验文章和项目案例源码、笔记等资料
可拉进交流群,有大佬指点迷津你的问题往往有人遇到过。具体详细内容可自行查看哦!
▲ 《程序员一凡》 ▲
关注上方公众号获取