大家好,我是洋子,时至9月,24届校招正式批笔试环节很多公司都开始了,近期也有同学逐渐开始正式批面试,今天分享一篇22届学长的上岸大厂测开经验指南,干货满满
原文链接 https://zhuanlan.zhihu.com/p/479687038?utm_id=0
遥想去年今日,正是踌躇满志,念经刷题,备战实习的屯兵时段。当2023届的师弟师妹们向我虚心请教时,想起去年自己也是线下和师兄、同辈之间交流,线上学习牛客、知乎、脉脉分享的经验。沐往届大家的交流、经验之风,遂觉也应该向大家分享下自己的校招之路,反哺社会。鉴于疫情来袭私企大小厂缩招裁员、高校扩招CS人满为患的种种形势下,校招进入大厂变得越来越难,面试难度也在逐年升级,想在大厂拿到Special Offer(SP)的难度也是难上加难。相比于去年开始暴卷的后端开发、前端开发,测试开发凭借着高需求、低门槛、吃经验、速晋升等优势,使得普通人就能相对轻松地拿到各个大厂的SP,我愿称之为曲线斩获大厂SP Offer!
一、校招经历
我大约从2021年1月份便开始备战实习,6-9月份边实习边秋招,直至10月初落下帷幕。8个月的校招历程,有着最初的满腔热血(穷学生嘛一想着可以工作搞钱就很热血);也有着中途的迷茫、低落、甚至自我怀疑(关于岗位,行业,城市,面试被挂,学习焦虑等);也有着最后的艰难选择、开奖惊喜和诸多感概。
一开始,对自己定位的方向是Java后端开发,岗位多,后续回归国企也方便,但该岗位需要丰富的理论基础(若需要,这里非常推荐一位Java选手 @呆木啊 的经验分享)。但随着复习加重和投递爆卷,深感焦虑和不适,遂转行测开,打算凭借着自己的性格和兴趣,努力打造出优势,实现曲线超越。
转行后,先是轻松拿下阿里、腾讯的实习offer;实习后全力应聘,征战大厂,收获颇丰;共收获十余家SP Offer
- 成果:阿里、腾讯、百度、字节、大疆、华为、美团、TPLINK、虾皮、SAP、京东、爱奇艺等多家厂子的SP Offer
回顾这九个月实习和校招,下面简单分享下我在校招流程中的心得。
1. 简历 :尽早投递,逐步更新
简历投递要趁早且最好海投,不要想着等准备好了再投再面,原因有二。一是互联网节奏快且好部门好岗位的hc竞争激烈,过晚被捞的概率低,面试流程也会变长,很拖节奏。所以最好是春招秋招一开启,就投递,这样面的快,留给自己调整的时间也快;二是可以让自己快速进入状态,即使当时并未准备好,但进入状态后可以边面试边准备,提升自己的效率。我记得我找实习和秋招基本都是集中在两三个星期面完80%的公司,巅峰时基本一天至少有两场面试,挺过那一两周,后面就能开心的放松,战线拉得又快又狠。
再一个,简历中千万不要有自己不熟悉的部分,可以随着熟练度的提升逐步更新。比如你只是了解一些C或Linux,最好不要写上,即使标注了解,也很容易被面试官注意到,稍微一问答不上来就很尴尬。面试是在有限的时间里,展现出个人的优势所在。一旦把时间浪费在自己不熟悉的部分,就很难让面试官捕捉到你的优势。
简历非常重要,一定要精雕细琢,逐步完善,一份好的测开简历一样需要标明熟悉的技能点、项目经历(测开实习项目>测试领域项目>开发项目>与测试不相关的项目)。技能点主要是测开需要具备的理论基础和加分项,详见第二部分。项目经历不论是否与测试相关,都要叙述清问题所在,如何解决,提升多少(最好是具体数值)。面试官有时不仅会考察你的知识面,还会评估你的思维能力、解决问题能力、探索能力、表达能力等潜能,这点在校招中尤甚,所以请珍视介绍项目经历的机会。 简历一页即可,突出自己在学校的荣誉和对该岗位的应聘优势。
2. 笔试 :不可大意,主次分明
笔试是校招中特有的一环,虽然没有面试那么重要,但也不可大意。有些公司重视笔试,比如华为看笔试分数评级,网易面试时会询问笔试中的算法题。
笔试的重点在算法编程题,剩余的知识点太多太碎,在平时积累,无需刻意花时间准备。实在不放心,可以两台电脑打打小抄,或者找个朋友打打小掩护。总之除算法题外,骗过就行。分享一些骗分技巧:
- 巧用概率:比如一题先蒙了c,但回头排除b后,一定要更改答案,从a和d中选一个,对的概率大大提升。
- 算法题可以直接输出答案,骗过一部分case。甚至也可以巧用随机数,以一定的概率随机输出不同的答案。
- 如果一时想不出好的解法,就暴力枚举。没有暴力枚举解决不了的问题,暴力能过60%的case就很牛。
3. 面试 :多实践,多记录,多总结;心态和知识一样重要
面试经验确实是越多越好,一开始自己也是十分紧张,自我介绍声音都在发颤,面试官与我一问一答,十分机械,再遇上一个陌生的手撕代码题,整个就抓耳挠腮,卡卡顿顿,面试体验贼差。后面我狂补面试知识和技巧,听过几遍录音,心态锻炼好后,觉得面试也没那么紧张,熟练之后,感觉很麻木,甚至有投机的面试官往往能聊的很嗨。
所以与其在那里思想斗争,不如多动身实践。针对自我介绍、项目介绍、基本理论、必问面经等面试必问题,一定要提前做好准备。在面试的有限时间里,尽可能的展示出来自己相比于别人的优势,不仅在这些必问题上,还要见机延伸到自己擅长的领域,增强主动性。另外,重视每一场面试机会,事先要多了解下面试公司的情况,技术栈、理念、文化、产品等,并养成习惯,无论面试官或者给你的面试体验好与坏,都把它视作是一场学习和锻炼的机会,尽量不要被面试官的情绪带跑。这点尤其适用于压力面和那种非正常的面试官。你和公司都是在寻找彼此适合自己的候选而已,道不同不相为谋,所以有时候不必气馁也不必结怨。
前期面试最好有录音,面完及时复盘,人们很容易受限于自身,有时候置身事外审视自己,总能发现很多不一样。如果能联系到面试官或者对接人,要及时询问面试反馈,这很重要。如果反馈结果好,能增强信心,如果反馈差,能快速调整。还有一点就是面经,不仅在面试前多看别人写的面经,自己面完也可以及时记录自己的面经。我找实习的时候就记录了很多面经,这为后来的总结、秋招提供了很大的好处。还记得我到后期准备面试就是疯狂在牛客、知乎、博客等地方刷面经,对着一个个问题在脑海里不断演练。
有了面经,其实就可以自己总结一些常见问题的回答,分模块整理,比如Java基础、计算机网络、测试理论等。当然,现在网上有很多别人总结好的,很详实。不管是自己总结还是别人总结,要做的是,对常见模块和常见问题要有准备,备一次而享一年,多划算。后续会分享一些我当时准备的资源和自己总结的文章,还请持续关注。
总结自己大大小小几十场面试,我觉得主要准备好以下两个方面:知识和心态。
知识中需要准备的是八股文和代码编程。其中面试的手撕代码很重要,一般这关过不了,很难能拿到一个好的结果。好在测开的面试代码题相对简单,多是leetcode中等难度以下的水平。八股文在于平时的多记录多总结,对不同模块的掌握程度因人而异。
这里我主要想说的是心态,面试心态不好,很难发挥出自己的优势,心态好,兴许唬住面试官,SP Offer立马到手。心态里首先是自信,自信者自知,知道自己的原则和边界,认识到自己的不足和短板,便能随性发挥,任情展现。其次需要准备下沟通技巧,要说出要害,要学会倾听,倘若能使面试官自己说嗨了,岂不美哉。沟通其实也是一名测试需要掌握的重要技能,若想提升,推荐阅读《非暴力沟通》、《金字塔原理》等。面对自己不会的
问题,一定要先思考,再说自己还没想到好的思路下去一定再琢磨一下。这样比起直接说自己不会,能给面试官展现出一个勇于探索、爱思考的好心态。
二、测开面试
1. 为什么选择测开?
这是一道面试题,也是我特地想最先和大家聊的问题。
先讲点个人经历,纯属题外话。本科是物理转计算机,学期太短,并没学到太多;保研硕士,随导师领略计算机视觉的神奇世界,除了苦肝的几篇成果外,剩余时间都在摸鱼hhh。找工作算是心头大事,但也是一波三折、历经迷茫后,才寻到测开方向。起初面的是Java开发岗,但随着不断地深入学习,越发觉得自己的兴趣在慢慢变淡,只觉得复杂繁多的理论学习带来满满的焦虑,大量的逻辑代码也产生强烈的不适。我在想,如果以后整天的生活都被这种焦虑感和不适感充斥着,该是多么的可悲!在一边排斥的同时,也在积极的变通调整,寻求合适的岗位,了解到身边很多类似困扰的师兄师姐很多选择了测开,在小许纠结和充分了解后,忽然发觉还挺适合自己。追求知识的广度,有着较少的代码量,需要细致而发散的思维,需要充足的细心和耐心,需要有探索精神和发现问题的能力,这些既是测开岗位的需求,也是我从小到大的专长。双重作用下,又觉得自己能行了,再次燃起斩获大厂offer的热情。
撇开个人私心不说,应聘测开这个岗位时,大多数人都会出于以下几个因素
一.宁鸡头,不凤尾
测开这个岗位有很强的综合性,好的测开要懂前端、后端、测试、甚至有些部门还要求懂点算法。实习时测开项目组里面,有些前端很牛、有些后端架构写的很凶、有的测试经验丰富(分有功能测试、性能测试、安全测试、自动化测试等)、有的把控项目进度有一手、有的排查问题很迅速,大家各司其职,皆为一个目的:保证产品质量与安全,提高开发人员的研发效率。可以说,一个好的测开是要比开发人员懂得更广泛,因为对于风险的把控往往需要对全局有个清晰的认识。鉴于当下开发的内卷程度,对于具备开发实力而又不想太卷的人,测开会是一个较好的归宿。同样地劲头学下去,测开岗会比开发更容易能达到头部。任何岗位,能达到本岗位的前15%,才是各大公司争抢的人才。所以各位一定要在保命的同时,多挖掘自己的爱好、特长,进而找到自己擅长的岗位,这会使得你更容易达到竞争的高位。努力永远赶不上天赋,尽管我们大多数情况下都没有达到拼天赋的境界 。
二,前景好,需求大,压力小,薪资高。
在阿里,目前的标配是8个研发配1个测试,对测试人员的需求一直都很大。 更别说对于那些细分领域(性能、安全、自动化、智能化测试等)的测试人才需求,一直都是高薪聘用。测开的压力相对开发还是小一些,毕竟主战场是在软件研发周期的中下游,一旦发现问题,紧急加班的还是开发人员。另外,任务难度上也确实比开发小,虽然需要懂的范围广、但深度和难度上要求并不高。工作内容比较灵活,可供选择的方向很多。所以,对于追求高薪、不以代码为命、不惧怕沟通的人,选择测开能带给你更好的人生体验,工作生活会更加顺畅。
三,性格适合,有趣有价值。
测试比较适合务实较真、喜欢探索未知的人。找bug是一件很有趣的事情,在写测试用例时需要在把控产品全局的风险基础上发散思维,探索发现潜在风险点,覆盖各个场景。测开人员既是产品质量的守门员,又是安全问题的吹哨人。
当然,选择测开需谨慎。尤其是面临开发和测开选择的人,要注意开发转测开好转,但测开很难转开发。另外,测开往往需要接触繁多的业务,对业务的理解要比开发还要深刻、熟练。还有,测开需要更多的沟通协调,有的时候要强势,有的时候要弱势,对有些人来说可能比较排斥。
希望大家谨慎考虑,联系自身实际,对自己的未来不将就!
2. 理论知识
1) 测试理论
主要考察软件测试流程和周期、测试用例设计、系统测试分类、测试工具、沟通&文档问题、职业选择与规划、 如何测试xxx(微信红包,登录界面,手撕的代码题、一个杯子等)
- 书籍:《软件测试的艺术》 、《Google软件测试之道》、《机器学习测试入门与实践》、《人人都是产品经理》
- 学习路线: 必读《软件测试的艺术》 ,然后针对牛客、知乎的面经提前准备好自己的回答,必要时看些《机器学习测试入门与实践》、《人人都是产品经理》开拓下视野,这已足以应对校招面试。若想进阶,可以阅读实践一些性能测试、自动化测试相关的书籍和项目。当然,沟通、文档能力也需要有意识地去学习。
2) 计算机网络
主要考察五层协议、TCP三握四挥、TCP与UDP区别(以及如何保障可靠传输)、输入URL发生什么(出现故障如何快速定位?)、HTTP、状态码、cookie和session等
- 书籍:《计算机网络-自顶向下方法》、《TCPIP详解三部曲》、《图解HTTP》、《图解TCPIP》
- 视频:计算机网络(谢希仁第七版)-方老师(B站)
- 学习路线:必看《计算机网络-自顶向下方法》、计算机网络(谢希仁第七版)-方老师
3) 数据库
主要考察常用SQL语句、日志、性能与优化、索引、事务、隔离/锁、Redis、redis数据结构、redis缓存、持久化
- 书籍:《MySQL 必知必会》、《高性能 MySQL》、《Redis设计与实现》
- 视频:尚硅谷MySQL技术高级篇(B站)、尚硅谷Redis高级-周阳(B站)
- 学习路线:优先学习mysql和redis中必看部分,再了解进阶书籍和博客。时间来不及可放弃Redis。注意数据库一定要多动手敲语句,像练习编程题一样,Leetcode也有对应的sql语句练习题。
4) 数据结构
主要考察数组、链表、字符串、栈、二叉树、排序、回溯、简单动态规划等问题。这一块更多的是编程题,一定要早准备,在leetcode、牛客刷题后,多总结并每天练习保持手感。
- 书籍:《算法竞赛入门经典》、《算法》、《剑指Offer》、《程序员面试宝典》
- 博客:labuladong的算法小抄
- 学习路线:必看labuladong的算法小抄和《剑指Offer》,如果可以,最好将高频刷两遍以上。
5) 操作系统
主要考察进程线程协程、进程同步与通信、虚拟内存、页面置换、Linux文件系统、linux常用指令
书籍:《现代操作系统》 《鸟哥的Linux私房菜》
视频:操作系统(哈工大李治军老师)(B站)
学习路线:优先学习《现代操作系统》和Linux基础应用
6) Java
主要考察java基础(接口、深浅拷贝、集合等)、JVM(类加载、GC、JMM)、并发编程(JUC、多线程、线程安全锁)、Spring框架(Ioc、AOP、生命周期、MVC等)
- 书籍:《Java核心技术》卷1和卷2、《Java语言程序设计基础篇》、《Java并发编程的艺术》、《JAVA并发编程实践》、《深入理解Java虚拟机:JVM高级特性与最佳实践》、《实战Java虚拟机:JVM故障诊断与性能优化》
- 博客:JavaGuide
- 学习路线:必读《Java语言程序设计基础篇》、《Java并发编程的艺术》、《深入理解Java虚拟机:JVM高级特性与最佳实践》,在此基础上读一些面试博客,刷刷面经。
7) Python
主要考察python基础(容器、装饰器、内存机制GC、多线程、闭包等)、爬虫相关
- 书籍:《Python编程:从入门到实践》、《Python网络数据采集》、《流畅的Python》、《Python深度学习》
- 博客:廖雪峰的Python在线学习教程
- 学习路线: 必读《Python编程:从入门到实践》基础打牢后,可以选择性的读一下爬虫、深度学习类的书籍
8) 前端
主要考察js相关、浏览器相关、框架相关(React和Vue)
- 书籍:《HTML+CSS+JavaScript入门经典(第3版)》、《JavaScript高级程序设计》、《JavaScript权威指南》、《HTTP权威指南》
- 技术文档:MDN、React和Vue官方文档
- 学习路线:必看《HTML+CSS+JavaScript入门经典(第3版)》、《JavaScript高级程序设计》或《JavaScript权威指南》,若想深入研究一定要多学习官方技术文档。
9) 整体学习路线
建议最先准备算法编程题,语言选择python或java均可。接着学习数据结构、计算机网络、数据库、操作系统、测试理论中必看的部分,完事后基本在理论基础这一块不虚面试官的提问。学完后,可以看一些进阶的书以及面经博客之类。
对于Java和Python的学习,挑一个掌握熟练即可,最好能做到对应的后端开发水平。前端的知识也算是进阶,如果掌握不熟练,切记不要写在简历上,并不是必需项。就我个人而言,除去python和前端没写在简历上,剩余模块的知识均是熟练掌握,对网上的面经基本都能有备无患。回想在春招实习和秋招面试中,基本没在技术面挂过,当然这也跟测开的门槛低有关。
10)零基础快速入门学习路线
既求快,那必然要切中要害。我建议在编程题、简历、八股文这三块多下功夫,边面试边练习,坚持20天,做到只露剑芒,便可斩获offer。
- 编程题:每天练习,保持手感。
首推CodeTop,可以按高频,10道题一组,一组练个两三轮。第一轮不会的可以看看leetcode或牛客题解,争取第二轮能独立解题,并做到全a。以”容易“难度为主,尽量熟练掌握80道左右。当然学有余力后,可以刷点leetcode和牛客的高频题,多多益善。
刷题时注重数据结构的学习:着重理解数组、链表、堆、栈、队列、二叉树、查找与排序算法。
- 简历:5天时间。
简历非常重要,一定要耐心细致的准备,且要根据自己的复习情况随时更新。这里给出5天的时间,不仅要写一份清晰明了的简历,还需要做到对简历上任一知识点都能对答如流。
先大致说几句如何做一份清晰明了的简历:
1)个人基本情况:补上一些奖学金、奖项荣誉、奖项多的直接写 x级奖项几个;x等奖几个
2)科研情况:不必写题目,直接 xx专利几篇; xx论文几篇; xx基金几项
3)技能:这块要细致,注意凡是写在这的都要禁得住问,哪怕不是”熟悉“而仅仅是”了解“。
注意详略得当,不要在这写长句子,尽量逐点列举。可以像下图这样:
这里是面试官经常要问到的区域,我记得有一场面试官真的就是在逐点询问,还好我把不熟练的都删掉了hhh
4)项目实践:写项目介绍的时候切忌不要有花里胡哨的功能!不要有天花乱坠的技能点!一旦答得不好,给人的 落差感太大了!!!而且这一块基本都是自己的工作,如果答不好,让面试官怎么想?
比较建议 对项目的介绍尽量宽泛易懂,一句话足矣;对个人负责部分的说明要侧重功能,尽量不提技术;对效果的展示尽量具体,以数字、百分比来体现;对技术或者知识点的展示可以放在最后,尽量逐点列举,比如用”涉及到……“、”利用到……“,如下图:
5)实习经历:可以比项目实践再精简一点。说一下接触到的业务域和用到的技术栈即可。
6)个人评价/性格/爱好/特长/社会实践:可有可无
总之,简历要在突出自己优势的同时,切忌模棱两可;要重点突出,切忌长篇大论,多用总结词,争取让面试官懂得你在写什么。
简洁的简历背后,是要下功夫去充实丰富的。可能一天就能写完简历,但要用剩下的4天填充好简历上的每个窟窿。不仅有列举到的所有技能点和知识点,还有你想装逼的内容。这些准备工作不容忽视,甚至比八股文还要重要(因为大部分时间你是在介绍自己的工作,很难确保面试官会问到哪些八股题)。
- 八股文:10天。
如果你的项目经历、实习经历单薄,那么这一块一定要做到了然于胸,最好能达到”自说自话“。
话不多说,先推荐整理一份自己的知识点清单。可以从牛客上的大厂面经和自身的简历出发,将高频的知识点列出来,形成清单,并分类别不断充实。牛客面经推荐:测试开发岗-高频知识整理【校招】、春招测开岗面试高频考点万字汇总;知识点学习推荐:CS-Notes、JavaGuide。
知识点清单累计需要1天时间,剩余的就是依着清单很类别去背(理解)知识点了。注意,最好要挑一个类别熟练掌握,比如计算机网络,要做到该类别下的问题可以和面试官聊半个小时以上。我还记得有好几次面试官都会问”数据结构、操作系统、计网和数据库,你觉得你最熟悉哪一个?“,所有挑一个给他聊半小时,让他满意。如果时间不够充裕,其他类别大致了解即可。本来测开需要掌握的知识点就广,所以校招也很难把所有类别都掌握,我觉得能让面试官看到你在某个方面很熟练、很有想法,就能充分认定你有很强的学习能力,以后不懂得工作后再学也快。所以校招知识点的掌握不在多而在精。
这里按重要性将知识点的类别排个序,除必选外,选择一个多花2天精通。
1)测试理论 【必选】 0.5天
2)编程语言 【必选】 java、python、C++ 1.5天
3)计算机网络:1天
4)数据结构: 1天
5)数据库: 2天
6)操作系统:1天
面试:5天十几场左右。
一定要早点面试! 建议简历花1天准备好后,就可以投递,进行约面。前期面试会带来很多好处:快面试前激素飙升,背东西贼快hhh;面试中的问题和回答会更加印象深刻;面试后心态会明显好很多,紧张感啊,尴尬呀等主观影响会越来越少;逐渐进入状态,效率up up up !
3. 项目实践
很多投递测开岗的同学不太重视简历上的项目实践,也许是不知道该写些什么。我认为是不可取的,项目不仅非常锻炼自己,也是在面试中需要反复聊到的。好的面试官遇到一些有趣的项目是十分愿意听你讲的,他不仅会跳进项目内听你讲一些细节,也会跳出项目内容听你是否讲出项目的前因后果,以及考察你的思维、表达、动手实践能力。如果项目这块缺乏或者薄弱,面试官会疯狂问一些八股文,甚至一些没怎么学习到的理论知识,这很难找回主场,充分发挥出自己的优势。
项目首推github或者gitee上的一些自动化测试项目练手,然后简历上梳理清楚该工具解决了什么问题,减少了哪些手工测试步骤,以及量化出提升的效率。如果对爬虫比较感兴趣,做一个十分熟悉的爬虫项目也很加分。其次,推荐练手一个有着前后端分离的项目,比如在开发岗中烂大街的博客、管理系统、商城等等。这会让你熟悉web开发,不仅能给面试官展现出自己的动手能力,对于以后的工作也很有帮助。实在不济,写一些无关项目也行,但注意一定要谨慎梳理,顺着问题 -> 挑战->方法->难点->成果->感悟的思路组织,并且让外行也能轻松明白你在做什么。比如我在最初实习面试的时候,就把研究生阶段的图像识别项目写在简历上,虽然面试官并不懂CV这一块,但我介绍完项目后,大都表示对这部分内容很感兴趣,对我的工作也很认可,甚至会多聊两句题外话hhh。
4. 实习经历
一旦定下准备工作的打算,就最好抓住一切机会去企业实习。企业和学校不一样,那里能感受到真实的开发测试流程、能接触到真实的业务场景、能多少领略到社会的环境氛围。
更重要的是,他能让你提前感受下未来的工作体验,是否能喜欢、是否能承受住这份工作。像我当时在某大厂实习时,同一大组五个实习生,全部转正,但最终只留下一个人,其中一人转行开发,一人升学,另外两个秋招时选择了其他公司。我很感谢那段实习经历,师兄、主管人很奈斯,认识很多玩的不错的同事,也开拓了很多眼界。工作上,也让自己很认同测开这个岗位,学会了如何快速熟悉业务、如何定位需求、如何压测、如何和开发人员沟通督促、如何沉淀出有价值的经验和感悟。这在之后秋招面试中屡屡被提起,面试官非常感兴趣,有几轮面试官甚至会请教其中的一些细节问题。
5. 加分项
一些论文,专利,竞赛获奖是通用有效的加分项。此外,如果熟悉某些测试工具、有着很强的前端或后端编程经验也很受欢迎。
三、学习资源
-
八股文
CS-Notes
JavaGuide
测试开发岗-高频知识整理【校招】
春招测开岗面试高频考点万字汇总
测试开发面试宝典 -
编程题
labuladong的算法小抄
CodeTop :面试前刷一刷,十分靠谱