框架面试笔试题集
struts2
1, struts2的工作原理
答:struts2的工作原理图如下:
一个请求在Struts2框架中的处理大概分为以下几个步骤
1 客户端初始化一个指向Servlet容器(例如Tomcat)的请求
2 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin)
3 接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action
4 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy
5 ActionProxy通过Configuration Manager询问框架的配置文件,到需要调用的Action类
6 ActionProxy创建一个ActionInvocation的实例。
7 ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关
(Intercepter)的调用。
8 一旦Action执行完毕,ActionInvocation负责根据l中的配置到对应的返回结果。返回结果通常是(但不总是,也可 能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper
在上述过程中所有的对象(Action,Results,Interceptors,等)都是通过ObjectFactory来创建的。现在新版本的过滤改为:StrutsPrepareAndExecuteFilter
2, struts2中的过滤器是如何用的?
答:struts2中的过滤器是FilterDispatcher,从struts2.1以后改为:StrutsPrepareAndExecuteFilter,它作为前端控制器使用,我们只需要在l中把这个过滤器配置好,过滤器的影射URL用/* ,让所有的请求都经过struts2框架
3, Struts2中如何取得request、response和session?
答:取得request、response、session有两种方法。IoC(控制反转)和非IoC。
IoC:IoC是一个容器,想得到某个对象就应该实现相应接口。
Public classTest extends ActionSupport implements SessionAware, ServletRequestAware, ServletResponseAware ;
非IoC:Struts 2.0中com.opensymphony.xwork2.ActionContext类通过它的静态方法getContext()获取当前Action的上下文对象,另外,org.apache.struts2.ServletActionContext作为辅助类(Helper Class)。
HttpServletRequest request = Request();
HttpServletResponse response = Response();
HttpSession session = Session();
如果你只是想访问session的属性(Attribute),你可能通过。Content().getSession()获取或添加session范围的对象。
4, 谈谈你对struts2框架的理解、或看法、或优缺点、struts2是用来干什么的
答:struts2是一个mvc模式的框架,它其实是webwork与struts1的结合整,但是,它保留struts1的东西并不多,大部分是webwork的东西,所以会用webwork的人一定会用struts2,struts2采用标签实现它的视图层、标签可以跟后台的数据交互;采用过滤器:FilterDispatcher来作为前端控制器,然后我们自己写的控制器,只能继承actionSupport,当然也可以不继承,就一个普通javaBean也可以,在action中,action是线程安全的,我们提供属性来接收页面提交过来的数据,只要把get方法、set方法做好,名字对应起好,当页面发送请求的时候,它的值会自动封装到action中去。我们写完的action,在l中进行配置,实现一种松耦合,更利于系统以分工合作,系统以后的维护,struts2也提供验证的处理,在它的基础上,我们通配置xml文件,起好对应的名字,就可以完成验证的工作,包括服务端与客户端。struts2也提供了国际化的方法,方法包括:全局范围的资源文件、包范围的资源文件、类范围的资源文件、i18n的标签的方式;Struts2中使用大量的,采用一种可插拨式的方式,来组装处理我们要完成复杂的操作,同时,它还提供自己定的创建与配置,可以完成更丰富的操作。对于模型层,它并没有实现。
5, 反射机制在Struts中哪里有实现
答:struts框架使起来很方便,其实,就是因为它里面有很多地方用到了反射机制,比如:action方法的调用,是根据你在l中的配置使用反射机制来实现的,的调用也是通过反射机制来实现的,还有xml配置的对请求数据的验证,也有使用了反射机制。反射机制:简单说就是对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为反射机制。
6, struts2的过滤器的父接口或父类是?
答:是Filter
7, 写出struts2 常见标签
答:<s:form <s:textfield <s:password <s:redio <s:select <s:submit <s:checkbox
8 Struts2和Sturs1区别
hibernate
1, 谈谈你对hibernate的理解、看法、认识、优缺点、方便性
答:hibernate是一个采用orm的方式,封装了jdbc技术的一种数据库持久化层实现的框架,使用它后,我们对于持久化层的实现可以采用完全面向对象的方式来设计,它的sql是自动生成的,只要我们在它的配置文件中配置好dialect,指向是那一种数据库就可以了,所以,用hibernate实现的持久层,有可移植性,可以跨数据库平台通用;采用hibernate后,对于实体类的操作,我们会作一个影射文件,这个影射文件会让我们分工更细,做关系数据模型设计的人员可以独立去做,作域模型设计的人员也可以独立去做,我们可以通影射文件把它们关联起来;hibernate中有缓存的机制,可以帮助我们避免频繁跟数据库交互,提高性能效率,它对对象管理分为三个状态:持久化、游离、临时,它的查询更方便,方式有:hql查询(面向对象)、qbc查询(面向对象)、本地sql的查询、对象导航图方式,oid的方式,并且它在查询的时候,会把查询出来的数据自动封装成实体对象的形式,它的分页可以统一处理。由于hibernate中的sql语句是自动生成了的,所认,对于后期的sql语句的调优来说,不太好做,hibernate可能会产生1+n的问题,我可以通过外连接的形式来解决,会有延迟加载的问题,延迟加载会带来性能方面的效率,但同时当到页面上,我们去取值的时候,session关闭的情况下,我们不能取得所需的数据,可以通过:
openSession
hibernate3.support.OpenSessionInViewFilter
来解决。
2, hibernate检索的方式有哪些?
答:a,导航对象检索 b,oid检索,c,sql检索,d,QBC检索,e,hql检索
3, hibernate管理的对象有哪几种状态,以及如何区分?
答:Hibernate的对象有3种状态,分别为:瞬时态(Transient)、持久态(Persistent)、脱管态(Detached)。处于持久态的对象也称为PO(Persistence Object),瞬时对象和脱管对象也称为VO(Value Object)。瞬时态是该对象刚构造好,或已删除,没有与数据库中的一条记录对应起来,也没有处在session的管理之中;持久态是指该对象处于session当中,被session管理起来;脱管态(或游离态)是指该对象在数据库中有一条记录与其对应,但还没有与session联连起,或session已关闭了。
4, hibernate中bag集合与set集合的差别
答:Set集合是无序、不能有重复元素的,Hibernate提供了一个Bag集合,用来处理重复元素的情况。值得注意的是,Bag并不是Java API,而是Hibernate提供的。Bag集合映射和List不同,List的集合元素是有序的,需要有一个集合序号 来标识集合元素的位置,List元素可以重复;而Bag集合元素不需要元素序号标识,元素也是可以重复的。
5, Hibernate中Load方法与Get方法的区别
答:a.get()采用立即加载方式,而load()采用延迟加载;get()方法执行的时候,会立即向数据库发出查询语句,而load()方法返回的是一个代理(此代理中只有一个id属性),只有等真正使用该对象属性的时候,才会发出sql语句 b.如果数据库中没有对应的记录,get()方法返回的是null.而load()方法出现异常ObjectNotFoundException
6, 谈谈你对Hibernate的延迟检索的理解
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论