选择题练习~答案及解析(6)

1、下面哪段程序能够正确的实现了GBK编码字节流到UTF-8编码字节流的转换:(B)

byte[] src,dst;

A dst=String.frombytes(src,”GBK”).getbytes(“UTF-8”)
B dst=new String (src,”GBK”).getbytes(“UTF-8”)
C dst=new String (”GBK”, src,) getbytes()
D dst=String.encode(String.decode(src,”GBK”)), “UTF-8”)

解析:
	先通过GBK编码还原字符串,
	在该字符串正确的基础上得到“UTF-8”所对应的字节串。

2、下列关于java并发的说法中正确的(B)

A copyonwritearraylist适用于写多读少的并发场景
B readwritelock适用于读多写少的并发场景
C concurrenthashmap的写操作不需要加锁,读操作需要加锁
D 只要在定义int类型的成员变量i的时候加上volatile关键字,那么多线程并发执行i++这样的操作的时候就是线程安全的了

解析:
	A,CopyOnWriteArrayList适用于写少读多的并发场景。
	B,ReadWriteLock即为读写锁,他要求:
			写与写之间互斥,读与写之间互斥,读与读之间可以并发执行。
			在读多写少的情况下可以提高效率。
	C,ConcurrentHashMap是采用分段锁机制,写操作加锁,读操作不加锁。
	D,volatile只保证多线程操作的可见性,不保证原子性。

3、Java中的集合类包括ArrayList、LinkedList、HashMap等,下列关于集合类描述错误的(C)

A ArrayList和LinkedList均实现了List接口
B ArrayList的访问速度比LinkedList快
C 随机添加和删除元素时,ArrayList的表现更佳
D HashMap实现Map接口,它允许任何类型的键和值对象

解析:
	ArrayList 和 LinkedList 的区别?
	
	1、数据结构实现:前者是动态数组;后者是双向链表。
	2、随机访问效率:前者比后者在随机访问时效率要高,因为后者是线性的数据存储结构,所以需要移动指针从前往后查找。
	3、增删速率:在非首尾的增删操作,后者比前者效率高,因为前者增删操作要影响数组内其他数据的下标。
	4、综合:频繁读取~ArrayList ;多插入删除~LinkedList。

4、对访问修饰符作用范围由大到小排列应该是:public>protected>default>private

5、在Java中,HashMap中是用哪些方法来解决哈希冲突(C)

A 开放地址法
B 二次哈希法
C 链地址法
D 建立一个公共溢出区

解析:

HashMap的实现原理:
	基于hash算法实现的,put(key,value)存储,get(key)获取。
	当传入key时,根据key.hashCode()计算出hash值,根据hash值将value存储在bucket中。
	当计算出的hash值相同时,就发生了哈希冲突。
	解决方法是用链表和红黑树存储相同hash值得value。
	当哈希冲突数目较少时用链表,较多时用红黑树。

6、阅读下列程序,选择哪一个是正确的输出(C)

class HelloA{
	public HelloA(){
		System.out.println("I’m A class ");
	}
	static{
		System.out.println("static A");
	}
}
public class HelloB extends HelloA{
	public HelloB(){
		System.out.println("I’m B class");
	}
	static{
		System.out.println("static B");
	}
	public static void main (String[] args){
		new HelloB();
	}
}

A static A Im A class static B Im B class
B I’m A class I’m B class static A static B
C static A static B I’m A class I’m B class
D I’m A class static A I’m B class static

解析:
	1、构造块在对象产生时优先于构造方法执行;
	2、静态代码块在类加载时执行,优先于构造块且只执行一次。
	3、子类对象实例化前,先调用父类构造方法产生父类对象。

7、执行下列代码的输出结果是(C)

public class Demo{
	public static void main(String args[]){
		int num = 10;
		System.out.println(test(num));
	}
	public static int test(int b){
		try{
			b += 10;
			return b;
			}catch(RuntimeException e){
	}catch(Exception e2){
	}finally{
		b += 10;
		return b;
		}
	}
}

A 10
B 20
C 30
D 40

解析:
	finally中代码块无论任何情况都会执行。

8、以下是java concurrent包下的4个类,选出差别最大的(C)

A Semaphore
B ReentrantLock
C Future
D CountDownLatch

解析:
	A、Semaphore类,控制某个资源可被同时访问的个数;
	B、ReentrantLock类,具有与使用synchronized方法和语句所访问的隐式监视器锁相同的一些基本行为和语义,但功能更强大;
	C、 Future接口,表示异步计算的结果;
	D、 CountDownLatch类,可以用来在一个线程中等待多个线程完成任务的类。

9、关于sleep和wait,以下描述错误的是(D)

A sleep是线程类的方法,wait是object的方法
B sleep不释放对象锁,wait放弃对象锁
C sleep暂停线程,但监控状态依然保持,结束后会自动恢复
D wait进入等待锁定池,只有针对此对象发出notify方法获得对象锁进入运行状态

解析:
	sleep()和 wait()的区别?
	
	1、类的不同:前者来自Thread类,后者来自Object类
	2、前者不释放锁,后者释放锁。
	3、前者时间到后会自动恢复,后者用notify()或者 notifyAll()唤醒线程。

10、下列代码的输出结果是(B)

boolean b=true?false:true==true?false:true;
System.out.println(b)

A true
B false
C null
D 空字符串

booleanb=true?false:true==true?false:true;
true?false:(true==true)?false:true;
true?false:((true==true)?false:true);

false

你可能感兴趣的:(题目)