11月29日牛客刷题记录

Hashtable 和 HashMap 的区别是:

A. Hashtable 是一个哈希表,该类继承了 AbstractMap,实现了 Map 接口
B. HashMap 是内部基于哈希表实现,该类继承AbstractMap,实现Map接口
C. Hashtable 线程安全的,而 HashMap 是线程不安全的
D. Properties 类 继承了 Hashtable 类,而 Hashtable 类则继承Dictionary 类
E. HashMap允许将 null 作为一个 entry 的 key 或者 value,而 Hashtable 不允许。

正确答案:ECDE

Hashtable

(1)Hashtable 是一个散列表,它存储的内容是键值对(key-value)映射。

(2)Hashtable 的函数都是同步的,这意味着它是线程安全的。它的key、value都不可以为null。

(3)HashTable直接使用对象的hashCode。

HashMap:

(1)由数组+链表组成的,基于哈希表的Map实现,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的。

(2)不是线程安全的,HashMap可以接受为null的键(key)和值(value)。

(3)HashMap重新计算hash值

Hashtable,HashMap,Properties继承关系如下:

HashTable

HashMap  


下列哪些操作会使线程释放锁资源?

A. sleep()
B. wait()
C. join()
D. yield()

 正确答案:BC

1.sleep()方法

        在指定时间内让当前正在执行的线程暂停执行,但不会释放“锁标志”。不推荐使用。

        sleep()使当前线程进入阻塞状态,在指定时间内不会执行。

2.wait()方法

        在其他线程调用对象的notify或notifyAll方法前,导致当前线程等待。线程会释放掉它所占有的“锁标志”,从而使别的线程有机会抢占该锁。

3.yield方法 

        暂停当前正在执行的线程对象。

        yield()只是使当前线程重新回到可执行状态,所以执行yield()的线程有可能在进入到可执行状态后马上又被执行。

        yield()只能使同优先级或更高优先级的线程有执行的机会。 

4.join方法

        等待该线程终止。

        等待调用join方法的线程结束,再继续执行。如:t.join();//主要用于等待t线程运行结束,若无此句,main则会执行完毕,导致结果不可预测。

        join()源码中就是调用的wait()方法,所以会释放锁资源。


 以下程序段执行后将有()个字节被写入到文件afile.txt中。

try {
    FileOutputStream fos = new FileOutputStream("afile.txt");
    DataOutputStream dos = new DataOutputStream(fos);
    dos.writeInt(3);
    dos.writeChar(1);
    dos.close();
    fos.close();
} catch (IOException e) {}

A. 3
B. 5
C. 6
D. 不确定,与软硬件环境相关

正确答案:C

Java采用的uincode编码,两个字节表示一个字符,因此 char型在java中占两个字节,而int型占四个字节,故总共占六个字节。


java程序内存泄露的最直接表现是( )

A. 频繁FullGc
B. jvm崩溃
C. 程序抛内存溢出的Exception
D. java进程异常消失

正确答案:C

Java是自动管理内存的,通常情况下程序运行到稳定状态,内存大小也达到一个 基本稳定的值

但是内存泄露导致Gc不能回收泄露的垃圾,内存不断变大.

最终超出内存界限,抛出OutOfMemoryExpection


以下那些代码段能正确执行

A. public static void main(String args[]) {
byte a = 3;
byte b = 2;
b = a + b;
System.out.println(b);
}

B. public static void main(String args[]) {
byte a = 127;
byte b = 126;
b = a + b;
System.out.println(b);
}

C. public static void main(String args[]) {
byte a = 3;
byte b = 2;
a+=b;
System.out.println(b);
}

D. public static void main(String args[]) {
byte a = 127;
byte b = 127;
a+=b;
System.out.println(b);
}

正确答案:CD

byte类型的变量在做运算时被会转换为int类型的值,故A、B左为byte,右为int,会报错;而C、D语句中用的是a+=b的语句,此语句会将被赋值的变量自动强制转化为相对应的类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值