Java是一个技术活,所以大家在面试java岗位的时候,肯定会考验你对java知识的熟悉程度,能不能做得了java岗?为了能够让更好的进行面试,我们给大家分享一些java技术面试题。
1.String 的特征有哪些?
不变性:String是只读字符串,是一个典型的immutable对象,对它进行任何操作,其实都是创建一个新的对象,,再把引用指向该对象。不变模式的主要作用在于当一个对象需要被多线程共享并频繁访问时,可以保证数据的一致性。
常量池优化:String对象创建之后,会在字符串常量池中进行缓存,如果下次创建同样的对象时,会直接返回缓存的引用。
final:使用final来定义String类,表示String类不能被继承,提高了系统的安全性。
2.String为什么要有常量池?
String是存储在Java堆内存中的字符串池.JVM 为了提高性能和减少内存开销,在实例化字符串常量的时候进行了一些优化。为 了减少在JVM中创建的字符串的数量,字符串类维护了一个字符串池,每当代码创建字符串常量时,JVM会首先检查字符串常量池。如果字符串已经存在池中, 就返回池中的实例引用。如果字符串不在池中,就会实例化一个字符串并放到池中。
3.当两个对象的hashCode相同会发生什么?
因为hashCode相同,不一定就是相等的(equals方法比较),所以两个对象所在数组的下标相同,“碰撞”就此发生。又因为HashMap使用链表存储对象,这个Node会存储到链表中。
4.你知道hash的实现吗?为什么要这样实现?
JDK1.8中,是通过hashCode()的高16位异或低16位实现的:(h=k.hashCode())^(h >>> 16),主要是从速度,功效和质量来考虑的,减少系统的开销,也不会造成因为高位没有参与下标的计算,从而引起的碰撞。
5.数组扩容的过程是什么?
创建一个新的数组,其容量为旧数组的两倍,并重新计算旧数组中结点的存储位置。结点在新数组中的位置只有两种,原下标位置或原下标+旧数组的大小。
这些都是经常会问到的java面试题,大家可以多看看,加深印象,提高面试的通过率!最后大家如果想要了解更多java面试题知识,敬请关注奇Q工具网。
推荐阅读: