3.3测试复盘

volatile关键字的说法错误的是()
A. 能保证线程安全
B. volatile关键字用在多线程同步中,可保证读取的可见性
C. JVM保证从主内存加载到线程工作内存的值是最新的
D. volatile能禁止进行指令重排序

**解析:volatile不能保证原子性,也就不能保证线程安全。**
答案:A
  • java语言的下面几种数组负责方法中,哪个效率最高?
    A. for 循环逐一复制
    B. System.arraycopy
    C. Array.copyOf
    D. 使用clone方法

    解析:复制的效率System.arraycopy>clone>Arrays.copyOf>for循环
    答案:B

  • 假设 a 是一个由线程 1 和线程 2 共享的初始值为 0 的全局变量,则线程 1 和线程 2 同时执行下面的代码,最终 a 的结果不可能是()

	boolean isOdd = false;
	
	for(int i=1;i<=2;++i)
	{
		if(i%2==1)isOdd = true;
		else isOdd = false;
		a+=i*(isOdd?1:-1);
	}
	```

	A. -1
	B. -2
	C. 0
	D. 1

	**解析:每个线程对a 均做了两次读写操作,分别是 “ +1 ” 和 “ -2 ”,所以a的可能取值为-1、0、-2。**
	答案:D

- 下面哪个不是标准Statement类?
	A. Statement
	B. PreparedStatement
	C. CallableStatement
	D. BatchedStatement

	**解析:Statement在JDBC中相当于SQL语句的载体
A,Statement是最基本的用法,采用字符串拼接的方式,存在注入漏洞
B,PreparedStatement对Statement中的SQL语句进行预编译,同时检查合法性,效率高
C,CallableStatement接口扩展 PreparedStatement,用来调用存储过程,它提供了对输出和输入/输出参数的支持。CallableStatement 接口还具有对 PreparedStatement 接口提供的输入参数的支持。**
	答案:D

- 假定str0,...,str4后序代码都是只读引用。Java 7中,以上述代码为基础,在发生过一次FullGC后,上述代码在Heap空间(不包括PermGen)保留的字符数为()
```java
	static String str0="0123456789";
	static String str1="0123456789";
	String str2=str1.substring(5);
	String str3=new String(str2);
	String str4=new String(str3.toCharArray());
	str0=null;
	```
	A. 5
	B. 10
	C. 15
	D. 20

	**解析:str1在常量池里,常量池是在PermGen中,不属于Heap空间**
	答案:C

- Java.Thread的方法resume()负责重新开始被一下哪个方法中断的线程的执行()
	A. stop
	B. sleep
	C. wait
	D. suspend

	答案:D

- 关于异常的编程,以下描述错误的是:()
	A. 在有除法存在的代码处,为了防止分母为零,必须抛出并捕获异常
	B. int i=Integer.parseInt(”123a”);将产生NumberFormatException
	C. int a[]=null; a[0]=1; 将产生NullPointerException
	D. 输入输出流编程中,读和写时都要抛出IOException

	**解析:分母为0 为运行时异常,jvm帮我们补货,无需代码里面显式捕获**
	答案:A

- 关于ASCII码和ANSI码,以下说法不正确的是()?
	A. 标准ASCII只使用7个bit
	B. 在简体中文的Windows系统中,ANSI就是GB2312
	C. ASCII码是ANSI码的子集
	D. ASCII码都是可打印字符

	**解析:ASCII码包含一些特殊空字符**
	答案:D

- 下面哪种情况会导致持久区jvm堆内存溢出?
	A. 循环上万次的字符串处理
	B. 在一段代码内申请上百M甚至上G的内存
	C. 使用CGLib技术直接操作字节码运行,生成大量的动态类
	D. 不断创建对象

	**解析: http://blog.csdn.net/sivyer123/article/details/17139443
	持久代溢出原因  动态加载了大量Java类而导致溢出**
	答案:C

- 抽象类方法的访问权限默认都是public的(×)

- 对于子类的构造函数说明,下列叙述中错误的是()
	A. 子类不能继承父类的无参构造函数。
	B. 子类可以在自己的构造函数中使用super关键字来调用父类的含参数构造函数,但这个调用语句必须是子类构造函数的第一个可执行语句。
	C. 在创建子类的对象时,若不含带参构造函数,将先执行父类的无参构造函数,然后再执行自己的无参构造函数。
	D. 子类不但可以继承父类的无参构造函数,也可以继承父类的有参构造函数。

	**解析:构造函数不能被继承,构造方法只能被显式或隐式的调用。**
	答案:D
原文地址:https://www.cnblogs.com/l999q/p/12405731.html