2023年11月28日发(作者:)

JAVA面试题大全(含答案)

1. J2EE是什么?它包括哪些技术?

解答:从整体上讲,J2EE是使用Java技术开发企业级应用的工业标

准,它是Java技术不断适应和促进企业级应用过程中的产物。适用于企

业级应用的J2EE,提供一个平台独立的、可移植的、多用户的、安全的和

基于标准的企业级平台,从而简化企业应用的开发、管理和部署。J2EE

一个标准,而不是一个现成的产品。

主要包括以下这些技术:

1) Servlet ServletJava平台上的CGI技术。Servlet在服务器端运

行,动态地生成Web页面。与传统的CGI和许多其它类似CGI的技术相

比,Java Servlet具有更高的效率并更容易使用。对于Servlet,重复的请

求不会导致同一程序的多次转载,它是依靠线程的方式来支持并发访问

的。 2)JSP JSP(Java Server Page)是一种实现普通静态HTML和动态页面

输出混合编码的技术。从这一点来看,非常类似Microsoft ASPPHP

技术。借助形式上的内容和外观表现的分离,Web页面制作的任务可以

比较方便地划分给页面设计人员和程序员,并方便地通过JSP来合成。在

运行时态,JSP将会被首先转换成Servlet,并以Servlet的形态编译运

行,因此它的效率和功能与Servlet相比没有差别,一样具有很高的效

率。 3) EJB EJB定义了一组可重用的组件:Enterprise Beans。开发人员可

以利用这些组件,像搭积木一样建立分布式应用。 4)JDBC

JDBC(Java Database ConnectivityJava数据库连接)API是一个标准

SQL(Structured Query Language,结构化查询语言)数据库访问接口,它

使数据库开发人员能够用标准Java API编写数据库应用程序。JDBC API

主要用来连接数据库和直接调用SQL命令执行各种SQL语句。利用JDBC

API可以执行一般的SQL语句、动态SQL语句及带INOUT参数的存储

过程。Java中的JDBC相当于Microsoft平台中的ODBC(Open Database

Connectivity)

2.测试生命周期、测试过程分为几个阶段,以及各阶段的含义?

解答:软件测试生命周期一般包括6个阶段:1)计划 2)分析,3

设计,4)构建,5)测试周期,6)最后测试和实施,

1 计划:产品定义阶段

2). 分析:外部文档阶段

3). 设计:文档架构阶段

4). 构建:单元测试阶段

5). 测试周期:错误修正,重复系统测试阶段

6). 最后的测试和实施:代码冻结阶段

3.您做系统设计用何种工具?

解答:Visio, rational rosepower designer 4. 什么是Web容器?

解答:容器就是一种服务程序,在服务器一个端口就有一个提供相应

服务的程序,而这个程序就是处理从客户端发出的请求,如JAVA中的

Tomcat容器,ASPIISPWS都是这样的容器。

5. 运行时异常与一般异常有何异同?

解答:异常表示程序运行过程中可能出现的非正常状态,运行时异常

表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java

译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须

声明抛出未被捕获的运行时异常。

6. Hibernate中:不看数据库,不看XML文件,不看查询语句,怎么

样能

知道表结构?

解答:可以看与XML文件对应的域模型。

7.目前几种主流数据库软件的应用特点、适用范围各是什么?

解答:国际国内的主导关系型数据库管理系统有SQL Server

ORACLESYBASE*****X DB2。本文从性能,可伸缩性和并行性,安

全性,操作简便,使用风险,开放性,易维护性和价格,数据库二次开发

方面比较了SQL ServerOracleSYBASEDB2*****X 数据库:

1)性能

SQL Server:老版本多用户时性能不佳,新版本的性能有了明显的改

善,各项处理能力都有了明显的提高。保持了多项TPC-CTPC-C值被广

泛用于衡量C/S环境下,由服务器和客户端构筑的整体系统的性能,它由事

物处理性能委员会(TPCTransaction Processing Corp)制定,TPC为非赢

利性国际组织。)纪录。

Oracle :性能最高, 保持Windows NT下的TPC-C的世界记录。

SYBASE :性能较高,支持SunIBMHPCompaqVeritas的集群设

备的特性,实现高可用性。适应于安全性要求极高的系统。 DB2 :适用

于数据仓库和在线事物处理,性能较高。 客户端支持及应用模式。

*****X :性能较高,支持集群,实现高可用性。适应于安全性要求极高

的系统,尤其是银行,证券系统的应用。 2)可伸缩性,并行性 SQL

Server :以前版本SQL Server并行实施和共存模型并不成熟。很难处理

大量的用户数和数据卷。伸缩性有限。新版本性能有了较大的改善,在

Microsoft Advanced Servers上有突出的表现,超过了他的主要竞争对

手。

Oracle :平行服务器通过使一组结点共享同一簇中的工作来扩展

Window NT的能力,提供高可用性和高伸缩性的簇的解决方案。如果

Windows NT不能满足需要, 用户可以把数据库移到UNIX中,具有很好

的伸缩性。 SYBASE :新版本具有较好的并行性,速度快,对巨量

数据无明显影响,但是技术实现复杂,需要程序支持,伸缩性有限。

DB2 DB2具有很好的并行性。DB2把数据库管理扩充到了并行的、多

节点的环境。数据库分区是数据库的一部分,包含自己的数据、索引、配

置文件、和事务日志。数据库分区有时被称为节点或数据库节点,伸缩性

有限。 *****X :采用单进程多线程的技术,具有较好的并行性。但是仅

运行于UNIX平台,伸缩性有限。 3)安全性 SQL server Microsoft

Advanced Server 获得最高安全认证,服务器平台的稳定性是数据库的稳

定性的基础,新版本的SQL的安全性有了极大的提高。 Oracle:获得最

高认证级别的ISO标准认证。 SYBASE :通过Sun公司J2EE认证测试,

获得最高认证级别的ISO标准认证。 DB2 :获得最高认证级别的ISO

准认证。 *****X :获得最高认证级别的ISO标准认证。 4)操作简便

SQL Server :操作简单,采用图形界面。管理也很方便,而且编程接口特

别友好(它的SQL-DMO让编程变得非常方便!) ,从易维护性和价格上

SQL Server明显占有优势。 Oracle :较复杂, 同时提供GUI和命令行,

Windows NTUnix Linux 下操作相同。对数据库管理人员要求较

高。 SYBASE :复杂,使用命令行操作,对数据库管理人员要求较高。

DB2 :操作简单,同时提供GUI和命令行,在Windows NTUnix下操作

相同。 *****X :使用和管理复杂,命令行操作。对数据库管理人员要求

较高。 5)使用风险 SQL Server :完全重写的代码,性能和兼容性有了

较大的提高,与OracleDB2的性能差距明显减小。该产品的出台经历了

长期的测试,为产品的安全和稳定进行了全面的检测,安全稳定性有了明

显的提高。 Oracle :长时间的开发经验,完全向下兼容,可以安全的进

行数据库的升级,在企业,政府中得到广泛的应用。并且如果在WINNT

上无法满足数据的要求,可以安全的把数据转移到UNIX上来。

SYBASE :开发时间较长,升级较复杂,稳定性较好,数据安全有保

障。风险小。在安全要求极高的银行,证券行业中得到了广泛的应用。

DB2 :在巨型企业得到广泛的应用,向下兼容性好。风险小。 *****X

开发时间较长,升级较复杂,稳定性较好,数据安全有保障。风险小。在

安全要求极高的银行,证券行业中得到了广泛的应用。 6)开放性 SQL

Server:只能在Windows 上运行,C/S结构,只支持Windows客户,可

以用ADO,DAO,OLEDB,ODBC连接。Windows9X系列产品是偏重于桌面

应用,NT server适合各种大中小型企业。 操作系统的稳定对数据库是十

分重要的。Windows平台的可靠性,安全性经过了最高级别的C2认证

的。在处理大数据量的关键业务时提供了较好的性能。 Oracle :能在所

有主流平台上运行(包括 Windows。完全支持所有的工业标准。采用完

全开放策略。多层次网络计算,支持多种工业标准,可以用

ODBC,JDBC,OCI等网络客户连接。可以使客户选择最适合的解决方案。

对开发商全力支持。 SYBASE :能在所有主流平台上运行,在银行业中

得到了广泛的应用。 DB2 :有较好的开放性,最适于海量数据。跨平

台,多层结构,支持ODBC,JDBC等客户。在大型的国际企业中得到最为

广泛的应用,在全球的500家最大的企业中,大部分采用DB2数据库服务

器。 *****IX :仅运行在UNIX平台,包括SUNOSHPUX *****/1。在

银行中得到广泛的应用。 7)易维护性和价格 SQL Server :从易维护性和

价格上SQL Server明显占有优势。基于Microsoft的一贯风格,SQL

Server的图形管理界面带来了明显的易用性, 微软的数据库管理员培训

进行的比较充分,可以轻松的找到很好的数据库管理员,数据库管理费用

比较低,SQL Server的价格也是很低的,但是在License的购买上会抬高

价格。总体来说SQL Server的价格在商用数据库中是最低的。 Oracle :

易维护性和价格上来说Oracle的价格是比较高的,管理比较复杂,由于

Oracle的应用很广泛,经验丰富的Oracle数据库管理员可以比较容易的

找到,从而实现Oracle的良好管理。因此Oracle的性能价格比在商用数

据库中是最好的。 SYBASE :SYBASE的价格是比较低的,但是SYBASE

在企业和政府中的应用较少,很难找到经验丰富的管理

员,运行管理费用较高。

DB2 :价格高, 管理员少,在中国的应用较少,运行管理费用都很

高,适用于大型企业的数据仓库应用。 *****X :价格在这些系统中居于中

间,与SYBASE一样,在企业和政府中应用较少,仅在银行中得

到了广泛的应用。经验丰富的管理人员较少,运行管理费用高。 8)

数据库二次开发 SQL Server :数据库的二次开发工具很多,包括Visual

C++, Visual Basic等开发工具,可以实现很好的Windows应用,开发容

易。 Oracle :数据库的二次开发工具很多,涵盖了数据库开发的各个阶

段,开发容易。 SYBASE :开发工具较少,经验丰富的人员很少。 DB2 :

国外巨型企业得到广泛的应用,中国的经验丰富的人员很少。 *****X :

银行业中得到广泛的应用,但是在中国的经验丰富的人员很少。

8.存储过程和函数的区别

解答:

从参数的返回情况来看:

如果返回多个参数值最好使用存储过程,如果只有一个返回值的话可

以使用函数。

从调用情况来看:

如果在SQL语句(DMLSELECT)中调用的话一定是存储函数或存

储的封装函数不可以是存储过程,但调用存储函数的时候还有好多限制以

及函数的纯度等级的问题,如果是在过程化语句中调用的话,就要看你要

实现什么样的功能。函数一般情况下是用来计算并返回一个计算结果而存

储过程一般是用来完成特定的数据操作(比如修改、插入数据库表或执行

某些DDL语句等等),所以虽然他们的语法上很相似但用户在使用他们的

时候所需要完成的功能大部分情况下是不同的。

9.试述数据库完整保护的主要任务和措施。

解答:数据库的完整性保护也就是数据库中数据正确性的维护。数据

库完整性包括三个内容:实体完整性规则,参照物完整性规则以及用户定

义完整性规则。 前两个是有DBMS自动处理。

实体完整性规则是说针对于基表中的关键字中属性值不能为空值,是

数据库完整性的基本要求,主关键字和元组的唯一性对应。

参照物完整性规则是不允许引用不存在的元组:即基表中的外关键字

要么为空,要么关联基表中必存在元组。

用户定义完整性规则针对具体的数据环境由用户具体设置的规则,它

反应了具体应用中的语义要求。 一个完整性规则一般由下面三部分组成:

完整性约束条件设置,完整性约束条件的检

查以及完整性约束条件的处理.后两部分在数据库中一般有相应的模

块处理。另外触发器也可以做完整性的保护,但触发器大量用于主动性领

域。

10.请说明SQLServerdelete from tablea truncate table tablea

区别

解答:两者都可以用来删除表中所有的记录。区别在于:truncate

DDL操作,它移动HWK,使HWK值为0,不需要 rollback segment .

DeleteDML操作需要rollback segment 且花费较长时间.

11. Oracle安装完成后,如何用命令行启动和关闭数据库?

解答:

打开:***** [FORCE] [*****T] [PFILE= filename] [OPEN

[*****][ database] | MOUNT | *****] ***** OPEN*****缺省的参数就是

OPEN,打开数据库,允许数据库的访问。当前实例的控制文件中所描述

的所有文件都已经打开。 ***** MOUNTMOUNT数据库,仅仅给DBA

进行管理操作,不允许数据库的用户访问。仅仅只是当前实例的控制文件

被打开,数据文件未打开。 ***** *****:仅仅通过初始化文件,分配出

SGA区,启动数据库后台进程,没有打开控制文件和数据文件。不能访问

任何数据库。 ***** PFILE= filename:以filename为初始化文件启动数据

库,不是采用缺省初始化文件。 ***** FORCE:中止当前数据库的运行,

并开始重新正常的启动数据库。 ***** *****T:只允许具有*****TED *****

权限的用户访问数据库。 ***** *****:数据库启动,并开始介质恢复

关闭

*****N有四个参数:NORMAL*****TIONAL*****TEABORT。缺

省不带任何参数时表示是NORMAL

命令*****N NORMAL:不允许新的连接、等待会话结束、等待事务结

束、做一个检查点并关闭数据文件。启动时不需要实例恢复。 *****N

*****TIONAL:不允许新的连接、不等待会话结束、等待事务结束、做一

个检查点并关闭数据文件。启动时不需要实例恢复。 *****N *****TE:不

允许新的连接、不等待会话结束、不等待事务结束、做一个检查点并关闭

数据文件。没有结束的事务是自动rollback的。启动时不需要实例恢复。

*****N ABORT:不允许新的连接、不等待会话结束、不等待事务结束、不

做检查点且没有关闭数据文件。启动时自动进行实例恢复。 另外,对于

NORMAL*****TIONAL*****TEDB Buffer Cache的内容写入了数据文

件,没有提交的事务被回滚,所有的资源被释放,数据库被干净的关

闭。 对于ABORTDB Buffer Cache的内容没有写入数据文件,没有提交

的事务也没有回滚。数据库没有dismount和关闭,数据文件也没有关

闭。当数据库启动时,需要通过redo log恢复数据,通过回滚

段对事务回滚,对资源进行释放。

12. 类有哪三个基本特性?各特性的优点?

解答:类具有封装性、继承性和多态性。

封装性:类的封装性为类的成员提供公有、缺省、保护和私有等多级

访问权限,目的是隐藏类中的私有变量和类中方法的实现细节。

继承性:类的继承性提供从已存在的类创建新类的机制,继承

inheritance)使一个新类自动拥有被继承类(父类)的全部可继承的成

员。

多态性:类的多态性提供类中方法执行的多样性,多态性有两种表现

形式:重载和覆盖。

13.谈谈对XML的理解?说明Web应用中文件的作用?

解答:XMLExtensible Markup Language)即可扩展标记语言,它

HTML一样,都是SGML(Standard Generalized Markup Language,标准

通用标记语言)XmlInternet环境中跨平台的,依赖于内容的技术,是

当前处理结构化文档信息的有力工具。扩展标记语言XML是一种简单的

数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便

的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但

XML极其简单易于掌握和使用。

的作用是配置欢迎页,servletfilterlistener等的。

有哪些内置对象?作用分别是什么?(至少三个)

解答:

6application 表示一个tContext对象。这有助于

查找有关servlet引擎和servlet环境的信息。 7config表示一个

tConfig对象。该对象用于存取servlet实例的初始化参

数。 8page表示从该页面产生的一个servlet实例。

9exception 针对错误网页,未捕捉的例外

15.事务是什么?有哪些属性,并简要说明这些属性的含义。

解答:事务(Transaction)是访问并可能更新数据库中各种数据项的一

个程序执行单元(unit)

事务通常由高级数据库操纵语言或编程语言(如SQLC++Java

书写的用户程序的执行所引起,并用形如begin transactionend

transaction语句(或函数调用)来界定。事务由事务开始(begin

transaction)和事务结束(end transaction)之间执行的全体操作组成。

事务应该具有4个属性:原子性、一致性、隔离性、持续性。这四个

属性通常称为ACID特性。

原子性(atomicity。一个事务是一个不可分割的工作单位,事务中

包括的诸操作要么都做,要么都不做。

一致性(consistency。事务必须是使数据库从一个一致性状态变到

另一个一致性状态。一致性与原子性是密切相关的。

隔离性(isolation。一个事务的执行不能被其他事务干扰。即一个事

务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个

事务之间不能互相干扰。

持久性(durability。持续性也称永久性(permanence,指一个事

务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他

操作或故障不应该对其有任何影响。

16Collection Collections的区别?

解答:Collection下的接口,它是各种集合的父接口,继

承于它的接口主要有Set ListCollections是个下的类,是针

对集合的帮助类,提供一系列静态方法实现对各种集合的搜索、排序、线

程安全化等操作。

17HashMapTreeMap的区别?

解答:HashMap通过hashcode对其内容进行快速查找,而TreeMap

中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果

你就应该使用TreeMapHashMap中元素的排列顺序是不固定的)

18ArrayListVector的区别?

解答:同步性:Vector是线程安全的,也就是说是同步的,而

ArrayList是线程不安全的,不是同步的;数据增长:当需要增长时,Vector

默认增长为原来一培,而ArrayList却是原来的一半。

19HashMapHashtable的区别?

解答:HashMapHashtable的轻量级实现(非线程安全的实现)

他们都实现了Map接口,主要区别

在于HashMap允许空(null)键值(key,由于非线程安全,效率上

高于HashtableHashMap允许将null作为一个entrykey或者value

Hashtable不允许。HashMapHashtable

contains方法去掉了,改成containsvaluecontainsKey。因为

contains方法容易让人引起误解。Hashtable继承自Dictionary类,而

HashMapJava1.2引进的Map interface的一个实现。最大的不同是,

Hastable的方法是synchronize的,而HashMap不是,在多个线程访问

Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为

之提供同步。

20.请说出ArrayList,Vector, LinkedList的存储性能和特性

解答:ArrayListVector都是使用数组方式存储数据,此数组元素

数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引

元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而

插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性

能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数

据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即

可,所以插入速度较快。

21. 描述J2EE框架的多层结构,并简要说明各层的作用。

解答:

1) Presentation layer(表示层)

a. 表示逻辑(生成界面代码)

b. 接收请求

c. 处理业务层抛出的异常

d. 负责规则验证(数据格式,数据非空等)

e. 流程控制

2) Service layer(服务层/业务层)

a.封装业务逻辑处理,并且对外暴露接口

b.负责事务,安全等服务

3) Persistence layer(持久层)

a 封装数据访问的逻辑,暴露接口

b.提供方便的数据访问的方案(查询语言,API,映射机制等)

4Domain layer(域层)

a. 业务对象以及业务关系的表示

b. 处理简单的业务逻辑

c. 域层的对象可以穿越表示层,业务层,持久层

软件分层结构使得代码维护非常方便,设计明确,各层独立,专注自

己擅长的领域。

22.请谈谈对SOA的认识。

解答:面向服务的体系结构(Service-Oriented ArchitectureSOA

是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服

务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义

的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构

建在各种这样的系统中的服务可以一种统一和通用的方式进行交互。

23.简要描述如何结合strutshibernatespring开发Web应用?

解答:Struts可以将jsp页面的表单关联起来,就是把JSP页面的表单

数据封装成javaBean,这样的话,action中你再也不需要使用传统的

ameter(“name”);还有struts有一个控制器,你在struts编程中

的控制器(XxxAction)都是继承总的ActionServlet,它能集中处理请求,然后转

到相关的页面。还有struts的表单验证组件,不用你写js验证了,只需要你

配置一下文件就可以了。另外struts的令牌机制可以防表单重复提交。

Spring 是一个轻量级容器,非侵入性.包含依赖注入,AOP等。它是为

了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分

层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开

发提供集成的框架。

Hibernate:它可以让我们以OO的方式操作数据库,这让我们看到了

hibernate的强大之处,体验到操作数据的方便。但hibernate最耀眼之处

hibernate的缓存机制,而不是以OO的方式操作数据库。Hibernate

缓存机制不外乎是一级缓存session,二级缓存sessionFactory,和第三方

缓存如ehcache。也就是hibernate的最强大的地方是它的缓存,理解了

这个才能真正的理解hibernate,Hibernate的命名查询/命名参数查询,就

是将hql语句放在一个单独的xml文件之中,它仍然让人们以面向对象的

方式去操纵数据,而不用在以OO的方式写着代码的同时,然后再转变思

维,用面向关系的方式去写那些sql语句。但hibernate不仅做了这些,

它的native sql查询方式,完全满足sql语句的偏爱者,它像ibatis一样,

sql语句放在配置文件之中。

24.说明反转控制(IOC)和面向方向编程(AOP)在spring中的应用

解答:Spring 核心容器(Core)提供Spring框架的基本功能。核心

容器的主要组件是BeanFactory,它是工厂模式的实现。BeanFactory使用

控制反转(Ioc)模式将应用程序的配置和依赖性规范与实际的应用代码

程序分开。Spring的声明式事务基于AOP实现,却并不需要程序开发者

成为AOP专家,亦可轻易使用Spring的声明式事务管理。

25.请看如下片段:

set name=“address”

lazy=“true”

inverse=“false”

cascade=“all-delete-orphan”

key column = “USERID” /key

one-to-many class=“s”/

/ set

解释lazyinversecascade以及all-delete-orphan属性的含义;并

给出示例代码,说明在如下组合情况下,对于saveupdatedelete一对

多关系中的一方对象操作时的区别:

inverse

cascade

true

all-delete-orphan

false

all-delete-orphan

true

all

false

all

true

none

false

none

解答:

()lazy:延迟加载

Lazy的有效期:只有在session打开的时候才有效;session关闭后

lazy就没效了。

lazy策略可以用在:

aclass标签上:可以取值true/false

ty标签上,可以取值true/false,这个特性需要类增强

/list等集合上,可以取值为true/false/extra

-to-one/many-to-one等标签上,可以取值false/proxy/no-

proxy

1) getload的区别:

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

b.当查询特定的数据库中不存在的数据时,get会返回null,而load

则抛出异常。

2) (Class)的延迟加载:

a. 设置class标签中的lazy=”true”,或是保持默认(即不配置lazy

)

b. 如果lazy的属性值为true,那么在使用load方法加载数据时,只

有确实用到数据的时候才会发

sql语句;这样有可能减少系统的开销。

3) 集合(collection)的延迟加载:可以取值truefalseextra

:默认取值,它的意思是只有在调用这个集合获取里面的元素对

象时,才发出查询语句,加载其集合元素的数据

:取消懒加载特性,即在加载对象的同时,就发出第二条查询语

句加载其关联集合的数据

:一种比较聪明的懒加载策略,即调用集合的size/contains等方

法的时候,hibernate并不会去加载整个集合的数据,而是发出一条聪明

SQL语句,以便获得需要的值,只有在真正需要用到这些集合元素对

象数据的时候,才去发出查询语句加载所有对象的数据

4) Hibernate单端关联懒加载策略:即在one-to-one/many-to-one

标签上可以配置

懒加载策略。可以取值为:false/proxy/no-proxy

:取消懒加载策略,即在加载对象的同时,发出查询语句,加载

其关联对象

:这是hibernate对单端关联的默认懒加载策略,即只有在调用

到其关联对象的方法的时候才真正发出查询语句查询其对象数据,其关联

对象是代理类

-proxy:这种懒加载特性需要对类进行增强,使用no-proxy,其

关联对象不是代理类

注意:在class标签上配置的lazy属性不会影响到关联对象!!!

(二)inverse

inverse是指的关联关系的控制方向,inverse=falsesideside其实

是指inversefalse所位于的class元素)端有责任维护关系,而inverse

true端无须维护这些关系

(三)cascade

cascade指的是层级之间的连锁操作。在定义关联对象的映射时,使

cascade=”all”cascade=”save-update”,cascade=”all-delete-orphan”

cascade=”delete”

a.如果父对象被保存,所有的子对象会被传递到saveOrUpdate()方法

去执行(cascade=”save-update”)

b.如果父对象被传递到update()或者saveOrUpdate(),所有的子对象

会被传递到saveOrUpdate()方法去执行(cascade=”save-update”)

c.如果一个临时的子对象被一个持久化的父对象引用了,它会被传递

saveOrUpdate()去执行 (cascade=”save-update”)

d.如果父对象被删除了,所有的子对象对被传递到delete()方法执行

(cascade=”delete”)

e.如果临时的子对象不再被持久化的父对象引用,什么都不会发生

(必要时,程序应该明确的删除这个子对象),除非声明了cascade=”all-

delete-orphan”,在这种情况下,成为孤儿的子对象会被

删除。

() saveupdatedelete一对多关系中的一方对象操作时的区别

1)当一方设置inverse=true时,所有由一方发出的操作都不会关联

到多方。

2)当一方设置 inverse=false, cascade=all-delete-orphan时,将删除

不再和一方对象关联的所有多方对象。

3)当一方设置 inverse=false, cascade=all,当保存和删除一方对象

时,级联保存和删除所有关联的多方对象。

4)当一方设置 inverse=false, cascade=none,当对一方操作时,不

级联到关联的多方对象。

26.简单说明什么是递归?什么情况会使用?并使用java实现一个简

单的递归程序。

解答:

1)递归做为一种算法在程序设计语言中广泛应用.是指函数/过程/

程序在运行过程中直接或间接调用自身而产生的重入现象。

2)递归算法一般用于解决三类问题:

a.数据的定义是按递归定义的。(Fibonacci(斐波那契)函数)

b.问题解法按递归算法实现。(回溯)

c.数据的结构形式是按递归定义的。(树的遍历,图的搜索)

3.这是一个排列的例子,它所做的工作是将输入的一个字符串中的

所有元素进行排序并输出,例如:你给出的参数是”abc” 则程序会输出:

abc acb bac bca cab cba a.算法的出口在于:low=high也就是现

在给出的排列元素只有一个时。 b.算法的逼近过程:先确定排列的第一

位元素,也就是循环中i所代表的元素, 然后low+1开始减少排列

元素,如此下去,直到low=high public class Foo {

public static void main(String[] args) {

permute(“abc”);

}

public static void permute(String str) {

char[] strArray = Array();

permute(strArray, 0, C 1);

}

public static void permute(char[] list, int low, int high) {

int i;

if (low == high) {

list[i] = temp;

permute(list, low + 1, high);

temp = list[low];

list[low] = list[i];

list[i] = temp;

}

}

}

}

27.列出自己常用的jdk.

解答:JDK常用的package

.cnng 这个是系统的基础类,比如String等都是这里面的,这个

package是唯一一个可以不用import就可以使用的Package

: 这里面是所有输入输出有关的类,比如文件操作等

.cn: 这里面是络有关的类,比如URL,URLConnection等。

: 这个是系统辅助类,特别是集合类Collection,List,Map等。

: 这个是数据库操作的类,Connection, StatememtResultSet

28.列出自己常用的jdk中的数据结构

解答:线性表,链表,哈希表是常用的数据结构。

29ListMapSet三个接口存储元素时各有什么特点?

解答:

1List是有序的Collection,使用此接口能够精确的控制每个元素插

入的位置。用户能够使用索引(元素在List中的位置,类似于数组下标)

来访问List中的元素,这类似于Java的数组。

2Set是一种不包含重复的元素的Collection,即任意的两个元素e1

e2都有(e2)=falseSet最多有一个null元素。

3Map接口 :请注意,Map没有继承Collection接口,Map提供

keyvalue的映射

30. 简述基于Struts框架Web应用的工作流程

解答:在web应用启动时就会加载初始化ActionServlet,ActionServlet

文件中读取配置信息,把它们存放到各种配置对象中,

ActionServlet接收到一个客户请求时,将执行如下流程. 1)检索和用户请

求匹配的ActionMapping实例,如果不存在,就返回请求路径无效信息; 2)

ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表

单数据保存到ActionForm对象中; 3)根据配置信息决定是否需要表单验证.

如果需要验证,就调用ActionFormvalidate()方法; 4)如果ActionForm

validate()方法返回null或返回一个不包含ActionMessageActionErrors

对象, 就表示表单验证成功; 5)ActionServlet根据ActionMapping所包含的

映射信息决定将请求转发给哪个Action,如果相应的Action实例不存在,

先创建这个实例,然后调用Actionexecute()方法; 6)Actionexecute()

法返回一个ActionForward对象,ActionServlet在把客户请求转发给

ActionForward对象指向的JSP组件;

7)ActionForward对象指向JSP组件生成动态网页,返回给客户;

31. 在项目中用过Spring的哪些方面?及用过哪些Ajax框架?

解答:在项目使用过Spring IOC AOPDAOORM,还有上下文

环境。

在项目使用过Ext,JueryAjax框架.

32abstract classinterface有什么区别?

解答:声明方法的存在而不去实现它的类被叫做抽象类(abstract

class,它用于要创建一个体现某些基本行为的类,并为该类声明方法,

但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可

以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实

例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类

中的所有抽象方法提供实现,否则它们也是抽象类。取而代之,在子类中

实现该方法。知道其行为的其它类可以在类中实现这些方法。接口

interface)是抽象类的变体。新型多继承性可通过实现这样的接口而获

得。接口中的所有方法都是抽象的,所有成员变量都是public static final

的。一个类可以实现多个接口,当类实现接口时,必须实现接口的所有方

法。抽象类在Java语言中表示的是一种单继承的关系,对于interface

说则不然,并不要求interface的实现者和interface定义在概念本质上是

一致的,仅仅是实现了interface定义的契约而已。;抽象类中可以定义自

己的成员变量,也可以包含非抽象的方法,而在接口中只能有静态的常

量,所有方法必须是抽象的;实现抽象类时可以只实现其中的部分方法,

而要是实现一个接口的话就必须实现这个接口中的所有抽象方法。

模式中MVC每个代表意义,并简述在StrutsMVC

表现方式。

解答:

MVCModel-View-Controller 的缩写,Model代表的是应用的业

务逻辑(通过JavaBeanEJB组件实现)View 是应用的表示层(由JSP

页面产生)Controller是通过应用的处理过程控制,(一般是一个

servert)通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的

组件实现,这些组件可以进行交互和重用。

Struts框架中Controller功能由ActionServletActionMapping

象构成,核心是一个Servlet类型的对象ActionServlet,它用来接收客户

端的请求。ActionServlet包括一组基于配置的ActionMapping对象,每个

ActionMapping对象实现了一个请求到一个具体的Model部分的Action

处理器对象之间的映射。Model部分由ActionActionForm对象构成。

所有的Action处理器对象都是开发者从StrutsAction类派生的子类。

Action处理器对象封装了具体的处理逻辑,调用业务逻辑模块,并且把响

应提交到合适的View组件以产生响应。Struts提供的ActionForm组件对

象可以通过定义属性描述客户端表单数据,开发者可以从它派生子类对

象,并利用它和Struts提供的自定义标记库相结合,可以实现对客户端的

表单数据的良好封装和支持,Action处理器对象可以直接对它进行读写,

而不再需要和requestresponse对象进行数据交互。通过ActionForm

件对象实现了对ViewModel之间交互的支持(View部分是通过JSP

术实现的)Struts提供了自定义的标记库,通过这些自定义标记库可以

非常容易地和系统的Model部分交互,通过使用这些自定义标记库创建

JSP表单,可以实现对Model部分中的ActionForm的映射,完成对

用户数据的封装。

34java语言中publicprivateprotected三个关键字的用法,重写

和重载的区别。

解答:

作用域 当前类 同包 子类 其它

public √ √ √ √ protected √ √ √ × default √ √ × × private √ ×

× ×

重写:发生在父子类之间,方法名相同,参数的类型、个数、顺序相

同,返回值相同,访问权限不能更封闭,抛出异常不能宽泛;

重载:发生在同一个类中,方法名相同,但是参数不同(类型不同或

个数不同或参数的顺序不同),返回值可以不相同。

页面之间传递参数的方法有哪些?

解答:

1request

2session

3application

4)提交表单

5)超链接

d redirect的区别

解答:forward是容器中控制权的转向,是服务器请求资源,服务器

直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这

些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来

的,所以它的地址栏中还是原来的地址。 redirect就是服务端根据逻辑,

发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用

刚才请求的所有参数重新请求,并且从浏览器的地址栏中可以看到跳转后

的链接地址。前者更加高效,在前者可以满足需要时,尽量使用

forward()方法,并且,这样也有助于隐藏实际的链接;在有些情况下,比

如,需要跳转到一个其它服务器上的资源,则必须使用sendRedirect()

法。

反射机制的作用?

解答:Java反射机制的作用是:

1)在运行时判断任意一个对象所属的类。

2)在运行时构造任意一个类的对象。

3)在运行时判断任意一个类所具有的成员变量和方法。

4)在运行时调用任意一个对象的方法

38.你是怎么理解java的泛型的?

解答: Java SE 1.5之前,没有泛型的情况的下,通过对类型

Object的引用来实现参数的任意化任意化带来的缺点是要做显式的

强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况

下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运

行的时候才出现异常,这是一个安全隐患。

泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说

所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和

方法的创建中,分别称为泛型类、泛型接口、泛型方法。

泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是

自动和隐式的,提高代码的重用率。

源文件中是否可以包括多个类,有什么限制

解答:一个java源文件中可以包含多个类,每个源文件中至多有一

public类,如果有的话,那么源文件的名字必须与之相同。如果源文件

中没有public类,则源文件用什么名字都可以,但最好还是具有特定的意

义,免得自己都不记得里面写的是什么了。

40.在一个千万级的数据库查寻中,如何提高查询效率?分别说出在

数据库设计、SQL语句、java等层面的解决方案。

解答:

1)数据库设计方面:

a. 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where

order by 涉及的列上建立索引。

b. 应尽量避免在 where 子句中对字段进行 null 值判断,否则将导

致引擎放弃使用索引而进行全表扫描,如: select id from t where num is

null 可以在num上设置默认值0,确保表中num列没有null值,然后这

样查询: select id from t where num=0

c. 并不是所有索引对查询都有效,SQL是根据表中数据来进行查询

优化的,当索引列有大量数据重复时,查询可能不会去利用索引,如一表

中有字段sexmalefemale几乎各一半,那么即使在sex上建了索引也

对查询效率起不了作用。

d. 索引并不是越多越好,索引固然可以提高相应的 select 的效率,

但同时也降低了 insert update 的效率,因为 insert update 时有

可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。一个

表的索引数最好不要超过6个,若太多则应考虑一些不常使用到的列上建

的索引是否有必要。

e. 应尽可能的避免更新索引数据列,因为索引数据列的顺序就是表

记录的物理存储顺序,一旦该列值改变将导致整个表记录的顺序的调整,

会耗费相当大的资源。若应用系统需要频繁更新索引数据列,那么需要考

虑是否应将该索引建为索引。

f. 尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符

型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处

理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需

要比较一次就够了。

g. 尽可能的使用 varchar/nvarchar 代替 char/nchar ,因为首先变

长字段存储空间小,可以节省存储空间,其次对于查询来说,在一个相对

较小的字段内搜索效率显然要高些。

h. 尽量使用表变量来代替临时表。如果表变量包含大量数据,请注

意索引非常有限(只有主键索引)

i. 避免频繁创建和删除临时表,以减少系统表资源的消耗。

j. 临时表并不是不可使用,适当地使用它们可以使某些例程更有效,

例如,当需要重复引用大型表或常用表中的某个数据集时。但是,对于一

次性事件,最好使用导出表。

k. 在新建临时表时,如果一次性插入数据量很大,那么可以使用

select into 代替 create table,避免造成大量 log ,以提高速度;如果数

据量不大,为了缓和系统表的资源,应先create table,然后insert

l. 如果使用到了临时表,在存储过程的最后务必将所有的临时表显式

删除,先 truncate table ,然后 drop table ,这样可以避免系统表的较

长时间锁定。

2)SQL语句方面:

a. 应尽量避免在 where 子句中使用!=或操作符,否则将引擎放弃使

用索引而进行全表扫描。

b. 应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引

擎放弃使用索引而进行全表扫描,如: select id from t where num=10 or

num=20 可以这样查询: select id from t where num=10 union all select

id from t where num=20

c. in not in 也要慎用,否则会导致全表扫描,如: select id from

t where num in(1,2,3) 对于连续的数值,能用 between 就不要用 in 了:

select id from t where num between 1 and 3

d. 下面的查询也将导致全表扫描: select id from t where name like

‘%abc%’