Spring Framework 核心(30 题)
xiangliheart
xiangliheart
发布于 2021-05-01 / 2 阅读 / 0 评论 / 0 点赞

Spring Framework 核心(30 题)

IOC & Bean

  1. 什么是 IOC?

    控制反转,把对象创建和依赖交给 Spring 容器管理,不由开发者 new。

  2. 什么是 DI?

    依赖注入,容器自动给 Bean 注入依赖对象。

  3. Bean 的作用域有哪些?

    singleton 单例、prototype 多例、request、session、application。

  4. Spring Bean 默认是单例吗?

    是,容器级单例。

  5. Bean 生命周期?

    实例化→属性填充→初始化→销毁。

  6. 依赖注入三种方式?

    构造器注入、Set 注入、字段 @Autowired 注入。

  7. @Autowired 和 @Resource 区别?

    Autowired 默认按类型,Resource 默认按名称。

  8. 什么是循环依赖?

    A 依赖 B,B 依赖 A,互相依赖。

  9. Spring 怎么解决循环依赖?

    三级缓存 + 提前暴露对象。

  10. 三级缓存分别是什么?

    一级:单例池;二级:半成品 Bean;三级:Lambda 工厂对象。

  11. 为什么需要三级缓存,二级不行?

    解决 AOP 代理对象循环依赖。

  12. 哪些情况循环依赖解决不了?

    构造器注入、多例 Bean。

  13. BeanFactory 和 ApplicationContext 区别?

    BeanFactory 懒加载,ApplicationContext 立即初始化,功能更强。

  14. Spring 容器启动流程?

    加载配置→扫描 Bean→注册 Bean 定义→实例化单例 Bean→初始化。

  15. @Component、@Controller、@Service、@Repository 区别?

    功能一样,只是语义分层。

AOP 面向切面

  1. 什么是 AOP?

    面向切面,不修改源码对方法增强:日志、事务、权限、限流。

  2. AOP 核心术语?

    切点、连接点、切面、通知、目标对象、代理。

  3. 通知类型有哪些?

    前置、后置、返回、异常、环绕通知。

  4. Spring AOP 用什么动态代理?

    有接口用JDK 动态代理,无接口用Cglib

  5. JDK 和 Cglib 区别?

    JDK 基于接口,Cglib 继承子类,无需接口。

  6. AOP 为什么不能增强 private 方法?

    代理只能重写 public/protected,私有方法无法代理。

  7. AOP 应用场景?

    日志记录、事务控制、权限校验、限流、缓存。

事务

  1. Spring 事务实现原理?

    AOP 动态代理,拦截方法开启 / 提交 / 回滚事务。

  2. 事务隔离级别?

    读未提交、读已提交、可重复读、串行化。

  3. MySQL 默认隔离级别?

    可重复读 RR。

  4. 事务传播机制有哪些?

    REQUIRED、SUPPORTS、REQUIRES_NEW、NESTED 等 7 种。

  5. @Transactional 什么时候失效?

  • 方法 private

  • 内部本类调用

  • 无 Spring 代理

  • 异常被 try-catch 吃掉

  • 传播级别配置错误

  1. 事务嵌套怎么处理?

    REQUIRES_NEW 新开事务,互不影响;NESTED 嵌套子事务。

  2. 什么是脏读、不可重复读、幻读?

    脏读读未提交;不可重复读同一事务两次查询不同;幻读新增删除。

  3. Spring 编程式事务 vs 声明式事务?

    编程式手动写代码,声明式注解 @Transactional 简洁常用。


评论