每日五道笔试小题-2020-9-15
public` `interface` `IService {String NAME=``"default"``;}
默认类型等价表示是哪一项:
正确答案: C 你的答案: C (正确)
public String NAME="default";
public static String NAME="default";
public static final String NAME="default";
private String NAME="default";
- 执行如下代码段后,变量s1引用的字符串值是( )。*
String s1 = "ABCD";
String s2 = "1234";
System.out.println(s1 + s2);
正确答案: A 你的答案: A (正确)
ABCD
1234
ABCD1234
1234ABCD
解析:
因为 String 是不可变类型,是存储在常量字符区的, 所以答案是ABCD。
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;
假定str0,…,str4后序代码都是只读引用。
Java 7中,以上述代码为基础,在发生过一次FullGC后,上述代码在Heap空间(不包括PermGen)保留的字符数为()
正确答案: C 你的答案: A (错误)
5
10
15
20
解析1:
应该是C
substring实际是new,5字符
str3和4也都是new,每个5字符
分别都会创建新的对象
常量池是PermGen的
因此应该是一共15字符
解析2:
这是一个关于java的垃圾回收机制的题目。垃圾回收主要针对的是堆区的回收,因为栈区的内存是随着线程而释放的。堆区分为三个区:年轻代(Young Generation)、年老代(Old Generation)、永久代(Permanent Generation,也就是方法区)。
年轻代:对象被创建时(new)的对象通常被放在Young(除了一些占据内存比较大的对象),经过一定的Minor GC(针对年轻代的内存回收)还活着的对象会被移动到年老代(一些具体的移动细节省略)。
年老代:就是上述年轻代移动过来的和一些比较大的对象。Minor GC(FullGC)是针对年老代的回收
永久代:存储的是final常量,static变量,常量池。
str3,str4都是直接new的对象,而substring的源代码其实也是new一个string对象返回,如下图:
经过fullgc之后,年老区的内存回收,则年轻区的占了15个,不算PermGen。所以答案选C
在Java中,关于HashMap类的描述,以下正确的是 ()
正确答案: A C D 你的答案: A D (错误)
HashMap使用键/值得形式保存数据
HashMap 能够保证其中元素的顺序
HashMap允许将null用作键
HashMap允许将null用作值
Map集合类 | key | value |
---|---|---|
HashMap | 允许为null | 允许为null |
TreeMap | 不允许为null | 允许为null |
ConcurrentMap | 不允许为null | 不允许为null |
HashTable | 不允许为null | 不允许为null |
JDK提供的用于并发编程的同步器有哪些?
正确答案: A B C 你的答案: B C (错误)
Semaphore
CyclicBarrier
CountDownLatch
Counter
解析:
答案:ABC
A,Java 并发库 的Semaphore 可以很轻松完成信号量控制,Semaphore可以控制某个资源可被同时访问的个数,通过 acquire() 获取一个许可,如果没有就等待,而 release() 释放一个许可。
B,CyclicBarrier 主要的方法就是一个:await()。await() 方法没被调用一次,计数便会减少1,并阻塞住当前线程。当计数减至0时,阻塞解除,所有在此 CyclicBarrier 上面阻塞的线程开始运行。
C,直译过来就是倒计数(CountDown)门闩(Latch)。倒计数不用说,门闩的意思顾名思义就是阻止前进。在这里就是指 CountDownLatch.await() 方法在倒计数为0之前会阻塞当前线程。
D,Counter不是并发编程的同步器