【新书连载24】Java笔试题和面试题(上)——软件测试工程师面试秘籍
试题1.哪些是RuntimeException?
A.ArithmeticException
B.ClassNotFoundException
C.OutOfMemoryError
D.ClassCastException
E.InterruptedException
F.IllegalArgumentException
G.IndexOutOfBoundsException
H.NullPointException
答案:A、D、F、H。
试题2.int和Integer有什么区别?
答案:Java提供两种不同的数据类型—引用类型和原始类型(或内置类型)。int是Java的原始类型,Integer是Java为int提供的封装类。
Java为每个原始类型提供了封装类。boolean的封装类为Boolean,char的封装类为Character,byte的封装类为Byte,short的封装类为Short,int的封装类为Integer,long的封装类为Long,float的封装类为Float,double的封装类为Double。
引用类型和原始类型的行为完全不同,并且具有不同的语义。引用类型和原始类型具有不同的特征和用法。引用类型实例变量的默认值为NULL,而原始类型实例变量的默认值与它们的类型有关。
试题3.String和StringBuffer的区别是什么?
答案:Java提供了两个类,即String类和StringBuffer类,它们可以存储和操作字符串,即包含多个字符的数据。
String类提供的字符串不可改变,而StringBuffer类提供的字符串可以修改。当知道字符串要改变的时候就可以使用StringBuffer类。典型地,可以使用StringBuffer来动态构造字符串。
试题4.运行时异常与一般异常有何异同?
答案:异常表示程序运行过程中可能出现的非正常状态,而运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。Java编译器要求方法必须声明、抛出可能发生的非运行时异常,但是并不要求必须声明、抛出未被捕获的运行时异常。
试题5.说出Servlet和CGI的区别。
答案:Servlet与CGI的区别在于,Servlet处于服务器进程中,它通过多线程方式运行其service()方法,一个实例可以服务于多个请求,并且其实例一般不会被销毁;而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于Servlet。
试题6.请比较ArrayList、Vector、LinkedList的存储性能和特性。
答案:ArrayList和Vector都使用数组方式存储数据,此数组元素数大于实际存储的数据,以便增加和插入元素。它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢。
Vector由于使用了synchronized方法(线程安全的),通常性能上较ArrayList差。而LinkedList使用双向链表实现存储,按序号索引数据时需要进行前向或后向遍历,但是插入数据时只需要记录本元素的前后元素即可,所以插入速度较快。
试题7.Collection和Collections的区别是什么?
答案:Collection是集合类的上级接口,继承自它的接口主要有Set和List。Collections是针对集合类的一个帮助类,它提供一系列静态方法以实现对各种集合的搜索、排序等操作。
试题8.&和&&的区别是什么?
答案:&是位运算符,表示按位与运算;&&是逻辑运算符,表示逻辑与(and)。
试题9.GC是什么?为什么要有GC?
答案:GC是指垃圾回收(Gabage Collection)。内存处理是编程中容易出现问题的地方,忘记回收内存或者错误的内存回收会导致程序或系统的不稳定甚至崩溃。
Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的。Java没有提供释放已分配内存的显式操作方法。
试题10.以下两行代码中,有什么错?
short s1 = 1; s1 = s1 + 1;
short s1 = 1; s1 += 1;
(左右滑动查看完整代码)
答案:在第1行中,s1+1的运算结果是int类型,需要强制转换类型。
第2行可以正确编译。
试题11.Math.round(11.5)等于多少? Math.round(?11.5)等于多少?
答案:round()方法返回与参数最接近的长整数,即将原来的参数加0.5后再向下取整。
因此,Math.round(11.5)==12,Math.round(-11.5)==-11。
试题12.Java中有没有goto?
答案:goto是Java中的保留字,如今没有在Java中使用。
试题13.要启动一个线程,调用run()方法还是start()方法?
答案:调用start()方法启动一个线程,使线程所代表的虚拟处理器处于可运行状态,这意味着它可以由JVM调度并运行。这并不意味着线程会立即运行。run()方法可以产生必须退出的标志来停止一个线程。
试题14.下列说法中,哪一个正确?
A.Java程序经编译后会产生机器码
B.Java程序经编译后会产生字节码
C.Java程序经编译后会产生DLL
D.以上都不正确
答案:B。
试题15.Java中提供存取数据库能力的包是哪一个?
A.java.sql
B.java.awt
C.java.lang
D.java.swing
答案:A。
试题16.下列运算符中合法的是哪一个?
A.&&
B.<>
C.if
D.:=
答案:A。
试题17.ArrayList和Vector的区别分别是什么?
答案:ArrayList与Vector有两方面的区别。
(1)Vector是线程安全的,即同步的;而ArrayList是线程不安全的,即不同步的。
(2)当需要增长时,Vector默认增长原来的一倍,而ArrayList增长50%。
试题18.float f=3.4是否正确?
答案:不正确。精度不准确,应该用强制类型转换,即float f=(float)3.4。
试题19.简述Java中的异常处理机制和事件机制。
答案:使用new操作创建对象后,JVM自动为该对象分配内存并保持跟踪。JVM能判断出对象是否还被引用,对不再被引用的对象释放其占用的内存。
试题20.抽象类与接口的区别是什么?
答案:抽象类与接口都用于抽象,但是抽象类(在Java中)可以提供某些方法的部分实现,而接口完全是一个标识(同时有多重继承的功能)。