天天看点

面试历程(3)

1、HashMap为什么要使用红黑树,不能使用平衡二叉树(AVL树)

二叉查找树具有的特性:

  • 左子树上所有结点的值均小于或等于它的根结点的值。
  • 右子树上所有结点的值均大于或等于它的根结点的值。
  • 左、右子树也分别为二叉排序树。

AVL树是严格平衡二叉树(左右两个子树的高度差的绝对值不超过1),在进行大量插入和删除操作时,会频繁地进行平衡调整,严重降低效率;

红黑树虽然不是严格的平衡树,但是其依旧是平衡树;查找效率是 O(logn);在大量插入和删除时,对树改动较小

2、AQS如何实现公平和非公平的?

公平锁是将所有线程依次放入CLH同步队列,然后再从队列中依次取出来执行;

而非公平锁是已经进入同步队列的线程会像公平锁一样获取锁,但是其他尚且没有进入同步队列的线程可以与CLH同步队列中的首节点线程竞争锁;

这也是为什么非公平锁性能比公平锁性能更佳的原因

3、JVM 里 new 对象时,堆会发生抢占吗?你是怎么去设计JVM的堆的线程安全的?

new对象实际上需要指针移动分配空间,将入多个线程一起new会出现指针碰撞问题

解决方案:

给每个线程分配私有的指针,存对象的内存空间还是给所有线程访问,其它线程无法在这个区域分配,保证堆的线程安全

Thread Local Al