框架相关面试题

  1. 说说spring的ioc和aop

​ ioc: 控制反转, 交给spring容器创建对象

​ aop: 面向切面编程, 只关注核心业务, 辅助业务抽取通过代理注入

  1. 谈谈动态代理,及springaop中的动态代理

动态代理:可以灵活产生代理对象,去处理辅助业务,

springaop的动态代理:通过后处理器中去动态产生的,

代理选择:默认如果有接口,则使用jdk动态代理; 没有接口则cglib

  1. Spring中通知(增强)有哪几种类型?

    前置:核心功能前的代码执行

    后置:核心功能后的代码执行

    后置异常:出现异常后的代码执行

    环绕:前置+后置

  2. 项目中用的什么框架? springboot还是ssm,谈谈用法

​ 现在使用SSM, 分别是spingMVC-控制层操作, sping-业务层,但可以整合其他框架, mybatis-替代dao层实现

​ springboot: 简化spring容器配置

  1. mybatis和hibernate的区别

​ mybatis: 半自动orm, 易上手

​ hibernate: 全自动orm(无需了解sql语句), 功能强大,但较复杂

  1. MyBatis中#{}和${}符号区别

    #{}: 预编译的执行; 在sql中带’’ , 安全; 如果一个参数,可以省略@param注解 (推荐使用)

    ${}: 字符串的直接替换; 在sql中不带’’, 不安全; 不能省略@param注解

  2. Mybatis解决了JDBC的哪些缺点?

    1. 解决了代码冗余; 2. 提高性能(因为mybatis中有缓存); 3. 只关注sql语句
  3. 谈谈MyBatis中的一级缓存和二级缓存

    一级缓存: sqlSession级别缓存, 默认开启, 同一个sqlSession同构sql查询, 可从缓存中获取

    二级缓存: sqlSessionFactory级别缓存; 手动开启; 通过一个工厂的同构sql查询,可从缓存中取值;

    ​ 应用场景: 用在读多写少的情况, 写的时候会清缓存

  4. 说说MyBatis中ResultMap都是怎么用的

    1. 表字段与实体属性不一致时使用ResultMap做映射
    2. 在多表关联查询时使用
  5. SpringMVC工作原理

    浏览器先访问DispatcherServlet,

    然后交给handlermap找到多个handlerchain

    再交给handlerAdaper适配真正要找的目标handler

    访问到handler,然后再返回ModelAndView

    解析出View对象,最终渲染到前端

  6. 分别说说下面组件型注解的作用

@Component、@Repository、@Service、@Controller

@Component: 通用型主键: 生成通用组件bean

@Repository: 生成dao实现类的bean @Service: 生成业务层实现类的bean

@Controller: 生成控制层bean

  1. 下面请求和参数型注解的作用

@RequestMapping、@RequestParam、@PathViriable、@ResponseBody、@RequestBody

@RequestMapping: 访问的映射路径

@RequestParam: 接收请求参数,将参数名不一致名字,映射成一致的

@PathViriable: 路径参数的匹配

@ResponseBody: 返回字符串或json数据

@RequestBody: 将json数据转实体对象

  1. DI的注解区别: @Autowired、 @Resource

@Autowired: 根据类型进行ioc的注入– byType

@Resource: 根据属性进行ioc的注入,如果属性名不匹配则匹配类型—byName

  1. spring和springMVC的关系,及分别管理哪些bean

spring是父,springMVC是子容器

spring: 管理除controller以外的bean

springMVC: 管理controller的bean

  1. 什么是restful风格,它有什么样的规则

restful是一种接收访问请求的规范;

规则:

​ url路径对应访问资源

​ 不同行为对应不同的请求方式

  1. 谈谈你对Spring的理解

spring可以处理业务层操作, 并且整合其他框架

用法: 1. 核心工厂 2. aop 3. 整合

  1. Spring有什么优点?能帮我做什么?

解耦合, 使得每个层次的独立性及可维护性更强

能做的事情有: 1. 核心工厂 2. aop 3. 整合

  1. spring IOC的优点

控制反转–解耦合,使得程序稳定性更强,容易更换具体实现

  1. Spring框架中的单例bean是线程安全的吗? 为什么

本质上讲,bean是不安全的,因为我们没有处理过线程安全;

但是多数的用法是不需要处理线程安全的,哪怕是并发操作,因为我们常常使用的是service,dao的bean, 这些bean对象不会改变对象的存值; 如果使用非service,dao我们只需要把单例改成多例即可

  1. 请解释下Spring中AOP思想

面向切面; 核心功能与辅助功能分离, 通过代理对象注入辅助业务;达到的效果是,核心业务更纯粹,辅助业务可复用。解耦合的思想,扩展性和维护性更强。

  1. spring中如何配置事务的? 如果出现非运行时异常如何进行回滚?

容器配置事务: 事务管理器引入数据源; 事务增强配置属性规则; 将切点和事务增强绑定形成切面

出现非运行时异常的回滚方式:

  1. 将非运行时异常转运行时异常

  2. 配置属性: rollback-for: Exception

  3. Spring 事务隔离级别有哪些?分别有哪些异常出现?

    read-uncomit : 脏读, 不可重复读, 虚读 都可能出现

    read-commit : 不可重复读, 虚读 可能出现

    repeatable-read : 虚读 可能出现(mysql默认)

    serialize-read: 都不出现

  4. Spring MVC 的常用注解有哪些? 并说明用途

@Controller:产生controller的容器bean

@RestController: @Controller与@ResonpseBody的组合功能

@Requestmapping:控制层(模块路径)和handler的映射路径

@ResponseBody: 返回字符串或json数据,无需视图解析

@requestBody: 解析前端传入的json数据,并转为参数对象

@PathValible:将路径变量值注入到参数中

  1. Mybatis是否支持延迟加载? 请举个例子

支持, 在嵌套查询中, 如果用不到从表数据, 则无需去查询

  1. Mybatis的动态sql是如何执行批量删除操作的? 请用案例说明

    delete from user where id in

    ​ #{id}