java中三大框架和项目模拟面试题目.docx

上传人:b****5 文档编号:8134904 上传时间:2023-01-29 格式:DOCX 页数:17 大小:101.79KB
下载 相关 举报
java中三大框架和项目模拟面试题目.docx_第1页
第1页 / 共17页
java中三大框架和项目模拟面试题目.docx_第2页
第2页 / 共17页
java中三大框架和项目模拟面试题目.docx_第3页
第3页 / 共17页
java中三大框架和项目模拟面试题目.docx_第4页
第4页 / 共17页
java中三大框架和项目模拟面试题目.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

java中三大框架和项目模拟面试题目.docx

《java中三大框架和项目模拟面试题目.docx》由会员分享,可在线阅读,更多相关《java中三大框架和项目模拟面试题目.docx(17页珍藏版)》请在冰豆网上搜索。

java中三大框架和项目模拟面试题目.docx

java中三大框架和项目模拟面试题目

框架和项目模拟面试题目

--------于洋整理

1.Struts2框架题目

1.1.struts2工作流程

Struts2框架本身大致可以分为3个部分:

核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。

核心控制器FilterDispatcher是Struts2框架的基础,

包含了框架内部的控制流程和处理机制。

业务控制器Action和业务逻辑组件是需要用户来自己实现的。

用户在开发Action和业务逻辑组件的同时,还需要编写相关的配置文件,

供核心控制器FilterDispatcher来使用。

Struts2的工作流程相对于Struts1要简单,与WebWork框架基本相同,

所以说Struts2是WebWork的升级版本。

基本简要流程如下:

1、客户端初始化一个指向Servlet容器的请求;

2、这个请求经过一系列的过滤器(Filter)

(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,

这个过滤器对于Struts2和其他框架的集成很有帮助,例如:

SiteMeshPlugin)

3、接着FilterDispatcher被调用,

FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action

4、如果ActionMapper决定需要调用某个Action,

FilterDispatcher把请求的处理交给ActionProxy

5、ActionProxy通过ConfigurationManager询问框架的配置文件,

找到需要调用的Action类

6、ActionProxy创建一个ActionInvocation的实例。

7、ActionInvocation实例使用命名模式来调用,

在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。

8、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。

返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。

在表示的过程中可以使用Struts2框架中继承的标签。

在这个过程中需要涉及到ActionMapper

9、响应的返回是通过我们在web.xml中配置的过滤器

10、如果ActionContextCleanUp是当前使用的,则FilterDispatecher将不会清理sreadlocalActionContext;如果ActionContextCleanUp不使用,则将会去清理sreadlocals。

1.2.过滤器Filter和struts2拦截器的区别

1、拦截器是基于java反射机制的,而过滤器是基于函数回调的。

2、过滤器依赖于servlet容器,而拦截器不依赖于servlet容器。

3、拦截器只能对Action请求起作用,而过滤器则可以对几乎所有请求起作用。

4、拦截器可以访问Action上下文、值栈里的对象,而过滤器不能。

1.3.为什么要使用struts2框架

Struts2是一个相当强大的JavaWeb开源框架,是一个基于POJO的Action的MVCWeb框架。

它基于当年的Webwork和XWork框架,继承其优点,同时做了相当的改进。

1.Struts2基于MVC架构,框架结构清晰,开发流程一目了然,开发人员可以很好的掌控开发的过程。

2使用OGNL进行参数传递。

OGNL提供了在Struts2里访问各种作用域中的数据的简单方式,你可以方便的获取Request,Attribute,Application,Session,Parameters中的数据。

大大简化了开发人员在获取这些数据时的代码量。

3强大的拦截器

Struts2的拦截器是一个Action级别的AOP,Struts2中的许多特性都是通过拦截器来实现的,例如异常处理,文件上传,验证等。

拦截器是可配置与重用的,可以将一些通用的功能如:

登录验证,权限验证等置于拦截器中以完成一些JavaWeb项目中比较通用的功能。

在我实现的的一Web项目中,就是使用Struts2的拦截器来完成了系统中的权限验证功能。

4易于测试

Struts2的Action都是简单的POJO,这样可以方便的对Struts2的Action编写测试用例,大大方便了5JavaWeb项目的测试。

易于扩展的插件机制在Struts2添加扩展是一件愉快而轻松的事情,只需要将所需要的Jar包放到WEB-INF/lib文件夹中,在struts.xml中作一些简单的设置就可以实现扩展。

6模块化管理

Struts2已经把模块化作为了体系架构中的基本思想,可以通过三种方法来将应用程序模块化:

将配置信息拆分成多个文件把自包含的应用模块创建为插件创建新的框架特性,即将与特定应用无关的新功能组织成插件,以添加到多个应用中去。

7全局结果与声明式异常

为应用程序添加全局的Result,和在配置文件中对异常进行处理,这样当处理过程中出现指定异常时,可以跳转到特定页面。

他的如此之多的优点,是很多人比较的青睐,与spring,Hibernate进行结合,组成了现在比较流行的ssh框架,当然每个公司都要自己的框架,也是ssh变异的产品。

1.4.struts2有哪些优点

1)在软件设计上Struts2的应用可以不依赖于Servlet API和struts API。

 Struts2的这种设计属于无侵入式设计;  

2)拦截器,实现如参数拦截注入等功能;  

3)类型转换器,可以把特殊的请求参数转换成需要的类型;  

4)多种表现层技术,如:

JSP、freeMarker、Velocity等;  

5)Struts2的输入校验可以对指定某个方法进行校验;  

6)提供了全局范围、包范围和Action范围的国际化资源文件管理实现 

1.5.struts2框架的核心控制器是什么?

它有什么作用?

1)Struts2框架的核心控制器是StrutsPrepareAndExecuteFilter。

  

2)作用:

  

 负责拦截由/*指定的所有用户请求,当用户请求到达时,该Filter会过滤用户的请求。

默认情况下,如果用户请求的路径  

不带后缀或者后缀以.action结尾,这时请求将被转入struts2框架处理,否则struts2框架将略过该请求的处理。

  

可以通过常量"struts.action.extension"修改action的后缀,如:

  

  

如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。

  

1.6.struts2的配置文件的加载顺序

struts2core核心包org/apache/struts2/default.properties(定义Struts2常量)

struts2core核心包struts-default.xml(定义struts2默认package、拦截器、结果类型)

struts2plugin插件包struts-plugin.xml(定义struts2插件的配置)

struts.xml(自定义struts2配置文件)

struts.properties(自定义struts2常量文件)

web.xml中定义的struts2常量

1.7.struts2如何访问HttpServletRequest、HttpSession、ServletContext三个域对象?

方案一:

  

HttpServletRequestrequest =ServletActionContext.getRequest();  

HttpServletResponseresponse =ServletActionContext.getResponse();  

HttpSession  session=   request.getSession(); 

ServletContextservletContext=ServletActionContext.getServletContext();  

    

方案二:

  

类 implements ServletRequestAware,ServletResponseAware,SessionAware,ServletContextAware  

注意:

框架自动传入对应的域对象 

ps:

ActionContext.getContext()可以获得三个Map对象,间接对三个域对象中数据进行操作

1.8.struts2如何对指定的方法进行验证?

1)validate()方法会校验action中所有与execute方法签名相同的方法;

2)要校验指定的方法通过重写validateXxx()方法实现,validateXxx()只会校验action中方法名为Xxx的方法。

其中Xxx的第一个字母要大写;

3)当某个数据校验失败时,调用addFieldError()方法往系统的fieldErrors添加校验失败信息(为了使用addFieldError()方法,action可以继承ActionSupport),如果系统的fieldErrors包含失败信息,struts2会将请求转发到名为input的result;

4)在input视图中可以通过

fielderror/>显示失败信息。

5)先执行validateXxxx()->validate()->如果出错了,会转发所指定的页面,如果不出错,会直接进行Action:

:

execute()方法

1.9.struts2默认能解决get和post乱码问题吗

不能。

struts.i18n.encoding=UTF-8属性值只能解析POST提交下的乱码问题。

1.10.请说出struts2中至少5个默认拦截器

fileUpload提供文件上传功能

i18n记录用户选择的locale

cookies使用配置的name,value来是指cookies

checkbox添加了checkbox自动处理代码,将没有选中的checkbox的内容设定为false,而html默认情况下不提交没有选中的checkbox。

chain让前一个Action的属性可以被后一个Action访问,现在和chain类型的result()结合使用。

params将请求参数封装到Struts2Action中

validate执行struts2的请求参数校验

workflow判断流程中是否存在FieldError,如果存在,跳转到input对象视图

modelDriven将struts2Action实现ModelDriven接口提供model对象压入root栈顶部

token防止页面表单重复提交

1.11.值栈ValueStack的原理和生命周期

1)ValueStack贯穿整个 Action 的生命周期,保存在request域中,所以ValueStack和request的生命周期一样。

当Struts2接受一个请求时,会迅速创建ActionContext,  

ValueStack,action。

然后把action存放进ValueStack,所以action的实例变量可以被OGNL访问。

 请求来的时候,action、ValueStack的生命开始,请求结束,action、    ValueStack的生命结束;  

2)action是多例的,和Servlet不一样,Servelt是单例的;  

3)每个action的都有一个对应的值栈,值栈存放的数据类型是该action的实例,以及该action中的实例变量,Action对象默认保存在栈顶;  

4)ValueStack本质上就是一个ArrayList;  

5)关于ContextMap,Struts 会把下面这些映射压入 ContextMap 中:

  

parameters  :

   该 Map 中包含当前请求的请求参数  

request     :

   该 Map 中包含当前 request 对象中的所有属性  session :

该 Map 中包含当前 session 对象中的所有属性  

application :

该 Map 中包含当前 application 对象中的所有属性  

attr:

该 Map 按如下顺序来检索某个属性:

 request, session, application           

6)使用OGNL访问值栈的内容时,不需要#号,而访问request、session、application、attr时,需要加#号;  

7)注意:

 Struts2中,OGNL表达式需要配合Struts标签才可以使用。

如:

property value="name"/>  

8)在struts2配置文件中引用ognl表达式 ,引用值栈的值 ,此时使用的"$",而不是#或者%;  

1.12.ActionContext、ServletContext、pageContext区别?

1)ActionContext是当前的Action的上下文环境,通过ActionContext可以获取到request、session、ServletContext等与Action有关的对象的引用;

2)ServletContext是域对象,一个web应用中只有一个ServletContext,生命周期伴随整个web应用;

3)pageContext是JSP中的最重要的一个内置对象,可以通过pageContext获取其他域对象的应用,同时它是一个域对象,作用范围只针对当前页面,当前页面结束时,pageContext销毁,生命周期是JSP四个域对象中最小的。

1.13.resul的type属性中有哪些结果类型?

dispatcherstruts默认的结果类型,把控制权转发给应用程序里的某个资源不能把控制权转发给一个外部资源,若需要把控制权重定向到一个外部资源,应该使用

redirect把响应重定向到另一个资源(包括一个外部资源)

redirectAction把响应重定向到另一个Action

freemarker、velocity、chain、httpheader、xslt、plainText、stream

struts2-json-plugin自定义json结果类型,用于返回json格式数据

1.14.拦截器的生命周期与工作过程

1)每个拦截器都是实现了Interceptor接口的Java类;

2)init():

该方法将在拦截器被创建后立即被调用,它在拦截器的生命周期内只被调用一次.可以在该方法中对相关资源进行必要的初始化;

3)intercept(ActionInvocationinvocation):

每拦截一个动作请求,该方法就会被调用一次;

4)destroy:

该方法将在拦截器被销毁之前被调用,它在拦截器的生命周期内也只被调用一次;

2.Hibernate3框架题目

2.1.为什么要使用Hibernate框架?

它有什么优势?

Hibernate对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。

Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现,它很大程度的简化了DAO层编码工作。

Hibernate使用Java的反射机制,而不是字节码增强程序类实现透明性。

因为它是一个轻量级框架。

映射的灵活性很出色。

它支持很多关系型数据库,从一对一到多对多的各种复杂关系。

2.2.Hibernate工作原理(编程步骤)

1.读取并解析Hibernate核心配置文件hibernate.cfg.xml

2.读取并解析Hibernate映射文件,创建SessionFactory

3.打开Sesssionyantingxin

4.创建事务Transation

5.持久化操作

6.提交事务

7.关闭Session

8.关闭SesstionFactory

2.3.Hibernate是如何实现延迟加载的?

延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作。

在Hibernate中提供了对实体对象的延迟加载、对集合的延迟加载和对属性的延迟加载。

当Hibernate在查询数据的时候,数据并没有存储在内存中,只是使用Javassist为目标类创建子类代理对象,当程序真正对数据的进行操作时,代理对象的handler才去访问数据,加载对象存在于内存中,这就实现了延迟加载,它节省了服务器的内存开销,从而提高了服务器的性能。

2.4.Hibernate有那几种查询方式

(1)导航对象图查询

(2)OID查询

(3)HQL查询

(4)QBC查询

(5)本地SQL查询

2.5.Hibernate中load方法和get方法区别

区别1:

如果数据库中没有userId对应的记录,通过get方法加载,则返回的是null值;如果通过load方法加载,则返回一个代理对象,当通过user对象调用某个方法(比如user.getPassword())时,会抛出异常:

org.hibernate.ObjectNotFoundException;

区别2:

load支持延迟加载,get不支持延迟加载。

2.6.Hibernate持久化对象有几种状态?

临时状态、游离状态、持久化状态

2.7.HQL和SQL语句的区别?

HQL面向对象,而SQL操纵关系型数据库

2.8.说下Hibernate的缓存机制

缓存是介于应用程序和物理数据源之间,其作用是为了降低应用程序对物理数据源访问的频次,从而提高了应用的运行性能。

Hibernate的缓存包括Session的缓存和SessionFactory的缓存,其中SessionFactory的缓存又可以分为两类:

内置缓存和外置缓存。

Session的缓存是内置的,不能被卸载,也被称为Hibernate的第一级缓存。

SessionFactory的内置缓存和Session的缓存在实现方式上比较相似,前者是SessionFactory对象的一些集合属性包含的数据,后者是指Session的一些集合属性包含的数据。

SessionFactory的内置缓存中存放了映射元数据和预定义SQL语句,映射元数据是映射文件中数据的拷贝,而预定义SQL语句是在Hibernate初始化阶段根据映射元数据推导出来,SessionFactory的内置缓存是只读的,应用程序不能修改缓存中的映射元数据和预定义SQL语句,因此SessionFactory不需要进行内置缓存与映射文件的同步。

SessionFactory的外置缓存是一个可配置的插件。

在默认情况下,SessionFactory不会启用这个插件。

外置缓存的数据是数据库数据的拷贝,外置缓存的介质可以是内存或者硬盘。

SessionFactory的外置缓存也被称为Hibernate的第二级缓存。

2.9.如何优化Hibernate?

初用HIBERNATE的人也许都遇到过性能问题,实现同一功能,用HIBERNATE与用JDBC性能相差十几倍很正常,如果不及早调整,很可能影响整个项目的进度。

大体上,对于HIBERNATE性能调优的主要考虑点如下:

  Ø数据库设计调整

  ØHQL优化

  ØAPI的正确使用(如根据不同的业务类型选用不同的集合及查询API)

  Ø主配置参数(日志,查询缓存,fetch_size,batch_size等)

  Ø映射文件优化(ID生成策略,二级缓存,延迟加载,关联优化)

  Ø一级缓存的管理

  Ø针对二级缓存,还有许多特有的策略

  Ø事务控制策略。

1、数据库设计

  a)降低关联的复杂性

  b)尽量不使用联合主键

  c)ID的生成机制,不同的数据库所提供的机制并不完全一样

  d)适当的冗余数据,不过分追求高范式

2、HQL优化

  HQL如果抛开它同HIBERNATE本身一些缓存机制的关联,HQL的优化技巧同普通的SQL优化技巧一样,可以很容易在网上找到一些经验之谈。

在性能瓶颈的地方使用硬编码的JDBC。

3、主配置

  a)查询缓存,同下面讲的缓存不太一样,它是针对HQL语句的缓存,即完全一样的语句再次执行时可以利用缓存数据。

但是,查询缓存在一个交易系统(数据变更频繁,查询条件相同的机率并不大)中可能会起反作用:

它会白白耗费大量的系统资源但却难以派上用场。

  b)fetch_size,同JDBC的相关参数作用类似,参数并不是越大越好,而应根据业务特征去设置

  c)batch_size同上。

  d)生产系统中,切记要关掉SQL语句打印。

4、缓存

  a)数据库级缓存:

这级缓存是最高效和安全的,但不同的数据库可管理的层次并不一样,比如,在ORACLE中,可以在建表时指定将整个表置于缓存当中。

  b)SESSION缓存:

在一个HIBERNATESESSION有效,这级缓存的可干预性不强,大多于HIBERNATE自动管理,但它提供清除缓存的方法,这在大批量增加/更新操作是有效的。

比如,同时增加十万条记录,按常规方式进行,很可能会发现OutofMemeroy的异常,这时可能需要手动清除这一级缓存:

Session.evict以及Session.clear

  c)应用缓存:

在一个SESSIONFACTORY中有效,因此也是优化的重中之重,因此,各类策略也考虑的较多,在将数据放入这一级缓存之前,需要考虑一些前提条件:

  i.数据不会被第三方修改(比如,是否有另一个应用也在修改这些数据?

  ii.数据不会太大

  iii.数据不会频繁更新(否则使用CACHE可能适得其反)

  iv.数据会被频繁查询

  v.数据不是关键数据(如涉及钱,安全等方面的问题)。

  缓存有几种形式,可以在映射文件中配置:

read-only(只读,适用于很少变更的静态数据/历史数据),nonstrict-read-write,read-write(比较普遍的形式,效率一般),transactional(JTA中,且支持的缓存产品较少)

  d)分布式缓存:

同c)的配置一样,只是缓存产品的选用不同,在目前的HIBERNATE中可供选择的不多,oscache,jbosscache,目前的大多数项目,对它们的用于集群的使用(特别是关键交易系统)都持保守态度。

在集群环境中,只利用数据库级的缓存是最安全的。

5、延迟加载

  a)实体延迟加载:

通过使用动态代理实现

  b)集合延迟加载:

通过实现自有的SET/LIST,HIBERNATE提供了这方面的支持

  c)属性延迟加载:

6、方法选用

  a)完成同样一件事,HIBERNA

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 思想汇报心得体会

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1