Java面经(大厂面试必备)100题 .pdfVIP

  • 7
  • 0
  • 约1.16万字
  • 约 11页
  • 2024-07-28 发布于河北
  • 举报

returnPlugin,wrap(target,this);

18、MyBatis有哪些执行器(xecutor)?

【仅供参考】

MyBatis有三种基本的xecutor执行器:

Simplexecutor:每执行一次update或select就开启一个Statement对象,用完立刻关闭

Statement对象;

Reusexecutor:执行update或select,以SQL作为key查找Statement对象,存在就使

用,不存在就创建,用完后不关闭Statement对象,而是放置于Map内供下一次使用。简言

之,就是重复使用Statement对象;

Batchxecutor:执行update(没有select,jdbc批处理不支持select),将所有SQL都

添加到批处理中(addBatchO),等待统一执行(executeBatch()),它缓存了多个

Statement对象,每个Statement对象都是addBatch()完毕后,等待逐一执行

executeBatch()批处理,与jdbc批处理相同。

19、在hibernate中getCurrentSession和openSession的区别是什么?

【仅供参考】

getCurrentSession会绑定当前线程,而openSession则不会。

getCurrentSession事务是Spring控制的,并且不需要手动关闭,而openSession需要我们

自己手动开启和提交事务。

20、MyBatis是否支持延迟加载?延迟加载的原理是什么?

【仅供参考】

MyBatis支持延迟加载,设置lazyLoadingnabled二true即可。

延迟加载的原理的是调用的时候触发加载,而不是在初始化的时候就加载信息。比如调用a.

getB().getName(),这个时候发现a.getB()的值为null,此时会单独触发事先保存好的关

联B对象的SQL,先查询出来B,然后再调用a.setB(b),而这时候再调用a.getB().

getName()就有值了,这就是延迟加载的基本原理。

四、数据处理篇

1、RabbitMQ怎么保证消息的稳定性?

【仅供参考】

提供了事务的功能。

通过将channel设置为confirm(确认)模式。

2、RabbitMQ的使用场景有哪些?

第15/25页

抢购活动,削峰填谷,防止系统崩塌。

延迟信息处理,比如10分钟之后给下单未付款的用户发送邮件提醒。

解耦系统,对于新增的功能可以单独写模块扩展,比如用户确认评价之后,新增了给用户返积

分的功能,这个时候不用在业务代码里添加新增积分的功能,只需要把新增积分的接口订阅确

认评价的消息队列即可,后面再添加任何功能只需要订阅对应的消息队列即可。

3、RabbitMQ集群有什么用?

【仅供参考】

集群主要有以下两个用途:

高可用:某个服务器出现问题,整个RabbitMQ还可以继续使用;

高容量:集群可以承载更多的消息量。

4、RabbitMQ的消息是怎么发送的?

【仅供参考】

首先客户端必须连接到RabbitMQ服务器才能发布和消费消息,客户端和rabbitserver之间

会创建一个tcp连接,一旦tcp打开并通过了认证(认证就是你发送给rabbit服务器的用

户名和密码),你的客户端和RabbitMQ就创建了一条amqp信道(channel),信道是创建

在“真实”tcp上的虚拟连接,amqp命令都是通过信道发送出去的,每个信道都会有一个唯

一的id,不论是发布消息,订阅队列都是通过这个信道完成的。

5、RabbitMQ有几种广播类型?

【仅供参考】

direct(默认方式):最基础最简单的模式,发送方把消息发送给订阅方,如果有多个订阅

者,默认采取轮询的方式进行消息发送。

headers:与direct类似,只是性能很差,此类型几乎用不到。

fanout:分发模式,把消费分发给所有订阅者。

topic:匹配订阅模式,使用正则匹配到消息队列,能匹配到的都能接收到。

6、要保证消息持久化成功的条件有哪些?

【仅供参考】

声明队列必须设置持久化durable设置为true.

消息推送投递模式必须设置

文档评论(0)

1亿VIP精品文档

相关文档