java高级工程师面试题有哪些?java常见高级工程师面试题

Java分为初级中级以及高级,每个等级不管是薪资待遇还是技能要求都是不一样的,面试高级工程师就需要有过硬的java技术才行,那java高级工程师面试题有哪些下面来我们就来给大家讲解一下java常见高级工程师面试题。

java高级工程师面试题.jpeg

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

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

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

2.消息如何分发?

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

3.Redis可以在线扩容吗?zk呢?

Reids的在线扩容,不需要重启服务器,动态的在原始集群中添加新的节点,并分配slot槽。但是zk不能在线扩容,需要重启,但是我们可以选择一个一个重启。

4.java内存溢出是如何造成的?

OutOfMemoryError:

(1)PerGern Space 程序中使用了大量的jar或class,使虚拟机装载类空间不够。

解决方案:调参 XX:PermSize 和XX:MaxPermSize、减少jar包减少类的重复加载

(2)Java Heap

Space Java虚拟机创建太多对象。 解决方法:调参Xms(初始化堆大小)Xmx(最大堆大小)、检查死循环或不必要创建的重复对象。

(3)unable to create new native Thread

JVM占用了太多内存空间,而在JVM中创建线程还要再操作系统中创建线程。 解决方案:调整JVM中线程大小。

5.memcache的分布式原理是什么?

memcached 虽然称为 “ 分布式 ” 缓存服务器,但服务器端并没有 “ 分布式 ” 功能。每个服务器都是完全独立和隔离的服务。memcached 的分布式,则是完全由客户端程序库实现的。这种分布式是 memcached 的最大特点。

6.Java会存在内存泄漏吗?请简单描述。

内存泄漏是指不再被使用的对象或者变量一直被占据在内存中。理论上来说,Java是有GC垃圾回收机制的,也就是说,不再被使用的对象,会被GC自动回收掉,自动从内存中清除

但是,即使这样,Java也还是存在着内存泄漏的情况,java导致内存泄露的原因很明确:长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄露,尽管短生命周期对象已经不再需要,但是因为长生命周期对象持有它的引用而导致不能被回收,这就是java中内存泄露的发生场景。

相对于初级中级来说,高级工程师的面试题肯定是有些难度的,不过只要既然已经到了高级的程度,那面试也不会太难,只要我们掌握好技术就行!最后大家如果想要了解更多Java面试题知识,敬请关注奇Q工具网。

推荐阅读:

java开发教程视频教程在哪里看?java开发学哪些?

java免费课程培训怎么找?java培训找培训班靠谱吗?

redis怎么查询有哪些数据库?redis有哪些数据类型?