高级测试工程师面试经验

一年之际在于春,新年伊始,又到了跳槽的好季节,不知道你是不是已经安于现状,我作为一名4年的测试工程师,最近在被面试过程中遇到了许多问题,就自己的经历来分析下作为高级测试工程师跳槽前应该准备哪些知识,才能在面试官面前表现出众。

本场 Chat 主要内容:

  1. Java 算法,冒泡排序、斐波那契数列;
  2. 被面试到的 Linux 命令;
  3. 项目经验是如何被考核的;
  4. 被面试到的 SQL 语句。
  5. 被问到的自动化知识;
  6. 被问道的性能测试知识;
  7. ……

希望通过我的分享,祝大家都能跳好槽。找到自己满意的工作。

一年之际在于春,当然也是跳槽的黄金阶段,通过最近近一个月的面试,现在将自己的面试经历分享出来,希望可以帮到大家。

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 语句书写的面试官非常少,但是大部分面试官喜欢问到的语句如下。

  1. 建表语句:create table tablename{}。
  2. distinct 关键字的用法。
  3. 多表查询如何做。

这里重点提一个概念,事务,这个问题的考察达到了80%。

自动化知识

如果你的简历里体现出你会自动化,有很大几率会问两个问题。

  1. testng 的报告输出,这里面涉及的问题既有 testng 整个的实现框架,也会有其细节实现,比如输出报告的样式如何进行格式化;
  2. 执行用例时,出现错误,是如何处理的:考察了解图功能的代码实现。

性能测试知识的考察

毋庸置疑,这也是一个考察的重点,需要掌握以下内容。

(1)性能测试最重要的指标:并发用户数、TPS、正确率、响应时间。

(2)性能测试的监控体系;

  • 监控 Linxu 服务器,推荐回答使用 NMON;
  • 监控数据库资源,必录 Oracle,监控其资源消耗使用 LoadRunner,监控其 SQL 慢查询需要借助工具 DWR;
  • 监控中间件,线程活动数等,需要使用的工具有很多,可以执行储备。

总结

总的来说,我有如下的体会,高级测试工程师一定是要既懂细节的测试实现,也关注技术框架。重点被面试到的知识概括为:

  1. Java 多态性的考察、Java 循环语法的考察、Java 类库的考察、线程和进程的考察、多线程的考察;
  2. Linux 主要是考察常用的命令;
  3. MySQL 主要关注于定义,很少叫你写简单的 SQL;
  4. 自动化考察关注细节的实现,但是不会太难;
  5. 性能测试关注整体的架构,场景、脚本、监控体系要多积累。

希望本篇文章给正在想跳槽的您一点启发,测试永无止境,希望自己也能不忘初心、筑梦前行!


本文首发于GitChat,未经授权不得转载,转载需与GitChat联系。

阅读全文: http://gitbook.cn/gitchat/activity/5a9776d5caf9e47bb972ec9c

您还可以下载 CSDN 旗下精品原创内容社区 GitChat App ,阅读更多 GitChat 专享技术内容哦。

FtooAtPSkEJwnW-9xkCLqSTRpBKX

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页