每日一题Day6

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”)
解析:
用new String(src,“GBK”)解码得到字符串

用getBytes(“UTF-8”)得到UTF8编码字节数组

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

A copyonwritearraylist适用于写多读少的并发场景
B readwritelock适用于读多写少的并发场景
C concurrenthashmap的写操作不需要加锁,读操作需要加锁
D 只要在定义int类型的成员变量i的时候加上volatile关键字,那么多线程并发执行i++这样的操作的时候就是线程安全的了
解析:
A:CopyOnWrite并发容器用于读多写少的并发场景,Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,它们是CopyOnWriteArrayList和CopyOnWriteArraySet。
C:在JDK1.7之前,ConcurrentHashMap是通过分段锁机制来实现的,所以其最大并发度受Segment的个数限制。因此,在JDK1.8中,ConcurrentHashMap的实现原理摒弃了这种设计,而是选择了与HashMap类似的数组+链表+红黑树的方式实现,而加锁则采用CAS和synchronized实现。读写都加锁
D:volatile保证内存可见性和有序性(内存屏障实现),不能保证原子性。
3. Java中的集合类包括ArrayList、LinkedList、HashMap等,下列关于集合类描述错误的是?C

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

  1. 下列哪个对访问修饰符作用范围由大到小排列是正确的?D

A private>default>protected>public
B public>default>protected>private
C private>protected>default>public
D public>protected>default>private
在这里插入图片描述
6. 在Java中,HashMap中是用哪些方法来解决哈希冲突的?

A 开放地址法
B 二次哈希法
C 链地址法
D 建立一个公共溢出区
解析:通常是两种方法:链表法和开放地址法。链表法就是将相同hash值的对象组织成一个链表放在hash值对应的槽位;开放地址法是通过一个探测算法,当某个槽位已经被占据的情况下继续查找下一个可以使用的槽位。java.util.HashMap采用的链表法的方式,链表是单向链表。
6.阅读下列程序,选择哪一个是正确的输出结果

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();
}
}

答案:static A static B I’m A class I’m B class
解析:类加载时发现B.class 还有父类, 好先去加载 A.class
众所周知 static 块 是在.class 里的其执行的比main优先级更高, 所以先执行父类的static 方法, 好 然后继续回去加载B.class 的方法 又遇到个static 块, ok执行它, 终于进 main() 了, new HelloB() ,额等等, 它里边隐藏了一部分代码 : 自动调用的 super(), 好的…先去执行父类的初始化… 执行父类的实例代码块, 终于轮到自己了,执行自己的实例代码块, ok 执行 自身的构造方法
7、执行下列代码的输出结果是( )

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;
   }
  }
}

答案:30
解析:finally一定执行
8. 以下是java concurrent包下的4个类,选出差别最大的一个 C
A Semaphore
B ReentrantLock
C Future
D CountDownLatch
解析:Semaphore:类,控制可以被同时访问的个数
ReentrantLock:类:具有与使用synchronized方法和语句访问的隐式监视器锁相同的一些基本行为和语义,但功能更强大
Future:接口,异步计算的结果
CountDownLatch:在一个线程中等待多个线程完成任务

  1. 关于sleep和wait,以下描述错误的是

A sleep是线程类的方法,wait是object的方法
B sleep不释放对象锁,wait放弃对象锁
C sleep暂停线程,但监控状态依然保持,结束后会自动恢复
D wait进入等待锁定池,只有针对此对象发出notify方法获得对象锁进入运行状态
解析:简单理解就是当notify唤醒进入wait的对象时,对象获得锁进入就绪状态而不是运行状态;
10.下列代码的输出结果是B

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

解析: true? (false): ( true==true ? false:true);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值