每一次跳槽,相信大家都有自己的一套方法论,一套准备和选择过程。当然面试也是一个双向选择,不排除有的时候看“缘分”。不管怎么说,这几年来,在面试过大大小小挺多家公司后,也算职场老鸟一枚了,总结了一些经验,分享给大家。
1、开篇:面试前
1)明确岗位职责
其实同样一个岗位,不同的公司的要求是有差异的。比方说,同样是测试开发工程师,A公司对该岗位的要求主要是偏服务端的测试流程开发,测试架构搭建;B公司可能更多的是偏客户端方向的;C公司可能也是跟A公司一样也是服务端,但是更多偏向于性能或大数据方向,所以对候选人可能有额外技能的要求;D公司呢,跟B公司挺类似的,也是客户端,但是做手游业务等等等等…
2)明确自身优势
作为需要写代码的岗位,最好也明确下公司主要用什么语言在做开发,虽然我们说开发语言都是大同小异的,有的公司也不care语言;但自身更熟悉哪种语言,match 程度高肯定是加分的,入职后也可以更好去融入团队,充分的发挥自身能力。
还有,明确自身的业务方向,也就是说自己之前的优势在哪,是有AI测试经验?服务端测开经验?云计算相关经验?游戏相关?SssS软件相关经验?之前做过的项目一定程度上决定了你的长处,这些长处可能是其它候选人不具备的。
3)不要海投
其实在明确岗位职责的前提下,明确自身优势,干嘛还要海投呢?我从来没有海投过简历,咱们前面所说的A/B/C/D四类公司,其实大家应该都遇到过。所以,针对他们的要求稍微有选择地修改简历,突出和公司要求更match的点,我觉得是挺必要的,也是大大提升投递反馈率的一个有效方法。个人认为海投是对自己优势的不尊重,也是对公司的不尊重,如果你足够热爱一家公司,你会拿一份随便的简历去投递吗?肯定不会。所以,珍惜每一次机会,重视每一次面试,把每一次投递,当作是对自身的负责,对面试机会的负责。
4)面经
面经的搜索是一种能力。我们说一家公司的面经,并不是指公司到底会问你什么题目(当然网上这种信息估计也很少),而是明确一家公司的面试流程,面试倾向,面试会涉及的方向和方面等,了解一下是可以的。常见的你可以上脉脉,看准网,知乎等,再有就是像51testing测试论坛等专门有测试分享的地方也可以找到不少信息。
所以你看,知己知彼,才能百战不殆。
2、中篇:面试中
1)算法与数据结构
这点在面试过程中往往是必不可少的,没有别的技巧,提前多刷leetcode吧。大部分公司面试算法都是从leetcode题目中挑选的,有一些可能是面试官临时想出来的,但一般都比较简单,比如简单字符串操作,数组操作什么的。做题的时候,选择你最最最熟悉的那个语言,像我一般用python会比较多,语法简单,写出来逻辑也好分析清晰。做题时别紧张,但也要注意下时间,一道题做太久的也有印象负分的。实在答不上来,就实话实说,把思路跟面试官解释清楚。
一般常见的算法与数据结构的题,涉及的常常有数据结构基本知识,排序算法,搜索算法,链表,字符串,数组,哈希,二叉树等。就我经验而言,个人认为最难的也就是动态规划这类了,我记得小米和滴滴终面都问过,但总体问的并不频繁。一般来说,写完一份算法题,还会让你对自己的function写一些测试用例。
2)计算机基础知识
这边比较偏向基础了,比如http/tcp协议,尤其是http的header/请求方法分类等比较常问;其次是操作系统基本知识,并发的概念,进程线程,互斥锁等;接下来是数据库知识,常见的有数据库查询语句,关键字比如group by的使用,多表联合查询(join),以及索引等;还有就是一些linux命令,如果 awk/grep/telnet/find/chmod/vim命令/netstat/查看文件/df/lsof 等等等,命令相关的其实不用去刻意记,因为大部分工作中很常用,水到渠成的事。
3)测试开发专业问题
每个岗位都有自己的专业性问题,测试开发也不例外。测试开发的专业问题一般有CICD,测试框架搭建起始,新技术使用方法,结合项目谈一些细节等。这个需要对简历中自己的项目足够熟悉,对涉及到的系统架构层面的东西也需要熟悉,有的面试官特别喜欢让你给他讲之前的项目架构甚至画出来。除此之外,作为开发角色,会问一些关于git的知识,git pull/checkout/revert 等相关,这些作为版本控制与管理的基本功,知道也是必须的;还有,我们的迭代周期,灰度上线等一些release相关的管理常识,最好也了解下;还有service进程管理相关,比如supervisor等也可以准备下,当然这些在介绍自己的项目时再详细说也可。
3、尾篇:面试后
我想最后的最后,应该就是对自身的总结了。虽然面试通过后就皆大欢喜了,但我认为还是有必要回顾一下。不能说为以后的跳槽积累经验吧,至少可以认识到自己的短板在哪里,而在工作中,这些短板很可能你会再次遇到,不管面试成功还是失败,都应该对自身有所提升才对。有人说,真正工作时候可能用不到那么多算法,为什么还要有那么多算法题目?在我看来,算法更多的是锻炼你的思维,像一些公司还特喜欢考智力题和脑筋急转弯,可能很多面试者当场不能给出标准的完美的答案,这不重要,你的解题思路,应试表现也会作为重要的参考部分。思维开阔,思路明朗,个人认为在工作时很重要。
4、万一的万一
讲一下自己的真实经历吧。因为即使把上面的都做到了,真正面试时候还是会遇到不太熟悉的突如其来的问题咋办?记得阿里某事业部的面试,像阿里这种体量的,大概率会涉及大数据高并发之类的东西,说实话其它一般公司的体量都没办法跟阿里这样的比较。那么问题来了:
面试官:我有一个excel文件,里面有1亿个数字,对这些数字排序,该怎么办?
我:首先得看内存能不能装得下…(有点迷)
面试官:能装下
我:(内心os: 排序我会写, 但直接排肯定不行, 量太大只能化大为小)那就分别排。
面试官:怎么分别排?
我:(想了一会)可以把这些数据分成到不同的文件,比如一万个文件,那每个文件大约有一万个数字,然后我们可以起多线程把这一万个文件中的数字分别排序,然后…
我:然后我在这个排序池里,每次放入一个元素,相当于1万个文件的归并排序。
细节记不太清了,总之我想表达的是即使遇到了陌生的,也不要慌,代码写不出来可以先说思路,大部分情况下,思路清晰了,代码其实也会写了。
步入职场,工作是最好的老师,自学能力加持。不要抱有侥幸的心理,认识到自己的短板,真正认真去学一些东西。职场是有自动筛选原则的,就跟大自然一样。成熟的职场人,是要让自己有足够的选择,而不是让公司选择我们。加油。
学习安排上
如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。
视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片进群即可自行领取。