For investors
股价:
5.36 美元 %For investors
股价:
5.36 美元 %认真做教育 专心促就业
现在的银行早已经有了自己成熟稳定的信息化团队,自然也成为了不少技术人员求职的好去处。本文长春达内IT培训为大家介绍java面试:投资银行常问的5个面试题。
问题1:在多线程环境中使用HashMaps有什么问题?get()方法何时进入无限循环?
答:没有什么方法是错误的——这取决于程序员如何使用它。例如,如果只使用一个线程初始化HashMap,并且所有线程都只能从中读取,那么这非常好。其中一个例子是包含配置属性的Map。当不止一个线程正在更新HashMap,即添加,更改或删除任何键值对时,真正的问题就开始了。
由于put()操作可能会导致重新调整大小,从而导致无限循环,这就是为什么要使用Hashtable或ConcurrentHashMap(后者更好)。
问题2:不覆盖hashCode()方法是否有任何性能影响?
答案:这是一个很好的问题,几乎会问所有面试者。一个糟糕的hashCode函数会导致HashMap中频繁的冲突,最终增加向HashMap中添加对象的时间。
然而,从Java 8开始,冲突不会像早期版本那样影响性能。因为在阈值之后,链接列表将被二叉树替换,这在最坏的情况下时间复杂度还可以达到O(log N)。
这个问题有时难以回答,是因为许多开发人员只知道equals 和hashcode契约,并没有考虑它们的性能影响。
equals 和hashcode契约:
1. 如果两个对象相等,它们的hash code必须相等;
2. 如果两个对象的hash code相等,这两个对象不一定相等。
问题3:不可变对象的所有属性都必须是final吗?
答:不必要。如上所述,可以不是final而是 private - 不是在构造函数中修改它们来实现相同的功能,不要为它们提供setter方法。如果是一个可变对象,永远不要泄露对该成员的任何引用。
请记住,变量属性设为final仅确保它不会被重新分配不同的值,但仍可以更改该引用变量所指向的对象的各个属性。这是面试官希望从候选人那里听到的关键点之一。提到这一点,就可以得到一些分数。
问题4:String中的substring()如何工作?
答:许多开发人员知道答案:“子字符串通过获取原始字符串的一部分,从原字符串中创建一个新对象。”
但我认为这个答案是不够的。这个问题的目的在于看看开发人员是否熟悉子串可能产生的内存泄漏风险。
在Java 1.7之前,一个保存了原始字符数组引用的子字符串,意味着5个字符长的子字符串也可以通过保留强引来阻止垃圾收集中的1GB字符数组。
这个问题在Java 1.7中得到了修复,原来的字符数组不再被引用,但是这种改变也使得创建子字符串在时间上成本更高。早些时候,它在O(1)范围内,在Java 7最坏的情况下可能是O(N)。
问题5:你能为singleton编写关键部分代码吗?
答:这个核心Java问题是前一个问题的后续,希望面试者使用双重检查锁定模式编写Java单例,请记住使用volatile变量来使Singleton线程安全。
本文转载自: IT168文库 作者 有趣的
*版权声明:转载文章和图片均来自公开网络,版权归作者本人所有,推送文章除非无法确认,我们都会注明作者和来源。如果出处有误或侵犯到原作者权益,请与我们联系删除或授权事宜。