一、 SSH框架相关的面试题:
1. BeanFactory的作用是什么? [中]
BeanFactory是配置、创建、管理bean的容器,有时候也称为bean上下文。Bean与bean的依赖关系,也是由BeanFactory负责维护的。
2. bean在spring的容器中两种基本行为是什么? [中]
Singleton:单态
Non-singleton或prototype:原型
3. spring配置文件中的ref元素的作用是什么?它的两个基本属性是什么? [中]
用于指定属性值为spring容器中的其它bean.两个基本属性是bean和local
4. 什么是DWR?它有哪些功能? [中]
DWR(Direct Web Remoting)是一个WEB远程调用框架. 可以在客户端利用JavaScript直接调用服务端的Java方法并返回值给JavaScript DWR根据Java类来动态生成JavaScrip代码.
支持Dom Trees,支持Spring,支持commons-logging
5. Ajax的工作原理 ? [难]
在会话的开始,浏览器加载Ajax引擎
请求动作通过JavaScript调用Ajax引擎来代替.
引擎负责绘制用户界面以及与服务器端通讯。
Ajax引擎采用异步交互过程--不用等待服务器的通讯。
6. XMLHttpRequest对象是什么,它有哪些常用方法? [难]
一个 JavaScript 对象。是Ajax 的核心。
该对象的方法和属性。
open():建立到服务器的新请求。
send():向服务器发送请求。
abort():退出当前请求。
readyState:提供当前 HTML 的就绪状态。
responseText:服务器返回的请求响应文本。.
-----XMLHttpRequest三部曲------
- 创建XMLHttpRequest Object
- XMLHttpRequest.open(Method, URL, Asyn),该方法有三个参数,第一个是request method,主要是通过GET/POST两种方式,第二个参数是请求的URL,但是必须是与当前的页面处于相同的Domain,第三个是布尔变量,true表示有异步请求,false表示为同步请求,客户端必须等待服务器返回加载完毕之后,才能继续之下往下的操作
- XMLHttpRequest.send(data),该方法有一个参数,如果没有参数传递给服务器,设置为null
<script type="text/javascript">
var xhr = new XMLHttpRequest();
xhr.timeout = 3000;
xhr.ontimeout = function (event) {
alert("请求超时!");
}
var formData = new FormData();
formData.append('tel', '18217767969');
formData.append('psw', '111111');
xhr.open('POST', 'http://www.test.com:8000/login');
xhr.send(formData);
xhr.onreadystatechange = function () {
if (xhr.readyState == 4 && xhr.status == 200) {
alert(xhr.responseText);
}
else {
alert(xhr.statusText);
}
}
</script>
7. XMLHttpRequest有哪些属性, 它的值分代表什么?[ 中]
* xhr.readyState:XMLHttpRequest对象的状态,等于4表示数据已经接收完毕。 * xhr.status:服务器返回的状态码,等于200表示一切正常。 * xhr.responseText:服务器返回的文本数据 * xhr.responseXML:服务器返回的XML格式的数据 * xhr.statusText:服务器返回的状态文本。
8. 什么是Ajax? [易]
Ajax是一种无需重新加载整个网页,能够更新部分网页的技术。Asynchronous JavaScript and XML的缩写,是JavaScript、XML、CSS、DOM等多个技术的组合。
Ajax工作原理是一个页面的指定位置可以加载另一个页面所有的输出内容,这样就实现了一个静态页面也能获取到数据库中的返回数据信息了。所以Ajax实现了一个静态网页在不刷新整个页面的情况下与服务器通信,减少了用户等待时间,同时降低了网络流量,增强了客户体验的友好程度。
Ajax的核心技术是XMLHttpRequest,它是JavaScript的一个对象。
Ajax的优点是:
(1)减轻了服务器端负担,将一部分以前由服务器负担的工作转移到客户端执行,利用了客户端闲置的资源进行处理;
(2)在只局部刷新的情况下更新页面,增加了页面反应速度,使用户体验更友好。
Ajax缺点是不利于SEO推广优化,因为搜索引擎无法直接访问到Ajax请求的内容。
9. 同步与异步的区别? [ 难]
普通B/S模式(同步)AJAX技术(异步)
同步:提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事,而异步则是 请求通过事件触发->服务器处理->处理完毕
同步是阻塞模式,异步是非阻塞模式。
同步(发送方发出数据后,等接收方发回) 异步(发送方发出数据后,不等接收方发回响应)
10. Struts+Hibernate+Spring开发模式中Hibernate扮演的角色 [中]
答:Hibernate扮演的是数据持久层 它的作用是实现持久化对象和数据库表
之间的映射,形成持久化对象和数据库表中数据的一个转换平台
11. 什么是Hibernate 的抓取策略 [难]
抓取策略是指当应用程序需要利用关联关系进行对象获取的时候。
12. 何为容器 [中]
容器就是符合某种规范的能够提供一系列服务的管理器。
13. Spring实现了那几种模式 [中]
答: 工厂模式 和 单例模式
14 :Hibernate实体对象生命周期的三种状态 [难]
答 Transient(瞬态) ,persistent(持久态)和Detached(游历态)
15: HQL查询参数的处理方法 [中]
答:直接将参数拼写为HQL语句
通过参数名称来标识参数
16. Hibernate实体之间的关联关系的三种形式 [中]
答 一对一关联
一对多关联
多对多关联
17. Hibernate具用的三种检索方式 [难]
答:HQL检索方式
QBC检索方式
SQL检索方式
18. spring 中<Bean>的depends-on属性是什么 [中]
Depends-on用于当前Bean初始化之前显示的强制一个或多个bean被初始化
19. spring 中的BeanWrapper类是什么 [难]
BeanWrapper类是一个对JavaBean进行各种操作的工具类
BeanWrapper本身是一个接口BeanWrapperImpl实现了BeanWrapper
20 . <set>元素有一个cascade属性,如果希望Hibernate级联保存集合中的对象,casecade属性应该取什么值? [难]
答:save-update
21. Hibernate中session什么时候是游离态 [中]
答:session.close();方法后
22. Hibernate中映射文件<hibernate-mapping> inverse属性和cascade属性的区别 [中]
答:inverse属性只存在于集合标记的元素中集合元素包括<set/>,<map/>,<list/>,<array/>,<bag/>
Inverse属性的作用是是否将对集合对象的修改反射到数据库中 inverse=”false”时修改反射到数据库中 inverse=”true” 时修改不反射到数据库中
Cascade属性的作用是描述关联对象进行操作时的级联特性,因此只有涉及到关系的元素才有cascade属性
23. : Hibernate中Session对象的load()方法和get()方法的区别(请列举出两点)[难]
答:①记录不存在时 get()方法会返回空(null),而load()方法将会抛出一个HibernateException异常 ② load()方法查询数据时会先找Hibernate的内部缓存和二级缓
存中的现有数据,get()方法在内部缓存中没有达到相对应的数据时装直接执行SQL语句
进行查询
24. : Hibernate中HQL属于什么语言 [易]
答:HQL是面向对象的查询语言,它可以查询以对象形式存在的数据。
25. Hibernate简介以及主要功能 [中]
答:Hibernate是采用ORM模式实现数据持久层的一个优秀的JAVA组件,它提供了
强大,高效的将JAVA对象进行持久化操作的服务
26. 简述Hibernate的优点 [难]
答:开源和免费的License,我可以在需要的时候研究源代码,改写源代码,进行功能的定制。轻量级封装,避免引入过多复杂的问题,调试容易,也减轻程序员的负担。
具有可扩展性,API开放,当本身功能不够用的时候,可以自己编码进行扩展。
27. 怎样构建SessionFactory [难]
答: Hibernate的SessionFactory接口提供Session类的实例,Session类用于完成对数据库的操作。
由于SessionFactory实例是线程安全的(而Session实例不是线程安全的),所以每个操作都可以共用同一个SessionFactory来获取Session。Hibernate配置文件分为两种格式,一种是xml格式的配置文件,另一种是Java属性文件格式的配置文件
28. :从XML文件读取配置信息构建SessionFactory的具体步骤如下。 [难]
(1)创建一个Configuration对象,并通过该对象的configura()方法加载Hibernate配置文件,代码如下。
Configuration config = new Configuration().configure();
configura()方法:用于告诉Hibernate加载hibernate.cfg.xml文件。Configuration在实例化时默认加载classpath中的hibernate.cfg.xml,当然也可以加载名称不是hibernate.cfg.xml的配置文件,例如wghhibernate.cfg.xml,可以通过以下代码实现。
Configuration config = new Configuration().configure("wghhibernate.cfg.xml");
(2)完成配置文件和映射文件的加载后,将得到一个包括所有Hibernate运行期参数的Configuration实例,通过Configuration实例的buildSessionFactory()方法可以构建一个惟一的SessionFactory,代码如下:
SessionFactory sessionFactory = config.buildSessionFactory();
构建SessionFactory要放在静态代码块中,因为它只在该类被加载时执行一次。
29. 写出使用构造方法进行注入的关键代码 [难]
<bean id=”constructBean” class=”com.huang.ConstructBean”>
<constructor-arg><ref bean=”bean_1”/></ constructor-arg >
<constructor-arg><ref bean=”bean_2”/></ constructor-arg >
<constructor-arg><ref bean=”bean_3”/></ constructor-arg >
</bean>
30. 什么是IOC? [难]
不创建对象,但是描述创建它们的方式。在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务。容器(在Spring 框架中是 IOC 容器) 负责将这些联系在一起。
就是由容器控制程序之间的关系,而非传统实现中,由程序代码直接操控,控制权由应用代码中转到了外部容器,控制权的转移,就是所谓的反转。
31. 编程题: 写一个Singleton出来。 [难]
Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。
第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。
-
public class Singleton {
-
private Singleton(){}
-
private static Singleton instance = new Singleton();
-
public static Singleton getInstance() {
-
return instance;
-
}
-
}
-
第二种形式:
-
public class Singleton {
-
private static Singleton instance = null;
-
public static synchronized Singleton getInstance() {
-
if (instance==null)
-
instance=new Singleton();
-
return instance; }
-
}
-
String tempStr = "";
-
try {
-
tempStr = new String(str.getBytes("ISO-8859-1"), "GBK");
-
tempStr = tempStr.trim();
-
}
-
catch (Exception e) {
-
System.err.println(e.getMessage());
-
}
-
return tempStr;
-
}
32. J2EE是技术还是平台还是框架? [中]
J2EE本身是一个标准,一个为企业分布式应用的开发提供的标准平台。
J2EE也是一个框架,包括JDBC、JNDI、RMI、JMS、EJB、JTA等技术。
33. 我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? [难]
Public String translate (String str) {
String tempStr = "";
try {
tempStr = new String(str.getBytes("ISO-8859-1"), "GBK");
tempStr = tempStr.trim();
}
catch (Exception e) {
System.err.println(e.getMessage());
}
return tempStr;
}
34.如何使用静态工厂方法来创建Bean的实例 [易]
<bean id=”staticFactoryBean” class=”com.huang.StaticFactoryBean”
factory-method=”静态方法名”/>
相当于: StaticFactoryBean staticFactoryBean=StaticFactoryBean.静态方法名
使用实例化的工厂方法来创建Bean的实例
<!—注意此时bean的class属性为空-->
<bean id=”dynamicFactory”class=”com.huang.DynamicFactory”/>
<bean id=”dynamiceFactoryBean” factory-bean=”dynamicFactory”
Factory-method=”方法名”/>
相当于: DynamicFactory dynamicFactory=new DynamicFactory();
DynamiceFactoryBean dynamiceFactoryBean=dynamicFactory.方法名
35. 从Java属性文件读取配置信息构建SessionFactory的具体步骤如下: [难]
(1)创建一个Configuration对象,此时Hibernate会默认加载classpath中的配置文件hibernate.properties,代码如下。
Configuration config = new Configuration();
(2)由于在配置文件中缺少相应的配置映射文件的信息,所以此处需要通过编码方式加载,这可以通过Configuration对象的addClass()方法实现,具体代码如下。
config.addClass(BranchForm.class);
addClass()方法用于加载实体类。
(3)完成配置文件和映射文件的加载后,将得到一个包括所有Hibernate运行期参数的Configuration实例,通过Configuration实例的buildSessionFactory()方法可以构建一个惟一的SessionFactory,代码如下。
SessionFactory sessionFactory = config.buildSessionFactory();
36. spring框架的7个模块是什么? [ 难]
答: (1) spring AOP --面象切面编程
(2)spring DAO --数据访问对象
(3)spring ORM --对象关系影射
(4)spring Contect -- 上下文配置,向Spring框架提供上下文信息
(5)spring WEB - -WEB上下文模块
(6)\spring WEB-MVC --实现了MVC
(7)spring CORE –核心容器提供Spring框架基本功能
37. 什么是AOP 请祥述 [中]
答: 是面向切面编程
AOP 把软件系统分为两个部分:核心关注点和横切关注点。所谓的核心关注点,是业务处理的主要流程,也就是说这个解决方案要做的事。所谓横切关注点,是与核心业务无关的部分,它把常发生在核心关注点的多处,而各处基本相似,如日志,事务,权限等 。
38. Hinbernate和EJB的区别 [中]
答:Hibernate可以用在任何JDBC使用的场合,例如Java应用程序的数据库访问代码,DAO接口的实现类,甚至可以是BMP里面的访问数据库的代码。从这个意义上来说,Hibernate和EB不是一个范畴的东西,也不存在非此即彼的关系。
39. 一般情况下,关系数据模型与对象模型之间有哪些匹配关系 [难]
答:表对应类
记录对应表的对象
表的字段对应类的属性
40. 事务隔离级别是由谁实现的? [难]
答:数据库系统‘
41. 什么是IOC [难]
答:IOC 是控制反转,实现了对象之间的依赖关系的转移成而使程序的菘耦合
42. 在Spring中给属性有几种赋值方式 请祥叙 [难]
答:有四种 分别是
(1)普通属性赋值
(2)集合属性赋值
(3)Properties赋值
(4)Map 属性赋值
43. 在Spring说说Bean的alias元素和name属性有什么区别 [难]
答: <bean>元素name属性可以一次为<bean>定义多个别名
例:<bean id=”beanName” name=”alias_1,alias_2”/>
<alias>元素一次只能定义一个别名
例:<alias name=”beanName” alias=”toName”/>
注意: alias元素name属性是bean实例名
44. Bean 的作用域用几种,请祥叙 [难]
答: 用5种
分别是:
1. singleton IOC容器只会创建一个Bean的唯一的实例
2. prototype IOC容器在每次请求该Bean的时候都创建一个新的实例
3. request 在一次Http请求中 IOC容器会返回该Bean的同一个实例,而对于不同的用户请求,则会返回不同的实例
4. session 在一次Http请求Session 中 IOC容器会返回该Bean的同一个实例,而对于不同的用户Session,则会返回不同的实例
5. global session在一个全局Http请求Session 中
45. 简述什么是ORM [中]
答:ORM的全称是Object-Relational Mapping 翻译成中文就是“对象-关系映射”
ORM组件的主要功能就是实现实体域对象的持久化并封装数据库访问的细节
ORM本身并不是一个组件,它是具用某种功能的组件的总称,也可以说是一种框
架结构
46.:struts中的几个关键对象的作用(说说几个关键对象的作用) [中]
struts中的几个关键对象:Action Global(设置语言靠它了) ModuleConfig(获取mapping),
47.Action的作用 [中]
Action的作用是接受用户的请求,通过调用业务方法实现业务处理的功能。
48. 在通常情况下软件系统由表示层,业务层,持久层和数据库层组成,Struts属于哪一层? [难]
Struts属于表示层组件,它的作用主要体现在以下几个方面:
1) 输出用户界面和接收用户的输入,实现与用户的交互。
2) 调用业务方法,完成业务处理,还要包括处理后的显示工作。
48:Struts标签库由哪些组件组成? [难]
标签库是组合在一起的一组JSP自定义标签。
标签库由以下组件组成:
1) 标签处理程序
2) 标签库描述符(TLD)文件
3) 应用程序部署描述符(web.xml)文件
4) JSP页面中标签库的声明
49. 用<bean:write>读出一个URL和一个名称, [难]
用<html:link>的话怎么组合起来。
即要达到这样的效果
<a href="<bean:write name="data" property="url">">
<bean:write name="data" property="tilte">
</a>
<html:link page="<bean:write name="data" property="url">">
<bean:write name="data" property="title"/>
</html:link> 会报出属性data无值的错误!(page="<bean:write name="data" property="url">"中的data无值。)
50:怎样才能配置<html:button>的资源文件? [难]
在资源文件 ApplicationResourses.properties 中加入 label.login=login
在jsp页面写:
<html:button name="btn_login"><bean:message key="label.login"/></html:button>
这样显示页面时,button上就会显示label.login的对应内容“login”
51. 说说struts框架,的方法的工作原理或流程 [易]
答: 对于采用Struts框架的web应用, 在web应用启动时会加载并初始化ActionServlet,ActionServlet从struts-config.xml中读取配置信息,
把它们存放到各种配置对象中,例如把Action的映射信息存放在ActionMapping对象中。
当ActionServlet接收到客户请求时,执行以下流程:
1.检索和用户请求匹配的ActionMapping实例,如果不存在,就返回用户请求路径无效信息;
2.如果ActionForm实例不存在,就创建一个ActionForm对象并在其中保存客户提交的表单内容;
3.根据配置信息决定是否调用ActionForm的validate()方法;
4.如果ActionForm的validate()方法返回null或返回一个不包含ActionMessage的ActionErrors对象,就表示表单验证成功;
5.ActionServlet根据ActionMapping实例包含的映射信息将请求转发给Action(如果Action实例不存在,就先创建Action实例),然后调用Action的excute()方法;
6.Action的excute()方法返回一个ActionForward对象,ActionServlet再把客户请求转发给ActionForward对象指向的JSP组件;
7.ActionForward对象指向的JSP组件生成动态网页,返回给客户。
52: strust的Action是不是线程安全的? [难]
答:线程安全就是你可以在多线程环境下使用它,而不需要你来对它进行特殊的处理。action都是继承至servlet的,由于servlet就是线程不安全的(指多个线程共享一个servlet对象,所以),所以不要再action中定义类变量和实例变量,否则其他线程改变了这些值,可本线程还在使用
53 :MVC,分析一下struts是如何实现MVC的 [难]
从MVC角度来看看struts的体系结构(Model 2)与工作原理:
1)模型(Model)
在Struts的体系结构中,模型分为两个部分:系统的内部状态和可以改变状态的操作(事务逻辑)。内部状态通常由一组ActinForm Bean表示。根据设计或应用程序复杂度的不同,这些Bean可以是自包含的并具有持续的状态,或只在需要时才获得数据(从某个数据库)。大型应用程序通常在方法内部封装事务逻辑(操作),这些方法可以被拥有状态信息的bean调用。比如购物车bean,它拥有用户购买商品的信息,可能还有checkOut()方法用来检查用户的信用卡,并向仓库发定货信息。 小型程序中,操作可能会被内嵌在Action类,它是struts框架中控制器角色的一部分。当逻辑简单时这个方法很适合。 建议用户将事务逻辑(要做什么)与Action类所扮演的角色(决定做什么)分开。
2)视图(View)
视图主要由JSP建立,struts包含扩展自定义标签库(TagLib),可以简化创建完全国际化用户界面的过程。目前的标签库包括:Bean Tags、HTML tags、Logic Tags、Nested Tags 以及Template Tags等。
3)控制器(Controller)
在struts中,基本的控制器组件是ActionServlet类中的实例servelt,实际使用的servlet在配置文件中由一组映射(由ActionMapping类进行描述)进行定义。对于业务逻辑的操作则主要由Action、ActionMapping、ActionForward这几个组件协调完成的,其中Action扮演了真正的业务逻辑的实现者,ActionMapping与ActionForward则指定了不同业务逻辑或流程的运行方向。struts-config.xml 文件配置控制器。
54 :简述什么是Struts [中]
Struts只是一个MVC框架(Framework),用于快速开发Java Web应用。Struts实现的重点在C(Controller),包括ActionServlet/RequestProcessor和我们定制的Action,也为V(View)提供了一系列定制标签(Custom Tag)。但Struts几乎没有涉及M(Model),所以Struts可以采用JAVA实现的任何形式的商业逻辑。
Spring是一个轻型容器(light-weight container),其核心是Bean工厂(Bean Factory),用以构造我们所需要的M(Model)。在此基础之上,Spring提供了AOP(Aspect-Oriented Programming, 面向层面的编程)的实现,用它来提供非管理环境下申明方式的事务、安全等服务;对Bean工厂的扩展ApplicationContext更加方便我们实现J2EE的应用;DAO/ORM的实现方便我们进行数据库的开发;Web MVC和Spring Web提供了Java Web应用的框架或与其他流行的Web框架进行集成。
就是说可将两者一起使用,达到将两者自身的特点进行互补。
55 :Struts有哪些主要功能:[难]
1.包含一个controller servlet,能将用户的请求发送到相应的Action对象。
2. JSP自由tag库,并且在controller servlet中提供关联支持,帮助开发员创建交互式表单应用。
3. 提供了一系列实用对象:XML处理、通过Java reflection APIs自动处理JavaBeans属性、国际化的提示和消息。
Struts项目的目标是为创建Java web应用提供一个开放源代码的framework。Struts framework的内核是基于例如Java Servlets, JavaBeans, ResourceBundles, 和 XML,以及各种 Jakarta Commons包的标准技术的灵活的控制层。
Struts提供了它自身的控制器组件,并整合了其他技术,以提供模型和视图。对于模型,同大多数的第三方软件包一样,如Hibernate, iBATIS, 或者 Object Relational Bridge,Struts能够和标准数据连接技术相结合,如JDBC和EJB。对于视图,Struts与JavaServer Pages协同工作,包含JSTL和JSF。
56 :Stuts框架中控制器组件的类主要有哪些? [难]
ActionServlet ,
RequestProcessor
, Action,
ActionMapping,
ActionForward
41:Validator的组成与作用 [难]
Validator框架主要包括以下几个部分:
1) 实现各种验证规则的Java类
2) 配置文件
3) 资源文件
4) JSP自定义标签
Validator组件可以很好地解决用户输入数据的验证问题,但它并不是一个独立运行的组件,它可以被嵌入到目前大部分的Web应用开发框架中。Validator组件的验证方式有多种,既可以通过JavaScript脚本实现用户输入数据的页面验证,也可以实现在后台处理程序中的Java验证
57. ActionForm的作用?[难]
ActionForm属于一种数据传输对象,联系了前台页面与后台的Action方法,实现了前台与后台之间的数据转换和传递。它的作用主要体现在以下几个方面:
1) 在显示页面的时候用于完成页面中各种控件的初始化工作。
2) 在用户提交请求的时候,ActionForm又代表了用户所提交的数据,供Action以及后续的业务处理方法使用
ActionForm还有另外一个作用就是对用户提交数据的合法性进行验证