高级java面试题有哪些?高级java面试题大全

进入java行业,首先就要过面试这一关,面试通过了,才能胜任java岗位,所以我们要想通过面试,刷面试题还是有必要的,那高级java面试题有哪些?下面来我们就来给大家讲解一下。

1.什么是垃圾回收?

垃圾回收是Java中自动内存管理的另一种叫法。垃圾回收的目的是为程序保持尽可能多的可用堆(heap)。 JVM会删除堆上不再需要从堆引用的对象。

2.用一个例子解释垃圾回收?

比方说,下面这个方法就会从函数调用。

通过函数第一行代码中参考变量calendar,在堆上创建了GregorianCalendar类的一个对象。

函数结束执行后,引用变量calendar不再有效。因此,在方法中没有创建引用到对象。

JVM认识到这一点,会从堆中删除对象。这就是所谓的垃圾回收。

3.Redis的部分复制过程是什么?

部分同步工作原理如下:

Master为被发送的复制流创建一个内存缓冲区(in-memory backlog),记录最近发送的复制流命令;

Master和Slave之间都记录一个复制偏移量(replication offset)和当前Master ID(Master run id);

当出现网络断开,Slave会重新连接,并且向Master请求继续执行原来的复制进程;

如果Slave中断网前的MasterID和当前要连的MasterID相同,并且从断开时到当前时刻Slave记录的偏移量所指定的数据仍然保存在Master的复制流缓冲区里面,则Master会向Slave发送缺失的那部分数据,Slave执行后复制工作可以继续执行。

否则Slave就执行完整重同步操作;

4.spring常用接口有哪些?

ApplicationListener:当需要监听自定义事件时,可以新建一个实现ApplicationListener接口的类,并将该类配置到Spring容器中。

FactoryBean:用于创建特定的对象,对象的类型由getObject方法的返回值决定。

ApplicationContextAware:当一个类需要获取ApplicationContext实例时,可以让该类实现ApplicationContextAware接口。

ApplicationEvent:当需要创建自定义事件时,可以新建一个继承自ApplicationEvent抽象类的类。

5.如何保证消息不被重复消费(如何保证消息消费时的幂等性)?

在消息生产时,MQ内部针对每条生产者发送的消息生成一个inner-msg-id,作为去重的依据(消息投递失败并重传),避免重复的消息进入队列;

在消息消费时,要求消息体中必须要有一个bizId(对于同一业务全局唯一,如支付ID、订单ID、帖子ID等)作为去重的依据,避免同一条消息被重复消费。

6.消息如何分发?

若该队列至少有一个消费者订阅,消息将以循环(round-robin)的方式发送给消费者。每条消息只会分发给一个订阅的消费者(前提是消费者能够正常处理消息并进行确认)。

高级java面试题肯定要比初级面试题难一些,不过这也没关系,我们就当做是在拓展知识,提高技能,毕竟面试中技术重要!最后大家如果想要了解更多Java面试题知识,敬请关注奇Q工具网。

推荐阅读:

java编程是如何应用到芯片上的?java编程应用原理

java web服务器怎么写?java web服务器实例开发

Java编程的快捷键有哪些?Java编程好用的快捷键!

推荐内容