2.12Java专项测试复盘
-
以下哪个接口的定义是正确的?( )
A. interface B
{ void print() { } ;}
B. interface B
{ static void print() ;}
C. abstract interface B extends A1, A2 //A1、A2为已定义的接口
{ abstract void print(){ };}
D. interface B解析:接口中方法的默认修饰符时public abstract,抽象方法可是没有方法体的,故AC错误;JDK8中,接口中的方法可以被default和static修饰,但是被修饰的方法必须有方法体,故B错误。
答案:D -
根据以下接口和类的定义,要使代码没有语法错误,则类Hero中应该定义方法( )。
interface Action{
void fly();
}
class Hero implements Action{ //…… }
```
A. private void fly(){}
B. void fly(){}
C. protected void fly(){}
D. public void fly(){}
**解析:接口方法默认是public abstract的,且实现该接口的类中对应的方法的可见性不能小于接口方法的可见性,因此也只能是public的。**
答案:D
- 在各自最优条件下,对N个数进行排序,哪个算法复杂度最低的是? ()
A. 插入排序
B. 快速排序
C. 堆排序
D. 归并排序
**解析:**![在这里插入图片描述](https://img-blog.csdnimg.cn/20200212132932378.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNzAzMjY4,size_16,color_FFFFFF,t_70)
答案:A
- mysql数据库,game_order表表结构如下,下面哪些sql能使用到索引()?
A. select * from game_order where plat_game_id=5 and plat_id=134
B. select * from game_order where plat_id=134 and
C. plat_game_id=5 and plat_order_id=’100’
D. select * from game_order where plat_order_id=’100’
E. select * from game_order where plat_game_id=5 and plat_order_id=’100’ and plat_id=134
F. select * from game_order where plat_game_id=5 and plat_order_id=’100’
**解析:考察组合索引的知识。有一个最左优先的原则,组合索引(a, b, c),会建立三个索引, (a), (a, b), (a, b, c)。不包含a的情况,则用不到索引。**
答案:BCDE
- 下列哪个选项是Java调试器?如果编译器返回程序代码的错误,可以用它对程序进行调试。
A. java.exe
B. javadoc.exe
C. jdb.exe
D. javaprof.exe
**解析:javac.exe是编译.java文件
java.exe是执行编译好的.class文件
javadoc.exe是生成Java说明文档
jdb.exe是Java调试器
javaprof.exe是剖析工具**
答案:C
- JAVA反射机制主要提供了以下哪些功能?
A. 在运行时判断一个对象所属的类
B. 在运行时构造一个类的对象
C. 在运行时判断一个类所具有的成员变量和方法
D. 在运行时调用一个对象的方法
答案:ABCD
- 下面几个关于Java里queue的说法哪些是正确的()?
A. LinkedBlockingQueue是一个可选有界队列,不允许null值
B. PriorityQueue,LinkedBlockingQueue都是线程不安全的
C. PriorityQueue是一个无界队列,不允许null值,入队和出队的时间复杂度是O(log(n))
D. PriorityQueue,ConcurrentLinkedQueue都遵循FIFO原则
**解析:
A、LinkedBlockingQueue是一个基于节点链接的可选是否有界的阻塞队列,不允许null值。
B、LinkedBlockingQueue是一个线程安全的阻塞队列,实现了先进先出等特性。
C、PriorityQueue是一个基于优先级堆的无界队列,不允许null值,入队和出队的时间复杂度是O(log(n))。
D、PriorityQueue是不同于先进先出队列的另一种队列。每次从队列中取出的是具有最高优先权的元素。ConcurrentLinkedQueue是一个基于链接节点的线程安全队列,该队列的元素遵循FIFO原则。**
答案:AC
- Java 程序中使用赋值运算符进行对象赋值时,可以得到两个完全相同的对象。
(判断正误)
**解析:对象赋值时,比如A=B,只是把A对象的地址指向了B对象的地址,所以其实对象只有一个。**
答案:×
- 看以下代码:
文件名称:forward.jsp
```java
<html>
<head><title> 跳转 </title> </head>
<body>
<jsp:forward page="index.htm"/>
</body>
</html>
```
如果运行以上jsp文件,地址栏的内容为
A. http://127.0.0.1:8080/myjsp/forward.jsp
B. http://127.0.0.1:8080/myjsp/index.jsp
C. http://127.0.0.1:8080/myjsp/index.htm
D. http://127.0.0.1:8080/myjsp/forward.htm
**解析:forward:请求转发:服务器行为,地址栏不变。
redirect:请求重定向:客户端行为,本质上为2次请求,地址栏改变,前一次请求对象消失。**
答案:A
- ResultSet中记录行的第一列索引为?
A. -1
B. 0
C. 1
D. 以上都不是
**解析:ResultSet跟普通的数组不同,索引从1开始而不是从0开始。**
答案:C
- 以下代码段执行后的输出结果为
```java
public class Test {
public static void main(String args[]) {
int i = -5;
i = ++(i++);
System.out.println(i);
}
}
```
A. -7
B. -3
C. 编译错误
D. -5
**解析:1.先执行括号中的i++ 在执行i++的时候 Java会将i先存放到一个临时变量中去 并返回该临时变量的值(假设为temp)
2.所以 这句可以拆成 temp = i (值为-5) 并返回temp的值 然后 i自加1 此时 i 的值为-4 但是之后 执行就会出现问题 由于返回了temp的值 继续执行的表达式为 i = ++(-5); 单目运算符无法后跟一个字面量 所以在IDEA编辑器中提示Variable expected(此处应为变量) 故选择C选项**
答案:C
- What will happen when you attempt to compile and run the following code?
```java
public class Test{
static{
int x=5;
}
static int x,y;
public static void main(String args[]){
x--;
myMethod( );
System.out.println(x+y+ ++x);
}
public static void myMethod( ){
y=x++ + ++x;
}
}
```
A. compiletime error
B. prints:1
C. prints:2
D. prints:3
E. prints:7
F. prints:8
**解析:静态语句块中x为局部变量,不影响静态变量x的值。x和y为静态变量,默认初始值为0。main方法中:执行x--后 x=-1,调用myMethod方法,x执行x++结果为-1(后++),但x=0,++x结果1,x=1 ,则y=0。最后计算x+y+ ++x,先执行x+y,结果为1,执行++x结果为2,得到最终结果为3**
答案:D
- 下面有关java的引用类型,说法正确的有?
A. 对于一个对象来说,只要有强引用的存在,它就会一直存在于内存中
B. 如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收。
C. 如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了,就会回收这些对象的内存
D. 一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的空间
**解析:1、强引用:一个对象赋给一个引用就是强引用,比如new一个对象,一个对象被赋值一个对象。
2、软引用:用SoftReference类实现,一般不会轻易回收,只有内存不够才会回收。
3、弱引用:用WeekReference类实现,一旦垃圾回收已启动,就会回收。
4、虚引用:不能单独存在,必须和引用队列联合使用。主要作用是跟踪对象被回收的状态。**
答案:ABCD
- socket编程中,以下哪个socket的操作是不属于服务端操作的()?
A. accept
B. listen
C. connect
D. close
**解析:**
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200212150035317.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNzAzMjY4,size_16,color_FFFFFF,t_70)
答案:C
- 尝试编译以下程序会产生怎么样的结果?()
```java
public class MyClass {
long var;
public void MyClass(long param) { var = param; }//(1)
public static void main(String[] args) {
MyClass a, b;
a =new MyClass();//(2)
b =new MyClass(5);//(3)
}
}
```
A. 编译错误将发生在(1),因为构造函数不能指定返回值
B. 编译错误将发生在(2),因为该类没有默认构造函数
C. 编译错误将在(3)处发生,因为该类没有构造函数,该构造函数接受一个int类型的参数
D. 该程序将正确编译和执行
答案:C
- 关于OutOfMemoryError,下面说法正确的是()?
A. java.lang.OutOfMemoryError: PermGen space 增加-XX:MaxPermSize这个参数的值的话,这个问题通常会得到解决。
B. java.lang.OutOfMemoryError: Requested array size exceeds VM limit当你正准备创建一个超过虚拟机允许的大小的数组时,这条错误将会出现
C. java.lang.OutOfMemoryError: Java heap space 一般情况下解决这个问题最快的方法就是通过-Xmx参数来增加堆的大小
D. java.lang.OutOfMemoryError: nativeGetNewTLA这个异常只有在jRockit虚拟机时才会碰到
**解析:A:属于运行时常量池导致的溢出,设置-XX:MaxPermSize可以解决这个问题,
B:属于堆空间不足导致的错误,问题比较少见,解决方式和C相同,
C:属于java堆内存问题,一般的手段是通过内存映像分析工具,对Dump出来的堆转储存快照进行分析,重点是确认内存中的对象是否是有必要的,也就是要判断是出现了内存泄漏,还是出现了内存溢出,如果是内存列楼,通过工具检查泄露对象打GC Roots的引用链信息,可以准确的确定出泄露代码的位置,不存在泄露,就应该检查虚拟机的堆参数,如果可以继续调大,可以设置-Xmx解决问题
D:java.lang.OutOfMemoryError: nativeGetNewTLA指当虚拟机不能分配新的线程本地空间(Thread Local Area)的时候错误信息,此错误是线程申请一个新的TLA时产生的,这个异常一般只会发生在jRockit虚拟机,只有过于绝对。**
答案:ABC