测试开发面试经验

今日头条测试开发工程师

一面、二面:

一、hashmaphashtablehashset的区别

HashSet HashTable HashMap的区别 及其Java集合介绍:http://www.cnblogs.com/ywl925/p/3865269.html

 

二、hashmap基本原理

数据结构采用数组加链表的结构,Hashmaphash table的。


三、怎么让hashmap线程安全

设置同步

如何线程安全的使用HashMap

http://www.importnew.com/21396.html

Hashtable

ConcurrentHashMap

Synchronized Map

 

四、怎么检测死锁

1.资源分配图

每个进程、每个资源制定唯一编号

设定一张资源分配表,记录各进程与占用资源之间的关系

设置一张进程等待表,记录各进程与要申请资源之间的关系

2.死锁定理

3.死锁检测中的数据结构

 

五、Sleepwait的区别

1、每个对象都有一个锁来控制同步访问,Synchronized关键字可以和对象的锁交互,来实现同步方法或同步块。sleep()方法正在执行的线程主动让出CPU(然后CPU就可以去执行其他任务),在sleep指定时间后CPU再回到该线程继续往下执行(注意:sleep方法只让出了CPU,而并不会释放同步资源锁!!!)wait()方法则是指当前线程让自己暂时退让出同步资源锁,以便其他正在等待该资源的线程得到该资源进而运行,只有调用了notify()方法,之前调用wait()的线程才会解除wait状态,可以去参与竞争同步资源锁,进而得到执行。(注意:notify的作用相当于叫醒睡着的人,而并不会给他分配任务,就是说notify只是让之前调用wait的线程有权利重新参与线程的调度);

2sleep()方法可以在任何地方使用;wait()方法则只能在同步方法或同步块中使用;

3sleep()是线程线程类(Thread)的方法,调用会暂停此线程指定的时间,但监控依然保持,不会释放对象锁,到时间自动恢复;wait()Object的方法,调用会放弃对象锁,进入等待队列,待调用notify()/notifyAll()唤醒指定的线程或者所有线程,才会进入锁池,不再次获得对象锁才会进入运行状态;

 

六、泛型,泛型好处?这带来了很多好处:

1,类型安全。 泛型的主要目标是提高 Java 程序的类型安全。通过知道使用泛型定义的变量的类型限制,编译器可以在一个高得多的程度上验证类型假设。没有泛型,这些假设就只存在于程序员的头脑中(或者如果幸运的话,还存在于代码注释中)。

2,消除强制类型转换。 泛型的一个附带好处是,消除源代码中的许多强制类型转换。这使得代码更加可读,并且减少了出错机会。

3,潜在的性能收益。 泛型为较大的优化带来可能。在泛型的初始实现中,编译器将强制类型转换(没有泛型的话,程序员会指定这些强制类型转换)插入生成的字节码中。但是更多类型信息可用于编译器这一事实,为未来版本的 JVM 的优化带来可能。由于泛型的实现方式,支持泛型(几乎)不需要 JVM 或类文件更改。所有工作都在编译器中完成,编译器生成类似于没有泛型(和强制类型转换)时所写的代码,只是更能确保类型安全而已。

 Java语言引入泛型的好处是安全简单。泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。

    泛型在使用中还有一些规则和限制:

    1、泛型的类型参数只能是类类型(包括自定义类),不能是简单类型。

    2、同一种泛型可以对应多个版本(因为参数类型是不确定的),不同版本的泛型类实例是不兼容的。

    3、泛型的类型参数可以有多个。

    4、泛型的参数类型可以使用extends语句,例如<T extends superclass>。习惯上成为“有界类型”。

    5、泛型的参数类型还可以是通配符类型。例如Class<?> classType = Class.forName(Java.lang.String);

     型还有接口、方法等等,内容很多,需要花费一番功夫才能理解掌握并熟练应用。在此给出我曾经了解泛型时候写出的两个例子(根据看的印象写的),实现同样的 功能,一个使用了泛型,一个没有使用,通过对比,可以很快学会泛型的应用,学会这个基本上学会了泛型70%的内容。

 

七、GC什么时候回收

八、创建线程两种方式的区别

1、扩展Thread

2、实现Runnable接口

3.两者区别

采用继承Thread类方式:

1)优点:编写简单,如果需要访问当前线程,无需使用Thread.currentThread()方法,直接使用this,即可获得当前线程。

2)缺点:因为线程类已经继承了Thread类,所以不能再继承其他的父类。

采用实现Runnable接口方式:

1)优点:

线程类只是实现了Runable接口,还可以继承其他的类。

可以多个线程共享同一个目标对象,所以非常适合多个相同线程来处理同一份资源的情况。

2)缺点:编程稍微复杂,如果需要访问当前线程,必须使用Thread.currentThread()方法。

Runnable可以实现资源共享Thread不能原因:

因为一个线程只能启动一次,通过Thread实现线程时,线程和线程所要执行的任务是捆绑在一起的。也就使得一个任务只能启动一个线程,不同的线程执行的任务是不相同的,所以没有必要,也不能让两个线程共享彼此任务中的资源。

一个任务可以启动多个线程,通过Runnable方式实现的线程,实际是开辟一个线程,将任务传递进去,由此线程执行。可以实例化多个 Thread对象,将同一任务传递进去,也就是一个任务可以启动多个线程来执行它。这些线程执行的是同一个任务,所以他们的资源是共享。

 

九、测试淘宝发表评价界面

十、异常的分类、sql中的异常有哪些?

一般分为Checked异常和Runtime异常,所有RuntimeException类及其子类的实例被称为Runtime异常,不属于该范畴的异常则被称为CheckedException

Checked异常

只有java语言提供了Checked异常,Java认为Checked异常都是可以被处理的异常,所以Java程序必须显示处理Checked异常。如果程序没有处理Checked异常,该程序在编译时就会发生错误无法编译。这体现了Java的设计哲学:没有完善错误处理的代码根本没有机会被执行。对Checked异常处理方法有两种

1 当前方法知道如何处理该异常,则用try...catch块来处理该异常。

2 当前方法不知道如何处理,则在定义该方法是声明抛出该异常。

RuntimeException

Runtime如除数是0和数组下标越界等,其产生频繁,处理麻烦,若显示申明或者捕获将会对程序的可读性和运行效率影响很大。所以由系统自动检测并将它们交给缺省的异常处理程序。当然如果你有处理要求也可以显示捕获它们。

十一、Java反射

十二、静态代码块执行几次,为什么

编程:

求数组拼接最小数

单例模式

求前1000个丑数


美团测试开发工程师

一面:

1.测试的种类(黑盒、白盒等)

2.三次握手的原理

3.软件的整个流程

4.你自己的项目是如何进行测试的

5.计算机网络的七层结构、每层中有什么协议

6.手机端测试跟pc端测试有什么区别

7.Pc端的软件如何变成手机端的

8.Linux你会什么指令,例如查看。。。

9.测试的什么(功能、性能、安全、兼容、移植(可移植性的环境包括软件环境,硬件环境和系统的组织环境,而跨平台性更多的是指不同的操作系统。))

 

二面:

1.stringstringbufferstringbuilder的异同,底层实现。为什么把string设置为final类型

2.死锁产生的条件,写一个死锁程序。

3.同步sync的几种用法,这几种用法的不同之处。

4.聊天都是新建线程,会影响内存,怎么处理

5.Noi

6.算法:abc可以变成bcacab,但不可以是acb。如果给你bca你怎么可以判断bca可以由abc推断出。时间复杂度更小

 

广联达

1.黑盒白盒测试的区别以及使用的方法

2.TCPUDP区别

3.测试一台电视机

4.堆栈的区别

http://blog.csdn.net/hairetz/article/details/4141043

 

5.测试的流程

6.软件开发的流程

7.软件开发的模型

8.找规律:111211211111221312211_______

9.智力题:一根不均匀的绳子,烧完的时间是1小时。给你若干根不均匀的绳子,如何计时1小时15分。

  • 12
    点赞
  • 117
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值