阿里最新38道Java面试题解析(MyBatis+消息队列+Redis)

  • 时间:
  • 浏览:2

§ #{} 是预编译外理,${} 是字符串替换

1、消息队列的基本作用?

2、消息队列的优缺点哪些?

3、如可保证消息队列的高可用?

4、如可保证消息不被重复消费?因为说,如可保证消息消费的幂等性?

5、如可保证消息的可靠性传输?因为说,如可外理消息丢失的大问题?

6、如可保证消息的顺序性?

7、一定量消息在 MQ 里长时间积压,该如可外理?

8、MQ 中的消息过期失效了为什么办?

9、RabbitMQ 哪些重要的角色?

10、RabbitMQ 哪些重要的组件?

11、RabbitMQ 有几种广播类型?

12、Kafka 前要脱离 zookeeper 单独使用吗?为哪些?

13、Kafka 有几种数据保留的策略?

14、Kafka 的分区策略哪些?

欢迎朋友关注我的公种浩【进程池池员追风】,文章总要在后边更新,派发的资料也会放进后边。

§ 优点:

Mybatis 有 3 种基本的执行器(Executor):

MyBatis 使用 RowBounds 对象进行分页,它是针对 ResultSet 结果集执行的内存分页,而非物理分页。前要在 SQL 内直接书写饱含物理分页的参数来完成物理分页功能,也前要使用分页插件来完成物理分页。

分页插件的基本原理是使用 MyBatis 提供的插件接口,实现自定义插件,在插件的拦截妙招 内拦截待执行的 SQL,为什么么让重写 SQL,根据 dialect 方言,加进去去对应的物理分页话语和物理分页参数。

最后

欢迎朋友一齐交流,喜欢文章记得点个赞哟,感谢支持!

一级缓存:基于 PerpetualCache 的 HashMap 本地缓存,其存储作用域为 Session,当 Session flush 或 close 刚刚,该 Session 中的所有 Cache 就将清空,默认打开一级缓存;

二级缓存:与一级缓存其机制相同,默认也是采用 PerpetualCache,HashMap 存储,不同在于其存储作用域为 Mapper(Namespace),为什么么让可自定义存储源,如 Ehcache。默认不打开二级缓存,要开启二级缓存,使用二级缓存属性类前要实现 Serializable 序列化接口(可用来保存对象的具体情况),可在它的映射文件中配置 ;

对于缓存数据更新机制,当某另另一1个作用域(一级缓存 Session / 二级缓存 Namespaces)的进行了 C/U/D 操作后,默认该作用域下所有 select 中的缓存将被 clear。

1、谈下你对 Redis 的了解?

2、Redis 一般前要哪些使用场景?

3、Redis 哪些常见的功能?

4、Redis 支持的数据类型哪些?

5、Redis 为哪些是单进程池的?

6、Redis 为哪些没办法 快?

7、哪些是缓存穿透?为什么外理?

8、哪些是缓存雪崩?该如可外理?

9、 为什么保证缓存和数据库数据的一致性?

10、Redis 持久化有几种妙招 ?

11、Redis 为什么实现分布式锁?

12、Redis 淘汰策略哪些?

13、Redis 常见性能大问题和外理方案?

Mybatis 仅支持 association 关联对象和 collection 关联集合对象的延迟加载,association 指的也不一对一,collection 指的也不一对多查询。在MyBatis配置文件中,前要配置是是否是启用延迟加载lazyLoadingEnabled=true|false。

它的原理是,使用 CGLIB 创建目标对象的代理对象,当调用目标妙招 时,进入拦截器妙招 ,比如调用 a.getB().getName(),拦截器 invoke() 妙招 发现 a.getB() 是 null 值,没办法 就会单独发送刚刚保存好的查询关联 B 对象的 SQL,把 B 查询上来,为什么么让调用 a.setB(b),于是 a 的对象 b 属性前要值了,接着完成 a.getB().getName() 妙招 的调用。这也不延迟加载的基本原理。