java面试大总结(3)
2007-05-27 12:23
701 查看
[/b]
101[/b]、java[/b]中会存在内存泄漏吗,请简单描述。[/b]
会。如:int i,i2; return (i-i2); //when i[/b]为足够大的正数,i2[/b]为足够大的负数。结果会造成溢位,导致错误。[/b]
[/b]
102[/b]、java[/b]中实现多态的机制是什么?[/b]
方法的[/b]重写Overriding[/b]和[/b]重载Overloading[/b]是Java[/b]多态性的不同表现。重写Overriding[/b]是父类与子类之间多态性的一种表现,重载Overloading[/b]是一个类中多态性的一种表现。[/b]
[/b]
103[/b]、垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?[/b]
对于GC[/b]来说,当程序员创建对象时,GC[/b]就开始监控这个对象的[/b]地址[/b]、[/b]大小[/b]以及[/b]使用[/b]情况。通常,GC[/b]采用有向图的方式[/b]记录和管理堆(heap)[/b]中的所有对象。通过这种方式确定哪些对象是"[/b]可达的"[/b],哪些对象是"[/b]不可达的"[/b]。[/b]当GC[/b]确定一些对象为"[/b]不可达"[/b]时,GC[/b]就有责任回收这些内存空间[/b]。可以。程序员可以手动执行System.gc()[/b],通知GC[/b]运行,[/b]但是Java[/b]语言规范并不保证GC[/b]一定会执行。[/b]
[/b]
104[/b]、静态变量和实例变量的区别?[/b]
static i = 10; //[/b]常量[/b]
class A a; a.i =10;//[/b]可变[/b]
[/b]
105[/b]、什么是java[/b]序列化,如何实现java[/b]序列化?[/b]
序列化就是一种用来处理对象流的机制[/b],所谓[/b]对象流也就是将对象的内容进行流化[/b]。可以对流化后的对象进行[/b]读写[/b]操作,也可将流化后的对象传输于[/b]网络[/b]之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。序列化的实现:将需要被序列化的类实现Serializable[/b]接口,该接口没有需要实现的方法,implements Serializable[/b]只是为了标注该对象是可被序列化的,然后使用一个输出流([/b]如:FileOutputStream)[/b]来构造一个ObjectOutputStream([/b]对象流)[/b]对象,接着,使用ObjectOutputStream[/b]对象的writeObject(Object obj)[/b]方法就可以将参数为obj[/b]的对象写出([/b]即保存其状态)[/b],要恢复的话则用输入流。[/b]
[/b]
106[/b]、是否可以从一个static[/b]方法内部发出对非static[/b]方法的调用?[/b]
不可以,[/b]如果其中包含对象的method()[/b];不能保证对象初始化.[/b]
107[/b]、写clone()[/b]方法时,通常都有一行代码,是什么?[/b]
Clone [/b]有缺省行为,super.clone();[/b]他负责产生正确大小的空间,并逐位复制。[/b]
[/b]
108[/b]、在JAVA[/b]中,如何跳出当前的多重嵌套循环?[/b]
用break; return [/b]方法。[/b]
[/b]
109[/b]、List[/b]、Map[/b]、Set[/b]三个接口,存取元素时,各有什么特点?[/b]
List [/b]以[/b]特定次序[/b]来持有元素,可有重复元素。Set [/b]无法拥有重复元素,[/b]内部排序。Map [/b]保存key-value[/b]值,value[/b]可多值[/b]。[/b]
[/b]
110[/b]、J2EE[/b]是什么?[/b]
J2EE[/b]是Sun[/b]公司提出的[/b]多层(multi-diered),[/b]分布式(distributed),[/b]基于组件(component-base)[/b]的企业级应用模型(enterpriese application model).[/b]在这样的一个应用系统中,可按照功能划分为不同的组件,这些组件又可在不同计算机上,并且处于相应的层次(tier)[/b]中。所属层次包括客户层(clietn tier)[/b]组件,web[/b]层和组件,Business[/b]层和组件,[/b]企业信息系统(EIS)[/b]层。[/b]
[/b]
111[/b]、UML[/b]方面 [/b]
标准建模语言UML[/b]。用例图,[/b]静态图([/b]包括类图、对象图和包图),[/b]行为图,[/b]交互图([/b]顺序图,[/b]合作图),[/b]实现图。[/b]
[/b]
112[/b]、说出一些常用的类,包,接口,请各举5[/b]个[/b]
常用的类:BufferedReader BufferedWriter FileReader FileWirter String Integer[/b]
常用的包:java.lang java.awt java.io java.util java.sql[/b]
常用的接口:Remote List Map Document NodeList[/b]
[/b]
113[/b]、开发中都用到了那些设计模式?[/b]用在什么场合? [/b]
每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心。通过这种方式,你可以无数次地使用那些已有的解决方案,无需在重复相同的工作。主要用到了MVC[/b]的设计模式。用来开发JSP/Servlet[/b]或者J2EE[/b]的相关应用。简单工厂模式等。[/b]
[/b]
114[/b]、jsp[/b]有哪些动作?[/b]作用分别是什么? [/b]
JSP[/b]共有以下6[/b]种基本动作 [/b]
jsp:include[/b]:在页面被请求的时候引入一个文件。[/b]
jsp:useBean[/b]:寻找或者实例化一个JavaBean[/b]。 [/b]
jsp:setProperty[/b]:设置JavaBean[/b]的属性。 [/b]
jsp:getProperty[/b]:输出某个JavaBean[/b]的属性。[/b]
jsp:forward[/b]:把请求转到一个新的页面。 [/b]
jsp:plugin[/b]:根据浏览器类型为Java[/b]插件生成OBJECT[/b]或EMBED[/b]标记。[/b]
[/b]
115[/b]、Anonymous Inner Class ([/b]匿名内部类) [/b]是否可以extends([/b]继承)[/b]其它类,是否可以implements([/b]实现)interface([/b]接口)? [/b]
可以继承其他类或完成其他接口,在swing[/b]编程中常用此方式。[/b]
[/b]
116[/b]、应用服务器与WEB SERVER[/b]的区别?[/b]
1[/b]。[/b]应用服务器处理业务逻辑[/b],[/b]web[/b]服务器则主要是让客户[/b]可以通过浏览器进行访问[/b]。[/b][/b]
2[/b]。应用服务器处理业务逻辑,[/b]web[/b]服务器是[/b]用于处理[/b]HTML[/b]文件的[/b]。[/b][/b]
web[/b]服务器通常比应用服务器简单[/b],如[/b]apache[/b]就是[/b]web[/b]服务器,[/b]Jboss [/b]就是[/b]EJB[/b]应用服务器。[/b]应用服务器:Weblogic[/b]、Tomcat[/b]、Jboss[/b];WEB SERVER[/b]:IIS[/b]、 Apache[/b]
[/b]
117[/b]、BS[/b]与CS[/b]的联系与区别。[/b]
C/S[/b]是Client/Server[/b]的缩写。服务器通常采用高性能的PC[/b]、工作站或小型机,并采用大型数据库系统,如Oracle[/b]、Sybase[/b]、Informix[/b]或 SQL Server[/b]。客户端需要安装专用的客户端软件。B/[/b]S是Brower/Server[/b]的缩写,客户机上只要安装一个浏览器(Browser[/b]),如Netscape Navigator[/b]或Internet Explorer[/b],服务器安装Oracle[/b]、Sybase[/b]、Informix[/b]或 SQL Server[/b]等数据库。在这种结构下,用户界面完全通过WWW[/b]浏览器实现,一部分事务逻辑在前端实现,但是主要事务逻辑在服务器端实现。浏览器通过Web Server [/b]同数据库进行数据交互。[/b]
C/S [/b]与 B/S [/b]区别: [/b]
1.硬件环境不同: [/b]
C/S [/b]一般建立在专用的网络上, [/b]小范围里的网络环境, [/b]局域网之间再通过专门服务器提供连接和数据交换服务.[/b]
B/S [/b]建立在广域网之上的, [/b]不必是专门的网络硬件环境,[/b]例与电话上网, [/b]租用设备. [/b]信息自己管理. [/b]有比C/S[/b]更强的适应范围, [/b]一般只要有[/b]
[/b]
操作系统和浏览器就行 [/b]
2.对安全要求不同 [/b]
C/S [/b]一般面向相对固定的用户群, [/b]对信息安全的控制能力很强. [/b]一般高度机密的信息系统采用C/S [/b]结构适宜. [/b]可以通过B/S[/b]发布部分可公开[/b]
[/b]
信息.[/b]
B/S [/b]建立在广域网之上, [/b]对安全的控制能力相对弱, [/b]可能面向不可知的用户。[/b]
3.对程序架构不同 [/b]
C/S [/b]程序可以更加注重流程, [/b]可以对权限多层次校验, [/b]对系统运行速度可以较少考虑.[/b]
B/S [/b]对安全以及访问速度的多重的考虑, [/b]建立在需要更加优化的基础之上. [/b]比C/S[/b]有更高的要求 B/S[/b]结构的程序架构是发展的趋势, [/b]从MS[/b]的[/b]
[/b]
.Net[/b]系列的BizTalk 2000 Exchange 2000[/b]等, [/b]全面支持网络的构件搭建的系统. SUN [/b]和IBM[/b]推的JavaBean [/b]构件技术等,[/b]使 B/S[/b]更加成熟. [/b]
4.软件重用不同 [/b]
C/S [/b]程序可以不可避免的整体性考虑, [/b]构件的重用性不如在B/S[/b]要求下的构件的重用性好.[/b]
B/S [/b]对的多重结构,[/b]要求构件相对独立的功能. [/b]能够相对较好的重用.[/b]就入买来的餐桌可以再利用,[/b]而不是做在墙上的石头桌子 [/b]
5.系统维护不同 [/b]
C/S [/b]程序由于整体性, [/b]必须整体考察, [/b]处理出现的问题以及系统升级. [/b]升级难. [/b]可能是再做一个全新的系统[/b]
B/S [/b]构件组成,[/b]方面构件个别的更换,[/b]实现系统的无缝升级. [/b]系统维护开销减到最小.[/b]用户从网上自己下载安装就可以实现升级. [/b]
6.处理问题不同 [/b]
C/S [/b]程序可以处理用户面固定, [/b]并且在相同区域, [/b]安全要求高需求, [/b]与操作系统相关. [/b]应该都是相同的系统[/b]
B/S [/b]建立在广域网上, [/b]面向不同的用户群, [/b]分散地域, [/b]这是C/S[/b]无法作到的. [/b]与操作系统平台关系最小. [/b]
7.用户接口不同 [/b]
C/S [/b]多是建立的Window[/b]平台上,[/b]表现方法有限,[/b]对程序员普遍要求较高[/b]
B/S [/b]建立在浏览器上, [/b]有更加丰富和生动的表现方式与用户交流. [/b]并且大部分难度减低,[/b]减低开发成本. [/b]
8.信息流不同 [/b]
C/S [/b]程序一般是典型的中央集权的机械式处理, [/b]交互性相对低[/b]
B/S [/b]信息流向可变化, B-B B-C B-G[/b]等信息、流向的变化, [/b]更像交易中心。[/b]
[/b]
118[/b]、LINUX[/b]下线程,GDI[/b]类的解释。[/b]
LINUX[/b]实现的就是基于核心轻量级进程的"[/b]一对一"[/b]线程模型,一个线程实体对应一个核心轻量级进程,而线程之间的管理在核外函数库中实现。 GDI[/b]类为图像设备编程接口类库。[/b]
[/b]
119[/b]、STRUTS[/b]的应用([/b]如STRUTS[/b]架构) [/b]
Struts[/b]是采用Java Servlet/JavaServer Pages[/b]技术,开发Web[/b]应用程序的开放源码的framework[/b]。 [/b]采用Struts[/b]能开发出基于MVC(Model-View-Controller)[/b]设计模式的应用构架。 Struts[/b]有如下的主要功能: [/b]一.[/b]包含一个controller servlet[/b],能将用户的请求发送到相应的Action[/b]对象。 [/b]二.JSP[/b]自由tag[/b]库,并且在controller servlet[/b]中提供关联支持,帮助开发员创建交互式表单应用。 [/b]三.[/b]提供了一系列实用对象:XML[/b]处理、通过Java reflection APIs[/b]自动处理JavaBeans[/b]属性、国际化的提示和消息。[/b]
[/b]
120[/b]、Jdo[/b]是什么? [/b]
JDO[/b]是Java[/b]对象持久化的新的规范,为java data object[/b]的简称,[/b]也是一个用于存取某种数据仓库中的对象的标准化API[/b]。JDO[/b]提供了透明的对象存储,因此对开发人员来说,存储数据对象完全不需要额外的代码(如JDBC API[/b]的使用)。这些繁琐的例行工作已经转移到JDO[/b]产品提供商身上,使开发人员解脱出来,从而集中时间和精力在业务逻辑上。另外,JDO[/b]很灵活,因为它可以在任何数据底层上运行。JDBC[/b]只是面向关系数据库(RDBMS[/b])JDO[/b]更通用,提供到任何数据底层的存储功能,比如关系数据库、文件、XML[/b]以及对象数据库(ODBMS[/b])等等,使得应用可移植性更强[/b]
[/b]
121[/b]、内部类可以引用他包含类的成员吗?有没有什么限制?[/b]
一个内部类对象可以访问创建它的外部类对象的内容[/b]
[/b]
122[/b]、WEB SERVICE[/b]名词解释。JSWDL[/b]开发包的介绍。JAXP[/b]、JAXM[/b]的解释。SOAP[/b]、UDDI,WSDL[/b]解释。 [/b]
Web Service[/b]是基于网络的、分布式的模块化组件,它执行特定的任务,遵守具体的技术规范,这些规范使得Web Service[/b]能与其他兼容的组件进行互操作。JAXP(Java API for XML Parsing) [/b]定义了在Java[/b]中使用DOM, SAX, XSLT[/b]的通用的接口。这样在你的程序中你只要使用这些通用的接口,当你需要改变具体的实现时候也不需要修改代码。JAXM(Java API for XML Messaging) [/b]是为SOAP[/b]通信提供访问方法和传输机制的API[/b]。WSDL[/b]是一种 XML [/b]格式,用于将网络服务描述为一组端点,这些端点对包含面向文档信息或面向过程信息的消息进行操作。这种格式首先对操作和消息进行抽象描述,然后将其绑定到具体的网络协议和消息格式上以定义端点。相关的具体端点即组合成为抽象端点(服务)。SOAP[/b]即简单对象访问协议(Simple Object Access Protocol)[/b],它是用于交换XML[/b]编码信息的轻量级协议。 UDDI [/b]的目的是为电子商务建立标准;UDDI[/b]是一套基于Web[/b]的、分布式的、为Web Service[/b]提供的、信息注册中心的实现标准规范,同时也包含一组使企业能将自身提供的Web Service[/b]注册,以使别的企业能够发现的访问协议的实现标准。[/b]
[/b]
3[/b]、int Integer [/b]的区别:[/b]
Java 提供两种不同的类型:引用类型和原始类型[/b](或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。
原始类型封装类
booleanBoolean
charCharacter
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为[/b] null[/b],而原始类型实例变量的缺省值与它们的类型有关。[/b][/b]
String[/b]类和StringBuffer[/b]类的区别:[/b]
它们都是处理字符串的类,但是它们有一个最大的区别,那就是, String对象是存储你不能改动的文本字符串,相反,如果你希望改动,则应使用StringBuffer类作为替换
StringBuffer是可变的而String是不可变的.
而且String用得多个的话会占用不同的内存.
如:String str = "bb";
str = "aa";
前一个bb的内存地址不变,当又给它赋值为aa时它(str)又指向aa的地址.
而StringBuffer就不会这样.
:"=="[/b]比较的是两个对象的地址,[/b](在字符串中)"equals()"[/b]比较的是两个对象的值.[/b]
集合
Collection 层次结构 中的根接口
Collection 表示一组对象,这些对象也称为 collection 的元素
Java集合的缺点:类型未知
总的说来,Java API中所用的集合类,都是实现了Collection接口,他的一个类继承结构如下:
Collection<--list><--vector>
Collection<--list><--arraylist>
Collection<--list><--linkedlist>
Collection<--set><--hashset>
Collection<--set><--hashset><--linkedhashset>
Collection<--set><--sortedset><--treeset>
List 是基于Array,可以有重复的值
Vector : 基于Array的List很重要的一点就是Vector是“sychronized”的,这个也是Vector和ArrayList的唯一的区别。
ArrayList:基于Array上的链表,但是不同的是ArrayList不是同步的
LinkedList[/b]:它不是基于Array[/b]的,所以不受Array[/b]性能的限制。它每一个节点(Node[/b])都包含两方面的内容:1.[/b]节点本身的数据(data[/b]);2.[/b]下一个节点的信息(nextNode[/b])。所以当对LinkedList[/b]做添加,删除动作的时候就不用像基于Array[/b]的List[/b]一样,必须进行大量的数据移动。只要更改nextNode[/b]的相关信息就可以实现了。这就是LinkedList[/b]的优势[/b]
HashSet:虽然Set同List都实现了Collection接口,但是他们的实现方式却大不一样。List基本上都是以Array为基础。但是Set则是在HashMap的基础上来实现的,这个就是Set和List的根本区别。HashSet的存储方式是把HashMap中的Key作为Set的对应存储
Set总结:
1. Set实现的基础是Map(HashMap);
2. Set[/b]中的元素是不能重复的,如果使用add(Object obj)[/b]方法添加已经存在的对象,则会覆盖前面的对象;[/b]
性能时Map所要面对的一个大问题。如果你知道get()时怎么工作的,你就会发觉(比方说)在[/b]ArrayList[/b]里面找对象会是相当慢的[/b]。而这正是 HashMap的强项。它不是慢慢地一个个地找这个键,而是用了一种被称为hash code的特殊值来进行查找的。散列(hash)时一种算法,它会从目标对象当中提取一些信息,然后生成一个表示这个对象的“相对独特”的int。 hashCode()是Object根类的方法,因此所有Java对象都能生成hash code。HashMap则利用对象的hashCode()来进行快速的查找。这样性能就有了急剧的提高。
设计模式方面
1[/b]、开发中都用到了那些设计模式?[/b]用在什么场合? [/b]
答:每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心。通过这种方式,你可以无数次地使用那些已有的解决方案,无需再重复相同的工作。主要用到了[/b]MVC[/b]的设计模式。用来开发JSP/Servlet[/b]或者J2EE[/b]的相关应用。简单工厂模式[/b]等。
2[/b]、UML[/b]方面 [/b]
答: 标准建模语言UML。 用例图, 静态图 ( 包括 类图、对象图 和 包图 ), 行为图, 交互图
( 顺序图, 合作图 ), 实现图,
*******************************************************************************
1[/b]、 [/b]概述struts[/b],以及struts[/b]如何实现MVC[/b]架构的?[/b]
答:struts framework是一种基于java的技术,Web应用程序开发人员通过struts framework即可充分利用面向对象设计、代码重用以及“编写一次、到处运行”的优点[/b]。Struts提供了一种创建Web应用程序的框架,其中对应用程序的显示、表示和数据的后端代码进行了抽象。Struts[/b]采用jsp[/b]作为MVC[/b]的视图, [/b]由ActionServlet[/b]具体指定的action[/b]动作类作为控制器即MVC[/b]中的C[/b],[/b]负责视图与模型之间的交互。控制器的每个入口点都由名为[/b]struts-config.xml[/b]的配置文件设置[/b]。该文件把来自视图的请求映射为特定的JAVA类以进行相应的处理,控制器还指定下一个视图的位置。Struts中的模型主要指的就是[/b]javabean[/b],它是模型的代表,主要封装数据和业务逻辑。[/b]
Struts的处理流程:
1 [/b]控制器进行初始化工作[/b],读取配置文件,为不同的Struts模块初始化相应的ModulConfig对象。
2 [/b]控制器接收Http[/b]请求,[/b]并从ActionConfig中找出对应于该请求的Action子类,如果没有对应的Action,控制器直接将请求转发给JSP或者静态页面,否则控制器将请求分发至具体的Action类进行处理。
3 [/b]在控制器调用具体的Action[/b]的Execute[/b]方法之前,[/b]ActionForm对象将利用Http请求中的参数来填充自已。还可以在ActionForm类中调用Validate方法来检查请求参数的合法性,并且可以返回一个包含所有错误信息的ActionErrors对象。
4 [/b]执行具体的的Execute[/b]的方法,[/b]它负责执行相应的业务逻辑。执行完后,返回一个ActionForward对象,控制器通过该ActionForward对象来进行转发工作。也可以把Action要处理的业务逻辑封装在JavaBean中,如果系统中还有EJB,那么通过JavaBean调用EJB以完成业务处理;如果没有EJB,那么就直接在JavaBean中连接数据库,进行数据库相关的操作。
*******************************************************************************
2[/b]、 [/b]概述MVC[/b]体系结构[/b]
答:MVC包括三类对象,model是应用对象,view是视图,controller是控制器,它定义用户界面对用户输入的响应方式。
在MVC体系中,模型通常被称为“业务逻辑”[/b],是真正完成任务的代码[/b],视图就是使用界面,反映数据的变化[/b]。控制器控制着模型和视图之间的交互过程,它决定着向用户返回怎样的视图、检查通过界面输入的信息以及选择处理输入信息的模型
在MVC[/b]中,表示层和逻辑层分离,各部分可相互独立进行开发,便于开发和维护,提高了开发效率。[/b]
3[/b]、[/b] [/b]多线程的优点[/b][/b]
答:可分两方面来答:
? [/b]相对于单线程而言 [/b]:[/b]
可以响应多任务的并发操作[/b]。
多线程取消了主循环和轮流检测[/b]机制,一个线程可以暂停而不阻止系统其他的部分的执行,而且当程序中一个线程阻塞时,只有那个被阻塞的线程暂停,所有其他的线程继续执行。
? [/b]相对于进程而言:([/b]可以答也可以不答)[/b]
它所要求的开销比较小,转换成本较小。
所有线程共享同一地址空间,相互协作。
彼此之间通信很容易。
4[/b]、[/b] EJB[/b]概述[/b]
[/b]答:[/b]EJB[/b]是企业级的[/b]JavaBean[/b],它提供了构建企业级业务逻辑的一种组件模型。[/b]
EJB[/b]分为三种:[/b]Session Bean Entity Bean Message-Driven Bean [/b]三种,其中[/b]Session Bean[/b]分为有状态和无状态[/b]Session Bean[/b]两种[/b],Entity Bean[/b]分为容器管理的[/b]Entity Bean ( CMP ) [/b]和[/b] Bean[/b]管理的[/b] Entity Bean ( BMP )[/b]。每一个[/b]EJB[/b]由一个远程接口、一个本地接口和一个[/b]EJB[/b]容器实现组成,远程接口声明了提供给[/b]EJB[/b]客户调用的各种应用方法,本地接口声明了创建新的[/b]EJB[/b]实例的[/b]create[/b]方法、寻找[/b]EJB[/b]实例的查找[/b](finder)[/b]方法以及刪除[/b]EJB[/b]实例的[/b]remove[/b]方法。[/b]EJB[/b]容器提供了[/b]EJB[/b]的运行环境和生命周期的管理。[/b]
4[/b]、 [/b]用java[/b]访问Oracle[/b]数据库、取得记录并输出到界面[/b]
答:……………………..
Class.forName(“oracle.jdbc.driver.OracleDriver”);
Connection conn=DriverManager.getConnection( url , username , password );
Statement stmt=conn.createStatement();
String str=”select * from