一年之际在于春,新年伊始,又到了跳槽的好季节,不知道你是不是已经安于现状,我作为一名4年的测试工程师,最近在被面试过程中遇到了许多问题,就自己的经历来分析下作为高级测试工程师跳槽前应该准备哪些知识,才能在面试官面前表现出众。
本场分享的主要内容:
•Java 算法,冒泡排序、斐波那契数列;
•被面试到的 Linux 命令;
•项目经验是如何被考核的;
•被面试到的 SQL 语句。
•被问到的自动化知识;
•被问道的性能测试知识;
•被问到的测试用例知识;
• 终面问题;
希望通过我的分享,祝大家都能跳好槽。找到自己满意的工作。
一年之际在于春,当然也是跳槽的黄金阶段,通过最近近一个月的面试,现在将自己的面试经历分享出来,希望可以帮到大家。
Java 知识
现在招聘测试的岗位很多,但是大部分都要求会开发,尤其是 Java 语言尤其重要。面试遇到的问题主要有以下几个方面。
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]+"-");
}
}
}
细心的你可能已经发现了考察知识点无外乎两个:
1.for 语句的嵌套循环;
2.Java 的递归调用。
当然,这里我也给出自己的一点建议,当面试官问算法的时候,不会就诚实回答说不会,最起码要让面试官看到自己的态度,千万不要明明不会还要试试,写到一半不知道怎么收场更尴尬!
Java 基础知识
当然考察算法只是一部分面试官的做法,但是考察 Java 基础知识则是一个必然的做法。
(1)Java 多态性体现在哪里?这个面试题几乎为必考题,所有的面试官考察我 Java 知识的时候都问了这道题,那么给出我的答案就
Java 多态体现在两个方面:方法方面和对象方面,方法上体现为重载和覆写,对象上的表现形式为向上转型和向下转型。
(2)进程和线程的区别,这个面试题也被问到了不下三次。
这个比较有难度了,交给大家一个聪明的做法,当然您是能自行说明白的大神除外,我的回答是这样的:
以我们最常用的 QQ 为例,QQ 本身就是一个进程,但是 QQ 里面的文字信息、语音通话、视频等都是一个线程。有进程的情况下才能有线程,回答到这里基本就是合格的。
(3)Java 类库。这个问题我也被面试到了两次,下面已经给做好了总结,请看下面的思维导图:
(4)问到了多线程的两种实现方式,这个问题同样被面试到了两次。
实现 Thread 类和实现 Runnable 接口。这里面还被问到了 run() 和 start()的区别。
剩下被问到的问题就不是很有代表性了,比如 private 关键字的用法、String 的反转如何实现、常见的数据类型都有哪些、new 出来的对象是保存在堆内存还是栈内存,这些问题不是经常出现,请大家自行充电。
Linux 命令
作为一名高级测试工程师,必须掌握常见的 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 语句
这部分据我的经历来看,真正的考核 SQL 语句书写的面试官非常少,但是大部分面试官喜欢问到的语句如下:
•建表语句:create table tablename{}。
•distinct 关键字的用法。
•多表查询如何做。
这里重点提一个概念,事务,这个问题的考察达到了80%。
自动化知识
如果你的简历里体现出你会自动化,有很大几率会问两个问题:
•testng 的报告输出,这里面涉及的问题既有 testng 整个的实现框架,也会有其细节实现,比如输出报告的样式如何进行格式化;
•执行用例时,出现错误,是如何处理的:考察了解图功能的代码实现。
性能测试知识的考察
毋庸置疑,这也是一个考察的重点,需要掌握以下内容:
(1)性能测试最重要的指标:并发用户数、TPS、正确率、响应时间。
(2)性能测试的监控体系;
•监控 Linxu 服务器,推荐回答使用 NMON;
•监控数据库资源,必录 Oracle,监控其资源消耗使用 LoadRunner,监控其 SQL 慢查询需要借助工具 DWR;
•监控中间件,线程活动数等,需要使用的工具有很多,可以执行储备。
测试用例知识的考察
(1)请说说纸杯/电梯/qq登录的测试用例
这种题注意,尽量多说用例,这是让面试官看到你的思维活跃度高的依据。但是最好能有条理的说出来,而不是想起哪个测试点就说哪个。遇到任何问题都要把大纲先说给或者画给面试官看,然后再从头开始添枝加叶,最后再说一句,因为时间关系,就不继续说了。
遇到没头绪的时候不用思考,思考就会冷场,一定要一边开始一遍思考,效果好,所以听完面试官的问题,直接开口说:我先把测试点大纲给你写出来。然后一边写一边就开始构思下一步。
我这里可以给出大致大纲:
功能/非功能/接口
•功能可以分输入/处理/输出
•非功能可以分为iso9126的六大特性27自特性来一个一个套
•接口分为用户接口/软件接口/硬件接口
终面问题
(1)假如我是你老家的朋友,现在要来北京玩,你打算怎么安排我
这个问题是面试搜狗的时候被最后一面问到的,当时自己答的自认为很好,可是面试官的一句话直接宣告失败。因为我一开始回答,就已经错了。
作为一个测试,遇到这个需求,上来就开始写用例(写安排流程)其实是错误的做法。正确的做法是先反问回去你的朋友,你打算什么时候来?早上还是晚上到?做什么交通工具来?哪站到?你以前来过么?你吃东西有忌口么?这次来有特别想去的地方么?什么时候走?想住旅店还是宾馆等等。
这叫什么?这就是咱测试在过需求评审的时候,应该对产品经理反问种种细节。而不是埋头直接开干。所以小伙伴们以后面试的时候遇到凡事这类开放性问题,首先要去反思面试官为什么要问这道问题,然后再回答出对方想要的。很显然面试官想看看我作为测试的性格和规范,其次才是我的思路完美与否。
总结
总的来说,我有如下的体会,高级测试工程师一定是要既懂细节的测试实现,也关注技术框架。重点被面试到的知识概括为:
•Java 多态性的考察、Java 循环语法的考察、Java 类库的考察、线程和进程的考察、多线程的考察;
•Linux 主要是考察常用的命令;
•MySQL 主要关注于定义,很少叫你写简单的 SQL;
•自动化考察关注细节的实现,但是不会太难;
•性能测试关注整体的架构,场景、脚本、监控体系要多积累。
希望本篇文章给正在想跳槽的您一点启发,测试永无止境,希望自己也能不忘初心、筑梦前行!