「面经」Java工程师技术面试该如何准备?不如先来看一些面试题

1.Iterator和ListIterator的区别是什么?

Iterator可用来遍历Set和List集合,但是ListIterator只能用来遍历List。

Iterator对集合只能是前向遍历,ListIterator既可以前向也可以后向。

ListIterator实现了Iterator接口,并包含其他的功能,比如:增加元素,替换元素,获取前一个和后一个元素的索引,等等。

2.快速失败(fail-fast)和安全失败(fail-safe)的区别是什么?

Iterator的安全失败是基于对底层集合做拷贝,因此,它不受源集合上修改的影响。java.util包下面的所有的集合类都是快速失败的,而java.util.concurrent包下面的所有的类都是安全失败的。快速失败的迭代器会抛出

ConcurrentModificationException异常,而安全失败的迭代器永远不会抛出这样的异常。

3.Java中的HashMap的工作原理是什么?

Java中的HashMap是以键值对(key-value)的形式存储元素的。HashMap需要一个hash函数,它使用hashCode()和equals()方法来向集合/从集合添加和检索元素。当调用put()方法的时候,HashMap会计算key的hash值,然后把键值对存储在集合中合适的索引上。如果key已经存在了,value会被更新成新值。

HashMap的一些重要的特性是它的容量(capacity),负载因子(load factor)和扩容极限(threshold resizing)。

「面经」Java工程师技术面试该如何准备?不如先来看一些面试题

4.hashCode()和equals()方法的重要性体现在什么地方?

Java中的HashMap使用hashCode()和equals()方法来确定键值对的索引,当根据键获取值的时候也会用到这两个方法。如果没有正确的实现这两个方法,两个不同的键可能会有相同的hash值,因此,可能会被集合认为是相等的。而且,这两个方法也用来发现重复元素。所以这两个方法的实现对HashMap的精确性和正确性是至关重要的。

5.HashMap和Hashtable有什么区别?

HashMap和Hashtable都实现了Map接口,因此很多特性非常相似。但是,他们有以下不同点:

HashMap允许键和值是null,而Hashtable不允许键或者值是null。

Hashtable是同步的,而HashMap不是。因此,HashMap更适合于单线程环境,而Hashtable适合于多线程环境。

HashMap提供了可供应用迭代的键的集合,因此,HashMap是快速失败的。另一方面,Hashtable提供了对键的列举(Enumeration)。

一般认为Hashtable是一个遗留的类。

6.数组(Array)和列表(ArrayList)有什么区别?什么时候应该使用Array而不是ArrayList?

下面列出了Array和ArrayList的不同点:

Array可以包含基本类型和对象类型,ArrayList只能包含对象类型。

Array大小是固定的,ArrayList的大小是动态变化的。

ArrayList提供了更多的方法和特性,比如:addAll(),removeAll(),iterator()等等。

对于基本类型数据,集合使用自动装箱来减少编码工作量。但是,当处理固定大小的基本数据类型的时候,这种方式相对比较慢。

7.ArrayList和LinkedList有什么区别?

ArrayList和LinkedList都实现了List接口,他们有以下的不同点:

ArrayList是基于索引的数据接口,它的底层是数组。它可以以O(1)时间复杂度对元素进行随机访问。与此对应,LinkedList是以元素列表的形式存储它的数据,每一个元素都和它的前一个和后一个元素链接在一起,在这种情况下,查找某个元素的时间复杂度是O(n)。

相对于ArrayList,LinkedList的插入,添加,删除操作速度更快,因为当元素被添加到集合任意位置的时候,不需要像数组那样重新计算大小或者是更新索引。

LinkedList比ArrayList更占内存,因为LinkedList为每一个节点存储了两个引用,一个指向前一个元素,一个指向下一个元素。

也可以参考ArrayList vs. LinkedList。

「面经」Java工程师技术面试该如何准备?不如先来看一些面试题

8.Comparable和Comparator接口是干什么的?列出它们的区别。

Java提供了只包含一个compareTo()方法的Comparable接口。这个方法可以个给两个对象排序。具体来说,它返回负数,0,正数来表明输入对象小于,等于,大于已经存在的对象。

Java提供了包含compare()和equals()两个方法的Comparator接口。compare()方法用来给两个输入参数排序,返回负数,0,正数表明第一个参数是小于,等于,大于第二个参数。equals()方法需要一个对象作为参数,它用来决定输入参数是否和comparator相等。只有当输入参数也是一个comparator并且输入参数和当前comparator的排序结果是相同的时候,这个方法才返回true。

9.什么是Java优先级队列(Priority Queue)?

PriorityQueue是一个基于优先级堆的无界队列,它的元素是按照自然顺序(natural order)排序的。在创建的时候,我们可以给它提供一个负责给元素排序的比较器。PriorityQueue不允许null值,因为他们没有自然顺序,或者说他们没有任何的相关联的比较器。最后,PriorityQueue不是线程安全的,入队和出队的时间复杂度是O(log(n))。

10.你了解大O符号(big-O notation)么?你能给出不同数据结构的例子么?

大O符号描述了当数据结构里面的元素增加的时候,算法的规模或者是性能在最坏的场景下有多么好。

大O符号也可用来描述其他的行为,比如:内存消耗。因为集合类实际上是数据结构,我们一般使用大O符号基于时间,内存和性能来选择最好的实现。大O符号可以对大量数据的性能给出一个很好的说明。

原文:https://blog.csdn.net/yanjiangdi/article/details/77896786

感谢您访问:生涯设计公益网!本文永久链接:https://www.16175.com/17139.html。侵删或不良信息举报请联系邮箱:121488412@qq.com或微信:aban618。
(0)

相关推荐

  • 无领导小组面试如何突出重围?

    无领导小组面试,在很多人印象中很是神秘,为什么呢?因为无领导小组面试一般人遇不到,只在较高层级的岗位选拔中偶尔应用。无领导小组面试可以理解为小组内“自由讨论”的形式,但其实,面试官…

    2022年5月16日
    234
  • CAE工程师职位面试2篇

    面试经验1 面试公司:天津汽车模具 职位:CAE工程师 首先群面,就是记录一下六级成绩,没过四级的基本被淘汰了。然后过了一个礼拜,就是去天汽模本部参加面试。三个考官面两个人,两人一…

    2022年5月18日
    478
  • 财务顾问岗位的求职技巧

    财务顾问是指具备专业财务知识,能够为顾客提供投资理财咨询策划服务的专业人员。而且在不同的行业和公司中,财务顾问的具体工作内容也会有所不同。那么对于想从事财务顾问岗位的求职者而言,怎…

    2022年5月16日
    323
  • 面 经|毕马威香港Consulting面经:今年新鲜出炉的M面和Par面来啦!

    面试经验系列 今年香港KPMG最新的M面和Par面面经分享!过五关斩六将,在面试中一定要将过去的经历融入在事例中,通过数据和结果化的支持去支撑面试过程! 作者:haitundeqi…

    面试技巧 2020年2月9日
    1.9K
  • 在面试过程中会更容易拿到高分的方法

    不少人都向往着公务员工作的稳定有保障,每年都会有不少人拼尽全力去考取公务员。但毕竟僧多肉少,就算突破重围通过了笔试,公务员考试面试也依旧不容易,有些笔试成绩很优秀的求职者,最后却因…

    2022年5月23日
    148
  • 投诉处理专员职位的面试技巧

    人无完人,任何人都会有出错的时候,公司也是如此。不管是多大规模的公司,难免会有一些做得不是很好的地方,进而导致客户前来投诉。这种时候,如何妥善处理这些投诉,让客户满意的同时挽回公司…

    2022年5月16日
    584
分享本页
返回顶部