Java基础慨念

1.什么是类与对象?

答:所谓对象就是真实世界中的实体,对象与实体是一一对应的,也就是说现实世界中每一个实体都是一个对象,它是一种具体的概念。

类是具备某些共同特征的实体的集合,它是一种抽象的概念,用程序设计的语言来说,类是一种抽象的数据类型,它是对所具有相同特征实体的抽象。

 

2.属性与方法?

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

 

3.什么是封装?

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

 

4.编写 java文件的注意事项?

答:在记事本中编写java文件,在保存时一定要把文件名和扩展名用双引号括起来,否则将默认保存为文本文件,如果要保存的java 文件名为Program1.java,则在保存时在文件名文本框中一定要输入”Program1.java”。

 

5.如何编译java程序?如何执行java程序?

答:单击开始|运行命令,在命令行上输入cmd,按回车键(在 window98中输入command,按回车键),即可打开一个命令窗口,将目录转换到编写java源程序所在的目录,输入javac filename.java  再回车,同样在命令窗口中输入java filename  再回车

 

6.基本数据类型?

答:Java的数据类型可以划分为4大类:整数,浮点数,字符型,布尔型。其中整数可以划分为:byte,short,int,long.浮点数可以划分为float,double. 

 

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

答:OOP是Object_oriented Programming(面向对象编程)的缩写。这主要是为了区别于以前的面向过程的程序设计!指的是用对象的观点来组织与构建系统,它综合了功能抽象和 数据抽象,这样可以减少数据之间的耦合性和代码的出错几率。

    使用面向对象编程技术可以使得软件开发者按照现实世界里人们思考问题的模式编写代码,可以让软 件开发者更好地利用代码直接表达现实中存在的对象,将问题空间直接映射到解空间!    

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

 

8. 常用的数据结构有哪些?请枚举一些。(不少于5个)

答:链表、堆栈、二叉树、队列、图、堆,集合。

 

9.面向对象的特征有哪些方面

答:抽象,继承,封装,多态性

    <1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。

    <2.继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。

    <3.封装:封装是把过程(方法)和数据包围起来,对数据的访问只能通过已定义的界面。面向对象编程始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。

    <4. 多态性:多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。

 

10.Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?

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

类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。

如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。

如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。

Overloaded的方法是可以改变返回值的类型。

11.abstract class(抽象类)和interface(接口)有什么区别? 

答:(1)接口可以被多重implements,抽象类只能被单一extends(继承).

    (2)接口只有定义,抽象类可以有定义和实现

    (3)接口的字段定义默认为:public static final, 抽象类字段默认是"friendly"(本包可见)

    抽象类与接口都用于抽象,但是抽象类(JAVA中)可以有自己的部分实现

    而接口则完全是一个标识(同时有多重继承的功能)。 

    声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。 

接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。   

 

 

 

 

 

 

 

 

 

 

 

12.当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里

到底是值传递还是引用传递?

答:是值传递。Java 编程语言只由值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对

该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。

 

13.Java的接口和C++的虚类的相同和不同处?

答:由于Java不支持多继承,而有可能某个类或对象要使用分别在几个类或对象里面的方法或属性,现有的单继承机制就不能满足要求。与继承相比,接口有更高的灵活性,因为接口中没有任何实现代码。当一个类实现了接口以后,该类要实现接口里面所有的方法和属性,并且接口里面的属性在默认状态下面都是public static final,所有方法默认情况下是public abstract .一个类可以实现多个接口。 

 

14.描述一下JVM加载class文件的原理机制?

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

 

15.垃圾回收的优点和原理。并考虑2种回收机制.如何优化程序,垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收? 

答:Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有"作用域"的概念,只有对象的引用才有"作用域"。

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

    垃圾回收器的基本原理是:对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。通常,GC采用有向图的方式记录管理堆(heap)中的所有对象。通过这种方式确定哪些对象是"可达的",哪些对象是"不可达的"。当GC确定一些对象为"不可达"时,GC就有责任回收这些内存空间。

   可以马上回收内存。程序员可以手动执行System.gc(),通知GC运行,但是Java语言规范并不保证GC一定会执行。

 

 

 

 

 

 

 

 

 

 

16、GC是什么? 为什么要有GC? 

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

    要请求垃圾收集,可以调用下面的方法之一:

    System.gc();

Runtime.getRuntime()。gc();

 

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

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

 

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

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

 

11,error和exception有什么区别?

答:error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况.Error是Throwable的子类,表示应用程序不需要捕获的严重的错误。一旦发生,程序立刻终止。

exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。

 

12、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语句。

 

13、介绍JAVA中的Collection FrameWork(包括如何写自己的数据结构)? 

答:Collection FrameWork如下: 

Collection 

├List 

│├LinkedList 

│├ArrayList 

│└Vector 

│ └Stack 

└Set 

Map 

├Hashtable 

├HashMap 

└WeakHashMap 

Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements) 

Map提供key到value的映射。

 

14,Collection 和 Collections的区别。

答:Collection是个java.util下的接口,它是各种集合结构的父接口。

 Collection是集合类的上级接口,继承与他的接口主要有Set 和List.

 Collections是个java.util下的类,它包含有各种有关集合操作的静态方法。

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

 

15.你所知道的集合类都有哪些?主要方法? 

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

 

16.Hashtable的原理,并说出HashMap与Hashtable的区别

答:HashTable的原理:通过节点的关键码确定节点的存储位置,即给定节点的关键码k,通过一定的函数关系H(散列函数),得到函数值H(k),将此值解释为该节点的存储地址.

HashMap 与Hashtable很相似,但HashMap 是非同步(unsynchronizded)和可以以null为关键码的.

   HashMap和Hashtable的区别。 

   HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,实现了将惟一键映射到特定的值上。主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。

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

   HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。 

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

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

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

 

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

答:ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢;

   Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较。

 

18、ArrayList和Vector的区别,HashMap和Hashtable的区别,

答:就ArrayList与Vector主要从二方面来说. 

一.同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的 

二.数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半 

   就HashMap与HashTable主要从三方面来说。 

一.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现 

二.同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的 

三.值:只有HashMap可以让你将空值作为一个表的条目的key或value 

 

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

答:Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。

equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。

 

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

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

 

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

答:List,Set是继承自Collection接口;Map不是

 

22、java中实现多态的机制是什么?

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

 

23、说出一些常用的类,包,接口,请各举5个?

答:常用的类:BufferedReader BufferedWriter FileReader FileWirter String Integer

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

常用的接口:Remote List Map Document NodeList 

 

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

答:接口可以继承接口。

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

 

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

答:字节流,字符流。字节流继承于InputStream OutputStream,字符流继承于InputStreamReader OutputStreamWriter。在java.io包中还有许多其他的流,主要是为了提高性能和使用方便。

 

26、java中会存在内存泄漏吗,请简单描述。

答:会。如:int i,i2; retu

 

17、如何实现java序列化?

答:序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标

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

 

28、&和&&的区别。 

答:&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)。

 

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

答:区别主要答两点:a.条件操作只能操作布尔型的,而逻辑操作不仅可以操作布尔型,而且可以操作数值型

b.逻辑操作不会产生短路

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

 

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

答:两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s.

 

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

答:Math.round(11.5)==12

    Math.round(-11.5)==-11

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

 

32、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? 

答:short s1 = 1; s1 = s1 + 1; 有错(s1+1运算结果是int型,需要强制转换类型,不能显式转化为short型)

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

 

33,Java有没有goto?

答:Goto—java中的保留字,现在没有在java中使用。

 

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

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

String有有length()这个方法。

 

36、构造器Constructor是否可被override?

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

 

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

答:会执行,在return前执行。

 

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

答:有C背景的程序员特别喜欢问这种问题。

2 << 3   2*(2*2*2)

 

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

答:不对,有相同的hash code。

 

40、heap和stack有什么区别。

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

堆是栈的一个组成元素

 

41、Static Nested Class 和 Inner Class的不同。 

答:Static Nested Class(一般是C++的说法)Inner Class (一般是JAVA的说法)。

Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。

具体可见http://www.frontfree.net/articles/services/view.asp?id=704&page=1

注: 静态内部类(Inner Class)意味着:1创建一个static内部类的对象,不需要一个外部类对象,2不能从一个static内部类的一个对象访问一个外部类对象.

 

42,abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?

答:都不能

 

43,是否可以继承String类?

答:String类是final类故不可以继承。

 

44、静态变量和实例变量的区别?

答:static i = 10; //静态量

class A a; a.i =10;//可变

 

45.下面哪些类可以被继承?

java.lang.Thread (T)可以   java.lang.Number (T)可以   java.lang.Double (F)不可以  java.lang.Math (F)不可以

java.lang.Void (F)不可以   java.lang.Class (F)不可以  java.lang.ClassLoader (T)可以

 

46、float型float f=3.4是否正确? 

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

 

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

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

 

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

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

 

49、Class.forName的作用?为什么要用? 

答:调用该访问返回一个以字符串指定类名的类的对象。 

 

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

答:一个内部类对象可以访问创建它的外部类对象的内容.

 

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

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

 

52、作用域public,private,protected,以及不写时的区别.

答:区别如下: 

作用域   当前类    同一package    子孙类   其他package 

public      √    √     √    √ 

protected   √       √     √      × 

friendly    √      √    ×     × 

private     √       ×         ×  × 

不写时默认为friendly(和睦的, 融洽的);

 

53,谈谈final, finally, finalize的区别。

答:final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为 final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载. 

   finally—再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。

  finalize—方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。

 

54,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?

答:匿名的内部类是没有名字的内部类。不能extends(继承)其它类,但一个内部类可以作为一个接口,由另一个内部类实现。

 

55、String是最基本的数据类型吗?

答:基本数据类型包括byte、int、char、long、float、double、boolean和short。

java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类

 

56、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,而原始类型实例变量的缺省值与它们的类型有关。

 

57、String 和StringBuffer的区别

答:JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。如果最后需要String,那么使用StringBuffer的toString()方法.

 

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

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

 

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

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

 

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

答:用break;(跳出本次循环) return 方法。

 

61、什么时候用assert(断言)。 

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

    assertion检查通常在开发和测试时开启。为了提高性能,在软件发布后,assertion检查通常是关闭的。

    断言可以有两种形式:

    assert Expression1 ;

    assert Expression1 :Expression2 ;

    Expression1 应该总是产生一个布尔值.Expression2 可以是得出一个值的任意表达式。这个值用于生成显示更多调试信息的 String 消息。

  断言在默认情况下是禁用的。要在编译时启用断言,需要使用 source 1.4 标记:javac -source 1.4 Test.java要在运行时启用断言,可使用 -enableassertions 或者 -ea 标记。

  要在运行时选择禁用断言,可使用 -da 或者 -disableassertions 标记。

  要系统类中启用断言,可使用 -esa 或者 -dsa 标记。还可以在包的基础上启用或者禁用断言。

  可以在预计正常情况下不会到达的任何位置上放置断言。断言可以用于验证传递给私有方法的参数。不过,断言不应该用于验证传递给公有方法的参数,因为不管是否启用了断言,公有方法都必须检查其参数。不过,既可以在公有方法中,也可以在非公有方法中利用断言测试后置条件。另外,断言不应该以任何方式改变程序的状态。

 

62、给我一个你最常见到的runtime exception.(运行时异常)?

答:常见RuntimeException有: 

ArithmeticException     算数异常

BufferOverflowException   缓存溢出异常

ClassCastException     类型不匹配异常

IllegalArgumentException 非法参数异常

IndexOutOfBoundsException 数组下标越界异常

NoSuchElementException   没有这个成员异常 

NullPointerException       空指针异常

 ArithmeticException,ArrayStoreException,BufferOverflowException, BufferUnderflowException,CannotRedoException,CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException,

DOMException,mptyStackException,IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, ImagingOpException,IndexOutOfBoundsException,MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, 

ProfileDataException,ProviderException, RasterFormatException, SecurityException, SystemException,UndeclaredThrowableException,UnmodifiableSetException, UnsupportedOperationException

 

 

 

 

 

 

 

 

Jsp方面

1.servlet的生命周期? 

答:servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。

  这个生存期由javax.servlet.Servlet接口的init,service和destroy方法表达。 

  web容器加载servlet,生命周期开始。

  通过调用servlet的init()方法进行servlet的初始化。

  通过调用service()方法实现,根据请求的不同调用不同的do***()方法。

  结束服务,web容器调用servlet的destroy()方法。

 

2、Servlet执行时一般实现哪几个方法?

答:public void init(ServletConfig config)

  public ServletConfig getServletConfig()

  public String getServletInfo()

  public void service(ServletRequest request,ServletResponse response)

  public void destroy()

 

3.说出Servlet的生命周期,并说出Servlet和CGI的区别。

Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。

 

2.简述jsp和servlet的联系。

Java Servlet是JSP技术的基础,而且大型的Web应用程序的开发需要Java Servlet和JSP配合才能完成。现在许多Web服务器都支持Servlet,即使不直接支持Servlet的Web服务器,也可以通过附件的应用服务器和模块来支持Servlet,这得益于Java的跨平台特性。另外,由于Servlet内部以线程方式提供提供服务,不必对于每个请求都启动一个进程,并且利用多线程机制可以同时为多个请求服务,因此Servlet的效率非常高。

 

4、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么? 

JSP是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP编译后是"类servlet"。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以

组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。

 

5、MVC的各个部分都有那些技术来实现?如何实现? 

答:MVC是Model-View- Controller的简写。"Model" 代表的是应用的业务逻辑(通过JavaBean,EJB组件实现), "View" 是应用的表示面(由JSP页面产生),"Controller" 是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重 用。 

 

6. jsp有哪些内置对象?作用分别是什么? 

答:JSP共有以下9种基本内置组件(可与ASP的6种内部组件相对应):

(1 request)HttpServletRequest类的Request对象.

    作用:代表请求对象,此请求会包含来自GET/POST请求的参数。主要用于接受客户端通过HTTP协议连接传输到服务器端的数据。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie, header, 和session数据的有用的方法。 

(2 response)HttpServletResponse类的Respone对象.

    作用:代表响应对象,主要用于向客户端发送数据。网页传回用户端的回应,并提供了几个用于设置送回 浏览器的响应的方法(如cookies,头信息等)

(3 out)   JspWriter类的out对象.

    作用:主要用于向客户端输出数据(用来传送回应的输出 );  Out的基类是JspWriter,并提供了几个方法使你能用于向浏览器回送输出结果。

(4 session)HttpSession类的session对象.

    作用:主要用于来分别保存每个用户信息,与请求关联的会话;会话状态维持是Web应用开发者必须面对的问题。

(5 applicaton)   ServletContex类的application对象

    作用:主要用于保存用户信息,代码片段的运行环境;它是一个共享的内置对象,即一个容器中的多个用户共享一个application对象,故其保存的信息被所有用户所共享.这有助于查找有关servlet引擎和servlet环境的信息.

(6 pageContext)PageContext类的PageContext对象

    作用:管理网页属性,为JSP页面包装页面的上下文,管理对属于JSP中特殊可见部分中已命名对象的访问,它的创建和初始化都是由容器来完成的。

(7 config)   ServletConfig类的Config对象.

   作用:代码片段配置对象,表示Servlet的配置。该对象用于存取servlet实例的初始化参数。

(8 page)Object类的Page(相当于this)对象.

    作用:处理JSP网页(JSP网页本身),是Object类的一个实例,指的是JSP实现类的实例(表示从该页面产生的一个servlet实例),即它也是JSP本身,只有在JSP页面范围之内才是合法的。

(9 Exception)作用:处理JSP文件执行时发生的错误和异常,针对错误网页,未捕捉的例外 

 

7.JSP的内置对象及方法。

   request request表示HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie, header, 和session数据的有用的方法。 

   response response表示HttpServletResponse对象,并提供了几个用于设置送回 浏览器的响应的方法(如cookies,头信息等)    

 out 对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。 

   pageContext pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间,

servlet相关的对象的API,并且包装了通用的servlet相关功能的方法。 

   session session表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信息 

   application applicaton 表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息 

   config config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。 

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

 

8、jsp有哪些动作?作用分别是什么? 

答:JSP共有以下6种基本动作 

  jsp:include:在页面被请求的时候引入一个文件。 

  jsp:useBean:寻找或者实例化一个JavaBean。 

  jsp:setProperty:设置JavaBean的属性。 

  jsp:getProperty:输出某个JavaBean的属性。 

  jsp:forward:把请求转到一个新的页面。 

  jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记 

 

9、Request对象的主要方法:

setAttribute(String name,Object):设置名字为name的request的参数值

getAttribute(String name):返回由name指定的属性值

getAttributeNames():返回request对象所有属性的名字集合,结果是一个枚举的实例

getCookies():返回客户端的所有Cookie对象,结果是一个Cookie数组

getCharacterEncoding():返回请求中的字符编码方式

getContentLength():返回请求的Body的长度

getHeader(String name):获得HTTP协议定义的文件头信息

getHeaders(String name):返回指定名字的request Header的所有值,结果是一个枚举的实例

getHeaderNames():返回所以request Header的名字,结果是一个枚举的实例

getInputStream():返回请求的输入流,用于获得请求中的数据

getMethod():获得客户端向服务器端传送数据的方法

getParameter(String name):获得客户端传送给服务器端的有name指定的参数值

getParameterNames():获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实例

getParameterValues(String name):获得有name指定的参数的所有值

getProtocol():获取客户端向服务器端传送数据所依据的协议名称

getQueryString():获得查询字符串

getRequestURI():获取发出请求字符串的客户端地址

getRemoteAddr():获取客户端的IP地址

getRemoteHost():获取客户端的名字

getSession([Boolean create]):返回和请求相关Session

getServerName():获取服务器的名字

getServletPath():获取客户端所请求的脚本文件的路径

getServerPort():获取服务器的端口号

removeAttribute(String name):删除请求中的一个属性

 

11.说出在JSP页面里是怎么分页的?

页面需要保存以下参数:

总行数:根据sql语句得到总行数

每页显示行数:设定值

当前页数:请求参数

页面根据当前页数和每页行数计算出当前页第一行行数,定位结果集到此行,对结果集取出每页显示行数的行即可。

 

12、四种会话跟踪技术?

会话作用域ServletsJSP 页面描述

page否是代表与一个页面相关的对象和属性。一个页面由一个编译好的 Java servlet 类(可以带有任何的 include 指令,但是没有 include 动作)表示。这既包括 servlet 又包括被编译成 servlet 的 JSP 页面request是是代表与 Web 客户机发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个 Web 组件(由于 forward 指令和 include 动作的关系)

session是是代表与用于某个 Web 客户机的一个用户体验相关的对象和属性。一个 Web 会话可以也经常会跨越多个客户机请求

application是是代表与整个 Web 应用程序相关的对象和属性。这实质上是跨越整个 Web 应用程序,包括多个页面、请求和会话的一个全局作用域

 

13、两种跳转方式分别是什么?有什么区别,即(JAVA server API中forward与redirect的区别)? 

答:两种跳转方式分别是forward与redirect.

    forward是Web容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。

    redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。所以,前者更加高效,在前者可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐藏实际的链接。在有些情况下,

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

<jsp:include page="included.jsp" flush="true"> 页面不会转向include所指的页面,只是显示该页的结果,主页面还是原来的页面。执行完后还会回来,相当于函数调用,并且可以带参数.

<jsp:forward page= "nextpage.jsp"/> 完全转向新页面,不会再回来。相当于go to 语句。 

redirect: 重定向,有2次request,第2次request将丢失第一次的attributs/parameters等。

 

14、JSP中动态include与静态include的区别(<jsp:include/>和<%@ include%>的区别)? 

答:动态include用jsp:include动作实现<jsp:include page="included.jsp" flush="true" />它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数.静态include用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面<%@ include file="included.htm" %> 

 

15. 问:jsp中程序终止与输出终止

答:程序中止:return;

    输出中止:out.close();这一句相当于ASP的response.end

 

16. 问:hashCode() 有什么用为什么有时候需要覆盖Object里的hashcode()方法?

答:这就是这个对象的身份证啊,要不如何区分哪个对象。

 

17. 问:程序可以输出自己吗?

答:孔德悖论这个非常有名的法则.就是说任何程序都不可能输出自己.

 

18. 问:能够把字符转化成ASCII码?比如将 A 转化成 65?

答:int a='A';  

    out.println(a);

 

19. 问:如何区分输入的文字中的全角与半角?

答:由于不能分辨出全角和半角字符的值有什么规律,只好把全角符号牧举出来了.

 

20. 问:提交网页的网页过期功能是怎么做的?

答:response.setHader("Expires","0");

 

22. 问:jsp中如何得到上页的URL?

答:request.getHeader("referer");

 

23. 问:在JSP网页中如何知道自已打开的页面的名称

答:request.getRequestURI() ;//文件名

    request.getRequestURL() ;//全部URL

 

24. 问:如何取得http的头信息?

答:request.getHader(headerName);

 

25.Struts中继承Action后必须实现哪个方法,该方法返回类型是什么?

必须实现execute()方法, 返回类型是ActionForward.

 

26.JSP的常用指令 

  isErrorPage(是否能使用Exception对象),isELIgnored(是否忽略表达式) 

 

27.什么情况下调用doGet()和doPost()? 

  Jsp页面中的form标签里的method属性为get时调用doGet(),为post时调用doPost()。 

 

28.如何现实servlet的单线程模式 ?

   @ page isThreadSafe="false" 

 

29.页面间对象传递的方法 

   request,session,application,cookie等.

 

30. 问:jsp如何获得客户端的IP地址?

答:request.getRemoteAddr()

    看看各个webserver的API文档说明,一般都有自带的,resin和tomcat都有

 

31. 问:如何传值并不刷新页面?

答:弹出一个页面进行值的选择或者输入,ok后使用将值传给原窗口,使用javascript关闭打开的窗口即可:

window.close();opener.focus();

 

32. 问:如何在jsp中怎么样向客户端写cookies?

答:Cookie coo = new Cookie(name, value);

   HttpServletResponse.addCookie(name);

 

33. 问:提交表单后验证没有通过,返回提交页面,如何使原提交页面中的数据保留?

答:javascript的go(-1)可以把上页的表单内容重新显示出来,但password域没有

 

37. 问:java-plug-in是什么?

答:Java Runtime Environment的插件。用来运行java程序。不需要什么特别的设置。等于你的机器里面有了jvm。

 

35. 问:WEB上面怎么样连接上一个EXCEL表格?

答:定义页面得contentType="application/vnd.ms-excel",让页面以excel得形式打开。同样也可以以word得形式打开:application/msword。

 

36. 问:java中用什么表示双引号

答:"\""

 

37. 问:&&和&的区别?

答:&&是短路的与操作,也就是当地一个条件是false的时候,第二个条件不用执行&相反,两个条件总是执行。

 

38. 问:JavaMail要怎么安装?

答:下载两个包,一个是javamail包,另一个是jaf包。下载完直接把这两个包不解压加到CLASSPATH。

 

39. 问:怎样把地址栏里的地址锁定?

答:把你的服务器的可访问目录索引选项关闭就行了,任何服务器都有一个conf文件,里面都有这个选项。

 

40. 问:在JAVA中怎么取得环境变量啊。比如: TEMP = C:\TEMP ?

答:String sss = System.getProperty(key)

 

29. 问:Applet和form如何通信?

答:取得的参数传到param里面

<% String xxx = request.getParameter("xxx"); %> 

<applet> 

<param value="<%=xxx%>"> 

</applet>

 

41. 问:怎样去掉字符串前后的空格。

答:String.trim()

 

42. 问:session怎样存取int类型的变量?

答:session.setAttribute("int", i+"");

    int i = Integer.parseInt(session.getAttribute("int"));

 

43. 问:在javascript中如何使输出的float类型的数据保留两位小数。

答:Math.round(aaaaa*100)/100。

 

44. 问:怎样才能避免textarea字数限制?

答:是使用了FORM的默认方法的缘故,如果什么也不写默认是GET改用Post即可,在Form中定义mothod="post"。

 

45. 问:批操作是否可用于select语句?

答:批操作其实是指成批理更新的操作,绝对不可能用于select操作。

 

46. 问:我的applet code 中用到jbutton 时就出错是否由于ie不支持swing package 请问应怎么办?

答:JBUTTON是SWING基本包啊,只要把jdk/jre/lib/rt.jar放在classpath就行了.不要加载任何别的库。

 

47. 问:不知道java是否支持midi格式,如果支持,应该怎么把wave格式转换成midi格式?

答:目前还不行,可以看一下JMF三个版中对MIDI的格式支持是read only,而WAVE是read/write,MIDI只能播放,不能生成。

 

68. 问:给定一个字符串5*(5+9)/7怎样计算出结果?

答:可有两种方法

1。用堆栈完成

2。最简单的方法,不用编程,如果有任何一个数据库的化,用select (5*(5+9)/7) from oneTable

 

49. 问:在bean种如何调用session。

答:你可把session对象作为一个参数传给bean

在BEAN中定义HttpServletRequest request;HttpSession session;

然后session = request.getSession(false);

false为如果session为空,不建立新的session将session作为参数传入.其实只要将request传入就可以

 

50. 问:浮点数相乘后结果不精确如100.0 * 0.6 结果等于 60.0004

答:这不叫错误,float和double是这样实现的.如果要精确计算,java提供了一个strictfp,它的计算遵循IEEE 754标准.而普通的float和double是由地平台浮点格式或硬件提供的额外精度或表示范围。

 

51. 问:如何获得当前用的cursors的位置?

答:int row = rs.getRow()就是当前指针行数,

还有isFrist();isBeforeFist();isLast();isAfterLast();可以测试是不是在方法名所说的位置

 

52. 问:表单成功提交了,点后退显示网页过期(让页面不保留缓存)?

答:在<head></head>里面加以下代码

      <META HTTP-EQUIV="Pragma" CONTENT="no-cache"> 

      <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache"> 

      <META HTTP-EQUIV="Expires" CONTENT="0"> 

  或者在表单页中加上

<% 

response.setHeader("Pragma","no-cache"); 

response.setHeader("Cache-Control","no-cache"); 

response.setDateHeader("Expires",0); 

%>

 

53. 问:为什么加了<%@page contentType="text/html;charset=gb2312" %>插入数据库的中文,依然是乱码?

答:这要从环境看,能显示说明你的JSP引擎没有问题,但写入数据库时你的JDBC能不能处理中文,同一公司不同版本的JDBC都有支持中文和不支持中文的情况,RESIN自带的MYSQL JDBC就不支持,MM的就支持,还有你的数据库类型是否支持中文?CHAR的一般支持,但是否用binary存储双字节码

 

54. 问:对于JFrame,hide(),show()与setVisibel()有什么区别吗?

答:setVisible()从Component继承过来,而hide(),show()从Window里面继承过来。

Makes the Window visible. If the Window and/or its owner are not yet displa yable, both are made displayable. The Window will be validated prior to being made visible. If t he Window is already visible, this will bring the Window to the front. 区别在这。

 

55.问:sendRedirect为什么不可以转到mms协议的地址的?

response.sendRedirect("mms://missiah.adsldns.org:9394");

答:java平台目前实现的protocol中并没有mms,你可以取系统属性java.protocol.handler.pkgs看看它的值中有没有mms,所以如果要想重定向到[url]mms://host[/url]这样和URL,只有生成客户端的JAVASCRIPT让它来重定向

 

56. 问:为什么jsp路径太深文件名太长就无法读取文件?

答:path不能超过255长度,不然就找不到了.这是作业系统的事。

 

57. 问:JTable中怎样定义各个Columns和Width和怎样设置表格的内容靠做靠右或居中?

答:TableColumn tc = table.getColumn("Name");//取得列名为"Name"的列Handle

    int currentWidth = tc.getPreferredWidth(); //取得该列当前的宽度

tc.setPreferredWidth(200); //设置当前列宽

tc.setMaxWidth(200); //设置该列最大宽度

tc.setMinWidth(50); //设置该列最小宽度

 

58. 问:在jsp里面防止用户直接输入url进去页面,应该怎么做呢?

答:一是从web服务器控制,对某一目录的所有访问要通过验证.

二是在要访问的页面中加入控制.这个一般用session,也可以用请求状态码实现

 

59. 问:如何把txt或word文件按原格式显示在jsp页面或servlet上?

答:其实一个非常简单的解决方法就是在服务器的MIME中指点定TEXT和WORD的解释方式,然后用JSP或SERVLET生成它就行了,客户端就会自动调用相应程序打开你的文档。

如果是希望按原格式的显示在页面上,而不是调用其他程序打开那么你可以试试用WEBDEV协议,可以说这是MS的一个亮点.它是在WEB方式下打开文档,和共享一样.完全符合的要求。

 

26.Struts中五个基本类是什么?哪个类属于MVC模式中的控制器?

ActionServlet         (控制器)

RequestProcessor 

Action

     ForwardAction

     IncludeAction

     DispatchAction

     LookupDispatchAction

     SwitchAction

ActionForm

     DynaActionForm            

 

60. 问:怎样在tomcat中实现一个定时执行的东东?

答:在应用程序启动时自动运行。servlet2.3中定义了ServletListener,监听Servlet Con text的启动或则关闭(可在配置文件中配置),启动时触发一个守护程序的运行(可以实现java.util.Timer或则 javax.swing.Timer).

 

61. 问:如何实现递交表单内容的加密解密?

答:如果你用IE目前只能用SSL协议,这一层不要你考虑,否则只你用你自己的工具加密传输,接收后再解密友,至于如何加解,如果要和公认的系统结合,就用通用的MD5,RAS等公开算法,如果你只是自己传自己解,你随便按你的想法把数据加上一些东西,取回来按规则减掉这些东西,我敢保证除你自己没有任何人能知道解密方法.

 

62. 问:接口的简单理解.

答:接口为了规范,比如我在接口中定义了一个方法:

getData()这是用来从不同的数据库中取数据的,就是JDBC的实现对于用户,我不要知道每种数据库是如何做的,但我知道如何它们要实现这个接口就一定有这个方法可以供我调用.这样SUN就把这个接口给各个数据库开发商,让他们自己实现. 但为什么不用继承而用接口哩,因为继承只能从一个你类继承,而接口可以实现多个,就是说我实现的子类有多个规定好的接口中的功能. 这只是简单的理解,等你深入理解抽象的时候就知道抽象到抽象类时为什么还要再抽象到接口.

63. 问:怎样编写一个取消按钮(怎样返回上一个页面,象工具栏的后退按钮)?

答:javascript把每次浏览过的location都压到了一个栈中,这个栈就是history,然后你如果要回到第几个页面它就做几次POP操作,把最后POP出来的那个LOCATION给你. 这就是JAVASCRIPT在实现history.go(-x)的原理.

 

64. 问:什么是回调?

答:简单说,回调用不是让你去监听谁做完了什么事,而是谁做完了什么事就报告给你. 这就是回调用的思想.例子太多了,AWT的事件,SWING事件模型都是这样有. 还有多线程中,如果要控制线程数,不能总是查询每个线程是否结束,要在每个线程结束时让线程自己告诉主线程我结束了,你可以开新的线程了。

 

65. 问:简要介绍一下compareTo方法

答:compareTo方法是Comparable 接口必需实现的方法,只要实现Comparable 就可以用Arrays.srot()排序就象实现Runnable接口的run就能Thread()一样.

 

66. 问:如何可以从别的Web服务器检索页, 然后把检索到的网页的HTML代码储存在一个变量中返回过来

答:这是一个简单的WEB ROBOT实现,用URL类实现从网页中抓内容,然后自己写一个分析程序从中找出新的URL,不断递归下去就行了.

 

67. 问:applet中如何获得键盘的输入

答:application的System.in是当前系统的标准输入,applet因为安全的原因不可能读取当前系统(客户端)的标准输入,只能从它的ROOT组件的事件中,比如键盘事件中取得键值.

 

68. 问:怎样计算代码执行所花费的时间?

答:

代码开始取时间,结束后取时间,相减

long t1 = System.currentTimeMillis();

/ your code

long t2 = System.currentTimeMillis() ;

long time = t2-t1;

 

69.你是否使用过数据库连接池?请简要描述数据库连接池的工作原理。

连接池就是在内存中缓存一定数量的数据库连接,每次需要数据库操作的时候,从连接池中去取出连接,使用完之后,放回连接池。这样,不用每次需要连接数据库的时候都建立物理连接。可以提高数据库访问性能。

 

70. 问:连接池的使用是建立很多连接池,还是一个连接池里用多个连接?

答:只有在对象源不同的情况下才会发生多个池化,如果你只连一结一个数据源,永远不要用多个连结池. 所以连结池的初始化一定要做成静态的,而且应该在构造对象之前,也就是只有在类LOAD的时候,别的时候不应该有任何生成新的连结池的时候。

 

71.JDBC中Statement和PreparedStatement有什么不同?简要说明PreparedStatement对性能的影响。

Statement对象代表一个静态SQL语句,只能执行一次.

PreparedStatement对象代表一个预编译的SQL语句,可以被多次执行,效率更高.

 

72. 问:例如后台有一计算应用程序(此程序运算起来很慢,可持续几分钟到几小时,这不管,主要是能激活它),客户机讲任务提交后,服务器对任务进行检测无误后将向服务器后台程序发送信息,并将其激活。要求如下:

    1)首先将后台程序激活,让它执行此任务(比如,前台将计算的C代码提交上后,后台程序程序能马上调用,并将其运行)

   2)要在前台JSP页面中显示运行过程信息(由于运行时间长,希望让客户看到运行过程中产生的信息)如何完成?

答:活是可以的,运行一个shell让它去运行后台就行,但不可能取出运行信息,因为HTTP的超时限制不可能永远等你后台运行的,而且信息如果要动态实时推出来就得用SERVER PUSH技术。

 

73. 问:一个页面中如何刷新另外一个页面?

答:要求是这些面页必须有关联,一是它们都有一个共同的顶层帧,也就是说是一个帧内的分级页面,当然可以是任意级,帧内再分帧也可以,另一个可能是当前窗口弹出的窗口,如果没有联系,那就不可能用一个页面刷新另一个页面. 帧内只要一级一级引用就行了. 比如在左帧中一个页面中写top.right.location.reload();那么名为right的右帧中的页面就会刷新. 弹出的一样,用open时的名称刷新子窗口,子窗口用opener刷新主窗口

 

74. 问:为什么jTextField1.setText("aaabbb");jTextField2.setText("AAABBB"); 得到的字体宽度不一样?

答:就是说如果不是指定为等宽字体,每个字体的宽度都是不一样的.因此JAVA中用FontMetrics 类来取字符宽度。

 

75. 问:String kk=application/octet-stream; name="G:/SMBCrack.exe";如何得到SMBCrack.exe?

答:这应该是解析上传时候的二进制流得到的这一行里面格式是固定的,取到name="后面的字符串,然后把";去掉。然后取最后一个/后面的所有字符组成一个新字符串就行了。

 

76. 问:indexOf()的使用需要注意什么?

答:参数是指从第几位(1,2,3,...)开始搜索,而返回值是指搜索到的位置(0,1,2,3.......)注意是从零算起的.

 

77. 问:在Java应用程序中如何动态的添加一个按钮?

答:这里涉及一个组件重绘的问题,组件要先于panel被显示之处存在,如果一panel已经显示了,那么加在上面你能看到吗?但如果在同一个panel上, 先有button A,假如按下它加了butt on B,这时你如果使整个panel重给,那么A本身要重绘,它的事件监听就没有了,当然也就加不成B了,所以如果要先有另一个panel,当按A时把B加在这个panel上并重绘这个paenl,其实更好的方法是先把B加在panel中,同一个也行.把它setVisiable(flase),按A时设为 true。

 

78. 问:book mybook=new book(bookid);book是servlet,出错。

答:book是servlet,能book mybook=new book(bookid);

说明自己实现了servlet容器?不然,servlet能让你自己去调用? servlet如果调用其实和EJB连1%的区别都没有,它们都是自己继承或实现一些接口,在这些父类或接口中实现了如果和容器\"打交道"的方法,然后容器调用这些方法来管理它,让它生成实例,池化,钝化,销毁,再生等.所以这样写是错误的。

 

79. 问:为什么Integer.parseInt("+1");会抛出NumberFormatException的异常?

答:因为"+"运行算在JAVA中被重载.系统无法确定你用的是算术加还是字符+。

这一点可以在JAVASCRIPT中更好地理解:

<form name="t"><input name=s value=1234></form>

var a = document.t.s.value+1;

这时a = 12345,因为document.t.s.value作为字符串.但var a = document.t.s.value-1;

a 就是1233,因为系统知道-运算肯定是算术运行.所以把document.t.s.value转换成数字.

 

80. 问:用户注册后的自动发信程序该怎么做?

答:这种发信程序不考虑性能,因为不可能1秒就有一个人注册,我们说的考虑性能的发信程序是指上百万封信在队列里要不停发送的那种,象你这个随便怎么写一个程序都行,没有必要用JAVAMAIL.只要指定一个发信的服务器然后用cocket连它的25口就行了.自己用SOCKET连SMTP的25口发一封信就好象两个邻居之间送一样东西,直接递过去得了,用JAVAMAIL,消息机制就是你把这个东西从邮局寄给你的邻居了.

 

81.什么是sql注入漏洞,采用什么方法来堵住sql注入漏洞

答:随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于这个行业的入门门槛不高,程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入.

 

82、Servlet的基本架构 

public class ServletName extends HttpServlet { 

public void doPost(HttpServletRequest request, HttpServletResponse response) throws 

ServletException, IOException { 

public void doGet(HttpServletRequest request, HttpServletResponse response) throws 

ServletException, IOException { 

} } 

 

 

 

 

 

 

 

 

线程方面:

1.线程的基本概念、线程的基本状态以及状态之间的关系

   线程指在程序执行过程中,能够执行程序代码的一个执行单位,每个程序至少都有一个线程,也就是程序本身。

   Java中的线程有四种状态分别是:运行、就绪、挂起、结束。 

 

2、sleep() 和 wait() 有什么区别? 

    sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非“醒来”的线程具有更高的优先级或正在运行的线程因为其它原因而阻塞。

    sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。

    wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。

    wait()是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。

 

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

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

 

4.synchronized(object){...}中object起什么作用?

object是监视器要监视的对象.当一个对象被监视器监视的时候,同一时刻只能有一个线程

访问它,其它要访问它的线程必须在等待队列中等待.

 

5、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?

答:不能,一个对象的一个synchronized方法只能由一个线程访问。这就避免了数据改变,运用多线程技术都会用到synchronized方法,防治由于多线程带来的数据改变。

 

6、java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用?

答:多线程有两种实现方法,分别是继承Thread类与实现Runnable接口。同步的实现方面有两种,分别是synchronized,wait与notify。

    用synchronized关键字修饰同步方法。同步的实现方面有两种,分别是synchronized,wait与notify .

    反对使用stop(),是因为它不安全。它会解除由线程获取的所有锁定,而且如果对象处于一种不连贯状态,那么其他线程能在那种状态下检查和修改它们。结果很难检查出真正的问题所在。

    suspend()方法容易发生死锁。调用suspend()的时候,目标线程会停下来,但却仍然持有在这之前获得的锁定。此时,其他何线程都不能访问锁定的资源,除非被“挂起”的线程恢复运行。对任何线程来说,如果它们想恢复目标线程,同时又试图使用任何一个锁定的资源,就会造成死锁。所以不应该使用suspend(),而应在自己的Thread类中置入一个标志,指出线程应该活动还是挂起。若标志指出线程应该挂起,便用wait()命其进入等待状态。若标志指出线程应当恢复,则用一个notify()重新启动线程。

 

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

答:如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。

当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。

 

8、简述synchronized和java.util.concurrent.locks.Lock的异同 ?

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

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

 

9.请说出你所知道的线程同步的方法? 

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

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

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

确定唤醒哪个线程,而且不是按优先级。

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值