现在的位置: 首页 > 综合 > 正文

最全面的java面试题—–是你更好的掌握java知识

2013年02月19日 ⁄ 综合 ⁄ 共 21817字 ⁄ 字号 评论关闭
文章目录

 

                                          最全面的java面试题-----是你更好的掌握java知识

目录

l     概念题--- 1

一、        JAVA基础--- 1

1)      面向对象的特征--- 1

2)      什么是OOP?什么是类?请对比类和对象实例之间的关系。--- 1

3)      简述类与对象的概念--- 2

4)      什么是属性与方法?--- 2

5)      什么是封装?--- 2

6)      描述一下JVM加载class文件的原理机制--- 2

7)      Java程序怎么优化?--- 2

8)      一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?--- 2

9)      char型变量中能不能存贮一个中文汉字--- 3

10)        逻辑操作符 (&,|,^)与条件操作符(&&,||)的区别--- 3

11)        Math.round(11.5)等於多少? Math.round(-11.5)等於多少?--- 3

12)        Java有没有goto?--- 3

13)        int 和 Integer 的区别--- 3

14)        如何将数值型字符转换为数字?如何去小数四舍五入保留小数点后两位。--- 3

15)        short s1 = 1; s1 = s1 + 1;和short s1 = 1; s1 += 1;有什么错误--- 3

16)        float f=3.4是否正确?- 4

17)        String 和StringBuffer的区别--- 4

18)        String是否是最基本的数据类型,能否被继承--- 4

19)        String s = new String("xyz");创建了几个String Object?--- 4

20)        数组有没有length()这个方法? String有没有length()这个方法?--- 4

21)        排序都有哪几种方法?用JAVA实现一个快速排序--- 4

22)        swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上--- 5

23)        在JAVA中,如何跳出当前的多重嵌套循环?--- 5

24)        关于日期和时间的几个问题--- 5

25)        一个对象被当作参数传递到一个方法,是值传递还是引用传递--- 5

26)        什么时候用assert?--- 5

27)        GC是什么? 为什么要有GC?--- 5

28)        垃圾回收的优点和原理--- 5

29)        垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?--- 6

30)        java中会存在内存泄漏吗,请简单描述--- 6

31)        java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,他们分别是哪些类?--- 6

32)        文件和目录(I/O)操作--- 6

33)        什么是java序列化?如何实现java序列化?--- 7

34)        JAVA事件委托机制的概念--- 7

35)        谈谈你对Swing的MVC模式的理解?--- 7

36)        MVC结构在JTable中怎样实现的,这种结构有什么好处?--- 8

二、        类与继承--- 9

37)        说出一些常用的类,包,接口,请各举5个--- 9

38)        接口有什么优点?--- 9

39)        静态变量和实例变量的区别--- 9

40)        是否可以从一个static方法内部发出对非static方法的调用?--- 9

41)        java 有几种修饰符?分别用来修饰什么?--- 9

42)        作用域public,private,protected,以及不写时的区别--- 10

43)        final, finally, finalize的区别--- 10

44)        内部类可以引用他包含类的成员吗?有没有什么限制?--- 10

45)       匿名内部类是否可以继承其它类?是否可以实现接口?--- 10

46)        java中实现多态的机制是什么?--- 11

47)        Overload和Override的区别,Overloaded的方法能否改变返回值的类型?--- 11

48)        abstract class和interface的区别--- 11

49)        接口是否可继承接口? 抽象类是否可实现接口? 抽象类是否可继承实体类?- 11

50)        abstract的method是否可同时是static或native或synchronized?--- 11

51)        构造器Constructor是否可被override- 11

52)        写clone()方法时,通常都有一行代码,是什么?--- 12

53)        Object类的概述--- 12

三、        异常--- 13

54)        Java中的异常处理机制的简单原理和应用。--- 13

55)        JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?    13

56)        error和exception的区别--- 13

57)        运行时异常与一般异常的区别--- 14

58)        给我一个你最常见到的runtime exception(运行时异常) 14

59)        try 里有一个return语句,那finally 里的代码会不会被执行?在return前还是后执行?--- 14

四、        集合--- 15

60)        集合类都有哪些--- 15

61)        介绍JAVA中的Collection FrameWork- 15

62)        ArrayList和Vector的区别--- 15

63)        HashMap和Hashtable的区别--- 15

64)        Collection 和 Collections的区别--- 16

65)        说出ArrayList,Vector, LinkedList的存储性能和特性--- 16

66)        heap和stack的区别--- 16

67)        List, Set, Map是否继承自Collection接口?--- 16

68)        List, Set, Map三个接口,存取元素时,各有什么特点?--- 16

69)        Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?    17

70)        两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对--- 17

五、        多线程--- 18

71)        启动一个线程是用run()还是start()?--- 18

72)        sleep() 和 wait() 的区别--- 18

73)        stop()和suspend()方法为何不推荐使用?--- 18

74)        同步和异步有何异同,在什么情况下分别使用他们--- 18

75)        当一线程进入一对象的一个synchronized方法后,其它线程可否进入此对象的其它方法--- 18

76)        线程同步的方法--- 19

77)        多线程有几种实现方法--- 19

78)        线程的基本概念、线程的基本状态以及状态之间的关系--- 19

79)        简述synchronized和java.util.concurrent.locks.Lock的异同--- 19

80)        多线程的优点--- 19

六、        JDBC及数据库相关--- 21

81)        Class.forName的作用?为什么要用?- 21

82)        JDBC调用数据库的基本步骤--- 21

83)        说出数据连接池的工作机制是什么?--- 21

84)        JDO是什么?- 21

85)        动态查询如何实现?表的结构变化后,如果不需要修改程序,如何设计和实现查询?--- 21

86)        如何优化数据库,如何提高数据库的性能?--- 21

87)        设计数据库应注意那些问题--- 22

88)        表与表之间的关联关系--- 22

89)        主键和外键的区别--- 22

90)        名词解释:批、触发器、事务、锁、子查询、索引、视图、存储过程--- 22

91)        游标的作用?如何知道游标已经到了最后?--- 23

92)        事前触发和事后触发有何区别?语句级触发和行级触发有何区别?--- 23

93)        数据库设计的必要性及设计步骤--- 24

94)        什么是数据模型?什么是规范化?--- 24

95)        谈谈数据库设计的三范式--- 24

七、        JSP和Servlet 25

96)        forward 和sendRedirect的区别--- 25

97)        JSP中动态INCLUDE与静态INCLUDE的区别--- 25

98)        JSP的内置对象及方法--- 25

99)        JSP的常用指令--- 25

100)      说出Servlet的生命周期,并说出Servlet和CGI的区别--- 26

101)      什么情况下调用doGet()和doPost() 26

102)      如何现实servlet的单线程模式--- 26

103)      描述Cookie和Session的作用,区别和各自的应用范围,Session工作原理--- 26

104)      页面间对象传递的方法--- 27

105)      JSP和Servlet有哪些相同点和不同点,他们之间的联系--- 27

106)      四种会话跟踪技术--- 27

107)      Request对象的主要方法--- 27

108)      Servlet执行时一般实现哪几个方法--- 28

109)      说出在JSP页面里是怎么分页的?- 28

八、        J2EE基础--- 29

110)      J2EE是什么?--- 29

111)      J2EE中常用的名词解释--- 29

112)      名词解释:WEB SERVICE、JAXP、JAXM、SOAP、UDDI、WSDL- 30

113)      J2EE是技术还是平台还是框架?--- 30

114)      XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式?--- 30

115)      你在项目中用到了xml技术的哪些方面?如何实现的?- 31

116)      j2ee常用的设计模式?说明工厂模式--- 31

九、        STRUTS- 32

117)      MVC的各个部分都有那些技术来实现?如何实现?- 32

118)      概述struts,以及struts如何实现MVC架构的?--- 32

119)      简单描述STRUTS的主要功能--- 32

120)      Struts的处理流程--- 32

十、        EJB- 34

121)      EJB2.0有哪些内容?分别用在什么场合? EJB2.0和EJB1.1的区别?- 34

122)      EJB与JAVA BEAN的区别?--- 34

123)      EJB是基于哪些技术实现的?并说出SessionBean和EntityBean,StatefulBean和StatelessBean的区别    34

124)      EJB包括SessionBean和EntityBean,说出他们的生命周期,及如何管理事务的?--- 35

125)      EJB的角色和三个对象--- 35

126)      EJB容器提供的服务--- 35

127)      EJB规范规定EJB中禁止的操作有哪些?--- 35

128)      remote接口和home接口主要作用--- 36

129)      bean 实例的生命周期--- 36

130)      EJB的激活机制--- 36

131)      EJB的几种类型--- 36

132)      客服端调用EJB对象的几个基本步骤--- 36

133)      EJB需直接实现它的业务接口或Home接口吗,请简述理由--- 36

十一、       应用服务器--- 37

134)      应用服务器有那些?--- 37

135)      应用服务器与WEB 服务器的区别?--- 37

136)      如何给weblogic指定大小的内存?- 37

137)      如何设定的weblogic的热启动模式(开发模式)与产品发布模式?- 37

138)      如何启动时不需输入用户名与密码?- 37

139)      在weblogic管理制台中对一个应用域进行jms及ejb或连接池等相关信息进行配置后,实际保存在什么文件中?  37

140)      说说weblogic中一个Domain的缺省目录结构--- 37

141)      在weblogic中发布ejb需涉及到哪些配置文件--- 37

142)      如何在weblogic中进行ssl配置与客户端的认证配置或说说j2ee(标准)进行ssl的配置--- 38

143)      如何查看在weblogic中已经发布的EJB?- 38

l     改错题--- 39

1) 39

2) 39

3) 39

4) 39

5) 40

6) 40

7) 40

8) 41

9) 41

10) 41

11) 42

l     编程题--- 44

1)      在控制台中输入一个字符串,然后按照逆序打印出来--- 44

2)      设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。--- 44

3)      将一个键盘输入的数字转化成中文输出(例如:输入1234567,输出:一百二拾三万四千五百六拾七),请用java语言编一段程序实现! 45

4)      写一个Singleton出来--- 49

5)      我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串    50

6)      现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序,结果为,提供reset 51

7)      继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么?- 52

8)      同上,关于内部类的实现方式--- 52

9)      关于内部类实现的一道选择题--- 53

10)        用JAVA实现一种排序--- 54

11)        编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。    55

12)        用JAVA SOCKET编程,读服务器几个字符,再写入本地显示--- 56

13)        写一段Jdbc连Oracle的程序,并实现数据查询. 58

14)        ORACLE大数据量下的分页解决方法。一般用截取ID方法,还有是三层嵌套方法。--- 60

15)        用JAVA解析XML的方式. 61

16)        用jdom解析xml文件时如何解决中文问题?如何解析?- 63

l     其它--- 65

1)      描述一下你最常用的编程风格。--- 65

 


 概念题

一、      JAVA基础

1)         面向对象的特征

1. 抽象:
抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象包括两个方面,一是过程抽象,二是数据抽象。
2.继承:
继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。
3.封装:
封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。
4.多态:
多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。

2)         什么是OOP?什么是类?请对比类和对象实例之间的关系。

OOP是Object_oriented Programming(面向对象编程)的缩写。这主要是为了区别于以前的面向过程的程序设计!指的是用对象的观点来组织与构建系统,它综合了功能抽象和数据抽象,这样可以减少数据之间的耦合性和代码的出错几率。使用面向对象编程技术可以使得软件开发者按照现实世界里人们思考问题的模式编写代码,可以让软件开发者更好地利用代码直接表达现实中存在的对象,将问题空间直接映射到解空间!

类:即class 在面向对象的程序设计中,专门用“类”来表示用户定义的抽象数据类型(user_defined abstract type)。它将具有相同状态、操作和访问机制的多个对象进行了抽象。类具有继承、数据隐藏和多态三种主要特性。利用类的这三种特性可以更好地表示现实世界中事物。类是同一类对象实例的共性的抽象,对象是类的实例化。对象通常作为计算机模拟思维,表示真实世界的抽象,一个对象就像一个软件模块,可以为用户提供一系列的服务---可以改变对象的状态、测试、传递消息等。类定义了对象的实现细节或数据结构。类是静态的,对象是动态的,对象可以看作是运行中的类。类负责产生对象,可以将类当成生产对象的工厂(Object
factory)

3)         简述类与对象的概念

所谓对象就是真实世界中的实体,对象与实体是一一对应的,也就是说现实世界中每一个实体都是一个对象,它是一种具体的概念。
类是具备某些共同特征的实体的集合,它是一种抽象的概念,用程序设计的语言来说,类是一种抽象的数据类型,它是对所具有相同特征实体的抽象。

4)         什么是属性与方法?

不同对象具有相同特点,就可能抽象为一定的类,那么这些特点基本上可以分为两类,一类是描述对象静态状态的,就是对象的属性,在程序设计中,可以称之为变量;另一类是描述对象的动作,就是对象的方法,在程序设计中我们称之为函数。属性和方法是一个对象所具备的两大基本要素,也是我们后面编程工作的核心。

5)         什么是封装?

只要有足够的方法,就没必要直接去操作对象属性,只要调用这些方法就可以实现要完成的任务,这种现象称为封装,它通过对象方法对其属性的操作把对象属性封装在一个对象内部,对象与外界打交道全部通过其自身的方法来实现,有效的把对象属性隐藏在对象内部。

6)         描述一下JVM加载class文件的原理机制

JVM中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoader 是一个重要的Java运行时系统组件。它负责在运行时查找和装入类文件的类。

7)         Java程序怎么优化?

答:提高JAVA的性能,一般考虑如下的四个主要方面:
1、程序设计的方法和模式 
2、JAVA布署的环境。
3、JAVA应用程序的实现
4、硬件和操作系统
为了提高JAVA程序的性能,需要遵循如下的六个步骤。 a) 明确对性能的具体要求 b) 了解当前程序的性能 c) 找到程序的性能瓶颈  d) 采取适当的措施来提高性能 e) 只进行某一方面的修改来提高性能 f) 返回到步骤c) 继续作类似的工作,一直达到要求的性能为止。

8)         一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?

可以。必须只有一个类名与文件名相同。

9)         char型变量中能不能存贮一个中文汉字

能够定义成为一个中文的,因为java中以unicode编码,一个char占16个字节,所以放一个中文是没问题的

1)      

2)      

3)      

4)      

5)      

6)      

7)      

8)      

9)      

10)     逻辑操作符 (&,|,^)与条件操作符(&&,||)的区别

1. 条件操作符:
只能用于关系运算,会产生短路,即该符号左边的表达式可以确定整个关系表达式的值时,便不再运算右边的表达式
2. 逻辑操作符:
不仅可以用于关系运算,还可以用于位运算。不会产生短路,即无论左边表达式取什么值都要运算右边的表达式

11)      Math.round(11.5)等於多少? Math.round(-11.5)等於多少? 

 Math.round(11.5)等于12;Math.round(-11.5)等于-11。

1)      

2)      

3)      

4)      

5)      

6)      

7)      

8)      

9)      

10)      

11)      

12)     Java有没有goto?

 Java中的保留字,现在没有在Java中使用。

13)     int 和 Integer 的区别

Java 提供两种不同的类型:引用类型和原始类型(基本数据类型)。int是java的原始类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类:
Boolean-Boolean  char-Character               byte-Byte                 short-Short
int-Integer               long-Long                          float-Float               double-Double

引用类型和原始类型具有不同的特征和方法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储等。当引用类型和原始类型用作某个类的实例数据时所指定的缺省值不同:对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。

14)     如何将数值型字符转换为数字?如何去小数四舍五入保留小数点后两位。

1、Integer.parseInt(“111”);Double.parseDouble(“11.22”);
2、double num = 2.625; double tmp = Math.round(num * 100) / 100d;

15)     short s1 = 1; s1 = s1 + 1;和short s1 = 1; s1 += 1;有什么错误

short s1 = 1; s1 = s1 + 1;有错,数据库类型不匹配
short s1 = 1; s1 += 1;没有错误

16)     float f=3.4是否正确?

不正确。精度不准确,应该用强制类型转换,如下所示:float f=(float)3.4或者 float f = 3.4f;

17)     String 和StringBuffer的区别

String类提供了数值不可改变的字符串,而StringBuffer类提供的字符串可以进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用 StringBuffer来动态构造字符数据。

18)     String是否是最基本的数据类型,能否被继承

不是。基本数据类型包括byte、short、int、long、char、float、double和boolean。String类是final类型的,因此不可以继承这个类、不能修改这个类。

19)      String s = new String("xyz");创建了几个String Object? 

 创建了两个String Object对象
"xyz"本身作为字符常量,在汇编语言中应该作为常量放在数据段,Java有一个类似数据段的constant pool保存这个常量,在classloader加载这个类的时候就把"xyz"和这个类的其他一些信息放在constant pool。new  String("xyz")根据常量"xyz"在heap上创建String对象。所以,一共两个对象

20)     数组有没有length()这个方法? String有没有length()这个方法?

数组没有length()这个方法,有length的属性。String有length()这个方法。

21)     排序都有哪几种方法?用JAVA实现一个快速排序

排序的方法有:插入排序(直接插入排序、希尔排序),交换排序(冒泡排序、快速排序),选择排序(直接选择排序、堆排序),归并排序,分配排序(箱排序、基数排序)
快速排序的伪代码。
/ /使用快速排序方法对a[ 0 :n- 1 ]排序
从a[ 0 :n- 1 ]中选择一个元素作为m i d d l e,该元素为支点
把余下的元素分割为两段left 和r i g h t,使得l e f t中的元素都小于等于支点,而right 中的元素都大于等于支点
递归地使用快速排序方法对left 进行排序
递归地使用快速排序方法对right 进行排序
所得结果为l e f t + m i d d l e + r i g h t

22)     swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上

switch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。Long,string 都不能作用于swtich。

23)     在JAVA中,如何跳出当前的多重嵌套循环?

用break; return 方法。

24)     关于日期和时间的几个问题 

1、如何取得年、月、日,小时、分、秒:
Date dat=new Date();dat.getYear();dat.getMonth();dat.getDay();dat.getHours();...
2、如何取得从1970年到现在的毫秒数:
long now=dat.getTime();
3、如何格式化日期
DateFormate df=DateFormate.getInstance();df.Format(dat);

25)     一个对象被当作参数传递到一个方法,是值传递还是引用传递

是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。

26)     什么时候用assert?

assertion (断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。在实现中,assertion就是在程序中的一条语句,它对一个 boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。一般来说,assertion用于保证程序最基本、关键的正确性。assertion检查通常在开发和测试时开启。为了提高性能,在软件发布后,assertion检查通常是关闭的。

27)     GC是什么? 为什么要有GC?

GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。

28)     垃圾回收的优点和原理

垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清楚和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。

29)     垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?

对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是"可达的",哪些对象是"不可达的"。当GC确定一些对象为"不可达"时,GC就有责任回收这些内存空间。可以。程序员可以手动执行System.gc(),通知GC运行,但是Java语言规范并不保证GC一定会执行。

30)     java中会存在内存泄漏吗,请简单描述

会。如:int i,i2; return (i-i2); //when i为足够大的正数,i2为足够大的负数。结果会造成溢位,导致错误。

Java的一个重要优点就是通过垃圾收集器(Garbage Collection,GC)自动管理内存的回收,程序员不需要通过调用函数来释放内存。因此,很多程序员认为Java不存在内存泄漏问题,或者认为即使有内存泄漏也不是程序的责任,而是GC或JVM的问题。其实,这种想法是不正确的,因为Java也存在内存泄露,但它的表现与C++不同。

31)     java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,他们分别是哪些类?

字节流,字符流。字节流继承于InputStream、 OutputStream,字符流继承于InputStreamReader 、OutputStreamWriter。

32)     文件和目录(I/O)操作 

1、如何列出某个目录下的所有文件,如何列出某个目录下的所有子目录:
public void listFile(String rp) {
   File file=new File(rp);
   File list[]=file.listFiles();
   for(int i=0;i<list.length;i++)   {
     if (list[i].isDirectory()) {
      new ListFiles().listFile(list[i].toString());
     }
     else {
      listFileStr+=list[i].getAbsolutePath()+"\r\n";
      System.out.println(list[i].getAbsolutePath());
     }
 }
2、判断一个文件或目录是否存在:
File file=new File(“c:\aa.txt”);if(file.exists()){System.out.print(“存在”)};
3、如何读写文件
读:BufferdReader br = new BufferdReader(new FileReader(“c:\aa.txt”));br.readLine();
写:BufferdWriter bw = new BufferdWriter (new FileWriter(“c:\aa.txt”));bw.write(“Hello”);

33)     什么是java序列化?如何实现java序列化?

序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。
序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个 ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。

34)     JAVA事件委托机制的概念

java 事件委托机制的概念:一个源产生一个事件并将它送到一个或多个监听器那里。在这种方案中,监听器简单的等待,直到它收到一个事件。一旦事件被接受,监听器将处理这个事件,然后返回。

35)     谈谈你对Swing的MVC模式的理解?

Swing号称是完全按照MVC的思路来进行设计的。在设计开始前,Swing的希望能够达到的目标就包括:
模型驱动(Model-Driven)的编程方式。提供一套单一的API,但是能够支持多种视感(look-and-feel),为用户提供不同的界面。严格的说,Swing中的MVC实际上是MVC的一个变体:M-VC。 Swing中只显示的定义了Model接口,而在一个UI对象中集成了视图和控制器的部分机制。View和Control比较松散的交叉组合在一起,而更多的控制逻辑是在事件监听者部分引入的。但是,这并没有妨碍在Swing中体现MVC的精髓。事实上,在Swing的开发初期,Swing确实是按照标准的MVC模式来设计的,但是很快的问题就出现了:View和Controller实际上是紧密耦合的,很难作出一个能够适应不同View的一般化的Controller来,而且,一般也没有很大的必要。

36)     MVC结构在JTable中怎样实现的,这种结构有什么好处?

在JTable中不存储它的单元数据,它的所有实例把它们的单元值交给实现了TableModel接口的对象来维护和管理,所以在MVC结构中,Jtable的表格主要体现了一个V的作用,其表格将数据变化体现出来,而数据模型则体现了M的作用,封装数据和业务逻辑。

在这种MVC结构中,表示层和逻辑层分离,各部分可相互独立进行开发,便于开发和维护,提高了开发效率。


二、      类与继承

37)     说出一些常用的类,包,接口,请各举5个

常用的类:String,BufferedReader,Integer,ArrayList,Vector
常用的包:java.lang ,java.awt ,java.io ,java.util ,java.sql
常用的接口:Collection,List,Map,Serializable,Runnable

38)     接口有什么优点?

答:接口有以下优点:

1、接口只是一个框架而没有实现,因此在接口定义时不需要考虑接口中的方法如何实现。

2、利用接口可达到实现多继承的目地。

3、可以在不暴露对象的类的前提下,暴露对象的编程接口。

4、不用强迫类关系在无关类中截获相似处(采用适配器就可以了)。

5、声明想执行的一个或多个方法。

39)     静态变量和实例变量的区别

静态变量也称作类变量,由static修饰,如:static int ss; ss就是静态变量,它只能通过类来访问。

实例变量没有static修饰符,它只能通过实例对象来访问。

同一类的不同的实例对象有自己的实例变量,但是它们共享同一个静态变量。当一个实例对象修改了它的实例变量时,不会影响其他的实例对象。如果一个实例对象修改了静态变量,则会影响其他的对象实例。

40)     是否可以从一个static方法内部发出对非static方法的调用?

不可以,如果其中包含对象的method(),不能保证对象初始化.

41)     java 有几种修饰符?分别用来修饰什么?

答:(注:修饰符是影响类、变量及成员方法的生存空间和可访问性的关键字)

修饰符              类     成员方法 成员变量 局部变量

abstract          √              √              -              -

static               -             √             √              -

public              √             √             √             -

protected      -             √             √             -

private            -             √             √             -

private             -             √             √             -

protected        -             √             √             -

synchronized         -             √             -             -

native              -             √             -             -

volatile           -             -             √             -

final                 √             √             √             -

transient         -            -             √             √

42)     作用域public,private,protected,以及不写时的区别

区别如下:
作用域       当前类      同包      子孙类    不同包
public           √            √             √              √
protected      √            √             √              ×
friendly        √            √             ×              ×
private         √            ×             ×              ×

不写时默认为friendly

43)     final, finally, finalize的区别

1.final :
用于声明属性,方法和类,分别表示属性不可变(为常量),方法不可覆盖(不可重写),类不可继承。
2.finally:
是异常处理语句结构的一部分,表示总是执行。
3.finalize:
是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。 

44)     内部类可以引用他包含类的成员吗?有没有什么限制?

根据内部类是否为static分为两种讨论:
1.静态内部类可以有静态和非静态的成员,但它们只能访问包含类的静态成员
2.非静态内部类不能有静态成员,它可以访问包含类的任何成员,无论它们有什么访问属性。它还可以访问包含类下任何静态内部类的静态成员

45)    匿名内部类是否可以继承其它类?是否可以实现接口? 

可以继承其他类,也可以实现接口。

46)     java中实现多态的机制是什么?

方法的重写Overriding和重载Overloading是Java多态性的不同表现。

47)     Overload和Override的区别,Overloaded的方法能否改变返回值的类型?

方法的重写Overriding和重载Overloading是Java多态性的不同表现。
重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。
如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。
如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。

48)     abstract class和interface的区别

声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类。
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof
运算符可以用来决定某对象的类是否实现了接口。

49)     接口是否可继承接口? 抽象类是否可实现接口? 抽象类是否可继承实体类?

接口可以继承接口。抽象类可以实现接口,抽象类可继承实体类,但前提是实体类必须有明确的构造函数。

50)     abstract的method是否可同时是static或native或synchronized?

都不能

51)     构造器Constructor是否可被override

构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。

52)     写clone()方法时,通常都有一行代码,是什么?

Clone 有缺省行为,super.clone();他负责产生正确大小的空间,并逐位复制。

53)     Object类的概述

Object类是所有其他的类的超类,Object的一个变量可以引用任何其他类的对象。因为数组是作为类实现的,所以Object的一个变量也可以引用任何数组,它包括以下几种方法:

clone()  equals()  finalize()  getClass()  hashCode()  notify()  notifyAll()  toString()  wait()


三、      异常

1)      

2)      

3)      

4)      

5)      

6)      

7)      

8)      

9)      

10)      

11)      

12)      

13)      

14)      

15)      

16)      

17)      

18)      

19)      

20)      

21)      

22)      

23)      

24)      

25)      

26)      

27)      

28)      

29)      

30)      

31)      

32)      

33)      

34)      

35)      

36)      

37)      

38)      

39)      

40)      

41)      

42)      

43)      

44)      

45)      

46)      

47)      

48)      

49)      

50)      

51)      

52)      

53)      

54)     Java中的异常处理机制的简单原理和应用。

当JAVA 程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况。一种是JAVA类库内置的语义检查。例如数组下标越界,会引发IndexOutOfBoundsException;访问null的对象时会引发NullPointerException。另一种情况就是JAVA允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用throw关键字引发异常。所有的异常都是 java.lang.Thowable的子类。

55)     JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?

Java 通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。在Java中,每个异常都是一个对象,它是Throwable类或其它子类的实例。当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并进行处理。Java的异常处理是通过5个关键词来实现的:try、catch、throw、throws和finally。一般情况下是用try来执行一段程序,如果出现异常,系统会抛出(throws)一个异常,这时候你可以通过它的类型来捕捉(catch)它,或最后(finally)由缺省处理器来处理。
用try来指定一块预防所有"异常"的程序。紧跟在try程序后面,应包含一个catch子句来指定你想要捕捉的"异常"的类型。
throw语句用来明确地抛出一个"异常"。
throws用来标明一个成员函数可能抛出的各种"异常"。
finally为确保一段代码不管发生什么"异常"都被执行一段代码。
可以在一个成员函数调用的外面写一个try语句,在这个成员函数内部写另一个try语句保护其他代码。每当遇到一个try语句,"异常"的框架就放到堆栈上面,直到所有的try语句都完成。如果下一级的try语句没有对某种"异常"进行处理,堆栈就会展开,直到遇到有处理这种"异常"的try语句。

56)     error和exception的区别

error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。
exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。一般要求程序对其进行捕获及处理。

57)     运行时异常与一般异常的区别

异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。

58)     给我一个你最常见到的runtime exception(运行时异常)

ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException,
IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException,
RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException

59)     try 里有一个return语句,那finally 里的代码会不会被执行?在return前还是后执行?

会执行,在return前执行。


四、      集合

60)     集合类都有哪些

最常用的集合类是 List 和 Map。 List 的具体实现包括 ArrayList 和 Vector,它们是可变大小的列表,比较适合构建、存储和操作任何类型对象的元素列表。 List 适用于按数值索引访问元素的情形。
Map 提供了一个更通用的元素存储方法。 Map 集合类用于存储元素对(称作"键"和"值"),其中每个键映射到一个值。

61)     介绍JAVA中的Collection FrameWork

答:Collection FrameWork如下:
  Collection
  ├List
  │├LinkedList
  │├ArrayList
  │└Vector
  │ └Stack
  └Set
  Map
  ├Hashtable
  ├HashMap
  └WeakHashMap
Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)
Map提供key到value的映射

62)     ArrayList和Vector的区别

答:就ArrayList与Vector主要从二方面来说:
1、同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的
2、数据增长:当需要增长时,Vector默认增长为原来一倍,而ArrayList却是原来的一半

63)     HashMap和Hashtable的区别

 HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值    (key),由于非线程安全,效率上可能高于Hashtable。具体区别如下:
1、HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
2、HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。
3、Hashtable继承自Dictionary类,而HashMap是 Map接口的一个实现。
4、最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现 同步,而HashMap 就必须为之提供外同步。
Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异  

64)     Collection 和 Collections的区别

Collection是集合类的上级接口,继承与他的接口主要有Set 和List.
Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

65)     说出ArrayList,Vector, LinkedList的存储性能和特性

ArrayList 和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢
LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差

66)     heap和stack的区别

栈是一种线形集合,其添加和删除元素的操作应在同一段完成。栈按照后进先出的方式进行处理。
堆是栈的一个组成元素

67)     List, Set, Map是否继承自Collection接口?

由Collection接口派生的两个接口是List和Set。

List和Set的区别:List必须保持元素特定的顺序,而Set不能有重复元素。
Map不是继承自Collection接口

68)     List, Set, Map三个接口,存取元素时,各有什么特点?

List 以特定次序来持有元素,可有重复元素。Set 无法拥有重复元素,内部排序。Map保存key-value值,value可多值。

69)     Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?

Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。
==方法判断引用值是否指向同一对象,equals()是当两个分离的对象的内容和类型相配的话,返回真值。

70)     两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对

不对,有相同的hash code。


五、      多线程

一、      

二、      

三、      

71)     启动一个线程是用run()还是start()?

启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。

1      

2      

3      

4      

5      

6      

7      

8      

9      

10  

抱歉!评论已关闭.