Java 面试试题及其解答

来源:互联网 发布:mac隐藏的照片 编辑:程序博客网 时间:2024/05/21 06:41

1. 你认为Java和其他语言有什么不同?优势在哪里?

   目前接触到的语言有c、c++、c#和Java,c是一种面向过程的语言,c++则是面向对象的,这两者语法都很相似,Java也是面向对    象的语言,但是除了语法跟c不同之外,还有就是他们关于数据类型的定义,比如说char类型,c和c++都是一个字节,但是Java        中,因为Java是采用Unicode的编码方式,char类型是占了两个字节的,不是一个字节!当初学c的时候最痛苦的是指针部分,我      们总是不知道什么时候或者完全忘记需要进行垃圾回收,而Java的垃圾回收机制是的我们可以免去这些烦恼,把注意力集中在更      重要的逻辑部分。而且Java有很多类库,很多设计模式、类库都被封装起来,可以直接使用,很方面,这一点C#也做得很好,但      是由于Java有Java虚拟机,这样Java就有了一个很大的优势:Java的可移植性。我们说Java是跨平台,也就是它的可移植性。


2.ava基础知识好好准备一下,SSH框架,JVM垃圾回收和内存管理,多线程编程,事务管理等。了解各自技术、框架的应用场景,如何去做选择,不要死记硬背,生搬硬套!有些问题不懂没关系,但一定要有自己的想法!



3.你熟悉的排序算法

   比较熟悉的排序算法如下:

  a. 冒泡排序算法------》改进版的冒泡排序算法?

  b. 选择排序

  c.快速排序算法-----》跟随机算法想结合的做法更好

  d.二路归并算法??

  e.线性排序算法。

     





4.数据库的三范式

   第一范式: 只要满足每一个属性不可以分即可,这是关系数据库的基本要求;

   第二范式: 第二范式的由来是为了解决数据库冗余以及由此而来的各种插入、更新、删除的异常。

                      第二范式指的是:非主属性完全依赖于主属性,不能存在部分依赖。就像课本上那个学生选课的,最初的设计是

                      主属性是学号和课程号,非主属性是院系以及住处,这里院系部分依赖(学号,课程号),

   第三范式:  第三范式是:      满足第二范式,并且,不存在传递依赖。

                      Sno----》sdept,sdept-----》sloc,  sno----》sdept

                      这是一个传递依赖,因此是不合适的。

                        

   


==========================================技术类===============================================

复制的,连接在下:

http://blog.163.com/jx_dream/blog/static/117056627201233105451868/


1.一个Java源文件中是否可包含多个类?有什么限制?
     
可以包含多个类,但只能有一个public类,并且public类名必须与文件名相同。




2. 静态变量和实例变量的区别?

在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。

在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间;

                                    静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创                                              建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。总之,实例变量必须创建对象                                              后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。



3.接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)? 抽象类中是否可以有静态的main方法?

接口可以继承接口。抽象类可以实现(implements)接口,抽象类是不可继承具体类。抽象类中可以有静态的main方法。

备注:只要明白了接口和抽象类的本质和作用,这些问题都很好回答,你想想,如果你是java语言的设计者,你是否会提供这样的支持,如果不提供的话,有什么理由吗?如果你没有道理不提供,那答案就是肯定的了。只有记住抽象类与普通类的唯一区别就是不能创建实例对象和允许有abstract方法。



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

clone 有缺省行为,super.clone();因为首先要把父类中的成员复制到位,然后才是复制自己的成员。


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

         数组没有length()这个方法,只有length这个属性。string有length()这个方法。

6.String s = new String("xyz");创建了几个String Object? 二者之间有什么区别?

两个或一个,”xyz”对应一个对象,这个对象放在字符串常量缓冲区,常量”xyz”不管出现多少遍,都是缓冲区中的那一个。New String每写一遍,就创建一个新的对象,它一句那个常量”xyz”对象的内容来创建出一个新String对象。如果以前就用过’xyz’,这句代表就不会创建”xyz”自己了,直接从缓冲区拿


7.

44、请写出你最常见到的5个runtime exception。

NullPointerException、ArrayIndexOutOfBoundsException、ClassCastException、InputMissmatchException、arithmeticException。


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

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

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


49、ArrayList和Vector的区别

答:这两个类都实现了List接口(List接口继承了Collection接口),他们都是有序集合,即存储在这两个集合中的元素的位置都是有顺序的,相当于一种动态的数组,我们以后可以按位置索引号取出某个元素,,并且其中的数据是允许重复的,这是HashSet之类的集合的最大不同处,HashSet之类的集合不可以按索引号去检索其中的元素,也不允许有重复的元素(本来题目问的与hashset没有任何关系,但为了说清楚ArrayList与Vector的功能,我们使用对比方式,更有利于说明问题)。接着才说ArrayList与Vector的区别,这主要包括两个方面:.

(1)同步性:

Vector是线程安全的,也就是说是它的方法之间是线程同步的,而ArrayList是线程序不安全的,它的方法之间是线程不同步的。如果只有一个线程会访问到集合,那最好是使用ArrayList,因为它不考虑线程安全,效率会高些;如果有多个线程会访问到集合,那最好是使用Vector,因为不需要我们自己再去考虑和编写线程安全的代码。

备注:对于Vector&ArrayList、Hashtable&HashMap,要记住线程安全的问题,记住Vector与Hashtable是旧的,是java一诞生就提供了的,它们是线程安全的,ArrayList与HashMap是java2时才提供的,它们是线程不安全的。所以,我们讲课时先讲老的。

(2)数据增长:

ArrayList与Vector都有一个初始的容量大小,当存储进它们里面的元素的个数超过了容量时,就需要增加ArrayList与Vector的存储空间,每次要增加存储空间时,不是只增加一个存储单元,而是增加多个存储单元,每次增加的存储单元的个数在内存空间利用与程序效率之间要取得一定的平衡。Vector默认增长为原来两倍,而ArrayList的增长策略在文档中没有明确规定(从源代码看到的是增长为原来的1.5倍)。ArrayList与Vector都可以设置初始的空间大小,Vector还可以设置增长的空间大小,而ArrayList没有提供设置增长空间的方法。

总结:即Vector增长原来的一倍,ArrayList增加原来的0.5倍。


50、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算法都大概一样,所以性能不会有很大的差异。就HashMap与HashTable主要从三方面来说。

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

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

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


0 0