SSH与SSM之间有什么区别?——面试题提炼前言:对于咱们java程序员而言,在面试的过程当中,无疑不会被问到有关SSH与SSM的问题,因此我就在这里提炼了一下我对它们的认识,以做后续参考,有什么写的不对的地方,还请指正与谅解。java
从大致方面回答:程序员
SSH SSM
指向技术 Struts+Spring+hibernate Spring+SpringMVC+MyBatis
因此只需回答面试官Struts和SpringMVC的区别以及Hibernate和Mybatis的区别面试
一、Struts2与SpringMVC
Struts2 SpringMVC
核心处理器(入口) Filter Servlet
基于类,每次发一次请求都会实例一个Action 基于方法设计
开发效率 开发效率SpringMVC比Struts2高 支持JSR303,处理ajax请求更加方便
页面的开发效率 OGNL表达式使页面的开发效率更高些 页面开发效率相对低些ajax
二、Hibernate与Mybatis
Hibernate Mybatis
开发效率 sql语句已经被封装,直接可使用,加快系统开发 属于半自动化,sql须要手工完成,稍微繁琐
SQL优化 自动生成SQL,有些语句较为繁琐,会多消耗一些性能 手动编写SQL,能够避免不须要的查询,提升系统性能
对象管理 完整的ORM框架,开发过程当中,无需过多关注底层实现,只须要管理对象便可 须要自行管理映射关系spring
三、Spring
1)什么是Spring?及其优势?
spring是一个轻量级的IOC与AOP容器框架sql
对主流框架有很好的集成支持,如Hibernate、SpringMVC等框架数据库
低侵入式的,基于Spring开发通常不依赖于它的类。编程
Spring是个容器,由于它包含而且管理应用对象的生命周期和配置,好比对象的建立、销毁、回调等框架
对事务的管理函数
2)讲一讲你对AOP和IOC的理解?
IOC:控制反转(Inversion of Control,简称:IOC),本来应该由咱们new对象的这个操做转移到Spring容器中执行
eg:
在一个项目中,若是有100我的请求同一个方法,这个方法会被调用100次,那类中new的变量也会被建立100次,这是至关耗费资源的;而IOC底层对这种对象的建立使用的是单例模式,这样就避免了前面所说的资源损耗。
AOP:面向切面编程(Aspect Oriented Programming,简称:AOP),讲到AOP就必须先说起如下OOP,OOP引入封装、继承、多态等概念来创建一种对象层次结构,用于模拟公共行为的一个集合。不过OOP容许开发者定义纵向的关系,但并不适合定义横向的关系,例如日志功能
,简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减小系统的重复代码,下降模块之间的耦合度,并有利于将来的可操做性和可维护性。
eg:
项目中体现:事务 日志
操做数据库的增删改以前,都须要开启事务,增删改以后,都须要提交事务,这样咱们就能够写一个拦截器,底层就是采用动态代理实现前置通知和后置通知,在前置通知中开启事务,在后置通知中提交事务,在spring.xml中配置通知便可,spring的事务管理底层就用到了AOP
3)Spring的注入方式有哪些?
set注入:
为须要控制反转的变量提供set方法,在spring配置文件中使用<property>标签配置
构造注入:
为须要控制反转的变量提供构造函数,在spring配置文件中使用<constructor-arg>标签配置
接口注入:
具备侵略性,必需要继承才能用。