今天面试了一个2年Java经验的

Posted ykzhen2015

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了今天面试了一个2年Java经验的相关的知识,希望对你有一定的参考价值。

今天去面试了一个26岁的程序员,看了简历,2年经验,本科,写得很牛叉。

Spring cloud alibaba全家桶、redis,分布式锁,服务调用,数据库事务,线程,Zookeeper、Dubbo 、RabbitMQ,Kafka 都懂。

做的项目也是这类微服务的内容有关。

我同事做算法的,算法工程师,他和我一起去面试,因为面试Java,他建议我问几个简单的加一个难的。我说他写得那么牛,我不问深一点,貌似对不起自己。他笑了,回我说也是。

以我过往的经验,把自己写得很牛×的人,大部分都是一知半解的人,所以凡事还是从细节来把握,看看真实水平如何。

1、简述HashMap的数据结构??

他基本就答不上来。

在JDK 7和以下,它是一个数组+链表结构。JDK8和以后,它是一个数组+链表or红黑树结构,当链表深度达到8以上之后,就会构建红黑树,而红黑树达到深度6后,就会进行重构。

首先先计算key的hashcode,然后确定在数组的位置,然后在把元素连接到链表或者红黑树中。

HashMap加载因子是0.75,默认容量是16,当满足16*0.75=12时,就进行重构HashMap结构,这个时候就会比较消耗时间了。所以我们应该尽可能避免这样的事情发生,尽可能第一次分配好空间,以避免重构。

2、HashMap和ConcurrentHashMap的区别是什么??

他也几乎没有反应,把他问蒙了。

HashMap不是线程安全的,而ConcurrentHashMap是线程安全的,只是它的加锁范围较小,适合在高并发下使用。

ConcurrentHashMap是一个线程安全的Map,JDK8之前它的内部在默认的情况下拆分为16个segment(类似HashMap结构),之后是红黑树,允许使用CAS乐观锁,针对某个区域(JDK8之前的segment)加锁,其他的不加锁,所以是一个局部加锁的机制,提高并发能力。

3、Feign进行服务调用,为什么给出服务名称,就能调用??Feign是如何获取服务清单的??

他回答:服务注册给服务治理中心,服务治理中心再告知服务实例。

我提示他说:你应该从服务治理的原理和服务获取的概念来谈。

他表示不太懂。

其实他基本又错了。首先服务在启动时,都注册给服务治理中心,服务治理中心会根据服务名称维护一份服务清单,每个服务节点都要定时续约(向服务治理中心请求告诉服务治理中心我还活着),不能按要求完成续约的就被服务治理中心剔除。而某个服务节点,每隔一段时间(一般是几秒钟)都会向服务治理中心拉去最新服务实例清单,这个过程叫做服务获取,然后缓存本地副本,提供给Feign客户端调用时使用。

ps:本来我还想问断路器的,我看他肯定又不知道,还是算了。

我想好吧,我觉得他写得东西,虚的比较多,那么我开始考虑问些比较基础的,毕竟人家也好歹2年工作经验。于是就稳点基础一点的吧。

4、数据库事务隔离级别有哪些??会产生哪些问题呢?

这个他比较好,能回答。

未提交读(脏读)

读写提交(不可重读)

可重复读(缓读)

串行化(克服所有的问题)

我在问:一般情况下,采用那个级别就够了??

他回答:可重复读。

我说:错了,一般来说,我们会采用读写提交。

5、Spring AOP是通过动态代理模式来完成的,你能告诉我有哪些通知?执行的顺序是怎么样的吗??

他只能告诉我有哪些通知,包括:前置通知、后置通知、环绕通知、事后通知,返回通知和异常通知。顺序他搞不清楚了。

AOP,执行顺序前置通知、目标方法(环绕通知),如果发生异常执行异常通知,如果没有发生异常执行返回通知,最后执行事后通知。

其实,和我的预测差不多,把简历进行包装,只要面试官认真问些细节的问题,就要露馅了。

我同事问的算法题,他也不太懂,估计要把他给PASS了。

以上是关于今天面试了一个2年Java经验的的主要内容,如果未能解决你的问题,请参考以下文章

2年Java开发工作经验面试总结

5年经验Java程序员面试20天

java两年经验面试都会问啥问题

Java开发基础面试题,java五年经验面试题

8年经验面试官详解 Java 面试秘诀

Java开发面试题,3年工作经验的Java程序员面试经