2020-09-23 spring面试

最近准备换工作,将面试的问题总结总结,如果有什么问题请多多见谅,希望可以指点出来,如果可以补充不足那就更好了。

 

  1. spring是什么:轻量级的ioc与aop框架,简化了企业应用开发。常见的配置:XML配置  注解的配置
  2. Spring优点:低侵入,降低代码的耦合,aop技术提高代码的复用,主流应用框架支持集成配置。
  3. Spring AOP理解:AOP是面向对象的补充,将一些对业务无关的代码,但有其他作用的公共代码给抽取出来,封装成可以复用的切面。减少了重复代码。例如:日志,事务等等
  4. AOP的动态代理:
    Cglib:代理的类可以没有接口,会为代理的类生成一个子类,这个子类就是代理对象(被final修饰的类与方法不可以被代理);
    Jdk动态代理:代理的类必须要有接口(默认使用);
  5. AOP实现:
  • AOP的原理也就是动态代理,动态代理也就是  真实实现类与代理类。那我们在要使用这个类的时候我们把代理类返回去就可以了。而spring 的ioc容器管理了所有的bean,如果要创建实例 那么用getBean就可以返回这个bean的实例。所以aop是依赖于ioc容器的。
  • Bean 的生命周期是 实例化——>属性注入——>aware注入——>postProcessBeforeInitialization——>init——>postProcessAfterInitialization。而创建代理的过程就是在postProcessAfterInitialization方法中执行的,会用动态代理创建一个全新的bean,返回出去;

6. IOC的理解:创建对象的控制权交给了spring容器,对象与对象之间的松耦合。DI则是spring将IOC容器中的对象注入到所需要的地方。

7. IOC的实现:通过反射来创建的。

8. Spring容器的三级缓存:三级缓存主要是为了解决循环依赖。属性的循环依赖spring可以解决,构造器的循环依赖spring解决不了。

  1. 三级缓存分别存储的是:bean创建完成,实例化后属性未注入,bean的factory(FactoryBean)。
  2. 获取一个bean对象,会首先从缓存中获取,如果缓存中存在,那么使用缓存的实例,不存在才会去创建。创建的时候实例化后,会判断是否允许提前暴露,如果允许提前暴露会将对象加入到三级缓存内,也就是bean的factory中。在进行属性注入的时候,如果有依赖其他对象,会通过getBean在继续往下进行。

9. Spring bean的生命周期:

实例化——>属性注入——>aware注入——>postProcessBeforeInitialization——>init— —>postProcessAfterInitialization——>destory

10. servlet生命周期:实例化——>init 初始化——>sevices处理请求——>destory 销毁

11. Spring bean的作用域:

  1. Singleton 单例 默认
  2. Prototype 每次请求创建
  3. Request
  4. Session
  5. GloBal-session

12. spring注入:

  1. Autowired 默认按照类型注入    要求接口只可以有一个实现类
  2. Resource  默认按名称注入,名称找不到按照类型注入

13. 

  1. Spring的事务:
    1. Spring的事务支持 编程式事务  与   声明式事务
    2. Spring的事务传播行为:
      • Required  如果当前没有事务,创建一个新事务,如果有事务,加入到这个事务内
      • Suppors   如果有事务,加入到事务内。没有事务,以无事务执行
      • Mandatory  如果有事务,加入事务。没有事务,报错
      • Requires_new  创建一个新事物
      • Not_suppors  以无事务执行,有事务 挂起事务
      • Never  以非事务方式执行,有事务,报错
      • Nested  嵌套事务执行,如果没有事务创建一个新事务

14. Spring的隔离机制:

  1. 数据库默认隔离机制
  2. 读未提交  脏读
  3. 读已提交  不可重复度
  4. 可重复读  幻读
  5. 串行

15. Servlet, filter, listener初始化顺序:Listener ——> filter——> servlet

16. SpringMvc 启动与初始化流程:dispatcherServlet他的父级继承了httpServlet,所以他也就是一个servlet,servlet启动的时候会执行init初始化方法。也就在httpServletBean中。这里会初始化上下文加载容器,也就是webApplicaationContext,也就会初始化springMvc的9大组件,比如handlerMapper, handlerAdapters, ViewResolvers等

17. SpringMvc调用流程:当请求进来,首先进入到dispatchServlet中,会根据请求路径找到对应的handler,handler默认是有beanNameUrlHandlerMapper,requestMapperHandlerMapper  而requerMapper注解对应的 handlerMapper就是requestMapperHandlerMapper。在根据handler找到对应的适配器,handlerAdapters  作用也就是调用controller中的方法,会有参数,也就是将url的参数转换为方法的入参。最后返回modelAndView,经过视图解析器,解析视图渲染数据

18.Spring中常用注解:

@Service @Controller @RequestMapper @Autowired  @Resource  @Bean  @Component

@Configuration  @ResponBody  @RequestBody   @RequestParam

19. SpringMvc 接收入参方式:

  1. @RequestParam:接收参数类型为  application/x-www-form-urlencoded
  2. @PathVariable:  从Url路径读取参数
  3. SpringMvc 自动匹配,请求参数名跟方法入参名一样
  4. SpringMvc自动装箱,实体类接收参数
  5. @RequsetBody: 接收类型为application/json   参数是json

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值