Spring 面试回答:
1.什么是Spring框架,Spring有哪些核心木块
1.1.Spring 是个java企业级应用的开源开发框架。
Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用。
1.2.七个核心模块
1.Spring WEB MVC
MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。
2.Spring WEB :
Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程 序提供了上下文。所以,Spring 框架支持与 Struts2 的集成。
3.Spring ORM :
Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构
4.Spring AOP:
通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中
5.Spring DAO:
JDBC DAO 抽象层提供了有意义的异常层次结构,Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。
6.Spring Context:JEE
Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。
7.Spring Core :
核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转 (IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
2.spring 在项目中如何使用
1 spring对于程序开发人员来说是透明的
2 spring让三层架构之间降低耦合度。(低耦合 高内聚)
3 Aop 切面编程特性 帮我们处理事务和 日志。
3.Struts面试问题
Struts 中MVC的理解,以及Struts在web中的使用
M: Model,模型,操作数据的业务处理层,并独立于表现层
V: 视图,通过客户端数据类型显示数据,并回显模型层的执行结果。
C: 控制器,也就是视图层和模型层桥梁,控制数据的流向,接受视图层发出的事件,并重绘视图
4.MVC的优点缺点
优点:
1)视图控制模型分离, 提高代码重用性。
2)提高开发效率。
3)便于后期维护, 降低维护成本。
4)方便多开发人员间的分工。
缺点:
1)清晰的构架以代码的复杂性为代价, 对小项目优可能反而降低开发效率。
2)运行效率相对较低
简单简述下struts2的执行流程
基本简要流程如下:
1、客户端浏览器发出HTTP请求。
2、根据web.xml配置,该请求被FilterDispatcher接收。
3、根据struts.xml配置,找到需要调用的Action类和方法, 并通过IoC方式,将值注入给Aciton。
4、Action调用业务逻辑组件处理业务逻辑,拦截器等这一步包含表单验证。
5、Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面。
6、返回HTTP响应到客户端浏览器。
为什么要使用struts框架
使用struts的原因:
JSP、Servlet、JavaBean技术的出现给我们构建强大的企业应用系统提供了可能。但用这些技术构建的系统非常的繁乱,所以在此之上,我们需要一个规则、一个把这些技术组织起来的规则,这就是框架,Struts便应运而生。
基于Struts开发的应用由3类组件构成:控制器组件、模型组件、视图组件。
5.Hibernate 框架的使用
Hibernate中get和load有什么不同之处?
1 load方式检索不到的话会抛出org.hibernate.ObjectNotFoundException异常
get方法检索不到的话会返回null,
2 get方法是直接从数据库中检索数据
而load方法的执行则比较复杂首先查找session缓存中找,如果有则直接返回 如果没有则判断是否是lazy如果不是直接访问数据库检索,查到记录返回,查不到抛出异常 。
Hibernate中save、persist和saveOrUpdate这三个方法的不同之处
save()只能INSERT记录,但是saveOrUpdate()可以进行 记录的INSERT和UPDATE。还有,save()的返回值是一个Serializable对象,而persist()方法返回值为void。
Hibernate 的优势
首先、Hibernate对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
其次、Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现,它很大程度的简化了DAO层编码工作。
再次、Hibernate使用Java的反射机制,而不是字节码增强程序类实现透明性。
最后、Hibernate的性能非常好,因为它是一个轻量级框架。映射的灵活性很出色。它支持很多关系型数据库,从一对一到多对多的各种复杂关系。
Hibernate的工作原理:
1.读取并解析Hibernate核心配置文件hibernate.cfg.xml
2.读取并解析Hibernate映射文件,创建SessionFactory
3.打开Sesssion
4.创建事务Transation
5.持久化操作
6.提交事务
7.关闭Session
8.关闭SesstionFactory
6.mybatis和hibernate的区别
mybatis
1.需要人工编写sql语句
2.扩展性差 跟数据库耦合度较高 如果更换数据库 需要重新编写sql
3.开发效率 没有hibernate高 运行效率比hibernate高
hibernate 1 自动生成 并且提供了封装的常用接口 Query SqlQuery
2 扩展性 好 跟数据库耦合度地 更换数据库 只需要更改方言 和主键生成策略
3 开发效率较高 运行效率低于myBiatis
hibernate 如何理解
1 轻量级jdbc
2 orm 对象关系映射
3 方言
4 逆向生成表
5 内置乐观锁
6 数据库优化
1 一二缓存
2 把复杂sql创建为视图 经常使用的查询列 创建 索引
3 把复杂的业务逻辑 通过函数和过程
4 连接池!!!
7.事务
JDBC 用于单一数据源 的一个事务处理
JTA 用于 多个数据源 分布式事务处理
9.SpringMVC 和Struts2 的区别
1:spring3 mvc开发效率高于struts
2:spring3 mvc可以认为已经100%零配置
3:struts2是类级别的拦截, 一个类对应一个request 请求,
springmvc是方法级别的拦截,一个方法对应一个request请求,而方法同时又跟一个url对应
所以说从架构本身上 spring3 mvc就容易实现
而struts2的架构实现起来要费劲
因为struts2 action的一个方法可以对应一个url
而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了
4:spring3mvc的方法之间基本上独立的,独享request response数据
请求数据通过参数获取,处理结果通过ModelMap交回给框架
方法之间不共享变量
而struts2搞的就比较乱,虽然方法之间也是独立的,但其所有Action变量是共享的
这不会影响程序运行,却给我们编码 读程序时带来麻烦
5:由于Struts2需要针对每个Request进行封装,
把Request,Session等Servlet生命周期的变量封装成一个一个Map