加入收藏 | 设为首页 | 会员中心 | 我要投稿 济源站长网 (https://www.0391zz.cn/)- 数据工具、数据仓库、行业智能、CDN、运营!
当前位置: 首页 > 运营中心 > 交互 > 正文

Java面试题解构

发布时间:2020-12-31 13:23:00 所属栏目:交互 来源:网络整理
导读:有次一个同事让我一同去面试一个候选人,没仔细看简历,所以在问了设计模式之后就让他谈一谈对内存泄漏和垃圾回收的理解,当时候选人一下子就懵了。后来才知道,他面的是初、中级开发职位,想来估计候选人心里也在骂我吧。 我自己用过各式各样的方法面试候选

在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在吞吐量上的优势,可以参考

(编辑:济源站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读