框架相关面试题
- 说说spring的ioc和aop
ioc: 控制反转, 交给spring容器创建对象
aop: 面向切面编程, 只关注核心业务, 辅助业务抽取通过代理注入
- 谈谈动态代理,及springaop中的动态代理
动态代理:可以灵活产生代理对象,去处理辅助业务,
springaop的动态代理:通过后处理器中去动态产生的,
代理选择:默认如果有接口,则使用jdk动态代理; 没有接口则cglib
-
Spring中通知(增强)有哪几种类型?
前置:核心功能前的代码执行
后置:核心功能后的代码执行
后置异常:出现异常后的代码执行
环绕:前置+后置
-
项目中用的什么框架? springboot还是ssm,谈谈用法
现在使用SSM, 分别是spingMVC-控制层操作, sping-业务层,但可以整合其他框架, mybatis-替代dao层实现
springboot: 简化spring容器配置
- mybatis和hibernate的区别
mybatis: 半自动orm, 易上手
hibernate: 全自动orm(无需了解sql语句), 功能强大,但较复杂
-
MyBatis中#{}和${}符号区别
#{}: 预编译的执行; 在sql中带’’ , 安全; 如果一个参数,可以省略@param注解 (推荐使用)
${}: 字符串的直接替换; 在sql中不带’’, 不安全; 不能省略@param注解
-
Mybatis解决了JDBC的哪些缺点?
- 解决了代码冗余; 2. 提高性能(因为mybatis中有缓存); 3. 只关注sql语句
-
谈谈MyBatis中的一级缓存和二级缓存
一级缓存: sqlSession级别缓存, 默认开启, 同一个sqlSession同构sql查询, 可从缓存中获取
二级缓存: sqlSessionFactory级别缓存; 手动开启; 通过一个工厂的同构sql查询,可从缓存中取值;
应用场景: 用在读多写少的情况, 写的时候会清缓存
-
说说MyBatis中ResultMap都是怎么用的
- 表字段与实体属性不一致时使用ResultMap做映射
- 在多表关联查询时使用
-
SpringMVC工作原理
浏览器先访问DispatcherServlet,
然后交给handlermap找到多个handlerchain
再交给handlerAdaper适配真正要找的目标handler
访问到handler,然后再返回ModelAndView
解析出View对象,最终渲染到前端
-
分别说说下面组件型注解的作用
@Component、@Repository、@Service、@Controller
@Component: 通用型主键: 生成通用组件bean
@Repository: 生成dao实现类的bean @Service: 生成业务层实现类的bean
@Controller: 生成控制层bean
- 下面请求和参数型注解的作用
@RequestMapping、@RequestParam、@PathViriable、@ResponseBody、@RequestBody
@RequestMapping: 访问的映射路径
@RequestParam: 接收请求参数,将参数名不一致名字,映射成一致的
@PathViriable: 路径参数的匹配
@ResponseBody: 返回字符串或json数据
@RequestBody: 将json数据转实体对象
- DI的注解区别: @Autowired、 @Resource
@Autowired: 根据类型进行ioc的注入– byType
@Resource: 根据属性进行ioc的注入,如果属性名不匹配则匹配类型—byName
- spring和springMVC的关系,及分别管理哪些bean
spring是父,springMVC是子容器
spring: 管理除controller以外的bean
springMVC: 管理controller的bean
- 什么是restful风格,它有什么样的规则
restful是一种接收访问请求的规范;
规则:
url路径对应访问资源
不同行为对应不同的请求方式
- 谈谈你对Spring的理解
spring可以处理业务层操作, 并且整合其他框架
用法: 1. 核心工厂 2. aop 3. 整合
- Spring有什么优点?能帮我做什么?
解耦合, 使得每个层次的独立性及可维护性更强
能做的事情有: 1. 核心工厂 2. aop 3. 整合
- spring IOC的优点
控制反转–解耦合,使得程序稳定性更强,容易更换具体实现
- Spring框架中的单例bean是线程安全的吗? 为什么
本质上讲,bean是不安全的,因为我们没有处理过线程安全;
但是多数的用法是不需要处理线程安全的,哪怕是并发操作,因为我们常常使用的是service,dao的bean, 这些bean对象不会改变对象的存值; 如果使用非service,dao我们只需要把单例改成多例即可
- 请解释下Spring中AOP思想
面向切面; 核心功能与辅助功能分离, 通过代理对象注入辅助业务;达到的效果是,核心业务更纯粹,辅助业务可复用。解耦合的思想,扩展性和维护性更强。
- spring中如何配置事务的? 如果出现非运行时异常如何进行回滚?
容器配置事务: 事务管理器引入数据源; 事务增强配置属性规则; 将切点和事务增强绑定形成切面
出现非运行时异常的回滚方式:
-
将非运行时异常转运行时异常
-
配置属性: rollback-for: Exception
-
Spring 事务隔离级别有哪些?分别有哪些异常出现?
read-uncomit : 脏读, 不可重复读, 虚读 都可能出现
read-commit : 不可重复读, 虚读 可能出现
repeatable-read : 虚读 可能出现(mysql默认)
serialize-read: 都不出现
-
Spring MVC 的常用注解有哪些? 并说明用途
@Controller:产生controller的容器bean
@RestController: @Controller与@ResonpseBody的组合功能
@Requestmapping:控制层(模块路径)和handler的映射路径
@ResponseBody: 返回字符串或json数据,无需视图解析
@requestBody: 解析前端传入的json数据,并转为参数对象
@PathValible:将路径变量值注入到参数中
- Mybatis是否支持延迟加载? 请举个例子
支持, 在嵌套查询中, 如果用不到从表数据, 则无需去查询
-
Mybatis的动态sql是如何执行批量删除操作的? 请用案例说明
delete from user where id in
#{id}