JAVA常见面试题

一、HashMap

 

 二、并发

线程的六种状态

 sleep()与wait()区别

 lock和synchronized区别

悲观锁与乐观锁

Hashtable和ConcurrentHashMap

Hashtable初始容量为11,每次进行扩容为原来的2n+1倍,插入数据时也不用进行二次hash()。

 

1.7的ConcurrentHashMap在进行创建时会指定segment的初始值,并发度的大小就是segment的初始值,创建后就不可以进行修改,初始每个segment中有capacity除以clevel个元素,最少为两个。capacity是指可以放多少元素,扩容是对capacity进行扩容,扩容只是对segment中的数组数量进行扩容,其他segment段进行扩容时会以segment[0]为原型进行扩容,segment[0]为多少,其他的segment扩容就为多少,每个segment是一个分段锁。

1.8的ConcurrentHashMap相当于懒汉式创建,只有向map放入元素后才会创建hashmap,像ArrayList,在扩容时进行get()操作,已经迁移完成的去新的数组中查找,还未迁移的在旧的数组中查找,正在迁移的链表会创建一个新的链表放在新的数组中。

扩容时进行put()操作时,对还未进行迁移的节点put会在旧的数组中进行put,对正在进行迁移的节点,无法进行put,因为迁移时会加节点锁,对已经迁移完成的节点进行put无法操作,这个线程无法进行put操作后会帮助其他线程进行扩容操作,扩容完成后在进行put()。

ThreadLocal

 ThreadLocal是唯一的,但是每个线程内都一个ThreadLocalMap,将ThreadLocal作为Key,使得ThreadLocal之间相互隔离,这样即使多个线程使用的是同一个ThreadLocal,但是ThreadLocalMap是不同的。

ThreadLocalMap解决冲突使用开放地址法,即当前位置有元素时向后找到没有存放元素的空位置。

为什么设置成弱引用?

ThreadLocalMap 中使用的 key 为 ThreadLocal 的弱引用,而 value 是强引用。所以,如果 ThreadLocal 没有被外部强引用的情况下,在垃圾回收的时候,key 会被清理掉,而 value 不会被清理掉。这样一来,ThreadLocalMap 中就会出现 key 为 null 的 Entry。假如我们不做任何措施的话,value 永远无法被 GC 回收,这个时候就可能会产生内存泄露。ThreadLocalMap 实现中已经考虑了这种情况,在调用 set()get()remove() 方法的时候,会清理掉 key 为 null 的记录。使用完 ThreadLocal方法后 最好手动调用remove()方法

三、IO模型

BIO同步阻塞IO

BIO同步阻塞IO。可靠性差,吞吐量低,适用于连接比较少且比较固定的场景。JDK1.4之前唯
一的选择。编程模型最简单.


NIO同步非阻塞lO

NIO同步非阻塞IО可靠性比较好,吞吐量也比较高,适用于连接比较多并且连接比较短(轻操作),例如聊天室。JDK1.4开始支持。编程模型最复杂


AIO异步非阻塞IO

AIO异步非阻塞IO可靠性是最好的,吞吐量也是非常高。适用于连接比较多,并且连接比较长(重操作)。例如相册服务器。JDK7版本才支持的。编程摸型比较简单,需要操作系统来支持,所以比较难实现。

 

同步、异步和阻塞、非阻塞的概念

同步和异步针对的是请求,阻塞与非阻塞针对的是客户端
在一个网络请求中,客户端会发一个请求到服务端。
1、客户端发了请求后,就一直等着服务端响应。    客户端:阻塞。请求:同步
2、客户端发了请求后,就去干别的事情了。时不时的过来检查服务端是否给出了相应。客户端
非阻塞。请求:同步。

3、换成异步请求。客户端发了请求后,就坐在椅子上,等着服务端返回响应。  客户端:阻塞。请求:异步

4、客户端发了请求后,就去干别的事情了。等到服务端给出响应后,再过来处理业务逻辑。客户端;非阻塞。请求:异步。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值