面试-测试开发如何考察-非应届生

要点

要点元素 描述
职位匹配度 职能要求匹配就好,并不需要超过岗位level多少;
并不是超出越多越好:
性价比问题
团队的整体水平 能否与团队的人员合作,能起到什么作用;
管理的难度
代码能力 常见的算法实现即可,不需要特别复杂的算法(毕竟不是招算法牛人)
代码实现上进一步考察:
实现效率,异常处理;
测试思路;
自动化测试思路;
自动化测试 自动化的编写/维护效率VS执行效率:
自动化的编写/维护效率优先

ps: 这也是为什么框架/平台比一个一个写case要重要的多
持续集成思想 自动化脚本,发布和环境,流程结合
性能测试 这属于专项测试了
全站QA来说,性能测试的能力:
可以使用工具/开发工具 评估接口性能;

加分项:

性能瓶颈的分析,解决或者提前预防策略
稳定性
安全方面 DB敏感信息
多线程是否线程安全,是否死锁
测试技术/思路 对项目测试的难点的思考,解决
对开发架构的影响
业务/流程方面 有优化点或见解

ps : 专注于技术,但不可过度沉湎与技术。 适当考察候选人对业务方向的思考

沟通能力 提一个比较模糊的问题,看候选人是否会接着追问下去
   
   

考察点

  • 项目控制能力

ps : 在项目中的角色;控制的力度;

1) 有无推动什么流程改进;

2)  对产品/开发有推动

3) 质量分析能力:根据项目特点,制定符合的典型bug分析案例

4)  对安全上线的理解

5) 项目控制的硬性要求:http://blog.csdn.net/huazhongkejidaxuezpp/article/details/45119171

  • 代码能力

初级:编码能力;能根据负责的项目特点和需要,写项目中的工具。

中级:写通用的测试框架,并将其用到项目中来提高测试效率。

高级:对业界通用的测试理论,流程,框架有正确的认识;通用测试框架将其扩展和推广。

  • 测试策略

根据项目的特点,制定不同方面的测试策略;

根据与上下游的业务关联,制定符合项目的测试策略;

对目前使用 的测试策略的边界的清晰思考(例如,知道目前的策略可以发现什么bug,哪些场景/bug有遗漏的风险;)

  • 业务与架构

熟悉本业务和技术架构

为什么用了某种技术,有什么用途/架构方面考虑

某种技术方面的对比(redis/memcached,mysql/pg)

  • 测试方法论

对测试本身有无深刻理解(例如,与产品,开发,甚至业务线起到的作用)

对项目中质量的理解(例如,项目中bug的产生原因,应对方法和效果)

考察形式

ps:一般不采用笔试的形式(即使有笔试,题目也应该重点在测试点的设计上,重点考察测试点的深度和广度)、

  • 电话面试(真正面试前,最好先进行下简单的电话面试,进行双方的了解,免得双方不对口)

ps: 记得曾经遇到过“千里迢迢”去一家公司面试,到了之后,才知道要招的是偏硬件方面的测试(本人是web软件方面大哭)

  • 技术面-一面

ps: 此时主要是面试者展示个人“魅力”的时候。当然对于面试者,此时面试官一般很可能是以后要一起工作的leader,顺便可以看看leader的“水平”,是不是和自己的规划一致了。

  • 技术面-二面
  • 技术面-三面
  • HR面

ps: 主要是谈薪资的时候了。此时对于面试者来说,基本可以判断这个职位是否符合预期了,以及这个公司对于技术人员来说,处于什么样的地位了。

考察流程

参考:http://blog.csdn.net/huazhongkejidaxuezpp/article/details/52344300

  • 自我介绍,找其中的亮点

找自我介绍中的点,深入问下去,了解候选人的日常工作是否符合。

  • 项目介绍与项目架构

担任的角色,做过什么

  • 效率提升

有无开发过工具,框架,平台之类的

  • 测试方法

项目中用过的工具,熟练程度,对原理的理解等等

  • 测试策略

对一条业务线的把控情况;

有无针对业务线特有的测试方法;

对测试深度/目前测试方法有无改进之处;

  • 专项测试能力

性能测试(前端后端);

自动化测试(工具的使用,框架开发,持续集成等等);

安全测试;

  • 实例考察

给出一个测试案例/测试场景,比如 登录页面进行测试

面试题目

ps: 偏原理和使用

  •  数据库/缓存方面

mysql postgresql 区别:区别须知

DB数据库相关:SQL不可不知

redis与memcached的比较:http://blog.csdn.net/huazhongkejidaxuezpp/article/details/48728803

  • 语言相关

1)hashmap原理/hashset原理

2)创建线程的方式

1.继承Thread类,重写run方法
2.实现Runnable接口,重写run方法,实现Runnable接口的实现类的实例对象作为Thread构造函数的target
3.通过Callable和FutureTask创建线程
4.通过线程池创建线程

前面两种可以归结为一类:无返回值,run方式的返回值是void,所以没有办法返回结果 
后面两种可以归结成一类:有返回值,通过Callable接口,就要实现call方法,这个方法的返回值是Object,所以返回的结果可以放

3)自定义对象排序

方法一:通过实现Comparable接口,例如 class Student implements Comparable<Student>{

xxx

@Override
    //实现Comparable的compareTo方法
    public int compareTo(Student stu) {
       xxx
    }

}

方法二:通过实现Comparator接口,来对集合中的自定义对象排序,该方式相对于上一种方式优势在于可以按多种规则排序

class sortAge implements Comparator<Student>{

    @Override
    //实现Comparator的compare方法
    public int compare(Student stu1, Student stu2) {
      xxx
    }

}

4) Vector,ArrayList, LinkedList的区别

1、Vector、ArrayList都是以类似数组的形式存储在内存中,LinkedList则以链表的形式进行存储。

2、List中的元素有序、允许有重复的元素,Set中的元素无序、不允许有重复元素。

3、Vector线程同步,ArrayList、LinkedList线程不同步。

4、LinkedList适合指定位置插入、删除操作,不适合查找;ArrayList、Vector适合查找,不适合指定位置的插入、删除操作。

5、ArrayList在元素填满容器时会自动扩充容器大小的50%,而Vector则是100%,因此ArrayList更节省空间。

5) 处理文件

try {
            BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(new File(FilePath)),
                                                                         "UTF-8"));
            String line = null;
            while ((line = br.readLine()) != null) {
                //做各种处理吧
            }
            br.close();
        } catch (Exception e) {
            System.err.println("read errors :" + e);
        }

6)StringBuilder , StringBuffer , String

运行速度快慢为:StringBuilder > StringBuffer > String

线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的

        String:适用于少量的字符串操作的情况

  StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况

  StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况

7) 抽象类和接口区别

1、一个类可以实现多个接口,但是却只能继承最多一个抽象类;

2、抽象类可以包含具体的方法,接口的所有方法都是抽象的;

3、抽象类可以声明和使用字段;接口则不能,但接口可以创静态的final常量;

4、接口的方法都是public的,抽象类的方法可以使public,private,protecte或者是默认的packag;

5、抽象类可以定义构造函数,但是接口不行。

8)线程同步方式

参考:http://www.cnblogs.com/XHJT/p/3897440.html

1、为何要使用同步? 
    java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查), 
    将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前,被其他线程的调用, 
    从而保证了该变量的唯一性和准确性。

2、同步方法,有synchronized关键字修饰的方法

public synchronized void save(){}
   注: synchronized关键字也可以修饰静态方法,此时如果调用该静态方法,将会锁住整个类

3、同步代码块

synchronized(object){}

注:同步是一种高开销的操作,因此应该尽量减少同步的内容。 
    通常没有必要同步整个方法,使用synchronized代码块同步关键代码即可

4、使用特殊域变量(volatile)实现线程同步

class Bank {
            //需要同步的变量加上volatile
            private volatile int account = 100;

            public int getAccount() {
                return account;
            }
            //这里不再需要synchronized 
            public void save(int money) {
                account += money;
            }
        }

5、使用重入锁实现线程同步

在JavaSE5.0中新增了一个java.util.concurrent包来支持同步。 
    ReentrantLock类是可重入、互斥、实现了Lock接口的锁, 
6、使用局部变量实现线程同步

如果使用ThreadLocal管理变量,则每一个使用该变量的线程都获得该变量的副本, 
    副本之间相互独立,这样每一个线程都可以随意修改自己的变量副本,而不会对其他线程产生影响。 

7、使用阻塞队列(LinkedBlockingQueue<E>)实现线程同步

8、使用原子变量(java的util.concurrent.atomic包中提供了创建了原子类型变量的工具类)实现线程同步

9)spring

控制反转和依赖注入

springMVC原理

面向切面编程(AOP)

AOP核心就是切面,它将多个类的通用行为封装成可重用的模块,该模块含有一组API提供横切功能。比如,一个日志模块可以被称作日志的AOP切面。根据需求的不同,一个应用程序可以有若干切面。在Spring AOP中,切面通过带有@Aspect注解的类实现。

Spring支持的几种bean的作用域。

Spring框架支持以下五种bean的作用域:

  • singleton : bean在每个Spring ioc 容器中只有一个实例。
  • prototype:一个bean的定义可以有多个实例。
  • request:每次http请求都会创建一个bean,该作用域仅在基于web的Spring ApplicationContext情形下有效。
  • session:在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。
  • global-session:在一个全局的HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。

缺省的Spring bean 的作用域是Singleton.

Spring框架中bean的生命周期。

  • Spring容器 从XML 文件中读取bean的定义,并实例化bean。
  • Spring根据bean的定义填充所有的属性。
  • 如果bean实现了BeanNameAware 接口,Spring 传递bean 的ID 到 setBeanName方法。
  • 如果Bean 实现了 BeanFactoryAware 接口, Spring传递beanfactory 给setBeanFactory 方法。
  • 如果有任何与bean相关联的BeanPostProcessors,Spring会在postProcesserBeforeInitialization()方法内调用它们。
  • 如果bean实现IntializingBean了,调用它的afterPropertySet方法,如果bean声明了初始化方法,调用此初始化方法。
  • 如果有BeanPostProcessors 和bean 关联,这些bean的postProcessAfterInitialization() 方法将被调用。
  • 如果bean实现了 DisposableBean,它将调用destroy()方法。

在 Spring中如何注入一个java集合?

Spring提供以下几种集合的配置元素:

  • <list>类型用于注入一列值,允许有相同的值。
  • <set> 类型用于注入一组值,不允许有相同的值。
  • <map> 类型用于注入一组键值对,键和值都可以为任意类型。
  • <props>类型用于注入一组键值对,键和值都只能为String类型。

Spring有几种配置方式? 


将Spring配置到应用开发中有以下三种方式: 
1. 基于XML的配置 
2. 基于注解的配置 
3. 基于Java的配置

spring  容器初始化 bean 和销毁前所做的操作定义方式有三种:

第一种:通过@PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作

第二种是:通过 在xml中定义init-method 和  destory-method方法

第三种是: 通过bean实现InitializingBean和 DisposableBean接口

  • 工具使用

fiddler 原理: fiddler抓包是在 客户端和服务器之间建立一个代理服务器,监听本机发出的请求和服务器返回的响应结果http://blog.csdn.net/huazhongkejidaxuezpp/article/details/48622151

http://kb.cnblogs.com/page/130367/#yuanli

  • web

CSS 盒子模型

  • 反应和思考

http://blog.csdn.net/huazhongkejidaxuezpp/article/details/45291251

  • 技术常见问题

jvm调优相关:http://blog.csdn.net/huazhongkejidaxuezpp/article/details/52664956

猜你喜欢

转载自blog.csdn.net/wodeyijia911/article/details/63684135