码迷,mamicode.com
首页 > 编程语言 > 详细

面试题-Spring框架

时间:2020-10-18 16:18:20      阅读:16      评论:0      收藏:0      [点我收藏+]

标签:级别   over   基础   model   集合   struct   cal   程序员   isp   

前言

spring框架部分的题目,是我根据Java Guide的面试突击版本V3.0再整理出来的,其中,我选择了一些比较重要的问题,并重新做出相应回答,并添加了一些比较重要的问题,希望对大家起到一定的帮助。

系列文章:

面试题-Java基础

面试题-Java集合

面试题-Java多线程基础、实现工具和可见性保证

面试题-线程池和原子变量

面试题-Java虚拟机

面试题-计算机网络1

面试题-计算机网络-HTTP部分


Spring框架

  1. 什么是 Spring 框架?

    Spring是一种轻量级开发框架,旨在提高开发人员的开发效率以及系统的可维护性。我们说的Spring框架是很多模块的集合,包括核心容器,数据访问集成,web,AOP等等。

  2. @RestController vs @Controller和区别?

    单独使用Controller时,适用于前后端不分离的应用,Controller返回一个model and view。

    RestController将返回数据写入ResponseBody中,Controller+ResponseBody注解一起用和RestController是一样的功能。

  3. 简单说说你对IOC的理解

    IOC叫做控制反转,控制反转是一种设计思想,简单来说就是,本来把程序员控制的流程交给框架控制,框架提供给程序员一些扩展点,程序员实现扩展点就可以方便的调用框架做需要的事情。

    SpringIoc容器是控制反转设计思想的一种实现,程序员把管理对象生命周期的工作交给框架来做,通过配置文件或注解配置需要的对象,在使用的时候跟Spring容器要就可以了。

  4. 谈谈你对AOP的理解

    AOP是面向切面编程,通过把和业务无关,但是却被很多业务模块调用的系统功能封装起来,减少系统的重复代码,提高代码的复用性并提高的系统的维护性。

    比如实际项目中,中间件组的web层代码AOP框架规范是我制定的,统一处理异常,记录日志等操作是放在这个AOP中的,具体用的是ControllerAdvice实现的。

  5. AOP的实现原理你了解吗?简单说说

    AOP的实现最核心的就是利用JDK的动态代理或者cglib实现,项目启动时通过反射获取相关代理信息,在创建对象时,如果被代理对象实现了接口,就是用JDK动态代理,如果没有实现接口,就使用cglib创建被代理对象的子类来实现代理。

  6. Spring的AOP和AspectJ的AOP有什么区别?

    二者都是AOP思想的实现,AspectJ的功能更加强大。

    • springAOP是基于运行时动态增强

    • AspectJ是编译时操作字节码增强,运行时更快

    项目中遇到无法使用Spring来管理对象这种情况时,就会考虑使用AspectJ来增强对象

  7. 为什么需要bean的作用域?

    spring容器需要管理对象的生命周期,spring通过scope作用域的概念给使用者对对象生命周期的更精细的控制。

  8. bean的作用域都有哪些?

    • singleton:单例,会一直存活直到容器关闭,spring默认的对象作用域是单例的
    • prototype:多实例,每次请求都会创建一个新的对象,交给使用方以后,spring就不负责管理对象的生命周期了
    • request:每次请求都创建一个实例,请求完毕后销毁对象
    • session:每个session创建一个实例,session失效后销毁对象实例
  9. Spring 中的单例 bean 的线程安全问题了解吗?

    对单例bean的非静态成员变量的读写会有线程安全问题。

    如果每个线程对成员变量的修改业务上没有关联,可以通过使用ThreadLocal来保存每个线程单独的变量拷贝副本来实现线程安全。

  10. @Component 和 @Bean 的区别是什么?

    • 作用对象不同:component作用于类,bean作用于方法。
    • bean注解适用于引用第三方类库的bean时使用,因为没办法使用component注解用于第三方类库的源码
  11. 将?个类声明为Spring的 bean 的注解有哪些?

    • Component:通用注解
    • Service:Service层的注解
    • Controller:控制层的注解
    • Repository:DAO层的注解
  12. Spring 中的 bean ?命周期?

    • Spring先对bean进行实例化
    • Spring将值和引用注入到相关属性中
    • 如果bean实现了相关的aware接口,spring就会调用set方法把相关需求的实例注入到bean中
    • 如果实现了 beanpostProcessor接口,会调用before方法
    • 如果有postConstruct注解,会调用注解的方法
    • 如果实现了InitialingBean接口,会调用afterPropertiesSet方法
    • 如果指定了init-method,会调用init-method
    • 最后调用beanpostProcessor的after方法
    • 销毁前,会调用DispoableBean的destory方法
    • 如果指定了destroy-method,调用这个方法
    • 最后调用 preConstruct注解修饰的方法

    流程图如下:

技术图片

  1. 你知道spring MVC的工作原理吗?

    • DispatcherServlet接收用户的请求后,根据请求向处理器映射器查询具体处理器
    • 处理器映射器返回对应的处理器链返回给dispatherServlet
    • dispatcherServlet会将请求发送给具体的处理器,并等待处理
    • 处理器处理完毕后,会返回逻辑视图名和模型给前端控制器
    • 前端控制器根据逻辑视图名向视图解析器解析具体的视图
    • 最后视图负责根据模型数据渲染页面,并返回给客户端
  2. MVC的注解都用过什么?

    • RestController:指定控制器
    • RequestMapping,负责编写具体的url,指定post方法,并指定返回内容类型
    • RequestBody:接收通过body传递过来的JSONObject数据参数
    • ControllerAdvice和ExceptionHandler:负责controller的全局异常处理
  3. Spring 框架中?到了哪些设计模式?

    • 单例模式:spring的bean作用域默认是单例的
    • 代理模式:AOP就是代理模式的实现
    • 工厂模式:applicationContext就是对象工厂
    • 观察者模式:spring的事件机制就是观察者模式的一个典型应用
  4. Spring 管理事务的?式有?种?

    • 编程式事务:硬编码
    • 声明式事务:
      • 基于XML
      • 基于注解
  5. Spring事务的隔离级别都有哪些,如何设置?

    和MySQL中的事务隔离级别一样,有四种隔离级别可以设置,还有一种是使用数据库的默认隔离级别

    在transactional注解中设置isolation属性即可

  6. Spring中事务的传播机制有哪些?

    事务的传播机制指的是,如果事务方法互相调用,事务应该如何传播,具体分为三大类:

    • 支持当前事务的:如果有事务,加入当前事务
    • 不支持当前事务的:如果有事务,挂起或者抛出异常
    • 其他情况:嵌套事务,父事务回滚,子事务也会回滚

我们的具体业务中,相关联的业务都写在了同一个service方法中,所以不存在事务的传播机制问题

如果需要拆分方法,那么需要根据具体业务逻辑具体分析使用哪种事务

事务的传播机制

  1. @Transactional(rollbackFor = Exception.class)注解了解吗?

    了解,如果不这么配置,那么事务只会在运行时异常的时候才会回滚,我们也需要cover到非运行时异常的情况。

面试题-Spring框架

标签:级别   over   基础   model   集合   struct   cal   程序员   isp   

原文地址:https://www.cnblogs.com/ging/p/13825819.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!