前言
消息中间件作为分布式系统的重要成员,各大公司及开源均有许多解决方案。目前主流的开源解决方案包括RabbitMQ、RocketMQ、Kafka、ActiveMQ等。消息这个东西说简单也简单,说难也难。简单之处在于好用方便,接入简单使用简单,异步操作能够解耦系统间的依赖,同时失败后也能够追溯重试。难的地方在于,设计一套可以支撑业务的消息机制,并提供高可用架构,解决消息存储、消息重试、消息队列的负载均衡等一系列问题。然而难也不代表没有方法或者“套路”,熟悉一下原理与实现,多看几个框架的源码后多总结势必能找出一些共性。
消息框架大同小异,熟练掌握其原理、工作机制是必要的。就拿用的比较多的RocketMQ为引,来说说消息引擎的设计与实现。阿里的消息引擎经过了从Notify到Napoli、再到MetaQ三代的发展,现在已经非常成熟,在不同部门的代码中现在没准都还可以从代码里看到这一系列演进过程。当前的Apache RocketMQ 就是阿里将MetaQ项目捐赠给了Apache基金会,而内部还是沿用MetaQ的名称。
一面
- 自我介绍
- 项目中的监控:那个监控指标常见的有哪些?
- 微服务涉及到的技术以及需要注意的问题有哪些?
- 注册中心你了解了哪些?
- consul 的可靠性你了解吗?
- consul 的机制你有没有具体深入过?有没有和其他的注册中心对比过?
- 项目用 Spring 比较多,有没有了解 Spring 的原理?AOP 和 IOC 的原理
- Spring Boot除了自动配置,相比传统的 Spring 有什么其他的区别?
- Spring Cloud 有了解多少?
- Spring Bean 的生命周期
- HashMap 和 hashTable 区别?
- Object 的 hashcode 方法重写了,equals 方法要不要改?
- Hashmap 线程不安全的出现场景
- 线上服务 CPU 很高该怎么做?有哪些措施可以找到问题
- JDK 中有哪几个线程池?顺带把线程池讲了个遍
- 应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描
- SQL 索引的顺序,字段的顺序
- 查看 SQL 是不是使用了索引?(有什么工具)
- TCP 和 UDP 的区