银行面试java
有很多Java开发人员正在巴克莱银行,瑞士信贷,花旗银行等投资银行中寻求Java开发角色,但其中许多人并不知道他们在那里会遇到什么样的问题。
在本文中,我将分享一些从投资银行到拥有3年以上经验的Java开发人员的常见问题。
是的,这些问题不是针对刚开始学习 Java或具有1至2年Java经验的专业人员的,因为银行通常不会通过公开面试来聘用他们,他们大多是作为研究生培训生加入的。
不能保证您会收到这些问题 ,实际上,很可能您不会,但是这将使您对可以预期的问题有足够的了解。 顺便说一句,您准备的越多,您的准备就会越好。
顺便说一句,如果您认为21个还不够,那么您不仅仅需要检查电话采访中的其他40个Java问题以及最近5年中的200多个Java问题 。
完成这些操作后,您将更有信心进行任何Java面试,无论是电话面试还是面对面的。
无论如何,在不浪费您更多时间的情况下,让我们深入研究一些银行常见的Java面试问题,这些问题是我从我的一些朋友和同事那里收集的,这些问题出现在这些银行的面试中。
投资银行的Java面试问题
问题1:在多线程环境中使用HashMap有什么问题? 什么时候get()方法进入无限循环? ( 回答 )
答:没错,这取决于您的使用方式。 例如,如果您仅通过一个线程初始化HashMap ,然后所有线程都仅从中读取,那么就很好了。
一个示例就是包含配置属性的Map 。
真正的问题开始于该线程中的至少一个正在更新HashMap时,即添加,更改或删除任何键值对。
由于put()操作可能会导致重新调整大小并进一步导致无限循环,因此这就是为什么您应该使用Hashtable或ConcurrentHashMap的原因 ,以后会更好。
问题2。是否重写hashCode()方法对性能没有影响? ( 回答 )
这是一个好问题,对所有人开放,据我所知,较差的哈希码功能将导致HashMap中频繁发生冲突 ,最终增加了将对象添加到Hash Map中的时间。
从Java 8开始,尽管冲突不会像以前的版本那样影响性能,因为在阈值之后, 链表将被二叉树替换,与O相比,在最坏的情况下, O(logN)性能会提高(n)链表。
问题3:在Java中,不可变对象的所有属性是否都必须是最终的? ( 回答 )
如链接的答案文章中所述,这不是必需的,您可以通过将成员设置为非最终成员但私有并将成员修改为非构造函数来实现相同的功能。
不要为它们提供setter方法,如果它是一个可变对象,则不要泄漏该成员的任何引用。
请记住,将参考变量设为final ,仅确保不会将其重新分配其他值,但您仍可以更改该参考变量所指向的对象的各个属性。
这是关键点之一,面试官喜欢从候选人那里听到。 如果您想了解有关Java中最终变量的更多信息,建议您参加Udemy上的Complete Java MasterClass ,这是最好的动手课程之一。
问题4:String中的substring()如何工作? ( 回答 )
另一个很好的Java面试问题,我认为答案还不够,但是这里是“ 子字符串通过从原始字符串中提取一部分原始字符串来创建一个新对象” 。
主要询问此问题,以查看开发人员是否熟悉内存泄漏的风险(可以创建哪个子字符串)。
在Java 1.7之前,子字符串保留原始字符数组的引用,这意味着即使是5个字符长的子字符串, 也可以通过保留强引用来防止1GB字符数组被垃圾回收 。
此问题已在Java 1.7中修复,该Java 1.7中不再引用原始字符数组,但是这种更改也使创建子字符串位的时间花费很大。 以前它在O(1)的范围内,在Java 7以后的最坏情况下可能是O(n)。
顺便说一句,如果您想了解有关Java中内存管理的更多信息,我建议您阅读Pluralsight上的Kevin Jones的“