中国空间站完成图,济南微网站建设,吉安购物网站制作,把百度科技园设置为公司地址转载自 java面试常考系列四
题目一
大O符号(big-O notation)的作用是什么#xff1f;有哪些使用方法#xff1f;
大O符号描述了当数据结构里面的元素增加的时候#xff0c;算法的规模或者是性能在最坏的场景下有多么好。大O符号也可用来描述其他的行为#xff0c;比如…转载自 java面试常考系列四
题目一
大O符号(big-O notation)的作用是什么有哪些使用方法
大O符号描述了当数据结构里面的元素增加的时候算法的规模或者是性能在最坏的场景下有多么好。大O符号也可用来描述其他的行为比如内存消耗。因为集合类实际上是数据结构一般使用大O符号基于时间、内存和性能来选择最好的实现。大O符号可以对大量数据的性能给出一个很好的说明。题目二有序数组和无序数组的区别是什么
1、有序数组最大的好处在于查找的时间复杂度是O(log n)而无序数组是O(n)。
2、有序数组的缺点是插入操作的时间复杂度是O(n)因为值大的元素需要往后移动来给新元素腾位置。相反无序数组的插入时间复杂度是常量O(1)。题目三
Java集合类框架的最佳实践有哪些实践一
根据应用的需要正确选择要使用集合的类型对性能非常重要所以如果提前知道元素的大小是固定的我们就会使用Array而不ArrayList。
实践二
对于那些允许指定初始容量的集合。如果能估计出存储的元素的数目就可以提前设置初始容量以此来避免重新计算hash值或者是扩容。
实践三
为了类型安全可读性和健壮性的原因总是要使用泛型。同时使用泛型还可以避免运行时的ClassCastException。
实践四
使用JDK提供的不变类(immutable class)作为Map的键可以避免为我们自己的类实现hashCode()和equals()方法。
实践五
编程的时候接口优于实现。
实践六
底层的集合实际上是空的情况下返回长度是0的集合或者是数组不要返回null。 题目四
Enumeration接口和Iterator接口的区别有哪些
1.速度
Enumeration速度是Iterator的2倍。
2.内存
Enumeration比Iterator占用更少的内存。
3.安全
Enumeration安全性远远低于Iterator因为当集合里面的对象正在被Iterator遍历的时候其他线程无法修改对象。
4.可操作
Enumeration不允许调用者删除底层集合里面的元素Iterator可以。题目五
HashSet和TreeSet有什么区别
区别一
底层存储的数据结构不同。HashSet底层用的是HashMap哈希表结构存储而TreeSet底层用的是TreeMap树结构存储。
区别二
有序性不同。HashSet是无序的而TreeSet是有序的。
区别三
存储时保证数据唯一性依据不同。HashSet是通过复写hashCode()方法和equals()方法来保证数据唯一性的而HashSet通过Compareable接口的compareTo()方法来保证数据唯一性的。
区别四
时间复杂度不同。HashSet的add、remove和contains方法的时间复杂度是01TreeSet的时间复杂度是0logn。题目六
Java中垃圾回收有什么目的垃圾回收的时机是什么
目的
识别并且丢弃应用不再使用的对象来释放和重用资源。
时机
1.程序员可以手动调用gc但是Java语言规范并不保证GC一定会执行。
2.当应用程序空闲时即没有应用线程在运行时GC会被调用。
3.Java堆内存不足时GC会被调用。题目七System.gc()和Runtime.gc()的作用是什么
这两个方法用来提示JVM要进行垃圾回收。但是立即开始还是延迟进行垃圾回收是取决于JVM的。GC本身是会周期性的自动运行的,由JVM决定运行的时机,现在的版本有多种更智能的模式可以选择,还会根据运行的机器自动去做选择。题目八finalize()方法什么时候被调用析构函数(finalization)的目的是什么
在释放对象占用的内存之前垃圾收集器会调用对象的finalize()方法。
目的是回收某些对象清理内存一般建议在该方法中释放对象持有的资源。题目九如果对象的引用被置为null占用内存将在何时被回收
在下一个垃圾回收周期这个对象将是可被回收的。题目十Java堆的结构是什么样子的什么是堆中的永久代(Perm Gen space)?
JVM的堆是运行时数据区所有类的实例和数组都是在堆上分配内存。它在JVM启动的时候被创建。对象所占的堆内存是由自动内存管理系统也就是垃圾收集器回收。
堆内存是由存活和死亡的对象组成的。存活的对象是应用可以访问的不会被垃圾回收。死亡的对象是应用不可访问尚且还没有被垃圾收集器回收掉的对象一直到垃圾收集器把这些对象回收掉之前会一直占据堆内存空间。