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