一年之际在于春,新年伊始,又到了跳槽的好季节,不知道你是不是已经安于现状,我作为一名4年的测试工程师,最近在被面试过程中遇到了许多问题,就自己的经历来分析下作为高级测试工程师跳槽前应该准备哪些知识,才能在面试官面前表现出众。
本场 Chat 主要内容:
希望通过我的分享,祝大家都能跳好槽。找到自己满意的工作。
一年之际在于春,当然也是跳槽的黄金阶段,通过最近近一个月的面试,现在将自己的面试经历分享出来,希望可以帮到大家。
现在招聘测试的岗位很多,但是大部分都要求会开发,尤其是 Java 语言尤其重要。面试遇到的问题主要有以下几个方面。
(1)求1到100以内的所有质数(出现概率35%)。
想写好这个算法首先我们需要明确什么是质数。质数定义为:一个大于1的自然数,除了1和它本身外,不能被其他自然数整除。
具体代码用 Java 实现如下:
/*求1到100以内的素数(质数)*/public class TestDemo01 { public static void main(String[] args) { int i,j,k = 0; for(i=2;i<100;i++) { j=(int) Math.sqrt(i); for(j=2;j<=k;j++) { if(i%j==0); break; } if(j>k) { System.out.println(i+""); } } //验证上传的内容 }}
(2)斐波那契数列(出现概率为:27%)。
确切的说,是考察通项公式的实现方式。即 n 为自然数,则有以下通项公式:
f(0) = 0
f(1) = 1
f(n) = f(n-1)+f(n-2)(其中n为大于等于2的自然数)
具体代码用 Java 实现如下:
/*斐波那契数列*/public class TestDemo02 { public static void main(String[] args) { System.out.println(fib(3)); } public static int fib(int n){ int sum = 0; int n1=1; int n2=1; if(n==1||n==2){ sum=1; }else{ for(int i=3;i<=n;i++){ sum=n1+n2; n2=n1; n1=sum; } } return sum; }}
(3)排序算法(冒泡排序、快速排序,其中冒泡排序出现概率为:50%)。
冒泡排序原理不在解释,直接上源码如下:
public class Test01 { public static void main(String[] args) { int arr[] = {5,7,9,4,1}; for (int i = 0; i < arr.length-1; i++) {//外层控制比较趟数 for (int j = 0; j < arr.length-1-i; j++) {//内层控制每一趟的比较次数 if (arr[j]>arr[j+1]) { int temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]+"-"); } }}
细心的你可能已经发现了考察知识点无外乎两个:
当然,这里我也给出自己的一点建议,当面试官问算法的时候,不会就诚实回答说不会,最起码要让面试官看到自己的态度,千万不要明明不会还要试试,写到一半不知道怎么收场更尴尬!
当然考察算法只是一部分面试官的做法,但是考察 Java 基础知识则是一个必然的做法。
(1)Java 多态性体现在哪里?这个面试题几乎为必考题,所有的面试官考察我 Java 知识的时候都问了这道题,那么给出我的答案就
Java 多态体现在两个方面:方法方面和对象方面,方法上体现为重载和覆写,对象上的表现形式为向上转型和向下转型。
(2)进程和线程的区别,这个面试题也被问到了不下三次。
这个比较有难度了,交给大家一个聪明的做法,当然您是能自行说明白的大神除外,我的回答是这样的:
以我们最常用的 QQ 为例,QQ 本身就是一个进程,但是 QQ 里面的文字信息、语音通话、视频等都是一个线程。有进程的情况下才能有线程,回答到这里基本就是合格的。
(3)Java 类库。这个问题我也被面试到了两次,下面已经给做好了总结,请看下面的思维导图:
(4)问到了多线程的两种实现方式,这个问题同样被面试到了两次。
实现 Thread 类和实现 Runnable 接口。这里面还被问到了 run() 和 start()的区别。
剩下被问到的问题就不是很有代表性了,比如 private 关键字的用法、String 的反转如何实现、常见的数据类型都有哪些、new 出来的对象是保存在堆内存还是栈内存,这些问题不是经常出现,请大家自行充电。
作为一名高级测试工程师,必须掌握常见的 Linux 命令。这是毋庸置疑的,下面就给大家分享100%会被考察的几个命令。
(1)查看进程的命令。
ps -ef | grep 进程名
(2)查看端口的命令:
netstat -ntlp //查看当前所有tcp端口·netstat -ntulp |grep 80 //查看所有80端口使用情况·netstat -ntulp | grep 3306 //查看所有3306端口使用情
(3)查看日志的命令:
tail -f 日志文件名
以上这三个 Linux 命令在面试中回回被问道,重要性不言而喻,希望大家好好掌握。
项目经验这块,经过多次面试后,我总结发现,各大公司的面试官们关心的问题如下。
(1)你在整个项目周期中扮演的角色,或者说都干了什么事情。
这个问题没有所谓的标准答案,就是考察你在一个项目周期中的角色和任务都是什么,说清楚即可。
(2)Bug 的生命周期都有哪些?
基本的流程是:创建-开发解决/需求确认-回归-关闭。
(3)测试用例的设计方法有哪些?
说出边界值、等价类、场景法基本要求,在说出正交矩阵、PICT组合加分。
(4)给你一个电梯如何设计测试用例?给你一个 QQ 的登录界面如何设计测试?
电梯的那个问题,各位自行发挥吧。QQ 的 Web 界面测试,一定要指出浏览器的兼容性测试、还有缓存 Cookie、Catch的影响,说出这两点,面试官定会对你刮目相看。
这部分据我的经历来看,真正的考核 SQL 语句书写的面试官非常少,但是大部分面试官喜欢问到的语句如下。
这里重点提一个概念,事务,这个问题的考察达到了80%。
如果你的简历里体现出你会自动化,有很大几率会问两个问题。
毋庸置疑,这也是一个考察的重点,需要掌握以下内容。
(1)性能测试最重要的指标:并发用户数、TPS、正确率、响应时间。
(2)性能测试的监控体系;
总的来说,我有如下的体会,高级测试工程师一定是要既懂细节的测试实现,也关注技术框架。重点被面试到的知识概括为:
希望本篇文章给正在想跳槽的您一点启发,测试永无止境,希望自己也能不忘初心、筑梦前行!
本文首发于GitChat,未经授权不得转载,转载需与GitChat联系。
阅读全文: http://gitbook.cn/gitchat/activity/5a9776d5caf9e47bb972ec9c
您还可以下载 CSDN 旗下精品原创内容社区 GitChat App ,阅读更多 GitChat 专享技术内容哦。