前言
消息中间件作为分布式系统的重要成员,各大公司及开源均有许多解决方案。目前主流的开源解决方案包括RabbitMQ、RocketMQ、Kafka、ActiveMQ等。消息这个东西说简单也简单,说难也难。简单之处在于好用方便,接入简单使用简单,异步操作能够解耦系统间的依赖,同时失败后也能够追溯重试。难的地方在于,设计一套可以支撑业务的消息机制,并提供高可用架构,解决消息存储、消息重试、消息队列的负载均衡等一系列问题。然而难也不代表没有方法或者“套路”,熟悉一下原理与实现,多看几个框架的源码后多总结势必能找出一些共性。
消息框架大同小异,熟练掌握其原理、工作机制是必要的。就拿用的比较多的RocketMQ为引,来说说消息引擎的设计与实现。阿里的消息引擎经过了从Notify到Napoli、再到MetaQ三代的发展,现在已经非常成熟,在不同部门的代码中现在没准都还可以从代码里看到这一系列演进过程。当前的Apache RocketMQ 就是阿里将MetaQ项目捐赠给了Apache基金会,而内部还是沿用MetaQ的名称。
一面
- 介绍项目
- java 线程池的实现原理,threadpoolexecutor关键参数解释
- hashmap的原理,容量为什么是2的幂次
- 为什么要同时重写hashcode和equals
- ConcurrentHashMap如何实现线程安全?
- 介绍Java多线程的5大状态,以及状态图流转过程
- 介绍下Synchronized、Volatile、CAS、AQS,以及各自的使用场景
- B+树和红黑树时间复杂度
- 如果频繁老年代回收怎么分析解决
- JVM内存模型,新生代和老年的回收机制
- mysql limit分页如何保证可靠性
二面
- 了解哪些排序算法,讲讲复杂度
- 手撕归并排序
- Redis有哪些数据结构?底层的编码有哪些?有序链表采用了哪些不同的编码?
- redis的hash数据结构最多能存储多少个元素
- 自己如何实现RPC?
- mysql默认存储引擎?MyISAM、InnoDB、MEMORY的区别
- 什么是幻读,如何解决
- 事务隔离级别有什么?通过什么来实现的?分别解决了什么问题?
- 乐观锁与悲观锁的使用场景
三面:
- 自我介绍
- 参与的并发项目,从设计到部署,按照流程讲一遍。
- 项目相关你用过redis,用在什么场景,怎么使用的?
- mysql同步机制原理,有哪几种同步方法
- 数据库主从同步如何实现,事务如何实现
- 谈谈你对SOA和微服务的理解,以及分布式架构从应用层面涉及到的调整和挑战。
- 阿里系中间件metaQ及原理与现有的kafka有什么异同
- 在阿里有了解过什么中间件吗?实现原理?与其他开源消息队列有什么特点?
- 为什么选择换公司?
- 三年到五年的职业规划?
最后
由于篇幅有限,这里就不一一罗列了,20道常见面试题(含答案)+21条MySQL性能调优经验小编已整理成Word文档或PDF文档
还有更多面试复习笔记分享如下
本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录