Java基础知识&Spring&Ajax面试题

1. Java平台分为哪几个版本?

Java平台有3个版本:适合于小型设备和智能卡的JavaME(Java Platform Micro EditionJava微型版)、适用于桌面系统的JavaSE(Java Platform Standar EditionJava标准版)和适用于企业级应用的JavaEE(Java Platform Enterprise EditionJava企业版)

2. 什么是Java EE?它包含哪些技术?

JavaEE(Java Enterprise Edition)Sun一个开发分布式企业级应用的规范和标准

它包含JavaBeanJNDIJDBCXML,EJBJSPServletJCAJSFJACCJAXPJAXRJAFJMSJMXJTAJAX-WS等技术。

3. 试比较StringStringBufferStringBuilder的区别。

这三个类都可以储存和操作字符串,即包含多个字符的字符数据。对于String类,一个字符串对象一旦被配置,它的内容是固定不变。而这个StringBuffer类提供的字符串可进行修改。当你知道字符数据要改变的时候你就可以使用StringBufferStringBuilderStringBuilderJavaSE5.0中新增的类,它被设计为与StringBuffer具有相同的操作接口,在单机非多线程的情况下使用StringBuilder会有较好的效率,因为StringBuilder没有处理同步问题,StringBuffer则会处理同步问题,如果stringBuilder会在多线程下被操作,则要改用StringBuffer,让对象自行管理同步问题。

4. 说出ArrayList,Vector, LinkedList的存储性能和特性。

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

5. 试比较HashMapHashtable的区别。

HashMapHashtable的轻量级实现(非线程安全的实现),他们都实现了Map接口,HashMap效率上高于Hashtable

HashMap允许将null作为一个entrykey或者value,而Hashtable不允许。

HashMapHashtablecontains方法去掉了,改成containsvaluecontainsKey。因为contains方法容易让人引起误解。

Hashtable继承自Dictionary类,而HashMapJava1.2引进的Map interface的一个实现。

最大的不同是,Hashtable的方法是Synchronized的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap就必须为之提供外同步。

HashtableHashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。

6. 试比较CollectionCollections区别。

Collection是接口,是集合框架的根,它有两个子接口:SetList.

Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

7. Java中有哪些数据类型?有哪几种基本数据类型?

Java中有基本数据类型和引用数据类型。基本数据类型包括byteintcharlongfloatdoublebooleanshort

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

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

9. intInteger有什么区别?

Java提供两种不同的类型:引用类型和原始类型(或内置类型)。intjava的原始数据类型,Integerjavaint提供的封装类。int的缺省值为0Integer的缺省值为null

10. 面向对象有哪些特征?

封装、继承、多态和抽象

11. 请写出Java中与基本数据类型相对应的封装类?

boolean Boolean 、 char Character、 byte Byte、 short Short、 int Integer 、 long Long  float Float  、double Double。

12. Java中的线程有哪几种状态?

Java中的线程有以下几种状态:运行、就绪、挂起、结束。

13. 如何比较两个数组中元素值是否全部相等?

Arrays类中的equals()方法。

14. 有哪几种状况会让线程进入Blocked状态?

1)等待输入输出完成;2)调用sleep()方法;3)尝试获得对象锁定;4)调用wait()方法。

15. 简述逻辑操作(&,|,^)与条件操作(&&,||)的区别。

条件操作只能操作布尔型的,而逻辑操作不仅可以操作布尔型,而且可以操作数值型(位运算)逻辑操作不会产生短路。

16. final, finally, finalize的区别。

final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可被继承。

finally是异常处理语句结构的一部分,表示总是执行。

finalizeObject类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。

17. OverloadOverride有什么区别?Overload的方法是否可以改变返回值的类型? 构造器Constructor是否可被override?

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

18. errorexception有什么区别?

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

19. abstract classinterface有什么异同?

相同点:都是引用数据类型,都不能被实例化,但都可以声明该类型的引用;抽象类的引用指向实现了抽象方法的子类对象,接口的引用指向实现了该接口的类的对象。

不同点:抽象类里可以有实现方法,也可以有抽象方法,也可以没有抽象方法,抽象方法不可以用private修饰,而接口里的所有方法都是抽象方法而且是public;接口只可以定义static final成员变量。抽象类供子类继承,并提供自已实现了的方法以及子类要实现的方法,如果子类还是没有实现抽象类的抽象方法,则该类还是要声明为抽象类,而接口提供类要实现的方法,实现接口的类必须要把接口中的方法全部实现;此外,接口可以继承接口,甚至还支持多继承。  

20. GC是什么? 为什么要有GC?

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

21. String s = new String(“xyz”);创建了几个String Object?

2个

22. 实现线程有哪几种方式?启动线程调用什么方法?

Java中实现线程有两种方式:第一种是继承Thread,第二种是实现Runnable接口。启动线程用start()方法。

23. 接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?

接口可以继承接口,也可以继承多个接口。抽象类可以实现(implements)接口,抽象类可继承实体类。

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

数组没有length()这个方法, Stringlength()这个方法

25. 是否可以继承String?

不可以,它是final

26. swtich是否能作用在byte上,是否能作用在long上,是否能作用在String?

switchexpr1)中,expr1是一个整数表达式。因此传递给switchcase语句的参数应该是intshortchar或者byteLongString都不能作用于swtich

27. try { }里有一个return语句,那么紧跟在这个try后的finally { }里的code会不会被执行,什么时候被执行,在return前还是后?

会执行,在return前执行。

28. 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

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

29. char型变量中能不能存储一个中文汉字?为什么?

能够存储成为一个中文的,因为java中以unicode编码,一个char16个字节,所以放一个中文是没问题的。

30. 请说出你所知道的线程同步的方法。

wait():使一个线程处于等待状态,并且释放所持有的对象的lock

sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常。

notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。

notityAll():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。

用最有效率的方法算出2乘以8等于几?

31. 

2 << 3

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

对。可有相同的hashcode,也可以有不同的hashcode

33. List, Set, Map是否继承自Collection接口? 

ListSet继承Collection,而Map不继承Colleciton

34. 写出最常见到的一些runtime exception

ArithmeticException, classCastException, , IllegalArgumentException, IndexOutOfBoundsException,NullPointerExceptionSystemException等。

35. short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

short s1 = 1; s1 = s1 + 1; s1+1运算结果是int型,需要强制转换类型)

short s1 = 1; s1 += 1;(可以正确编译)

36. 什么时候用assert

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

37. sleep() wait() 有什么区别?

sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。
    waitObject类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。

38. Math.round(11.5)等于多少? Math.round(-11.5)等于多少?

Math.round(11.5)==12

Math.round(-11.5)==-11

round方法返回与参数最接近的长整数,参数加1/2后求其floor.

39. 说出数据连接池的工作机制。

J2EE服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其标记为忙。如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。

40. abstractmethod是否可同时是static,是否可同时是native,是否可同时是synchronized?

都不能

41. 写一个Singleton示例

Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。

一般Singleton模式通常有几种形式:

第一种形式:

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)

instancenew Singleton();

return instance; }

}

42. 什么是java序列化,如何实现java序列化?

序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。

序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。

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

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

44. 垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?

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

45. java中会存在内存泄漏吗?

Java也存在内存泄露问题,其原因主要是一些对象虽然不再被使用,但它们仍然被引用。 

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

方法的重写Overriding和重载OverloadingJava多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。

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

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

48. ListMapSet三个接口,存取元素时,各有什么特点?

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

49. 说出一些常用的类、包和接口,请各举5个。

常用的类:StringBuffer  Scanner  String  Integer ArrayList

常用的包:java.lang  java.text  java.io  java.util  java.sql

常用的接口:Set  List  Map  Collection  Iterator

50. 请用LinkedList实现一个简单的Queue

public class StringQueue {

private LinkedList linkedList;

public StringQueue() {

linkedList = new LinkedList();

    }

    

public void put(String name) {

linkedList.addFirst(name);

    }

    

public String get() {

return linkedList.removeLast();

    }

 

public boolean isEmpty() {

return linkedList.isEmpty();

    }

}

51. 请用LinkedList实现一个简单的堆栈。    

public class StringStack {

private LinkedList linkedList;

    

public StringStack() {

linkedList = new LinkedList();

    }

    

public void push(String name) {

// 将元素加入链表前端

linkedList.addFirst(name);

    }

    

public String top() {

// 取得链表第一个元素

return linkedList.getFirst();

    }

    

public String pop() {

// 移出第一个元素

return linkedList.removeFirst();

    }

 

public boolean isEmpty() {

// 链表是否为空

return linkedList.isEmpty();

    }

}

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

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

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

字节流和字符流。字节流继承于InputStream(输入)或OutputStream(输出),字符流继承于Reader(输入) 或Writer(输出)。在java.io包中还有许多其他的流,主要是为了提高性能和使用方便。

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

Java通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。在Java中,每个异常都是一个对象,它是Throwable类或其它子类的实例。当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并进行处理。Java的异常处理是通过5个关键词来实现的:trycatchthrowthrowsfinally。一般情况下是用try来执行一段程序,如果出现异常,系统会抛出(throws)一个异常,这时候你可以通过它的类型来捕捉(catch)它,或最后(finally)由缺省处理器来处理。

try来指定一块预防所有异常的程序。紧跟在try程序后面,应包含一个catch子句来指定你想要捕捉的”异常”的类型。

throw语句用来明确地抛出一个异常对象。

throws用来标明一个成员函数可能抛出的各种异常类。

finally为确保一段代码不管发生什么异常都被执行一段代码。

可以在一个成员函数调用的外面写一个try语句,在这个成员函数内部写另一个try语句保护其他代码。每当遇到一个try语句,异常的框架就放到堆栈上面,直到所有的try语句都完成。如果下一级的try语句没有对某种”异常”进行处理,堆栈就会展开,直到遇到有处理这种异常的try语句。

55. 排序都有哪几种方法?并用伪代码实现一个快速排序。

排序的方法有:插入排序(直接插入排序、希尔排序),交换排序(冒泡排序、快速排序),选择排序(直接选择排序、堆排序),归并排序,分配排序(箱排序、基数排序)。

快速排序的伪代码。

/ /使用快速排序方法对a[ 0 :n- 1 ]排序

a[ 0 :n- 1 ]中选择一个元素作为m i d d l e,该元素为支点

把余下的元素分割为两段leftr 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

56. 简述synchronizedjava.util.concurrent.locks.Lock的异同 ?

主要相同点:Lock能完成synchronized所实现的所有功能

主要不同点:Lock有比synchronized更精确的线程语义和更好的性能。synchronized会自动释放锁,而Lock一定要求程序员手工释放,并且必须在finally从句中释放。

57. JAVA中,如何跳出当前的多重嵌套循环?

break+lablecontinue+lablereturn

58. Java中的关键字transientSynchronized有什么含义?

synchronized关键字修饰同步方法;transient为变量修饰符。标记为transient的变量,在对象存储时,这些变量状态不会被持久化。当对象序列化时保存在存储器上时,不希望有些字段数据被保存,为了保证安全性,可以把这些字段声明为transient

59. 同步和异步有何异同,在什么情况下分别使用他们?举例说明。

果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。
当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。

60. 内部类可以引用它包含类的成员吗?有没有什么限制?

内部类可以引用它包含类的成员。 如果内部类是在方法中定义的,只能访问方法中的final类型的局部变量,因为用final定义的局部变量相当于是一常量,它的生命周期超出方法运行的生命周期。

61. Java具有什么特点?

简单性、面向对象、分布式、健壮性、结构中立、安全性、与平台无关、解释执行、高性能、多线程以及动态性。

62. 谈谈你对PreparedStatement, CallableStatementStatement的理解。

Statement: 主要用来执行一条单独的sql语句,他主要有三个方法executeUpate()executeQuery()exceute()

PreparedStatement: 它继承Statement,主要用在多次执行一个sql语句,执行效率较高,还可以防止sql注入攻击漏洞。

CallableStatement:它继承PreparedStatement,主要用于执行存储过程。主要有registerOutParamenter()等方法。

63. 写一个方法用来把采用ISO-8859-1字符编码的字符串转换成用GBK进行编码的字符串。                                                  

public String convertString(String str){

String result=null;

if(result==null)

return null;

else{

try {

result=new String(str.getBytes(“ISO-8859-1”),”GBK”);

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

return result;

}

64. 简述privateprotectedpublic、 缺省修饰符的访问权限。

public:表明该成员变量和方法是公共的,能在任何情况下被访问。

protected:必须在同一包中才能被访问,还可被其子类访问

private: 只能在本类中访问。

缺省:只能在同一个包中被访问

65. 请写出JDKJREJVM的全称。

JDK(Java Development kits) JRE(Java Runtime Enviroment) JVMJava Virtual Machine

66. 你在编码过程中,注释一般占代码多少比例?

15%以上。

67. 请写出执行后x的结果:int x,a=2,b=3,c=4; x=++a+b+++c++;

结果为10

68. applet编写一个输出hello的程序

//Firstapplet.java

import java.awt.*;

import java.applet.*;

public class Firstapplet extends Applet {

String s;

public void init() {

s= “hello”;

  }

 

public void paint(Graphics g){

g.drawString(s, 70, 80);

  }

}

//test.html

 

69. 请写一个程序,并计算1+2-3+4-5+6....+m的结果。

public int calSum(int n){

int result=1;

for (int i = 2; i <= n; i++) {

result+=i%2==01-1*i;

}

return result;

}

70. A byte=128  B. boolean b=mull;  C. long d=0xff2;  D. double d=0.9239d哪种写法是正确的?

cd

71. 请写一段JDB(连下列任意数据库:Oracle/sql server/my sql的程序)并实现数据查询(略)

72. Java中连接数据库有哪几种方式?

JDBC-ODBC桥驱动,本地API部分调用驱动、JDBC-NetJava驱动以及本地协议纯Java驱动。

73. 计算112358132134……..n位的值是多少?(递归算法实现)

public int fibnacci(int n){

if(n==1 ||n==2)

return 1 ;

else

return fibnacci(n-1)+ fibnacci(n-2) ;

}

74. 接收一个字符串反转打印出来!

public class ReverseString {

public static void main(String[] args) {

ReverseString rs=new ReverseString ();

System.out.println(“result of reverse:”+rs.inverseStr(rs.input()));

}

public String reverseStr(String str){

StringBuffer buf=new StringBuffer(str);

return buf.reverse().toString();

    }

public String input(){

Scanner scanner=new Scanner(System.in);

System.out.print(“please input a String:”);

return scanner.next();

    }

}

 

75. Static Nested ClassInner class的不同。

Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。

76. 编写一个读取文本文件的程序,要求输出文件内容

public  void readTextFile(String path) {

try {

BufferedReader br = new BufferedReader(new FileReader(path));

String str = “”;

while (br.read() != -1) {

str += (br.readLine()+”\r\n”);

}

System.out.println(文本中的内容是: + str);

} catch (FileNotFoundException e) { e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

77. 写一个冒泡排序的算法,并计算出所需的时间

public int[] bubbleSort(int []arr) {

long begin = 0, end = 0;

int temp = 0;

begin = new Date().getTime();

for (int i = 0; i length; i++) {

for (int j = 0; j < arr.length - i - 1; j++) {

if (arr[j] < arr[j+1]) {

temp = arr[j];

arr[j] = arr[j + 1];

arr[j + 1] = temp;

}

}

}

end = new Date().getTime();

System.out.println(循环时间: + (end-begin)+毫秒);

return arr;

}

78. 利用日期工具表类,把字符2007-07-11”转为“11/07/2007”。

public String convertDateFormat(String d){

java.text.SimpleDateFormat df=new SimpleDateFormat(“dd-MM-yyyy”);

try {

Date date=df.parse(d);

df.applyPattern(“dd/MM/yyyy”);

return df.format(date);

} catch (ParseException e) {

e.printStackTrace();

return null;

}

}

79. .ear,.jar,.war的区别?

Web应用程序打包成后缀为war的文件,EJB组件、适配器组件以及其它客户端应用组件打包成后缀为.jar的文件,一个完整的j2ee应用程序打成后缀为ear的文件包,它包含jarwarrar组件档案文件以及描述这些组件的xml描述器。

80. 请解释JNDIJTAJMSJTARMI

JNDI:(Java Naming & Directory InterfaceJAVA命名目录服务。主要提供的功能是:提供一个目录系统,让其它各地的应用程序在其上面留下自己的索引,从而满足快速查找和定位分布式应用程序的功能。

JMS:(Java Message ServiceJAVA消息服务。主要实现各个应用程序之间的通讯。包括点对点和广播。

JTA:(Java Transaction APIJAVA事务服务。提供各种分布式事务服务。应用程序只需调用其提供的接口即可。

JAF:(Java Action FrameWorkJAVA安全认证框架。提供一些安全控制方面的框架。让开发者通过各种部署和自定义实现自己的个性安全控制策略。

RMI/IIOP:Remote Method Invocation /internet对象请求中介协议)他们主要用于通过远程调用服务。例如,远程有一台计算机上运行一个程序,它提供股票分析服务,我们可以在本地计算机上实现对其直接调用。当然这是要通过一定的规范才能在异构的系统之间进行通信。

81. Class.forName()有什么作用?

该方法生成一个Class对象,它可以实现类的动态加载。

82. 什么是重构(refactoring?

重构是指“保持外部状态和功能不变,而优化内部处理编码”的方法。

83. Eclipse有什么特点?它的核心是什么?

Eclipse是一个非常优秀的集成开发环境。它的特点是:1)免费、开源、免安装;2)开放的可扩展的IDE3)成功的底层图形界面API4)强大的插件加载功能;5)实现版本管理的便易性;6)充分的帮助文件。Eclipse的核心是动态发现插件的体系结构。

84. 什么是Annotation?请写出JavaSE中常用的Annotation?

AnnotationJavaSE 5.0中新增的特性,它对程序运行没有影响,它的目的在于对编译器或分析工具说明程序的某些信息,您可以在包、类、方法、域成员等加上Annotation。每一个Annotation对应于一个实际的Annotation类型。常用的Annotationjava.lang.Override,java.lang.Deprecated,java.lang.SuppressWarnings

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

Java中的流分为字节流和字符流。字节流继承于InputStream(输入) 或OutputStream(输出),字符流继承于Reader(输入) 或Writer(输出)。在java.io包中还有许多其他的流,主要是为了提高性能和使用方便。

86. 什么是meta-annotation?请写出JavaSE中常用的meta-annotation?

所谓meta-annotation就是Annotation类型的数据,也就是Annotation类型的Annotation

常见的meta-annotation有:java.lang.annotation.Retentionjava.lang.annotation.RetentionPloicyjava.lang.annotation.ElementType, java.lang.annotation.Documentedjava.lang.annotation.Inherited

87. JDK5.0增加了哪些新特性?JDK增加了哪些新特性?

JDK5.0增加了格式化输出、泛型、装箱和拆箱、枚举、注解等新特性.

JDK6.0新特性:Desktop类和SystemTray使用JAXB2来实现对象与XML之间的映射;StAX;使用Compiler API;轻量级Http Server  ;插入式注解处理API;Console开发控制台程序;Common Annotations等。

88. float f =3.4正确吗?

不正确,会出现精度丢失错误。

89. 设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1

(以下程序使用内部类实现线程,对j增减的时候没有考虑顺序问题)

public class ThreadTest1 {

private int j;

public static void main(String args[]) {

ThreadTest1 tt = new ThreadTest1();

Inc inc = tt.new Inc();

Dec dec = tt.new Dec();

for (int i = 0; i < 2; i++) {

Thread t = new Thread(inc);

t.start();

t = new Thread(dec);

t.start();

}

}

private synchronized void inc() {

j++;

System.out.println(Thread.currentThread().getName() + “-inc:” + j);

}

private synchronized void dec() {

j--;

System.out.println(Thread.currentThread().getName() + “-dec:” + j);

}

 

class Inc implements Runnable {

public void run() {

for (int i = 0; i < 100; i++) {

inc();

}

}

}

 

class Dec implements Runnable {

public void run() {

for (int i = 0; i < 100; i++) {

dec();

}

}

}

}

90. 如果int a=4 ,b=2; System.out.println((--a!=b++));的值是多少?

true

91. 100string相加,你怎么处理?

StringBufferStringBuilder类中的append()

92. ysem.out.println(6+6+”aa”+6+6);的结果是多少?

结果是12aa66

93. junit是什么?写一个简单的junit的程序。

Junit是一个免费开源的单元测试框架。最初由Erich CammaKent Beck编写,用来编写与执行重复性的测试。它包括以下特性:1)对预期结果作出判断;2)提供测试装备的生成与销毁;3)易于组织与执行测试;4)图形与文字接口的测试器。

import org.junit.*;

public class TestAdd {

@BeforeClass

public static void setUpBeforeClass() throws Exception {

}

@AfterClass

public static void tearDownAfterClass() throws Exception {

}

@Before

public void setUp() throws Exception {

}

@After

public void tearDown() throws Exception {

}

@Test

public void testAdd() { //complete method of test}

 

}

94. junit中有哪些断言方法?

Assert接口里有assertEquals(),assertTrue(),assertFalse(),assertSame(),

assertNotSame(),assertNull(),assertNotNull()断言方法。

95. 列出你了解的应用服务器

BEA WebLogic ServerIBM WebSphere Application ServerOracleApplication ServerjBossTomcatglassfish等。

96. 列举你知道的开源框架,并简单介绍?

Struts JSF 、WebWork TapeStry Spring  Hibernate junit DWR

Struts JSF 、WebWork TapeStry是实现MVC模式的Web层框架,Spring是全方位的应用程序框架,Hibernate是实现ORM的轻量级的持久层框架,junit是针对Java的单元测试框架,DWR是针对JavaAjax框架。

97. 开发中都用到了那些设计模式?

每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的通用解决方案。通过这种方式,你可以无数次地使用那些已有的解决方案,无需在重复相同的工作。主要用到了MVC的设计模式(用来开发JSP/Servlet或者J2EE的相关应用)、简单工厂模式、单例模式等。

98. java中的默认编码字符集是什么?

unicode

99. JDBCJNDI的区别?

    Java Database Connectivity (JDBC)是一个标准的Java API,它由一组类和接口组成,Java应用程序开发人员使用它来访问数据库和执行SQL语句
    JNDI(Java Name Directory Interface),允许java程序访问外部的对象它是给当前应用服务器所管理的资源一个唯一的标识,包括EJB,连接池等等。JNDI提供了一种统一的方式,可以用在网络上查找和访问服务。通过指定一个资源名称,该名称对应于数据库或命名服务中的一个纪录,同时返回数据库连接建立所必须的信息。

100. int i=1000;byte b=(int)i;上述语句是否会出错?

会,不能把int转为byte

101. int i=128;byte b=(byte)i;上述语句是否会出错?如果不会出错,b的值为多少?

不会。b的值为-128

102. boolean flag=(2<3) ||i++>1;执行上述语句后,i的值为多少?

i的值为1

103. ListSet的区别

这两个接口都继承CollecitonList接口与其实现类是容量可变的列表,可按索引访问集合中的元素,是有序的集合,它的元素可以重复。Set接口是一种不包含重复元素的Collection ,也就是说在Set中最多只能有一个null元素。

104. heapstack有什么区别

(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。栈的优势是,存取速度比堆要快;栈有一个很重要的特殊性,就是存在栈中的数据可以共享;栈是一种线形集合,其添加和删除元素的操作应在同一段完成。栈按照后进先出的方式进行处理。堆不同于堆栈的好处是:编译器不需要知道要从堆里分配多少存储区域,也不必知道存储的数据在堆里存活多长时间。

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

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

106. 简要描述一下JVM加载class文件的机制?

JVM启动时会形成3个类加载器组成的初始化加载器层次结构。即Bootstrap Classloader, Extension ClassloaderSystem ClassloadeJava ClassLoader是一个重要的Java运行时系统组件。它负责在运行时查找和装入类文件的类。

107. Java中有哪几种设计模式?列举你熟悉的JAVA开发模式?

 Factory(工厂模式),      Builder(建造模式),       Factory Method(工厂方法模式),Prototype(原始模型模式),Singleton(单例模式),    Facade(门面模式),

Adapter(适配器模式),    Bridge(桥梁模式),        Composite(合成模式),

Decorator(装饰模式),    Flyweight(享元模式),     Proxy(代理模式),

Command(命令模式),      Interpreter(解释器模式), Visitor(访问者模式),

Iterator(迭代子模式),   Mediator(调停者模式),    Memento(备忘录模式),

Observer(观察者模式),   State(状态模式),         Strategy(策略模式),

Template Method(模板方法模式), Chain Of Responsibleity(责任链模式)

108. 请找出以下代码错误

abstract class Name {

private String name;

public abstract boolean isStupidName(String name) { }

}

答案: 错。abstract method必须以分号结尾,且不带花括号。

109. 请找出以下代码错误

public class Something {

void doSomething () {

private String s = “”;

int l = s.length();

  }

}

答案: 错。局部变量前不能放置任何访问修饰符 (privatepublic,和protected)

110. 请找出以下代码错误

abstract class Something {

private abstract String doSomething ();

}

答案: 错。abstractmethods不能以private修饰。abstractmethods就是让子类implement(实现)具体细节的,同理,abstract method前不能加final

111. 请找出以下代码错误

public class Something {

public int addOne(final int x) {

return ++x;

  }

}

答案: 错。int x被修饰成final,意味着x不能在addOne method中被修改。

112. 请找出以下代码错误

public class Something {

public static void main(String[] args) {

Other o = new Other();

new Something().addOne(o);

  }

public void addOne(final Other o) {

o.i++;

  }

}

class Other {

public int i;

}

答案: 正确。在addOne method中,参数o被修饰成final。如果在addOne method里我们修改了oreference(比如: o = new Other(),那么如同上例这题也是错的。但这里修改的是omember vairable(成员变量),而oreference并没有改变。

113. 请找出以下代码错误

class Something {

int i;

public void doSomething() {

System.out.println(“i = “ + i);

    }

}

答案: 正确。输出的是”i = 0”int i属于instant variable (实例变量,或叫成员变量)instant variabledefault valueintdefault value0

114. 请找出以下代码错误

class Something {

final int i;

public void doSomething() {

System.out.println(“i = “ + i);

    }

}

答案: 错。final int i是个finalinstant variable (实例变量,或叫成员变量)finalinstant variable没有default value,必须在constructor (构造器)结束之前被赋予一个明确的值。可以修改为”final int i = 0;”。

115. 请找出以下代码错误

public class Something {

public static void main(String[] args) {

Something s = new Something();

System.out.println(“s.doSomething() returns “ + doSomething());

    }

public String doSomething() {

return “Do something ...”;

    }

}

答案: 错。看上去在maincall doSomething没有什么问题,毕竟两个methods都在同一个class里。但仔细看,mainstatic的。static method不能直接call non-static methods。可改成”System.out.println(“s.doSomething() returns “ + s.doSomething());”。同理,static method不能访问non-static instant variable

116. 请找出以下代码错误

此处,Something类的文件名叫OtherThing.java

class Something {

private static void main(String[] something_to_do) {        

System.out.println(“Do something ...”;

    )

}

答案: 正确。从来没有人说过JavaClass名字必须和其文件名相同。但public class的名字必须和文件名相同。

117. 请找出以下代码错误

interface  A{

int x = 0;

}

class B{

int x =1;

}

class C extends B implements A {

public void pX(){

System.out.println(x);

  }

public static void main(String[] args) {

new C().pX();

  }

}

答案:错误。在编译时会发生错误(错误描述不同的JVM有不同的信息,意思就是未明确的x调用,两个x都匹配(就象在同时import java.utiljava.sql两个包时直接声明Date一样)。对于父类的变量,可以用super.x来明确,而接口的属性默认隐含为public static final.所以可以通过A..x来明确。

118. 请找出以下代码错误

interface Playable {

void play();

}

interface Bounceable {

void play();

}

interface Rollable extends Playable, Bounceable {

Ball ball = new Ball(“PingPang”;

)

class Ball implements Rollable {

private String name;

public String getName() {

return name;

    }

public Ball(String name) {

this.name = name;        

    }

public void play() {

ball = new Ball(“Football”;

System.out.println(ball.getName());

    )

}

答案: 错。”interface Rollable extends Playable, Bounceable”没有问题。interface可继承多个interfaces,所以这里没错。问题出在interface Rollable里的”Ball ball = new Ball(“PingPang”;”。任何在interface里声明的interface variable (接口变量,也可称成员变量),默认为public static final。也就是说”Ball ball = new Ball(“PingPang”;”实际上是”public static final Ball ball = new Ball(“PingPang”;”。在Ball类的Play()方法中,”ball = new Ball(“Football”;”改变了ballreference,而这里的ball来自Rollable interfaceRollable interface里的ballpublic static final的,finalobject是不能被改变reference的。因此编译器将在”ball = new Ball(“Football”;”这里显示有错。

119. Spring的事务有哪几种?

编程式事务和声明式事务

120. 试比较OOPAOP

OOP是从静态角度描述程序结构,而AOP从动态角度描述程序的动行过程,AOPOOP的延续,是OOP的补充。

121. 什么是IOC?什么是DI

IOCInversion Of Control是缩写 ,DIDependency Injection的缩写,IOCDI,是Spring框架的核心思想,它主要解决编写应用程序时不用关心组件的实现。不管是IOC还是DI都说明Spring采用动态、灵活的方式来管理各种对象,它们的主要作用是分离组件的使用和实现。依赖注入是指在程序运行过程中,如果需要调用另一个对象协助时,无须在代码中创建被调用者,而是依赖于外部注入。

122. 什么是AOPAOP有什么好处?AOP主要用在什么地方?spring怎么实现AOP 

AOPAspect Orient Programming),也就是面向切面编程,作为面向对象编程的一种补充。它从动态角度考虑程序运行过程。它主要将程序中的公共问题集中解决。AOP“方面”分离出来,写代码时只需关注当前业务逻辑;AOP的一个典型应用是在声明式事务。Spring采用在方法调用前、后或抛出异常时“织入”方面代码来实现AOP

123. Spring配置文件中元素的id属性和name属性有什么区别?

id属性确定该Bean的唯一标识符,这个id属性必须遵循XML文档的ID属性规则,因此有一些特殊要求,例如不能以”/”等特殊符号作为属性值。但在某些特殊时候,Bean的标识必须包含这些特殊符号,此时可以采用name属性,它用于指定Bean的别名,通过访问Bean别名也可访问Bean实例。

124. 请写出spring整合struts的步骤

1) struts-config.xml配置插件

... ...

className=”org.springframework.web.struts.ContextLoaderPlugIn”>

value=”classpath:applicationContext.xml” />

 

2) 修改Action Bean配置

scope=”request”

type=”org.springframework.web.struts.DelegatingActionProxy”>

    。。。。。。

 

3) 在Spring配置文件中配置Action Bean将Biz注入

 

125. Spring的事务策略有哪几种?

ROPAGATION_REQUIRED—支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择

PROPAGATION_SUPPORTS—支持当前事务,如果当前没有事务,就以非事务方式执行

PROPAGATION_MANDATORY—支持当前事务,如果当前没有事务,就抛出异常

PROPAGATION_REQUIRES_NEW—新建事务,如果当前存在事务,把当前事务挂起。

PROPAGATION_NOT_SUPPORTED—以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

PROPAGATION_NEVER—以非事务方式执行,如果当前存在事务,则抛出异常。

PROPAGATION_NESTED—如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。

126. 什么是通知(Advice)?通知分为哪几种?它们分别要实现什么接口?

通知是在特定的连接点,AOP框架执行的动作。各种类型的通知包括前置通知、后置通知、环绕通知以及异常通知。前置通知要实现MethodBeforeAdvice,后置通知要实现AfterReturningAdvice,环绕通知要实现MethodInterceptor,异常通知要实现ThrowsAdvice。

127. 谈谈你对spring框架的理解(略)

128. Spring框架有什么优点?

低侵入式设计,代码的污染极低;独立于各种应用服务器,基于Spring框架的应用,可以真正实现Write Once,Run AnyWhereSpring框架的DI机制降低了业务对象替换的复杂性;Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可自由选用Spring框架的部分或全部。

129. 请写出Spring 2.0中声明式事务的配置方法?

Spring 2.0中声明式事务配置是非侵入式的,且更简洁易懂。

transaction-manager=”myHibTransactionManager”>

expression=”execution(* com.apt.jb.biz.*.*(..))” />

130. Spring框架有哪几部分组成?

Spring框架由Spring CoreSpring AOPSpring ORMSpring DAOSpring WebSpring Context以及Spring MVC组成。

131. 在应用程序中如何获得Spring容器?

ApplicationContext context=new ClassPathXmlApplicationContext(“applicationContext.xml”);

ApplicationContext context=new FileSystemXmlApplicationContext(“applicationContext.xml”);

或其它方法。

132. Spring中的Bean和传统JavaBean有什么不同?

用处不同:传统JavaBean更多作为值对象传递参数,SpringBean用处几乎无所不包,任何应用组件都被称为Bean

写法不同:传统JavaBean作为值对象,要求每个属性都提供gettersetter方法;但SpringBean只需为接受设值注入的属性提供setter方法。

生命周期不同,传统JavaBean作为值对象传递,不接受任何容器管理其生命周期;Spring中的BeanSpring管理其生命周期行为。

133. Spring中的Bean如何实现继承?它和java中的继承有什么区别?

在配置文件中父Beanabstract属性,子Beanparent属性。

Spring中的子Bean和父Bean可以是不同类型,但在Java中的继承,则保证子类是一种特殊的父类;SpringBean继承是实例之间的关系,因此主要表现为参数值的延续;而Java中的继承是类之间的关系,主要表现为方法和属性的延续;Spring中的子Bean不可作为父Bean使用,不具备多态性;Java中的子类实例完全可当父类实例使用。

134. Spirng中的Bean的作用范围有哪些?

singletonprototyperequestsessionglobal session

135. ApplicationConextBeanFactory有什么主要区别?

ApplicationConext在加载ApplicationContext实例时,会自动实例化容器的全部Bean;而BeanFactory等到程序需要Bean实例时才创建Bean.

136. SpringStruts集成可以有哪几种方式?

利用StrutsPlugIn来启动Spring容器;利用DelegatingRequestProcessor;使用ActionSupport代替Action

137. Spring的后处理器有哪几种?它们有什么作用?

Spring的后处理器包括容器后处理器和bean后处理器。

容器后处理器:对IOC容器进行特定的后处理。它必须实现BeanFactoryPostProcessor接口。

Bean后处理器:它是一种特殊的Bean,它并不对外提供服务,它对容器中特定的Bean进行定制。如功能的增强。该处理器必须实现BeanPostProcessor接口。

138. Spring的配置文件可不可以有多个?

可以,如果有多个,可以传入一个字符串数组

139. Spring的注入方式有哪几种?

有属性注入,构造注入

140. Spring提供了哪几个工具类或接口来支持DAO组件的实现?

HibernateDaoSupportHibernateTemplate以及HibernateCallBack

141. web应用中创建Spring容器有哪几种方式?

一种是直接在web.xml文件中配置创建Spring容器(采用ServletContextListener实现或者采用load-on-startup Servlet实现);另一种是利用第三方MVC框架的扩展点,创建Spring容器。

142. Spring中创建Bean有哪几种方式?

采用new关键字调用构造器、调用某个类的静态工厂方法以及调用实例工厂方式。

143. web2.0有什么特点?主要包括什么技术?

Web2.0,简单地说是相对Web1.0(2003年以前的互联网模式)的新的一类互联网应用的统称,是一次从核心内容到外部应用的革命。Web2.0Web1.0在表现形式上丰富,强调用户的参与。

Web2.0的特点:内容聚合;RSS;用户贡献内容;社会化网络;更丰富的“用户体验”,新的交互方式;无刷新。

Web2.0主要包括BlogMblogAjaxPodcasting/Podcast,社会化Tagwikip2prsswebservicesns等技术。

144. 什么是Ajax?

Ajax的前称是Asychronous JavaScript And XML(异步JavaScriptXML);它不是一项新技术,而是很多成熟技术的集合;20052月,Adaptive Path公司的Jesse James Garret最早提出这个概念;Ajax技术是web2.0的核心技术之一。

145. 简要描述Ajax应用的工作流程。

在基于AjaxWeb程序中,在用户行为和服务器端多了一层Ajax引擎,它负责处理用户的行为,并转化为对服务器的请求。同时它接收服务器端的返回信息,经过处理后显示给用户。由于Ajax在后台以异步的方式的工作,用户无需等待服务器的处理,可以进行并发工作,这就在用户界面层次中更为接近了CS架构的客户端平台。

146. Ajax包括哪些关键技术?

Ajax包括以下几种技术:JavaScript脚本语言;可扩展标记语言(XML);文档对象模型(DOM);级联样式表(CSS)XMLHttpRequest对象等。

147. 常用的Ajax框架有哪些?

常用的Ajax框架有:WebORB for Java,Echo 2 DWRSWATO,The AJAX JSP Tag LibraryThe  Ajax-JSF等。

148. Ajax的核心对象是什么?

Ajax的核心对象是XMLHttpRequest对象。

149. 请写出创建XMLHttpRequest对象的javascript函数。

function createXmlHttpRequest(){

if(window.ActiveXObject){

return new ActiveXObject(“Microsoft.XMLHTTP”);

}else if(window.XMLHttpRequest){

return new XMLHttpRequest();

}

}

150. 谈谈你对DWR框架的理解。

DWRDirect Web Remoting)是开源,免费的Ajax框架,它将Java类发布为JavaScript可调用的脚本对象,提供JavaScript工具类,简化页面编码。

使用DWR框架的步骤:

1) 准备工作:下载dwr.jar, 添加到项目中( http://getahead.org/dwr ),创建配置文件:/WEB-INF/dwr.xml,配置web.xml

        

dwr

org.directwebremoting.servlet.DwrServlet

debug

true

dwr

/dwr/*

2)发布Java类,完成dwr.xml文件配置。

   

3) 在页面中使用。

function checkUserExists(oCtl){

    var uname = oCtl.value;

    // 发送请求到服务器,判断用户名是否存在

    JUserChecker.check(uname,haoLeJiaoWo);

}

function haoLeJiaoWo(isExist) {

     if(isExist == 1){

       alert("用户名已存在!");

      }

      else if(isExist == 0){

       alert("用户名不存在!");

      }

}

 

你可能感兴趣的:(刷面试题)