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