StrutsSpringHibernate面试题总结.docx
- 文档编号:17581226
- 上传时间:2023-07-26
- 格式:DOCX
- 页数:28
- 大小:36.01KB
StrutsSpringHibernate面试题总结.docx
《StrutsSpringHibernate面试题总结.docx》由会员分享,可在线阅读,更多相关《StrutsSpringHibernate面试题总结.docx(28页珍藏版)》请在冰点文库上搜索。
StrutsSpringHibernate面试题总结
Struts,Spring,Hibernate面试题总结
Hibernate工作原理及为什么要用?
原理:
1. 读取并解析配置文件
2. 读取并解析映射信息,创建SessionFactory
3. 打开Sesssion
4. 创建事务Transation
5. 持久化操作
6. 提交事务
7. 关闭Session
8. 关闭SesstionFactory
为什么要用:
1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。
他很大程度的简化DAO层的编码工作
3. hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。
4. hibernate的性能非常好,因为它是个轻量级框架。
映射的灵活性很出色。
它支持各种关系数据库,从一对一到多对多的各种复杂关系。
2. Hibernate是如何延迟加载?
1. Hibernate2延迟加载实现:
a)实体对象b)集合(Collection)
2. Hibernate3提供了属性的延迟加载功能
当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。
3. Hibernate中怎样实现类之间的关系?
(如:
一对多、多对多的关系)
类与类之间的关系主要体现在表与表之间的关系进行操作,它们都市对对象进行操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的many-to-one、one-to-many、many-to-many、
4. 说下Hibernate的缓存机制
1. 内部缓存存在Hibernate中又叫一级缓存,属于应用事物级缓存
2. 二级缓存:
a) 应用及缓存
b) 分布式缓存
条件:
数据不会被第三方修改、数据大小在可接受范围、数据更新频率低、同一数据被系统频繁使用、非 关键数据
c)第三方缓存的实现
5. Hibernate的查询方式
Sql、Criteria,objectcomptosition
Hql:
1、属性查询
2、参数查询、命名参数查询
3、关联查询
4、分页查询
5、统计函数
6. 如何优化Hibernate?
1. 使用双向一对多关联,不使用单向一对多
2. 灵活使用单向一对多关联
3. 不用一对一,用多对一取代
4. 配置对象缓存,不使用集合缓存
5. 一对多集合使用Bag,多对多集合使用Set
6. 继承类使用显式多态
7. 表字段要少,表关联不要怕多,有二级缓存撑腰
7. Struts工作机制?
为什么要使用Struts?
工作机制:
Struts的工作流程:
在web应用启动时就会加载初始化ActionServlet,ActionServlet从
struts-config.xml文件中读取配置信息,把它们存放到各种配置对象
当ActionServlet接收到一个客户请求时,将执行如下流程.
-
(1)检索和用户请求匹配的ActionMapping实例,如果不存在,就返回请求路径无效信息;
-
(2)如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm 对象中;
-(3)根据配置信息决定是否需要表单验证.如果需要验证,就调用ActionForm的validate()方法;
-(4)如果ActionForm的validate()方法返回null或返回一个不包含ActionMessage的ActuibErrors对象, 就表示表单验证成功;
-(5)ActionServlet根据ActionMapping所包含的映射信息决定将请求转发给哪个Action,如果相应的 Action实例不存在,就先创建这个实例,然后调用Action的execute()方法;
-(6)Action的execute()方法返回一个ActionForward对象,ActionServlet在把客户请求转发给 ActionForward对象指向的JSP组件;
-(7)ActionForward对象指向JSP组件生成动态网页,返回给客户;
为什么要用:
JSP、Servlet、JavaBean技术的出现给我们构建强大的企业应用系统提供了可能。
但用这些技术构建的系统非常的繁乱,所以在此之上,我们需要一个规则、一个把这些技术组织起来的规则,这就是框架,Struts便应运而生。
基于Struts开发的应用由3类组件构成:
控制器组件、模型组件、视图组件
8. Struts的validate框架是如何验证的?
在struts配置文件中配置具体的错误提示,再在FormBean中的validate()方法具体调用。
9. 说下Struts的设计模式
MVC模式:
web应用程序启动时就会加载并初始化ActionServler。
用户提交表单时,一个配置好的ActionForm对象被创建,并被填入表单相应的数据,ActionServler根据Struts-config.xml文件配置好的设置决定是否需要表单验证,如果需要就调用ActionForm的Validate()验证后选择将请求发送到哪个Action,如果Action不存在,ActionServlet会先创建这个对象,然后调用Action的execute()方法。
Execute()从ActionForm对象中获取数据,完成业务逻辑,返回一个ActionForward对象,ActionServlet再把客户请求转发给ActionForward对象指定的jsp组件,ActionForward对象指定的jsp生成动态的网页,返回给客户。
单例模式
Factory(工厂模式):
定义一个基类===》实现基类方法(子类通过不同的方法)===》定义一个工厂类(生成子类实例)
===》开发人员调用基类方法
Proxy(代理模式)
10. spring工作机制及为什么要用?
1.springmvc请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作。
2.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller.
3.DispatcherServlet请请求提交到目标Controller
4.Controller进行业务逻辑处理后,会返回一个ModelAndView
5.Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象
6.视图对象负责渲染返回给客户端。
为什么用:
{AOP让开发人员可以创建非行为性的关注点,称为横切关注点,并将它们插入到应用程序代码中。
使用AOP后,公共服务 (比如日志、持久性、事务等)就可以分解成方面并应用到域对象上,同时不会增加域对象的对象模型的复杂性。
IOC允许创建一个可以构造对象的应用环境,然后向这些对象传递它们的协作对象。
正如单词倒置所表明的,IOC就像反 过来的JNDI。
没有使用一堆抽象工厂、服务定位器、单元素(singleton)和直接构造(straightconstruction),每一个对象都是用 其协作对象构造的。
因此是由容器管理协作对象(collaborator)。
Spring即使一个AOP框架,也是一IOC容器。
Spring最好的地方是它有助于您替换对象。
有了Spring,只要用JavaBean属性和配置文件加入依赖性(协作对象)。
然后可以很容易地在需要时替换具有类似接口的协作对象。
}
Spring对多种ORM框架提供了很好的支持,简单描述在Spring中使用Hibernate的方法,并结合事务管理。
在context中定义DataSource,创建SessionFactoy,设置参数;DAO类继承HibernateDaoSupport,实现具体接口,从中获得HibernateTemplate进行具体操作。
在使用中如果遇到OpenSessionInView的问题,可以添加OpenSessionInViewFilter或OpenSessionInViewInterceptor。
Spring的Bean有哪些作用域。
singleton、prototype、request、session、globalsession、自定义
Hibernate中的update()和saveOrUpdate()的区别,session的load()和get()的区别。
saveOrUpdate()方法可以实现update()的功能,但会多些步骤,具体如下:
如果对象在该session中已经被持久化,不进行操作;
对象的标识符属性(identifierproperty)在数据库中不存在或者是个暂时的值,调用save()方法保存它;
如果session中的另一个对象有相同的标识符抛出一个异常;
以上皆不符合则调用update()更新之。
Session.load/get方法均可以根据指定的实体类和id从数据库读取记录,并返回与之对应的实体对象。
其区别在于:
如果未能发现符合条件的记录,get方法返回null,而load方法会抛出一个ObjectNotFoundException;
load方法可返回实体的代理类实例,而get方法永远直接返回实体类;
load方法可以充分利用内部缓存和二级缓存中的现有数据,而get方法则仅仅在内部缓存中进行数据查找,如没有发现对应数据,将越过二级缓存,直接调用SQL完成数据读取。
在hibernate中进行多表查询,每个表中各取几个字段,也就是说查询出来的结果集并没有一个实体类与之对应,如何解决这个问题?
解决方案一,按照Object[]数据取出数据,然后自己组bean
解决方案二,对每个表的bean写构造函数,比如表一要查出field1,field2两个字段,那么有一个构造函数就是Bean(type1field2),然后在hql里面就可以直接生成这个bean了。
具体怎么用请看相关文档,我说的不是很清楚。
1、 简述你对IoC(InversionofControl)的理解,描述一下Spring中实现DI(DependencyInjection)的几种方式。
2、 Spring的Bean有多种作用域,包括:
singleton、prototype、request、session、globalsession、application、自定义
3、 简单描述SpringFramework与Struts的不同之处,整合Spring与Struts有哪些方法,哪种最好,为什么?
4、 Hibernate中的update()和saveOrUpdate()的区别
5、 Spring对多种ORM框架提供了很好的支持,简单描述在Spring中使用Hibernate的方法,并结合事务管理。
答案:
1、 好莱坞原则——不要打电话找我,我会打给你的。
IoC将创建的职责从应用程序代码搬到了框架中。
Spring对Setter注入和构造方法注入提供支持。
(详见,以及)
2、 除application(详见SpringFramework2.0Reference的3.4节bean的作用域)
3、 Spring是完整的一站式框架,而Struts仅是MVC框架,且着重于MVC中的C。
Spring有三种方式整合Struts:
使用Spring的ActionSupport类整合Struts;使用Spring的DelegatingRequestProcessor覆盖Struts的RequestProcessor;将StrutsAction管理委托给Spring框架,动作委托最好。
(详见使用Spring更好地处理Struts动作)
Spring2.0新增一种方式:
AutowiringRequestProcessor。
(详见)
4、 saveOrUpdate()方法可以实现update()的功能,但会多些步骤,具体如下:
如果对象在该session中已经被持久化,不进行操作;
对象的标识符属性(identifierproperty)在数据库中不存在或者是个暂时的值,调用save()方法保存它;
如果session中的另一个对象有相同的标识符抛出一个异常;
以上皆不符合则调用update()更新之。
5、 在context中定义DataSource,创建SessionFactoy,设置参数;DAO类继承HibernateDaoSupport,实现具体接口,从中获得HibernateTemplate进行具体操作。
在使用中如果遇到OpenSessionInView的问题,可以添加OpenSessionInViewFilter或OpenSessionInViewInterceptor。
(详见SpringFramework2.0Reference的12.2节Hibernate)
声明式事务需声明事务管理器,在context中设置 advice>指定属性,用 config>确定 advisor>和 pointcut>。 (详见SpringFramework2.0Reference的9.5节声明式事务管理) 113.什么是aop,aop的作用是什么? Oop: 纵向的业务 Aop: oop的一个横向的服务,是对oop进一步的补充,提供安全、事务、日志等的集中式处理,相关的装备before、around、after 114.aop中的关键名词有些那些,相互关系是什么? 代理 拦截器(顾问advisor) 装备(advice) 目标对象 关切点: 那些方法 连接点: 方法、属性 115.依赖注入的方式有几种,各是什么? Interface Setter constructor 116.spring中的核心类有那些,各有什么作用? BeanFactory: 产生一个新的实例,可以实现单例模式 BeanWrapper: 提供统一的get及set方法 ApplicationContext: 提供框架的实现,包括BeanFactory的所有功能 117.spring的ioc及di代表什么意思? 控制权由代码转向容器,通过容器动态将某些对象加入。 118.如何在spring中实现国际化? 在applicationContext.xml加载一个bean message.properties是一个键名加键值的文件, 在用之前通过native2ascii-encodinggb2312源 目转化文件相关内容 其命名格式是message_语言_国家。 在页面中的提示是以键名取键值。 当给定国家,系统会自动加载对应的国家的properties信息。 119.spring的配置的主要标签是什么? 有什么作用? 120.spring与ejb的事务管理比较的优缺点? 测试: Spring: pojo Ejb: 二个接口一个类,一堆配置文件 事务类型 Spring: jdbcjta hibernate Ejb: jta 成本 Spring: 普通容器(tomcatjboss) Ejb: weblogicjboss 开发的周期: Spring远比ejb快. 121.spring的jdbc与传统的jdbc有什么区别,其核心类有那些? Spring的jdbc: 节省代码 JdbcTemplate(增、删、改、查) 122.在spring中有几种事务管理,分别是什么? 代码管理的事务处理 容器管理的事务处理 123.在spring中如何配代码的事务管理? Datasouce transactionManager userDao要注入 Datasouce transactionManager 代码的事务管理在代码中怎样写? 通过如下类实现 TransactionTemplate JdbcTemplate 124.在spring中如何配容器的事务管理,相关的类有那些? Datasouce transactionManager userDao要注入 Datasouce Proxy代理 Target: userDao transactionAttribute transactionManager 125.如果spring与hibernate结合在一起可以不需要hibernate.cfg.xml文件是否正确? 不需要 126.spring+hibernate的配置文件中的主要类有那些? 如何配置? 在myeclipse中先加入spring环境再加入hibernate环境。 如果spring与hibernate结合在一起可以不需要hibernate.cfg.xml文件是否正确? spring+hibernate的配置文件中的主要类有那些? 如何配置? dataSource sessionFactory: hibernate.cfg.xml transactionManager userDao(extendsHibernateDaoSupport) proxy sessionFactory transactionManager userDao 另一种说法: 在myeclipse创建一个web工程 加入spring环境 加入hibernate环境,会自动找到applicationContext.xml文件,加入dataSource及sessionFactory两个bean, 通过这两个文件可以不需要hibernate中的hibernate.cfg.xml文件。 加入一个hibernate事务管理的bean,其名是transactionManager 加入一个dao进行操作的bean,其有一个接口。 加入一个基于aop服务的代理,其包括transactionManager及dao为其提代服务 通过代理得到dao的对应的接口,作真正的处理 127.spring+hibernate的代码实现中,对于实现类一定继承于一个类是那一个,它有什么作用。 extendsHibernateDaoSupport,可以节省代码。 128.如何配置spring+struts? 在struts-config.xml加入一个插件,通过它加载applicationContext.xml 在struts-config.xml修改action-mapping标记,具体action交给了DelegateActionProxy 通过DelegateActionProxy进入一spring的环境。 在spring的applicationContext.xml加入 129.如何在web环境中配置applicationContext.xml文件? org.springframework.web.context.ContextLoaderListener 或: org.springframework.web.context.ContextLoaderServlet 通过如下方法取出applicationContext实例: ApplicationContextac=WebApplicationContextUtils.getWebApplicationContext(this.getServletContext Spring的事物管理 spring提供了几个关于事务处理的类: TransactionDefinition//事务属性定义 TranscationStatus//代表了当前的事务,可以提交,回滚。 PlatformTransactionManager这个是spring提供的用于管理事务的基础接口,其下有一个实现的抽象类AbstractPlatformTransactionManager,我们使用的事务管理类例如DataSourceTransactionManager等都是这个类的子类。 一般事务定义步骤: TransactionDefinitiontd=newTransactionDefini
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- StrutsSpringHibernate 试题 总结