在JDK8中对这种实现又进行了修改,JDK8中的ConcurrentHashmap 基于CAS和TreeBin 实现的,不需要对segment或者全局加锁,只需要对单行枷锁(hashCode相同),后边的链表是链表加红黑树。对于单个值的修改使用CAS。
面试官很可能想听到的是这样,但这里重要的是分治的概念。其实完全可以让候选人尝试自己去设计一个ConcurrentHashMap ,然后引导他去拆分HashMap ,这样才是正道啊。
4. hashcode() 和equals() 的关系
A:根据JVM标准,equals() 相等的对象,hashcode() 应该永远相对,反之则不一定,详见HashMap 的实现。
这个问题其实挺好的,但如果只是简单的问一下,没有任何意义,仍然考的是记忆力。
5. TransferQueue 的算法是什么样的,它和BlockingQueue 有哪些不同
A:源代码里有。
这么回答肯定是不好的,还是去补补课吧。如果你觉得面试官问这个太无聊,可以拿到offer后丑拒。
第五类问题
1. 用 wait-notify 写一段代码来解决生产者-消费者问题,更进一步,在分布式的环境下怎么解决
A:哈哈哈,我们来写段代码吧……
wait() 和notify() 都是线程间通信的方法,可以直接对线程的行为进行操作。他们的本质其实是传递生产者-消费者各自的消息,理解了这一点,那么在分布式环境下就很简单了,只要找到一个第三方的可以用来传递消息的媒介(Zookeeper、Redis、Kafka等)就可以了。
2. 设计一个线程池
A:可以参考
如果对JDK的线程池java.util.concurrent.ThreadPoolExecutor 比较了解,可以把一些简单的特性放上去。如果不了解,可以直接设计一个线程数组,然后加一些业务逻辑。所谓线程池,基本也就如此。
3. 设计一个IOC容器
A:用反射,注解,还有IOC的理论
第六类问题
1. 谈谈你对C10K问题的理解
A:NIO对BIO在吞吐量上的优势,可以参考
(编辑:云计算网_泰州站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|