汇聚2024年最新大厂面试真题,深度解析Spring、MyBatis及微服务架构核心考点,助您从容应对技术面试。
在Java框架面试题库中,Spring框架的基础知识占据了半壁江山。面试官往往不仅仅考察API的使用,更关注底层原理的理解。以下是关于Spring核心机制的高频考点梳理。
理解Spring Bean的生命周期是掌握IoC容器的关键。整个过程可以概括为以下几个阶段:
循环依赖是指两个或多个Bean互相引用对方。Spring通过三级缓存机制解决了单例模式下的属性注入循环依赖问题:
| 缓存名称 | 数据类型 | 作用描述 |
|---|---|---|
| singletonObjects | Map<String, Object> | 存放完全初始化好的单例Bean |
| earlySingletonObjects | Map<String, Object> | 存放原始的Bean对象(未填充属性),用于解决循环依赖 |
| singletonFactories | Map<String, ObjectFactory> | 存放Bean工厂,用于生成早期引用 |
注意:Spring无法解决原型(Prototype)作用域下的循环依赖,因为这会导致无限创建Bean对象,最终引发OutOfMemoryError。
随着微服务架构的普及,Java框架面试题库中关于Spring Boot和Spring Cloud的问题比例逐年上升。这部分内容不仅考察配置能力,更考察架构思维。
@SpringBootApplication 是一个组合注解,主要包含以下三个核心注解:
spring.factories 文件中定义的自动配置类。自动配置的核心逻辑在于 AutoConfigurationImportSelector,它通过 getCandidateConfigurations 方法加载配置,并结合 @ConditionalOnClass、@ConditionalOnMissingBean 等条件注解,判断是否将某个Bean注册到容器中。
在微服务开发中,封装通用的业务逻辑往往需要自定义Starter。一个标准的Starter包含两部分:
@Configuration 和条件注解实现。在 META-INF/spring.factories 文件中,需要配置 org.springframework.boot.autoconfigure.EnableAutoConfiguration 键,指向你的自动配置类全限定名。
Spring Cloud Gateway 是基于Spring WebFlux的反应式编程模型构建的。其核心组件包括:
在Java框架面试题库中,MyBatis作为最流行的ORM框架之一,其缓存机制、插件原理及动态SQL是考察重点。
MyBatis提供了一级缓存和二级缓存。一级缓存是SqlSession级别的,默认开启。当同一个SqlSession执行相同的SQL语句时,第二次查询会直接从缓存中获取数据,而不访问数据库。
二级缓存是Mapper Namespace级别的,默认关闭。开启二级缓存需要配置 <cache/> 标签。需要注意的是,二级缓存涉及序列化问题,因为不同SqlSession可能在不同线程中运行,缓存数据需要在它们之间共享。
MyBatis插件基于JDK动态代理实现。它可以通过拦截四大核心对象(Executor、StatementHandler、ParameterHandler、ResultSetHandler)的方法,实现自定义功能,如分页插件、性能监控插件等。
// 插件示例代码片段
@Intercepts({
@Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class})
})
public class MyPlugin implements Interceptor {
@Override
public Object intercept(Invocation invocation) throws Throwable {
// 拦截逻辑
return invocation.proceed();
}
@Override
public Object plugin(Object target) {
return Plugin.wrap(target, this);
}
}
以下是来自Java框架面试题库中网友关注度最高的10个技术问题及其深度解答:
1. 方法非public修饰;2. 自身调用(未通过代理对象);3. 数据库引擎不支持事务(如MyISAM);4. 异常被捕获未抛出;5. 异常类型不匹配(默认回滚RuntimeException)。
Eureka遵循AP原则,保证可用性,不保证一致性;Nacos支持CP和AP模式切换。Nacos还支持配置管理功能,而Eureka仅做服务注册发现。
RDB是快照形式,恢复快但可能丢失数据;AOF记录写命令,数据安全性高但文件大,恢复慢。生产环境通常建议同时开启两者。
生产者设置 acks=all;Broker设置 replication.factor>1 且 min.insync.replicas>1;消费者手动提交Offset。
使用 <foreach> 标签生成多条INSERT语句;或使用JDBC批处理;MySQL中可使用 LOAD DATA INFILE 极速导入。
堆(Heap)、方法区(Metaspace)、虚拟机栈、本地方法栈、程序计数器。堆又分为新生代(Eden, S0, S1)和老年代。