要点
要点元素 | 描述 |
职位匹配度 | 职能要求匹配就好,并不需要超过岗位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