- 2017年浙江省温州市教育局面向全国公开选调74(6-14)
- 2017年,浙江省温州市教育局公开发布了面向全国的范围,选拔74名在编且在职的优秀教师的通知。
IT168资讯报道,当前众多银行已建立起成熟稳定的信息化团队,因而也吸引了众多技术人才前来求职。一篇来自海外的面试文章明确指出,众多Java开发者愿意向花旗、巴克莱以及瑞士信贷等银行递交简历,然而,许多人或许并不了解面试过程中可能会被问及的问题。
本文作者透露了投资银行面试中常遇的问题,这些内容主要面向拥有三年以上Java开发背景的专业人士,而对于初学者或仅有1至2年Java实践经验的求职者并不适用。一般来说,银行在开放式面试中较少考虑经验不足的开发者。此外,银行内部也有众多来自知名高校的研究生实习生。
不保证一定会被问到,但这个列表你可以尝试看看:
在多线程环境下,使用HashMap可能会遇到哪些问题?get()方法在什么情况下会导致无限循环?
没有哪种方法可以说是绝对错误的——关键在于程序员如何去运用它。比如,若仅有一个线程负责对HashMap进行初始化,且所有线程仅进行读取操作,这种做法相当合适。以包含配置信息的Map为例。然而,一旦有多个线程同时进行HashMap的更新操作,比如添加、修改或删除键值对,问题便随之而来。
因为执行put()操作可能会引发对容量的重新配置,进而可能引发循环迭代,所以我们必须选用Hashtable或者ConcurrentHashMap(后者性能更佳)。
问题2:不覆盖hashCode()方法是否有任何性能影响?
这个问题相当关键,它几乎被所有应聘者提出。若hashCode函数设计不当,HashMap内部将频繁出现冲突,这无疑会延长向HashMap中插入对象所需的时间。
尽管从Java 8版本起,冲突对性能的影响不再像早期版本那样显著,这主要是因为在达到一定阈值后,链表会被二叉树所取代,而且即便在最不利的情况下,其时间复杂度也能保持在O(log N)的水平。
解答此问题往往存在一定的难度,原因在于众多开发者仅对equals与hashCode的约定有所了解,却未充分认识到它们在性能方面可能带来的影响。
equals 和hashcode契约:
1. 如果两个对象相等,它们的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实例的线程安全性。
以下代码通过Double-Checked Locking机制确保了单例模式在多线程条件下的安全性:

在编写存储过程或通过Java调用存储过程的过程中,遇到错误情况应如何应对?
这通常是Java面试中面向大多数考生的常见问题。一旦操作未能成功执行,存储过程需输出一个错误码,然而,若存储过程自身出现故障,则捕获SQLException便成为唯一的应对之策。
问题7:在Java中,Executor.submit()与Executer.execute()这两种方法在功能上存在哪些差异?
该问题源自于一家投资银行所编制的,专门针对具备丰富经验的程序员所设计的50道Java多线程相关问题的清单之中。
Java开发人员因其卓越的并发能力而备受渴求,这使得Java技术逐渐流行开来。此外,若你打算扎实提升并发编程能力,不妨从Heinz Kabutz的《Java并发实战》课程入手,这将是一个极佳的起点。这门课程是Java并发领域的顶尖教程,同时它还以Brian Goetz及其公司出版的权威著作《Java并发实践》为理论基础。
该Java面试题的解答指出,第一个选项会返回一个Future实例,此实例可用于在worker线程中检索执行结果。在检查异常处理时,存在差异。若任务在执行过程中抛出异常(假设是在提交阶段发生的),该异常将进入未捕获异常的处理流程(若未明确指定异常处理方式,系统默认仅将堆栈信息输出至System.err)。
若在执行任务过程中遇到异常并提交了任务,需对异常情况进行核查,这构成了任务返回状态的关键内容。针对那些提交后因异常而终止的任务,调用Future.get()方法时,该异常将被重新抛出,并且会被封装在ExecutionException异常对象中。
问题8:工厂模式与抽象工厂模式二者间的差异表现在哪些方面?
相较于Factory模式,Abstract Factory模式能够提供更为丰富的抽象层次。
针对不同的制造厂,这些制造厂均源自抽象工厂,它们各自负责依照其类型构建出独特的对象层级结构。
AbstractFactory这一设计模式可以通过引入AutomobileFactory、UserFactory以及RoleFactory等类来实现功能的拓展。
每个Factory都将负责创建该类型的对象。
这是Factory模式和Abstract Factory模式的UML图展示:
问题9:Singleton模式指的是什么?是应该对整个方法进行同步处理,还是仅仅对关键部分进行同步更为适宜?
在Java编程语言中,Singleton模式确保应用程序内仅存在一个类的唯一实例。以java.lang.Runtime类为例,它就是遵循Singleton模式的典型代表。
在Java 5版本之前,实现Singleton模式相当困难,但自从Java 5中引入了枚举(Enum)这一特性,实现Singleton模式变得异常简单。
此Java面试问题旨在让程序员掌握运用Enums创建单例模式以及双重检查锁定机制的若干关键知识点。
问题10:你能否提供一段适用于Java 4和Java 5版本的代码,以便对HashMap进行遍历操作?
这个问题相当复杂,程序员可以尝试运用while和for循环来应对。然而,实际上存在多种途径可以用来遍历Java中的各个Map对象。
采用第一种方法时,需运用keySet()函数对键进行遍历,接着通过get()函数来查找对应的值,这一过程相对较为耗费资源。
第二种方法包括运用entrySet()进行遍历,这可以通过for循环实现,亦或是利用Iterator.hasNext()功能。相较之下,这种方法更为优越。在迭代过程中,我们能够同时获取到key和value对象,无需调用get()方法来获取值,从而实现了O(N)的性能提升。
若采用Java 8版本,并且数据结构为树而非链表,情况或许会有所改善。
结论
这属于投资银行在面试中经常提出的Java相关题目。若你有意向应聘Java开发岗位,那么深入了解Java的并发机制、多线程编程、集合框架、JVM的内部构造、垃圾回收机制以及提升Java应用性能的方法是必不可少的。
温馨提示:本内容地址http://m.ysjob.cc/article/articledetail-345531.html转载请注明,以上银行成技术人员求职好去处,Java开发人员面试常问啥?资讯信息来自颍上人才网(颍上地区最大的颍上人才网,颍上人才网)