欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

java面试常考系列四

发布时间:2023/12/3 编程问答 43 豆豆
生活随笔 收集整理的这篇文章主要介绍了 java面试常考系列四 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

转载自 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()方法的时间复杂度是0(1),TreeSet的时间复杂度是0(logn)。

 

题目六

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启动的时候被创建。对象所占的堆内存是由自动内存管理系统也就是垃圾收集器回收。

堆内存是由存活和死亡的对象组成的。存活的对象是应用可以访问的,不会被垃圾回收。死亡的对象是应用不可访问尚且还没有被垃圾收集器回收掉的对象一直到垃圾收集器把这些对象回收掉之前,会一直占据堆内存空间。


总结

以上是生活随笔为你收集整理的java面试常考系列四的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。