现在的位置: 首页 > 综合 > 正文

Java 面试题集合

2018年04月17日 ⁄ 综合 ⁄ 共 950字 ⁄ 字号 评论关闭

请描述下HashTable(HashMap)怎么存储数据?
HashMap的数据结构:键值存储在数组列表中, 然后对map值, 散列到键值对应的链表中。 LinkedHashMap的区别是存放键值的数据结构是链表。HashTable的存储结构和HashMap的存储结构类似, HashTable是线程安全而已。

请描述下TreeSet怎么存储数据, 它是怎么实现排序的?
TreeSet是将数据存储在红-黑树数据结构中(一种二叉树),TreeSet的插入顺序是由于生成是传入comparator决定的。 默认的comparator是elment的自然顺序 

请描述下ClassLoader是怎么工作的?

已答!

请谈一下你对gc的理解?

synchronized和lock的区别:
JDK 官方文档中提到:
ReentrantLock是“一个可重入的互斥锁 Lock,它具有与使用 synchronized  方法和语句所访问的隐式监视器锁相同的一些基本行为和语义,但功能更强大。
ReentrantLock 将由最近成功获得锁,并且还没有释放该锁的线程所拥有。当锁没有被另一个线程所拥有时,调用 lock 的线程将成功获取该锁并返回。如果当前线程已经拥有该锁,此方法将立即返回。可以使用 isHeldByCurrentThread() 和 getHoldCount() 方法来检查此情况是否发生。 ”

简单来说,ReentrantLock有一个与锁相关的获取计 数器,如果拥有锁的某个线程再次得到锁,那么获取计数器就加1,然后锁需要被释放两次才能获得真正释放。这模仿了 synchronized 的语义;如果线程进入由线程已经拥有的监控器保护的 synchronized 块,就允许线程继续进行,当线程退出第二个(或者后续) synchronized 块的时候,不释放锁,只有线程退出它进入的监控器保护的第一个 synchronized 块时,才释放锁。 
ReentrantLock  类(重入锁)实现了 Lock ,它拥有与 synchronized 相同的并发性和内存语义,但是添加了类似锁投票、定时锁等候和可中断锁等候的一些特性。此外,它还提供了在激烈争用情况下更佳的性 能。(换句话说,当许多线程都想访问共享资源时,JVM 可以花更少的时候来调度线程,把更多时间用在执行线程上。)

抱歉!评论已关闭.