99% 必问必考大厂面试题
-
Spring 如何解决循环依赖问题
参考答案 在Spring中,循环依赖问题主要有以下三种情况: 通过构造方法进行依赖注入时产生的循环依赖问题。 通过setter方法进行依赖注入且是在多例(原型)模式下产生的循环依赖问题。 通过setter方法进行依赖注入且是在单例模式下产生的循环依赖问题。 在Spring中,只有第3种方式的循环依赖问题被解决了,第1和第2种方式在遇到循环依赖问题时都会产生异常。 原因: 第1种构造方法注入的情况下…... -
Mybatis 的 Xml 映射文件中,不同的 Xml 映射文件,id是否可以重复
参考答案 不同的Xml映射文件: 如果配置了namespace,id可以重复。 如果没有配置namespace,id不能重复。 原因: namespace+id是作为Map的key使用的,如果没有namespace,就剩下id,那么,id重复会导致数据互相覆盖。 有了namespace,自然id就可以重复,namespace不同,namespace+id自然也就不同。 备注: 在旧版本的Mybat…... -
Mybatis 是如何进行分页的?分页插件的原理是什么?
参考答案 1. Mybatis如何分页 Mybatis使用RowBounds对象进行分页。 它是针对ResultSet结果集执行的内存分页,而非物理分页,可以在sql内直接书写带有物理分页的参数来完成物理分页功能,也可以使用分页插件来完成物理分页。 2. 分页插件的基本原理 分页插件的原理是使用Mybatis提供的插件接口,实现自定义插件。 在插件的拦截方法内拦截待执行的sql,然后重写sql,根…... -
Eureka 和 Zookeeper 的区别是什么
参考答案 Eureka 和 Zookeeper 都能提供服务注册与发现的功能,Eureka和zookeeper的区别: 1. Zookeeper保证了CP(C:一致性,P:分区容错性) 当向注册中心查询服务列表时,我们可以容忍注册中心返回的是几分钟以前的信息,但不能容忍直接down掉不可用。也就是说,服务注册功能对高可用性要求比较高,但Zookeeper会出现这样一种情况,当master节点因为…... -
分布式Redis是前期做,还是后期规模大了再做
参考答案 Redis是轻量的(单实例只使用1M内存),为防止以后扩容,最好的办法就是一开始就启动较多实例。 即便只有一台服务器,也可以一开始就让Redis以分布式的方式运行,使用分区,在同一台服务器上启动多个实例。 一开始就多设置几个Redis实例,例如32或者64个实例,对大多数用户来说,操作可能比较麻烦,但是长远来看是值得的。 如果前期就这样做,当后期数据不断增长,要用到更多的Redis服务器…... -
MySQL进行慢SQL优化的优化思路、解决办法
参考答案 MySQL进行慢SQL优化: 一、MySQL进行慢SQL优化的思路 通过慢查询日志去寻找哪些 SQL 执行效率低。 使用 explain 获取低效率 SQL 的执行计划。 结合 SQL 与执行计划,进行分析与优化。 二、引起 SQL 查询很慢的原因,以及解决办法 1. 没有索引 解决办法: 根据 where 和 order by 使用比较频繁的字段创建索引,提高查询效率。 索引不宜过…... -
MQ 有哪些使用场景
参考答案 MQ 的使用场景: 异步处理:用户注册后,发送注册邮件和注册短信。用户注册完成后,提交任务到 MQ,发送模块并行获取 MQ 中的任务。 系统解耦:比如用注册完成,再加一个发送微信通知。只需要新增发送微信消息模块,从 MQ 中读取任务,发送消息即可。无需改动注册模块的代码,这样注册模块与发送模块通过 MQ 解耦。 流量削峰:秒杀和抢购等场景经常使用 MQ 进行流量削峰。活动开始时流量暴增,…... -
Mybatis 的一级缓存、二级缓存是什么,以及工作模式
参考答案 1. 一级缓存的概念、工作模式 1.1 一级缓存的概念 基于 PerpetualCache 的 HashMap 本地缓存。 其存储作用域为 Session,当 Session flush 或 close 之后,该 Session 中的所有 Cache 就将清空,默认打开一级缓存。 1.2 一级缓存的工作模式 Mybatis对缓存提供支持,但是在没有配置的默认情况下,它只开启一级缓存,…...