面试知识总结
框架
Spring框架
1.我对spring框架的理解
主要理解IOC和AOP容器
IOC容器:简单的来说就是把创建对象的控制权转移到spring IOC容器中也就是控制反转,容器根据配置文件去创建和管理各个实例之间的依赖关系
IOC容器中存放着Spring的Bean对象,也就是IOC管理的java类,生命周期也是容器管理
AOP容器:关键在于代理模式(静态代理,动态代理),每次运行时都会生成一个AOP代理对象,在特定的切点实现方法的增强并回调原对象的方法,来实现事务控制以及日志的输出
2.spring框架的设计模式
工厂模式:就是不会在对外暴露创建对象的逻辑,只给一个接口调用
单例模式:在spring的配置文件中设置bean为默认的单例模式,也就是
SpringMVC
1.我对SpringMVC的理解
MVC就是三个单词的缩写
mode:模型(处理业务,封装实体service+dao+entity)
view:视图( 做界面的展示 jsp,html……)
controller:控制器(接受请求,调用模型,返回视图)
简单的来说就是spring的增强,可以支持各种视图技术,明确的分工以及各代码的职责更加明确
2.springMVC的运行原理
第一步:用户发起请求到前端控制器(DispatcherServlet)
第二步:前端控制器请求处理器映射器(HandlerMappering)去查找处理器(Handle):通过xml配置或者注解进行查找
第三步:找到以后处理器映射器(HandlerMappering)像前端控制器返回执行链(HandlerExecutionChain)
第四步:前端控制器(DispatcherServlet)调用处理器适配器(HandlerAdapter)去执行处理器(Handler)
第五步:处理器适配器去执行Handler
第六步:Handler执行完给处理器适配器返回ModelAndView
第七步:处理器适配器向前端控制器返回ModelAndView
第八步:前端控制器请求视图解析器(ViewResolver)去进行视图解析
第九步:视图解析器像前端控制器返回View
第十步:前端控制器对视图进行渲染
第十一步:前端控制器向用户响应结果
3.关于springMVC常见的面试题总结
(1),为什么要使用springMVC?
可以支持各种视图技术,更清楚的分区,使代码功能更明确
(2),springMVC怎么设定重定向和请求转发?
重定向:在返回值前面加"redirect"
请求转发:在返回值前面加"forWord"
(3),SpringMVC怎么和AJAX相互调用的?
导入Jackson.jar的jar包,在配置文件中配置json的映射,如果想要直接返回Object,list,方法上要加@ResponseBody注解
(4),SpringMVC的控制器是不是单利模式,如果是,有什么问题,怎么解决?
是单利模式,所以在多线程访问的时候会有安全问题,不要用同步,会影响性能,解决方案是在控制器里面不能写字段
(5),SpringMVC常用的注解有哪些?
@RequestMapping:用于处理请求URL映射的注解,可以用于类或方法上
@RequestBody:注解实现http请求的json数据,将json转换为java对象
@ResponseBody:注解将实现controller方法返回对象转换为json对象响应给客户;
@RequestParam:将请求的阐述绑定到方法中的参数上,
@PathVariable:用于对应restful风格URL中的参数
(6),怎么样在方法中得到Request或者session?
直接在方法的形参中声明request,SpringMVC就自动把request对象传入
(7),如何解决get和post乱码问题?
post乱码:配置过滤器为UTF-8
get请求乱码:修改Tomcat配置文件添加编码与工程编码一致
Mybatis 框架
1,什么是Mybatis框架
(1),是一个半ORM(对象关系映射)框架,每部封装了JDBC,程序员只需要关注SQL语句本身
(2),可以使用xml或者注解来配置和映射原生信息,
(3),通过xml文件或注解的方式将要执行的statement配置起来,并通过java对象和statement中的SQL的动态参数进行映射生成最终的SQL语句,最后由mybatis框架执行SQL并将结果映射为java对象并返回
2,#{}和KaTeX parse error: Expected 'EOF', got '#' at position 13: {}的区别是什么? #̲{}是预编译处理,{}是字符串的替换
Mybatis在处理#{}时,会将SQL中的#{}替换为?号,调用PreparedStatementolk,的set方法来赋值
Mybatis在处理
时
,
就
是
把
{}时,就是把
时,就是把{}替换成变量的值
使用#{}可以有效地防止SQL注入,提高系统的安全性
3,为什么说Mybatis是半自动ORM映射工具?它与全自动的区别在哪里?
Hibernate属于全自动ORM映射工具,使用Hibernate查询关联对象时,可以根据对象关系模型获取,所以他是全自动的,而mybatis在查询关联对象或关联集合对象时,需要手动编写SQL来完成,所以称mybatis为半自动ORM映射工具
4,Mybatis框架的作用?
就是以面向对象的方式来操作数据库
5,什么是SQL注入问题?
可以绕过应用程序用恶意的SQL语句对数据库进行操作