跳至主要內容

面试-Spring

TenSoFlow...大约 6 分钟面试面试-Spring

面试-Spring

对Spring的理解

问:对Spring的理解

答:Spring核心思想为IOC、DI、AOP。Spring框架使用了Java里面的反射机制。IOC就是把对象的创建控制权转移到IOC容器并且负责对象的创建、初始化等一系列工作。被创建的对象在IOC容器中称为Bean。在容器中建立Bean与Bean之间的关系就称为依赖注入。AOP底层是代理模式,可以在不改变原有代码结构的情况下增强功能。具体操作核心是先定义切面来封装通用逻辑,再通过切点明确要切入的目标方法(如指定包 / 类 / 方法规则),接着定义通知确定增强逻辑的执行时机(前置 / 后置 / 环绕 / 异常 / 最终)。

AOP有哪些应用场景

问:AOP有哪些应用场景

答:
1. 事务管理
2. 日志打印。

Spring中如何开启事务

问:Spring中如何开启事务

答:Spring支持编程式事务和声明式事务两种方式。一般使用声明式事务即在方法上加入@Transactional注解(其底层是AOP)

Spring事务失效场景

问:Spring事务失效场景

答:
1. 异常捕获并自己处理了并没有抛出异常
2. 抛出检查异常(throws xxxException),可以为@Transactional配置rollbackFor属性,@Transactional(rollbackFor=Exception.class)
3. 非public方法导致事务失效
4. 同类内部调用(this):原因是用this没有走代理,用的是原生对象

@Autowired 和@Resource的区别?

问:@Autowired 和@Resource 的区别?

答:
1. @Autowired是按照类型进行注入其属于Spring框架注解。
2. @Resource会按照名称注入,名称找不着会按照类型来找其属于JDK自带注解。

Spring中Bean的生命周期

问:Spring中Bean的生命周期

答:
1. 通过BeanDefinition获取Bean的定义信息
2. 调用构造函数实例化Bean
3. Bean的依赖注入
4. 处理Aware接口
5. Bean的后置处理器BeanPostProcessor-前置
6. 初始化方法
7. Bean的后置处理器BeanPostProcessor-后置
8. 销毁Bean

Bean是线程安全的吗

问:Bean是线程安全的吗

答:如果这个Bean里有成员变量则不是线程安全的,除非这个成员变量自身是线程安全的。

Spring解决循环依赖

问:Spring解决循环依赖

答:循环依赖就是两个Bean互相依赖对方最终形成闭环,比如A依赖B,B依赖A。
1. Spring解决通过setter方式注入的循环依赖问题是通过三级缓存。
一级缓存:缓存完整的Bean对象
二级缓存:缓存Bean对象的半成品
三级缓存:缓存Bean对象的工厂对象
2. 解决构造方法依赖注入的方式是使用@Lazy注解进行懒加载,什么时候需要对象再进行Bean的创建

public A(@Lazy B b) {
    System.out.println("A的构造方法执行了...");
    this.b = b;
}

JDK代理和CGLIB代理使用场景

问:JDK代理和CGLIB代理使用场景

答:
1. 目标类实现了接口用JDK动态代理
2. 目标类没有实现接口用CGLIB代理

Spring事务传播机制

问:Spring事务传播机制

答:
required:有事务则加入,没有则创建(默认行为)
requires_new:无论有无事务,都新建独立事务
supports:有事务则加入,无事务则非事务运行
mandatory:必须在事务内运行,无事务抛出异常
not_supported:始终非事务运行,有事务则挂起
never:必须在非事务内运行,有事务抛出异常
nested:外层有事务则嵌套执行,无事务则新建事务

Spring事务是如何和数据库连接绑定的

问:Spring事务是如何和数据库连接绑定的

答:Spring事务通过ThreadLocal把数据库连接绑定到当前线程,实现事务与连接的绑定事务开启时,从数据源获取连接,放入ThreadLocal缓存,不再释放回连接池。同一线程内的所有DAO操作,都从ThreadLocal取同一个连接,共用同一事务,事务提交 / 回滚后,连接才释放并归还连接池,同时清空ThreadLocal。多线程环境下互不干扰,每个线程持有独立连接,实现事务隔离。

BeanFactory和FactoryBean

问:BeanFactory和FactoryBean

答:
1. BeanFactory:是Spring的Bean容器顶层接口,负责加载、创建、管理 Bean
2. FactoryBean:是一个能生产Bean对象的工厂Bean,通过getObject()返回实例,可定制复杂Bean创建逻辑

@Configuration和@Component区别

问:@Configuration和@Component区别

答:@Configuration本质是@Component的增强版,用于声明配置类@Configuration会被CGLIB代理,调用内部@Bean方法是单例。@Component不会代理,多次调用会新建新对象。

Spring中常用注解

问:Spring中常用注解
@Component
@Controller
@Service
@Repository
@Autowired
@Qualifier
@Scope
@Configuration
@ComponentScan
@Bean
@Import
@Aspect
@Before
@After
@Around
@Pointcut

SpringMVC中常用注解

问:SpringMVC中常用注解
@RequestMapping
@RequestBody
@RequestParam
@PathViriable
@ResponseBody
@RequestHeader
@RestController

拦截器与过滤器

问:拦截器与过滤器

答:
1. 过滤器(Filter):Servlet规范,它能拦截所有进入应用的请求和响应,比如静态资源、登录访问等,它可以修改请求和响应,但无法访问Spring容器内部的Bean。
2. 拦截器(Interceptor):SpringMVC框架自带,作用于Spring容器内部,它只拦截Controller层方法,可以完全访问Spring的上下文,比如获取Bean,处理业务逻辑等。所以在做登录校验、日志记录或权限控制时倾向于使用拦截器。

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.8