-
RabbitMQ与RPC的区别? RabbitMQ:消息队列,异步、底层erlang语言实现 RPC:远程调用,同步,底层socket实现
-
MQ如何保证消息不被多个消费者重复消费处理,如何保证消息的一致性、顺序性? 一致性:让每个消息携带一个全局的唯一ID,即可保证消息的幂等性,具体消费过程为: (1)消费者获取到消息后先根据id去查询redis/db是否存在该消息 (2)如果不存在,则正常消费,消费完毕后写入redis/db (3)如果存在,则证明消息被消费过,直接丢弃。 顺序性: (1)单线程模式去消费:拆分多个queue,每个queue一个消费者 (2)多线程模式去消费:一个queue对应一个消费者,利用内存队列,采用多线程
-
常用的redis客户端,各自优势? Jedis:是Redis的Java实现客户端,提供了比较全面的Redis命令的支持。(同步线程不安全) Redisson:基于Netty框架的事件驱动的通信层,实现了分布式和可扩展的Java数据结构。可以操作单个Redisson连接来完成各种操作。(异步线程安全) Lettuce:基于Netty框架的事件驱动的通信层,高级Redis客户端,用于线程安全同步,异步和响应使用,支持集群,Sentinel,管道和编码器。可以操作单个Lettuce连接来完成各种操作(异步线程安全)
-
redis的持久化机制,哨兵机制,主节点选举流程,缓存过期机制? 持久化机制:(1)RDB快照;(2)AOF日志 哨兵机制: 缓存过期机制:(1)(主动)定时删除;(2)(被动)惰性删除 内存淘汰机制: (1)volatile-lru -> 在设置了expire过期的缓存中,清除最少使用的旧缓存,然后保存新的缓存 (2)allkeys-lru -> 清除最近最少使用的数据,基于访问时间(推荐使用) (3)volatile-lfu -> 在设置了expire过期的缓存中,清除最近最少使用的数据,基于访问时间 (4)allkeys-lfu ->清除最不经常使用的数据,基于访问次数 (5)volatile-random -> 在设置了expire过期的缓存中,清除最不经常使用的数据,基于访问次数 (6)allkeys-random ->随机删除一些缓存 (7)volatile-ttl -> 在那些设置了expire过期时间的缓存中,根据过期时间的先后顺序进行删除 (8)noeviction -> 旧缓存永不过期,新缓存设置不了,返回错误 备注: LRU(Least Recently Used) : 淘汰最近最少使用的数据,基于访问时间; LFU(Least Frequently Used): 淘汰最不经常使用的数据,基于访问次数;
-
慢SQL优化措施?
-
SpringMVC的执行流程?核心类有哪些?
核心类:
- Mybatis的执行流程?黑核心类有哪些?
- 设计模式有哪些?
- 了解到的类加载器有哪些?
- 遇到的OOM场景,是如何排查的?常用的linux命令有哪些?
- JVM调优参数有哪些?
- Postgres性能调优参数有哪些?
- 常用的java性能分析命令有哪些?有哪些性能分析工具?