spring+SpringMVC+mybatis面试总结

1,主键和索引的区别是什么?

  • 主键的特殊的索引,不能重复,不能为空,一个表只能有一个主键(从数据库完整性的角度出发)
  • 索引:从提高查询速度的角度出发,相当于字典的目录,一个表可以有多个索引。索引是基于一个列创建的,索引他把这些值存储在b树中。


2,为什么使用B树做索引的数据结构?

  • 因为它的时间复杂度低是对数级别的,查找插入,删除速度快,关键字有序查找时可以减少IO的次数(树的高度低)
  • B+树比B树,占用的磁盘空间更小,IO读写代价更低。
  • 主键外键必须有索引,链接的字段,where字句的字段,大表中的小字段建立索引


3,ACID指的是什么:

  •     A:是原子性,每个事物都是不可分割的单元,要么所有操作都执行要么都没有执行
  •     C:是一致性,数据库要一直处于一致的状态,强调数据的可见性,中间状态的数据不可见,最初和最终的状态可见。且保持一致。总的前没有变
  •     I:隔离性,多个事物并发执行时,一个事物的运行结果不能影响其它事物。
  •     D:永久性:已经执行的操作就永久生效(系统崩溃也不会丢失数据)

4,表级锁与行级锁的区别?

  • 表级锁:开销小,加锁快,无死锁。锁粒度大,并发度低
  • 行级锁相反。

 

5,数据库并发时可能出现的问题有哪些?

 

  • 脏读:A添加了数据但没有提交事物,B却查到了A添加的数据
  • 不可重复读:A修改了数据,导致B事物两次查询的结果不一致
  • 幻读:A删除或者添加数据,导致B查询的结果不一致
  • 解决方法:读未提交——读提交——可重复读——窜行化

6,删除表关键字有哪些,他们的区别是?

  • 有truncate,delete,drop
  • truncate 和delete不删除表结构,Drop删除表结构,
  • truncate是直接清空表中的记录速度快(和事物无关) 和delete是一条一条的删除

 


1,为什么要使用spring?

  • 为了方便解耦,将所有的对象创建和依赖关系的维护交spring容器管理
  • spring还支持AOP编程,可以很方便的实现对程序进行程序拦截,运行监控的等功能
  • spring还提供声明式事物的支持(通过配置完成对事物的支持,不需要手动编程实现)
  • 方便测试,spring对Junit4支持,可以通过注解来测试测序
  • 方便集成各种优秀的框架。


2,你是如何理解AOP的

  • 我们平常写核心代码的时候是纵向编程的,直接跟着流程往下写。但是写到一些模块的时候,比如权限控制,日志记录,事物控制时,会出现大量的重复代码,于是我就把相关的重复代码抽出来写出一个公共的代码块,并且把它交个spring容器管理,实现解耦。(Active,jointPoint,pointCut,Aspect是前面两者的结合),感觉像装饰器模式,通过其它公用的方法对一些方法进行了增强。
  • AOP是面向切面编程,是OOP编程的有效补充,可以将一些系统性相关的工作独立实现,

3,如何理解IOC控制反转?

  • 为了降低程序中雷雨类之间的耦合吗,我们把对象交给spring容器来管理(工厂模式,代理模式)


4,spring有哪些模块?

  • core:spring的核心类库,spring的所有功能都依赖核心类库,只要实现的是IOC功能
  • aop:面向切面编程,提供拦截器机制
  • orm:对象关系映射,是一种将内存中的对象保存到关系型数据库中的技术。spring本身并不对orm进行实现,仅对常见的orm框架进行封装,并对它进行管理
  • dao:提供对JDBC的支持,对JDBC进行封装,并且可以统一管理JDBC的事物
  • mvc:提供了springMVC进行web开发
  • web:提供了对springMVC框架的支持,Structs。可以在这些框架前后配置拦截器
  • context:提供框架式的bean访问方式(注解注入),和context来获取配置文件对象,对配置文件进行初始化时得到bean中的对象


5,spring常用的注入方式有哪些?

  • setter属性注入
  • 构造方法注入
  • 注解方式注入


6,spring中的bean是线程安全的吗?

  • bean默认是单利模式,spring框架并没有对单例的bean进行多线程封装处理,对于dao类基本上是无状态,所以某种程度上bean是安全的,但是对于view model对象是有状态的,就需要我们去保证

7,spring支持的5种作用域如下:

  • singleton:spring ioc 容器中只存在一个bean实例,bean以单例模式存在,是系统的默认值
  • prototype:每次从容器中调用Bean的时候就创建一个新的实例,getBean()相当于new Bean()操作
  • request:每次发送http请求时就会创建一个bean
  • session:同一个http session共享一个bean实例
  • global-session:用于portlet容器

8,spring自动装配bean有哪些方式?

  • no:表示没有自动装配,使用显示的bean引用进行装配
  • byName:根据bean的名称进行注入
  • byType:根据类型注入依赖项
  • 构造函数:需要配置大量的参数

9,spring的事物实现有哪些方式

  • 事物声明:xml配置,注解@Transaction
  • 编码方式:提供编码的形式管理和维护事物


10,说一下spring的事物隔离?
有5大事物隔离

  • 1,默认是isolation_default:使用数据库的设置,其它四个隔离和数据库的隔离是一致的
  • 2,isolation_read_uncommitted:未提交读,最低的隔离级别,会出现幻读,不可重复读,脏读
  • 3,isolation_read_committed:提交读,消除了脏读
  • 4,isolation_repeaTable_read:可重复读。默认
  • 5,isolation_seriable:序列化


11,说一下spring的运行流程:

  • springMVC将请求发给DispatcherSercelet调度控制器,调度器查询一个或者多个处理映射,找到处理请求的controller,调度处理器再把请求交给controller,controller进行业务逻辑的处理,会返回一个ModelAndView.
  • 调度控制器查询一个或者多个视图解析器,找到ModelAndView的指定视图对象,视图对象负责渲染页面返回给客户端

12,springMVC有哪些组件?

  • 前端控制器:DispatcherSercelet
  • 映射控制器:HandlerMapping
  • 处理器:Controller
  • 模型和视图:ModelAndView
  • 视图解析器:viewResolver

13@RequestMapping的作用是什么?
用来处理请求映射的注解,可以用在类或者注解上,用于类上表示类中的所有请求的方法以该地址作为父路径
它有6大属性:

  • value:指定请求的实际地址,可以是url template的模式
  • method:指定请求的method类型:get post put delete
  • consumes:指定处理请求的提交内容类型(content-type)例如:application/json,text/html
  • produces: 指定返回的类型,只能是返回request请求头中的accept类型中包含的指定类型才能返回
  • params:指定request中必须包含某些参数值才能让该方法进行处理
  • @Autowired的作用是什么?
  • 可以对类成员变量,方法及其构造函数进行标注,完成自动装配的任务。需要调用bean中的对象时,直接使用该注解进行注入

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

  • #{}:把传入的数据当成一个字符串,会对自动传入的数据加一个双引号
  • ${}:不会加双引号,所以它无法防止sql注入,一般用于传入数据库对象,表名,列名

16,mybatis有几种分页方式?

  • 逻辑分页:使用它自带的RowBounds进行分页,一次性查询大量的数据(不是所有的数据),然后进行分页
  • 物理分页:手动写sql分页或使用PageHandler,去查询数据库指定条数的分页形式

17,mybatis是否支持延迟加载?延迟加载的原理是什么?

  • 支持延迟加载,需要设置lazyLoadingEnablle=true
  • 延迟加载的原理:

18,说一下mybatis的一级缓存和二级缓存

  •  

 

19,mybatis和hibernate的区别有哪些?

 

20,mybatis有哪些执行器?

 

21,mybatis的分页插件的实现原理是什么?

 

22,mybatis如何编写一个自定义插件?

 

 

 

 

 

 

 


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值