《中级java面试题》由会员分享,可在线阅读,更多相关《中级java面试题(16页珍藏版)》请在金锄头文库上搜索。
1、驾途面试题目大全1.Java序列化版本号的作用答:Java 的序列化机制是通过在运行时判断类的 serialVersionUID 来验证版本一致性的。在进行反序列化时,JVM 会把传来的字节流中的 serialVersionUID 与本地相应实体(类)的 serialVersionUID 进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常。2.ArrayList和 LinkedList的区别,HashMap 和 Hashtable的区别答:ArrayList 采用的是数组形式来保存对象的,这种方式将对象放在连续的位置中,所以最大的缺点就是插入删除时非常麻烦L
2、inkedList 采用的将对象存放在独立的空间中,而且在每个空间中还保存下一个链接的索引 但是缺点就是查找非常麻烦 要丛第一个索引开始Hashtable 和 HashMap 类有三个重要的不同之处。1、是历史原因,Hashtable 是基于陈旧的 Dictionary 类的, HashMap 是 Java 1.2 引进的 Map 接口的一个实现。 2、最重要的不同是 Hashtable 的方法是同步的,而 HashMap 的方法不是。这就意味着,在一个多线程应用程序中即可以不用采取任何特殊的行为就可以用一个Hashtable,但你必须同样地为一个 HashMap 提供外同步。一个方便的方法就
3、是利用Collections 类的静态的 synchronizedMap()方法,它创建一个线程安全的 Map 对象,并把它作为一个封装的对象来返回。这个对象的方法可以让你同步访问潜在的HashMap。这么做的结果就是当你不需要同步时,你不能切断 Hashtable 中的同步(比如在一个单线程的应用程序中),而且同步增加了很多处理费用。 第三点不同是,只有 HashMap 可以让你将空值作为一个表的条目的 key 或value。 HashMap 中只有一条记录可以是一个空的 key,但任意数量的条目可以是空的value。这就是说,如果在表中没有发现搜索键,或者如果发现了搜索键,但它是一个空的值
4、,那么 get()将返回 null。如果有必要,用 containKey()方法来区别这两种情况。一些资料建议,当需要同步时,用 Hashtable,反之用 HashMap。但是,因为在需要时,HashMap 可以被同步,HashMap 的功能比 Hashtable 的功能更多,而且它不是基于一个陈旧的类的,所以有人认为,在各种情况下,HashMap 都优先于 Hashtable。 关于 Properties 有时侯,你可能想用一个 hashtable 来映射 key 的字符串到 value 的字符串。DOS、Windows 和 Unix 中的环境字符串就有一些例子,如 key 的字符串 PA
5、TH 被映射到 value 的字符串 C:WINDOWS;C:WINDOWSSYSTEM。Hashtables 是表示这些的一个简单的方法,但 Java 提供了另外一种方法。 Java.util.Properties 类是 Hashtable 的一个子类,设计用于 String keys 和values。Properties 对象的用法同 Hashtable 的用法相象,但是类增加了两个节省时间的方法,你应该知道。 Store()方法把一个 Properties 对象的内容以一种可读的形式保存到一个文件中。 Load()方法正好相反,用来读取文件,并设定 Properties 对象来包含 ke
6、ys 和 values。 注意,因为 Properties 扩展了 Hashtable,你可以用超类的 put()方法来添加不是String 对象的 keys 和 values。这是不可取的。另外,如果你将 store()用于一个不包含String 对象的 Properties 对象,store()将失败。作为 put()和object Objectget()的替代,你应该用 setProperty()和 getProperty(),它们用 String 参数。3.JVM 性能优化参数有哪些答:减少使用全局变量和大对象;调整新生代的大小到最合适;设置老年代的大小为最合适;选择合适的 GC 收集
7、器;4.Overload 和 Override 的区别答:Override 是重写:方法名称、参数个数,类型,顺序,返回值类型都是必须和父类方法一致的。它的关系是父子关系Overload 是重载 :方法名称不变,其余的都是可以变更的。它的关系是同一个类,同一个方法名,不同的方法参数或返回值。备注:它们都是是 Java 多态性的不同表现 5.接口和抽象类的区别答:抽象类的成员可以具有访问级别,而接口的成员全部 public 级别抽象类可以包含字段,而接口不可以,抽象类可以继承接口,而接口不能继承抽象类抽象类的成员可以具有具体实现,而接口不行抽象的子类可以选择性实现其基类的抽象方法,而接口的子类必
8、须实现6.final, finally, finalize 的区别final 用于声明属性,方法和类,分别表示属性不可交变,方法不可覆盖,类不可继承。finally 是异常处理语句结构的一部分,表示总是执行。finalize 是 Object 类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,供垃圾收集时的其他资源回收,例如关闭文件等。7.sleep 和 wait 有什么区别1、这两个方法来自不同的类分别是 Thread 和 Object2、最主要是 sleep 方法没有释放同步锁,而 wait 方法释放了同步锁,使得其他线程可以使用同步控制块或者方法。3、wait,notify
9、和 notifyAll 只能在同步控制方法或者同步控制块里面使用,而 sleep 可以在任何地方使用(使用范围)synchronized(x)x.notify()/或者 wait()4、sleep 必须捕获异常,而 wait,notify 和 notifyAll 不需要捕获异常8.同步和异步有何异同,在什么情况下分别使用?如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。 当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情
10、况下采用异步途径往往更有效率。9.说说 java 锁机制及几种实现方式10.linux 常用命令(10 个)11.java 代码安全有哪些Java 通过提供一个”安全沙箱“来保证从网络或者其他不信任的地方下载并运行的程序不会破坏本地数据,为了确保沙箱是可靠的,java 安全模型对体系结构的各方面都进行了考虑。组成 java 沙箱的基本组件如下: 类装载器结构 class 文件检验器 内置于 Java 虚拟机(及语言)的安全特性 安全管理器及 Java API 12.列举你在项目中常用的设计模式以及对于的应用场景13.排序都有哪几种方法?请列举排序的方法有:插入排序(直接插入排序、希尔排序),交
11、换排序(冒泡排序、快速排序),选择排序(直接选择排序、堆排序),归并排序,分配排序(箱排序、基数排序)用 Java 语言实现的各种排序,包括插入排序、冒泡排序、选择排序、Shell 排序、快速排序、归并排序、堆排序、SortUtil 等。插入排序:package org.rut.util.algorithm.support;import org.rut.util.algorithm.SortUtil;/* author treeroot* since 2006-2-2* version 1.0*/public class InsertSort implements SortUtil.Sort/
12、* (non-Javadoc)* see org.rut.util.algorithm.SortUtil.Sort#sort(int)*/public void sort(int data) int temp;for(int i=1;i0)j)SortUtil.swap(data,j,j-1); 冒泡排序:package org.rut.util.algorithm.support;import org.rut.util.algorithm.SortUtil;/* author treeroot* since 2006-2-2* version 1.0*/public class Bubble
13、Sort implements SortUtil.Sort/* (non-Javadoc)* see org.rut.util.algorithm.SortUtil.Sort#sort(int)*/public void sort(int data) int temp;for(int i=0;ii;j)if(dataj i; j) if (dataj 2;i/=2)for(int j=0;j=inc)j-=inc)SortUtil.swap(data,j,j-inc);快速排序:package org.rut.util.algorithm.support;import org.rut.util
14、.algorithm.SortUtil;/* author treeroot* since 2006-2-2* version 1.0*/public class QuickSort implements SortUtil.Sort/* (non-Javadoc)* see org.rut.util.algorithm.SortUtil.Sort#sort(int)*/public void sort(int data) quickSort(data,0,data.length-1); private void quickSort(int data,int i,int j)int pivotI
15、ndex=(i+j)/2;/swapSortUtil.swap(data,pivotIndex,j);int k=partition(data,i-1,j,dataj);SortUtil.swap(data,k,j);if(k-i)1) quickSort(data,i,k-1);if(j-k)1) quickSort(data,k+1,j);/* param data* param i* param j* return*/private int partition(int data, int l, int r,int pivot) dowhile(data+lpivot);SortUtil.
16、swap(data,l,r);while(l0)int j=stacktop-;int i=stacktop-;pivotIndex=(i+j)/2;pivot=datapivotIndex;SortUtil.swap(data,pivotIndex,j);/partitionl=i-1;r=j;dowhile(data+lpivot);SortUtil.swap(data,l,r);while(lTHRESHOLD)stack+top=i;stack+top=l-1;if(j-l)THRESHOLD)stack+top=l+1;stack+top=j;/new InsertSort().sort(data); insert