当年我被面试官常问到的SSM

  • 时间:
  • 来源:互联网
  • 文章标签:

    • 使用Spring框架的好处是什么?
      • 问题回答
      • 辅助理解
    • 说说spring的事务管理?
      • 问题回答
      • 简要回答
    • 说一下spring的AOP?
      • 问题回答
    • spring用到的设计模式?
      • 问题回答
    • #{}和${}的区别是什么?
      • 问题回答
      • 简单回答
    • spring框架中bean的作用域有几种?
      • 问题回答
    • SpringMvc常见注解?
      • 问题回答
    • SpringMVC工作原理/工作流程
      • 问题回答
      • 辅助理解

使用Spring框架的好处是什么?

问题回答

  1. 轻量:Spring 是轻量级,无侵入。
  2. 控制反转(IOC):Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们。
  3. 面向切面的编程(AOP):Spring支持面向切面的编程,并且把应用业务逻辑和系统服务分开。
  4. 容器:Spring 包含并管理应用中对象的生命周期和配置。
  5. MVC框架:Spring的WEB框架是个精心设计的框架,是Web框架的一个很好的替代品。
  6. 事务管理:Spring 提供一个持续的事务管理接口,可以通过配置文件或者注解轻松实现。
  7. 异常处理:Spring提供了全局异常处理功能,只需要声明一个全局异常处理器就可以捕获所有异常信息。

辅助理解

  1. 知道spring的前身
    所谓轻量级就是spring框架在系统初始化的时候不用加载所有的服务,为系统节约了资源!而EJB框架就是重量级的,每次初始化都必须加载所有的服务!

  2. 知道耦合度、松耦合、紧耦合、解耦
    耦合度就是对象之间的依赖性
    松耦合:A和B分别独立实现,各自执行独立的功能,代码中没有互相调用,如果需要互相配合,则由第三者来控制它们之间的互相访问。Spring应用中的第三方就是Spring容器。
    紧耦合方式:A和B分别独立实现,但二者之间可以互相访问。

  3. 回顾spring的异常处理
    全局异常类,类上添加@ControllerAdvice和@ResponseBody返回json参数。也可以单独使用@RestControllerAdvice。且spring会扫描到此注解,所以无需配置注入bean 在方法上添加@ExceptionHander(value = “需拦截异常的class”),可以单独拦截某一个异常,也可以全拦截Excepiton。

 @RestControllerAdvice
 public class GlobalExceptionHandler {
     @ExceptionHandler(value = Exception.class)
     public ResultBean allExceptionHandler(Exception ex){
 
    }
     @ExceptionHandler(value = 自定义异常.class)
     public ResultBean exceptionHandler(Exception ex){
 
    }
 }

说说spring的事务管理?

问题回答

  1. spring支持编程式事务管理和声明式事务管理两种方式

  2. 现在主流的是声明式事务管理方式,分为基于 < tx> 和 < aop> 命名空间的声明式事务管理和基于 @Transactional的方式将声明式事务管理

  3. 基于 和 命名空间的声明式事务,可以充分利用切点表达式的强大支持,使得管理事务更加灵活。

  4. 基于 @Transactional 的方式将声明式事务管理,简化到了极致。开发人员只需在配置文件中加上一行配置,然后在需要实施事务管理的方法或者类上使用 @Transactional 指定事务规则即可实现事务管理

  5. 声明式事务,是建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。

  6. 声明式事务最大的优点就是不需要通过编程的方式管理事务,这样就不需要在业务逻辑代码中掺杂事务管理的代码,只需在配置文件中做相关的事务规则声明(或通过基于@Transactional注解的方式),便可以将事务规则应用到业务逻辑中。

简要回答

  1. spring支持编程式事务管理和声明式事务管理两种方式

  2. 声明式事务管理分为基于 <tx> 和<aop> 命名空间的声明式事务管理和基于 @Transactional 的方式将声明式事务管理

说一下spring的AOP?

问题回答

  1. AOP,也就是面向切面编程;其次还有面向过程和面向对象编程。

  2. Spring AOP实现主要是通过代理类的方式实现,有jdk动态代理和CGLIB代理两种方式。

  3. ava动态代理只能够对接口进行代理,不能对普通的类进行代理(因为所有生成的代理类的父类为Proxy,Java类继承机制不允许多重继承);CGLIB能够代理普通类;

  4. Spring内部,发现如果目标对象没有实现接口,则默认会采用CGLIB代理; 如果目标对象实现了接口,默认会采用Java动态代理;

  5. AOP用到的动态代理是对方法增强的方式之一。

  6. AOP的典型应用就是事务管理 。

spring用到的设计模式?

问题回答

  1. 工厂设计模式 : Spring使用工厂模式通过 BeanFactoryApplicationContext 创建 bean 对象。
  2. 代理设计模式 : Spring AOP 功能的实现。
  3. 单例设计模式 : Spring 中的 Bean 默认都是单例的。
  4. 模板方法模式 : Spring 中 jdbcTemplatehibernateTemplate 等以 Template 结尾的对数据库操作的类,它们就使用到了模板模式。
  5. 包装器设计模式 : 我们的项目需要连接多个数据库,而且不同的客户在每次访问中根据需要会去访问不同的数据库。这种模式让我们可以根据客户的需求能够动态切换不同的数据源。
  6. 观察者模式: Spring 事件驱动模型就是观察者模式很经典的一个应用。
  7. 适配器模式 :Spring AOP 的增强或通知(Advice)使用到了适配器模式、spring MVC 中也是用到了适配器模式适配Controller

#{}和${}的区别是什么?

问题回答

  1. #{}是预编译处理,可以有效的防止SQL注入。底层实现依靠PreparedStatement,预编译的时候会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值的时候都会加上2个单引号。
  2. ${}是直接字符串替换,所以有sql注入的风险。like ,order by ,where
  3. 两者都可以使用的时候优先用#{},比如where查询,like查询选择用#{}。
  4. order by 字段,from表名称,只能用${}
  5. #{}可以对数据类型进行自动转换,而${}将所有数据都当做字符串处理

简单回答

  1. #{}可以防止sql注入
  2. 能用#{}不用${}
  3. order by 字段,from 表名称,只能用${}

spring框架中bean的作用域有几种?

问题回答

  1. singleton(单例模式)
  2. prototype(原型模式)
  3. request(HTTP请求)
  4. session(会话)
  5. global-session(全局会话)

SpringMvc常见注解?

问题回答

  1. @Controller:用于定义控制器类
  2. @ResponseBody:表示方法的返回结果直接写入HTTP response body中
  3. @PathVariable:获取路径参数
  4. @RequestParam:用在方法的参数前面
  5. @RequestBody:请求的json转化为bean去接收
  6. @RestController:是@Controller和@ResponseBody的合集
  7. @RequestMapping:提供路由信息,负责URL到Controller中的具体函数的映射
  8. @GetMapping:是@RequestMapping(method = RequestMethod.GET)的缩写。不支持
  9. @RequestMapping的自定义属性。
  10. @PostMapping:是@RequestMapping(method = RequestMethod.POST)的缩写。不支持
  11. @RequestMapping的自定义属性。
  12. @ControllerAdvice:统一处理异常。
  13. @ExceptionHandler:用在方法上表示遇到这个异常就执行以下方法。

SpringMVC工作原理/工作流程

问题回答

  1. 用户发送请求至前端控制器DispatcherServlet;
  2. DispatcherServlet收到请求后,调用HandlerMapping处理器映射器,请求获取Handle;
  3. 处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并
    返回给DispatcherServlet;
  4. DispatcherServlet 调用 HandlerAdapter处理器适配器;
  5. HandlerAdapter 经过适配调用 具体处理器(Handler,也叫后端控制器);
  6. Handler执行完成返回ModelAndView;
  7. HandlerAdapter将Handler执行结果ModelAndView返回给DispatcherServlet;
  8. DispatcherServlet将ModelAndView传给ViewResolver视图解析器进行解析;
  9. ViewResolver解析后返回具体View;
  10. DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)
  11. DispatcherServlet响应用户。

辅助理解

  1. 看图
    在这里插入图片描述
  2. 核心类
    DispatcherServletHandlerMappingHandlerAdapterHandlerModelAndViewViewResolver

本文链接http://www.taodudu.cc/news/show-2450994.html