1:谈谈对Spring的理解:
以玩笑话来说Spring就是一家公司,在者还有很多非常好用的Spring系列的产品,Spring就是一个轻量级的开源框架也可说是一 个集成框架,(像 SpringMVC,MyBatis,Hibernate,Struts,Shiro等框架就被Spring所集成),在Spring中有两个核心就是 IOC(控制反转)和 AOP(面向切面)
2:简述 IOC(控制反转):
Java对象的创建交给了Spring管理,也就是说把控制权交给了第三方管理,这就叫控制反转
列如:用JSPServlet来做的项目的话,每次登录都会new新的对象如果用Spring的Bean标签,从而节约了内存空间的占用,而且Spring IOC的底层就是单例模式,提高性能(只写一次,N多个人调用)
3:简述 AOP (面向切面):AOP的底层就是过滤器 主要体现在事务和日志上 (简化了大量的代码)
日志:在做任何一个项目的时候有权限问题中就会使用到日志(通过过滤来实现日志)
事务:在操作增删改的时候以前是需要手动开启或者关闭事务,但是AOP处理事务的好处就在于它能自动管理事务,因为AOP 的底层就是过滤器,然后是通知之后就是代理,使用动态代理自动检测增删改功能且自动提交和关闭事务
AOP在底层的是通知,通知在底层就是代理而代理有分为静态代理和动态代理,默认是动态代理,灵活性高
4:SpringMVC 的工作流程
(1):客户发送请求到Dispatcher Servlet
(2):Dispatcher Servlet 收到请求并调用HandlerMapping处理器
(3):处理映射器找到具体的处理器,生成处理对象返回给Dispatcher Servlet
(4):Dispatcher Servlet调用HandlerAdapter处理器适配器
(5):HandlerAdapter经过适配调用具体的处理器Controller
(6):Controller进行业务处理后返回一个ModelAndView
(7):HandlerAdapter将Controller执行的结果ModelAndView返回给Dispatcher Servlet
(8):Dispatcher Servlet将ModelAndView返回给ViewResolver视图解析器
(9):ViewResolver解析返回给具体的View
(10):view进行渲染视图并响应给用户
5:SpringMVC是怎么防止SQL注入
使用SpringMVC的拦截器实现SQL注入
6:SpringMVC和Struts的区别如下
(1):SpringMVC的核心处理入口是Servlet Struts2的核心处理是过滤器(StrutsPrepareAndExecuteFilter)
(2):SpringMVC是基于方法直接访问 Struts2是基于类在基于方法,每发一次请求就会实例一个Action
(3):SpringMVC是非继承 Struts2可继承可不继承(侵入非侵入)
(4):SpringMVC通过注解 Struts2通过配置
7:Hibernate与 MyBatis的区别:
(1):Hibernate属于全自动的重量级框架,SQL语句经过了封装可以直接使用,无缝移植,开发效率高但是性能低
(2):Mybatis属于半自动化的轻量级的框架,SQL语句要自己手动完成,扩展性和移植性差但是性能高
(3):SQL语句优化Hibernate不如Mybatis
(4):都属于ORM框架,Hibernate的关系映射交给了Hibernate框架管理
8:一级缓存和二级缓存(默认是一级缓存)
一级缓存:又称是Session级别缓存,必须用同一个Session,多个会出现问题
二级缓存:又称SessionFactory级别的缓存,专门生成Session(通过配置文件开启二级缓存)
9:MyBatis中 #{} 与 ${}的区别:
#{}:#{}解析传过来参数带单引号 防止SQL注入(预编译,建议使用)
${} :${}解析穿过来的参数值不带单引号 存在SQL语句注入问题
10:Hibernate中的对象状态(三种):
(1)临时状态(新建状态):刚创建出来的对象还没使用,存在内存中一关就没了就是临时状态
(2) 持久状态(又被称托管):把对象存放在数据库,数据库有Session里面就有(把新建状态转换成持久状态:session.Sava)
(3) 游离状态 (又被称脱管):数据库里面有数据但是session里面的数据已经不在了
11:获取Session的两种方式:
(1)通过getSession() 打开Session但是多次访问会出现堵塞,需要手动关闭Session
(2) 通过getCurrentSession()获取当前Session,不需要手动关闭Session