我正在经历Questions every good .Net developer should be able to answer并对这个问题的内容和方法印象深刻,所以本着同样的精神,我在为Java / Java EE Developer提出这个问题 .
What questions 你觉得应该好 Java/Java EE programmer be able to answer?
我将此问题标记为社区维基,因为它不是用户特定的,它旨在为整个编程社区提供服务 .
期待一些惊人的回应 .
EDIT :请按照评论中的建议回答问题,这样人们也可以学习一些关于语言的新知识 .
30 回答
hashCode()和equals()之间有什么关系?这些方法有什么意义?实施它们有哪些要求?
Set,Map和List有什么区别?
我仍然惊讶于有多少人在电话采访中不知道这个 .
大多数人回答“不”,因为他们知道java没有多重继承 . 但是接口仍然可以扩展多个接口(但是类不能扩展多个类) . 这不会导致钻石问题 .
如果答案是"no",面试官应该问“为什么会被禁止?” . 然后你开始思考它,你应该意识到它没有问题 .
所以你在面试中学到了一些东西(你自己),你向面试官展示了你能够推理出类,对象,继承,多态等等 . 这实际上比一个知道答案的候选人要好得多但却没有明白为什么
在方法调用中使用 final 关键字 . 例如,尽管对方法参数使用了 final 限定符,但为什么下面的代码中的方法测试不会给出任何编译错误 . ``
`class Name {
private String name;
}
private void test (final Name n) {
n.setName("test");
}`
``
一个肯定是字符串的比较 . 之间的区别
特技提问:Java中通过引用传递了哪些参数?
令人惊讶的是,有多少人仍然鹦鹉学舌“原始人通过 Value 传递,物品通过参考传递”咒语 .
你说“好”,“开发者” . 这是我的2美分.. :)
"checked exception"是什么意思?
哪一个更好用,何时:断言或例外处理意外情况?
为什么String类是最终的? (或者不是吗?;))
是Object类中的wait,notify和notifyAll方法?
为什么Thread类不是最终的?为什么我会扩展Thread?
为什么有两个Date类;一个在java.util包中,另一个在java.sql中?
如果在finally块中抛出异常会发生什么?剩下的是否最终执行?
有一个垃圾收集器好,但是Java应用程序中完全没有内存泄漏吗?如果没有,怎么会这样?
对于J2EE:
在servlet中有实例/静态变量是否合适?为什么不?那么你在哪里存储"state"?
继续上述问题:(网络)应用程序的"state"是什么?
如果我在"JSP"中开始创建/关闭数据库连接会怎样?
处理JSP异常的方法有哪些?试着抓?嗯..还有什么吗?
我可以想到很多很多很多,但是现在这样做:)
String,StringBuffer和StringBuilder有什么区别?
“什么是部署描述符?”
如果候选人不情愿地发抖,他有使用3.0之前的EJB的经验 .
很多问题和访谈都可以在http://www.techinterviews.com/interview-questions/java找到,我并没有真正看到复制/粘贴其中一些选项的 Value .
不,这取决于你创建自己的事物汇编 you 认为很重要 . 就个人而言,我总是分两步进行:首先是几个问题,以获得经验和技能的基本概念,然后解决问题 . 我确实不相信能够回答任何已知问题会使你成为一个好的或坏的未知问题解决者 . 所以,我更愿意让人们解决一个给定的问题,给他们一些要求,并要求他们编写代码(但不是在纸上) . 我给他们一些时间回到我身边检查他们是如何做到的,他们的编码风格,他们如何使用建议的API等等 .
总而言之,我最喜欢的问题是"what don't you like about Java?"(本着this one的精神) . 这是一个非常好的问题,它可以让您立即反馈候选人使用Java的程度并探索其API,以及他是否只是虔诚于此(正如OP所写) .
Update: 正如CPerkins所建议的那样,上述问题的更好措辞可能是"What would you most like to see changed in Java?" . 事实上,我更喜欢这种方式 .
System.out.println中的'System','out','println'是什么?在HashMap上调用'put'会发生什么?
解释Java中使用的各种访问修饰符 . 我有很多人在努力解决这个问题,尤其是默认访问权限 .
如果你可以改变Java语言或平台的一件事,它会是什么?好的开发人员会在这里找到答案,而那些不关心的人 .
如果他们的简历说他们使用EJB2.1,那么请询问EJB3以了解他们对此的了解 . 即使他们不使用新版本,最好的开发人员也会跟上最新的发展 .
覆盖等于时的一般 Contract 是什么?
更好的选择是首选列表还是数组?
什么是普遍接受的命名约定?
序列化的工作原理?
如何实现Comparable?
使用JDBC的Prepared Statements有什么好处?
什么是Java EE?
什么是容器,它提供什么服务?
如果您正在招聘具有Java "experience"的毕业生一个简单的问题,例如编写一些会导致抛出NullPointerException的代码,可以区分哪些候选人最近使用过Java,并且当他们完成单元/课程时不会停止 .
什么会打印?
Answer :CoolReturn 1
有点困难:
Answer :CoolReturn
抽象类和接口有什么区别?你什么时候使用它们?
很多Java开发人员都不知道这一点,我问大多数人在大学的计算机科学课程,绝大多数都无法回答 .
简单的问题,如,
什么是JRE和JDK?
为什么java要求互操作性?
虽然这些是非常基础的,但许多开发人员并不知道答案 . 我建议在与代码相关的查询之前询问这些问题 .
五大J2EE / JEE问题
我所遇到的J2EE / JEE中间件问题列表非常长,但这里是我被问过的前五名,并且引发了很好的讨论:
What happens when an MDB encounters an exception that it cannot handle?
这个问题通常会引发关于有害消息,错误队列等的各种有趣的讨论,
Given a JMS Topic, and a few consumers on different JVMs, questions on various scenarios with and without durable consumers.
这个问题通常允许我讨论何时使用持久订阅者,何时使用队列等,
If stuck in a situation where accessing a Hibernate/JPA POJO contents leads to exceptions, how would one resolve it?
这导致关于延迟加载,再水化等的精彩讨论,甚至导致比较和对比JPA与实体bean . 我发现做好准备并在概念中明确是有用的 .
How could a simple web service be provided?
从简单的Web服务器到复杂的SOAP / REST解决方案,以及介于两者之间的任何解决方案都应该足够好 . 此外,基于访问者,有时它会引发关于主题的非常有趣的讨论,例如一些设计思想 - 首先是WSDL,文档样式,SOAP中介等等 . 它可能导致诸如JAX-WS上的JAX列表改进之类的问题-RPC,或SOAP1.1上的SOAP1.2,答案往往基于我记得多少 .
JEE 5 resource injection
这个问题以多种方式提出,从服务定位器模式到
javax.naming.Context
问题 .我发现另一个令人不安的另一个棘手的问题,但是面对很多次,是 How are dependent libraries packaged into an archive?
或 Visibility of various classes in a bundled archive.
如果讨论没有导致不同应用程序服务器,资源档案等的类加载器层次结构,则最好辞职并继续前进 .
五大核心Java问题:
Questions on java.util.collections
这是所有问题的母亲 . 一旦你能够在这个领域有效地找到面试官,如果你有准备,其余的面试通常会留在这里 . 一定要知道
Set
,_List
,Map
,以及Object.equals()
和Object.hashCode()
在这些接口的每个实现中的重要性 .Refactoring questions
如果面试官心胸开阔,这些都很好 . 如果面试官已经有一个特定的解决方案,而你的人与他/她不匹配,那你几乎注定要失败 . 最好同意答案"I understand other solutions are possible. "
Questions on multi-threading in JDK5, comparing with earlier JDK versions 我已经发现最好准备 java.util.concurrent 包类 . Doug Lea的书中有大部分答案 .
What's new in JDK1.6/JDK1.7...?
对于很多采访者来说,这是一个肯定的问题 . 尽管我讨厌这个,但最好做好准备 . 至少还记得我曾与之合作的一些人,并在其他方向上引导讨论,在很大程度上有效地避开并解决了这个问题 .
Patterns in Java API
我一次又一次被要求在Java API中指出一个GoF模式 . 最好为这一个做好准备 .
Web服务器和Web容器之间的区别
你最喜欢/最喜欢Java的原因是什么?为什么?
为什么要覆盖toString()方法?
一个更纯粹的Java问题:
睡眠和等待有什么区别?实际上并没有多少人了解等待是如何运作的 .
你如何处理InterruptedExceptions?
这是我在采访中遇到的问题 .
Why is main method in Java called as public static void main(String[] args) ?
回答:
为了访问包外的main,我们必须将它声明为public . 如果我们将它声明为public而不是public,则显示 Runtime Error 但不是 Compilation time error
JVM将首先加载Test类,并检查Commandline参数并将main方法调用为Test.main();
如果提供了其他返回类型,则它是RunTimeError,即NoSuchMethodFoundError .
J2SE和J2EE(或JSE和JEE)之间有什么区别?
开发人员应该能够指出企业版基本上是可以由供应商实现的接口定义(即规范) . 鉴于标准版本身就是一种实现方式
volatile
如何影响编译器的代码优化?什么是会话bean,并描述无状态会话bean和有状态会话bean之间的一些差异 .
编写一个程序来接受两个整数,并将两个数字中最大的一个输出到您选择的位置的文件中 . 现在描述每个语句的作用 .
从import语句的重要性开始,直到异常终止,可以深入挖掘
核心:1 . 检查和未检查的异常是什么? 2.在代码中添加新的异常时使用什么类型(Checked / Unchecked)?
Servlet:1 . response.sendRedirect()和request.forward()有什么区别?
threads
如何工作?什么是synchronized
?如果一个类中有两个synchronized
方法,它们可以由两个线程同时执行 . 你会惊讶地听到很多人回答 yes . 然后所有线程相关的问题,例如 deadlock , starvation 等许多Java程序员不知道的一件事是字符串是不可变的,所以使用StringBuilder或StringBuffer!