SSM面试题
1.谈谈什么是MVC
MVC是Model-View-Controller
的简称,MVC是一种设计模式,它强制性把应用程序的输入,处理和输出分开。MVC中的模型、视图、控制器它们分别负责不同的任务视图:
视图是用户看到并与之间互的界面。视图向用户显示相关数据,并接受用户的输入。视图不进行任何业务逻辑处理。模型:
模型表示业务数据和业务处理,相当于JavaBean。一个模型能够为多个视图提供数据,这提高了应用程序的重用性。控制器:
当用户点击web页面上的提交按钮时,控制器接受请求并调用相应的模型去处理请求,然后根据处理的结果返回相应的视图来显示处理的结果。MVC的处理过程:
首先控制器接受用户的请求,调用相应的模型来处理业务逻辑,并返回数据给控制器,控制器会调用相应的视图来显示处理的结果,并通过视图呈现给用户。
2.Spring的介绍
简单来说,Spring
是一个轻量级的控制反转(IoC)
和面向切面(AOP)
的容器框架。
轻量:
从大小和开销方面两方面而言,Spring都是轻量的。完整的Spring框架可以在一个1M大小的jar文件中发布。并且Spring所需处理的开销也是微不足道的,并且,Spring是非侵入式的,典型的。Spring应用中的对象不依赖与Spring的特定类。控制反转IOC:
Spring通过一种称作控制反转IOC的技术促进松耦合,当应用了IOC,一个对象依赖的其他对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象,你可以认为IOC与JNDI相反—不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。面向切面
:Spring提供面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务和事务管理进行内聚性的开发(声明式事务属于AOP一种体现)。容器:
Spring包含并管理对象的配置和生命周期,在这个意义上它是一种容器,你可以配置每个bean如何被创建。框架:
Spring可以将简单的组建配置,组合成复杂的应用,在Spring中,应用对象被声明式的组合,典型的在一个XML文件中,Spring也提供了很多基础的功能(事务管理,数据库连接池),将业务逻辑的开发留给我们。
3.Spring的面向切面
- 面向切面编程:主要是横切一个关注点,将一个关注点模块化成一个切面,在切面上声明一个通知Advice和切入点Pointcut。
- 通知:是指在切面某个特定的连接点上执行的动作,通知中定义了要插入的方法
- 切入点:切入点的内容是一个表达式,以描述需要在哪些对象的哪些方法上插入通知中定义的方法
- A:比如配置事务管理器
配置事务特性:相当于声明通知,一般业务层的类的一些方法上定义事务
配置哪些类的哪些方法需要配置事务,相当于切入点,一般是在业务类的方法上。
4.Mybatis的好处
- 把sql语句从Java代码中独立出来
- 封装类底层的JDBC、API的调用,并且能够将结果集自动转换成JavaBean对象,简化了Java数据库编程的重复工作。
- 自己编写sql语句,更加的灵活。
- 入参无需用对象封装(或者map封装),使用@Param注解
5.Mybatis中${}和#{}的区别
${}:
简单字符串替换,把${}
直接替换成变量的值,不做任何转换,这是取值以后再去编译sql语句#{}
:预编译处理,相当于把sql中的#{}替换成? ,用于补全预编译语句,有效的防止sql语句注入,这种取值是编译过sql语句后再取值。- #相当于对数据 加上 双引号,$相当于直接显示数据
- #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by “111”, 如果传入的值是id,则解析成的sql为order by “id”.
- $将传入的数据直接显示生成在 sql 中。如:order by $user_id$,如果传入的值是 111,那么解析成 sql 时的值为order by user_id, 如果传入的值是id,则解析成的sql为order by id.
- #方式能够很大程度防止sql注入。
- $方式无法防止Sql注入。$方式一般用于传入数据库对象,例如传入表名.
- 一般能用#的就别用$.
6.Mybatis的工作原理
工作原理:
- 通过SqlSessionFactoryBuilder从mybatis.config.xml配置文件中构建出SqlSessionFactory对象
- SqlSesionFactory开启一个SqlSesion,通过SqlSession实例获得Mapper对象并且运行Mapper映射的Sql语句。
- 完成数据库的CRUD操作和事务提交,关闭SqlSession.
7.Struts2和SpringMVC的区别
- 在we