Java面试题以及答案精选(架构师面试题)-Spring专题

此专题为Spring相关的面试题希望对大家有所帮助:

1. 开发中主要使用 Spring 的什么技术 ?

①. IOC 容器管理各层的组件 ②. 使用 AOP 配置声明式事务 ③. 整合其他框架

2. 简述 AOP 和 IOC 概念 

   AOP: Aspect Oriented Program, 面向(方面)切面的编程;Filter(过滤器) 也是一种 AOP. AOP 是一种新的方法论, 是对传统 OOP(Object-Oriented Programming, 面向对象编程) 的补充. AOP 的主要编程对象是切面(aspect), 而切面模块化横切关注点.可以举例通过事务说明.  

     IOC: Invert Of Control, 控制反转. 也成为 DI(依赖注入)其思想是反转 资源获取的方向. 传统的资源查找方式要求组件向容器发起请求查找资源.作为 回应, 容器适时的返回资源. 而应用了 IOC 之后, 则是容器主动地将资源推送 给它所管理的组件,组件所要做的仅是选择一种合适的方式来接受资源. 这种行 为也被称为查找的被动形式

3. 在 Spring 中如何配置 Bean ? 


 Bean 的配置方式: 通过全类名(反射)、通过工厂方法(静态工厂方法 & 实 例工厂方法)、FactoryBean

4. IOC 容器对 Bean 的生命周期: 


 ①. 通过构造器或工厂方法创建 Bean 实例 ②. 为 Bean 的属性设置值和对其他 Bean 的引用 ③ . 将 Bean 实 例 传 递 给 Bean 后 置 处 理 器 的 postProcessBeforeInitialization 方法 ④. 调用 Bean 的初始化方法(init-method) ⑤ . 将 Bean 实 例 传 递 给 Bean 后 置 处 理 器 的 postProcessAfterInitialization 方法 ⑦. Bean 可以使用了 ⑧. 当容器关闭时, 调用 Bean 的销毁方法(destroy-method) 

 

5. Spring MVC 比较 Struts2 

①. Spring MVC 的入口是 Servlet, 而 Struts2 是 Filter ②. Spring MVC 会稍微比 Struts2 快些. Spring MVC 是基于方法设计, 而 Sturts2 是基于类, 每次发一次请求都会实例一个 Action. ③. Spring MVC 使用更加简洁, 开发效率 Spring MVC 确实比 struts2 高: 支持 JSR303, 处理 ajax 的请求更方便 ④. Struts2 的 OGNL 表达式使页面的开发效率相比 Spring MVC 更高些.

6.Spring MVC 的运行流程

①. 在整个 Spring MVC 框架中, DispatcherServlet 处于核心位置,负 责协调和组织不同组件以完成请求处理并返回响应的工作 ②. SpringMVC 处理请求过程:  > 若一个请求匹配 DispatcherServlet 的请求映射路径(在 web.xml 中指定), WEB 容器将该请求转交给 DispatcherServlet 处理  > DispatcherServlet 接收到请求后, 将根据请求信息(包括 URL、HTTP 方法、请求头、请求参数、Cookie 等)及 HandlerMapping 的配置找到处理请求 的处理器(Handler). 可将 HandlerMapping 看成路由控制器,将 Handler 看成 目标主机。  > 当 DispatcherServlet 根据 HandlerMapping 得到对应当前请求的 Handler 后,通过 HandlerAdapter 对 Handler 进行封装,再以统一的适配器 接口调用 Handler。  > 处理器完成业务逻辑的处理后将返回一个 ModelAndView 给 
                     
3 DispatcherServlet, ModelAndView 包含了视图逻辑名和模型数据信息  > DispatcherServlet 借助 ViewResoler 完成逻辑视图名到真实视图 对象的解析  > 得到真实视图对象 View 后, DispatcherServlet 使用这个 View 对 ModelAndView 中的模型数据进行视图渲染 

7.说出 Spring MVC 常用的 5 个注解:

@RequestMapping 、 @PathVariable 、 @RequestParam 、 @RequestBoy 、 @ResponseBody

@RequestParam 、 @RequestBoy区别,面试的过程中被问到过请重视。。

  • 在GET请求中,不能使用@RequestBody。
  • 在POST请求,可以使用@RequestBody和@RequestParam,但是如果使用@RequestBody,对于参数转化的配置必须统一。

举个例子,在SpringMVC配置了HttpMessageConverters处理栈中,指定json转化的格式,如Date转成‘yyyy-MM-dd’,则参数接收对象包含的字段如果是Date类型,就只能让客户端传递年月日的格式,不能传时分秒。因为不同的接口,它的参数可能对时间参数有不同的格式要求,所以这样做会让客户端调用同事对参数的格式有点困惑,所以说扩展性不高。

如果使用@RequestParam来接受参数,可以在接受参数的model中设置@DateFormat指定所需要接受时间参数的格式。

另外,使用@RequestBody接受的参数是不会被Servlet转化统一放在request对象的Param参数集中,@RequestParam是可以的。

综上所述,一般情况下,推荐使用@RequestParam注解来接受Http请求参数。

8. 如何使用 SpringMVC 完成 JSON 操作

①. 配置 MappingJacksonHttpMessageConverter ②. 使用 @RequestBody 注解或 ResponseEntity 作为返回值 

你可能感兴趣的:(Java面试笔试题)