面试题4
5、运行时异常与一般异常有何异同?
异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。
7、说出ArrayList,Vector, LinkedList的存储性能和特性
ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
24、GC是什么? 为什么要有GC?
GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。
25.启动一个线程是调用start(),线程所代表的虚拟处理机处于可运行的状态,这意味着他可以
有JVM调度并执行,。这并不意味着线程就会立即执行。run()方法可以产生必须退出的标志
来停止一个线程。
43、try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
会执行,在return前执行。
46、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。
HashMap 与Hashtable的区别:
HashMap是Hashtable的轻量级实现(非线程安全的是实现),他们都完成了Map接口;
主要区别 HashMap允许null key,由于非线程安全,效率可能要高于Hashtable.
HashMap将Hashtable的contains(),改成containsKey、containsValue().
Hashtable继承Dictionay HashMap 实现了interface Map;
最大区别:Hashtable的方法是Synchronized的,而HashMap不是,再多线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap必须为之提供外同步。
HashMap和Hashtable采用的hash/rehash算法都大概也一样,所以性能不会有很大的差异。
同步与异步有何异同:
如果数据在线程间共享。-->必须同步;
应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且希望程序等待方法返回时-->异步编程。
heap和stack的区别:
heap:一种线性集合,其添加和删除元素的操作应在同一段完成。后进先出
stack:堆是栈的一个组成元素。
JSP中动态include与静态的include的区别:
动态的include用jsp:include动作实现
<jsp:include page = "incclude.jsp" flush = "true">它总是检查所包含的文件
中的变化,使用于动态页面,并且可以带参数。
静态include用include伪码实现,四用于包含锦亭页面