我正在经历Questions every good .Net developer should be able to answer并且对这个问题的内容和方法印象深刻,所以本着同样的精神,我在为Java / Java EE Developer提出这个问题。
您认为优秀的 Java / Java EE程序员能够回答哪些问题?
我将此问题标记为社区维基,因为它不是用户特定的,它旨在为整个编程社区提供服务。
期待一些惊人的回应。
编辑:请按照评论中的建议回答问题,以便人们可以了解有关该语言的新内容。
答案 0 :(得分:83)
hashCode()和equals()之间有什么关系?这些方法有什么意义?实施它们有哪些要求?
答案 1 :(得分:70)
Set,Map和List有什么区别?
我仍然惊讶于有多少人在电话采访中不知道这一点。
答案 2 :(得分:44)
接口可以扩展多个 接口
大多数人回答“不”,因为他们知道java没有多重继承。但是接口仍然可以扩展多个接口(但是类不能扩展多个类)。这不会导致钻石问题。
如果答案是“否”,面试官应该问“为什么 会被禁止?”。然后你开始思考它,你应该意识到它没有问题。
所以你在面试中学到了一些东西(你自己),你向面试官展示了你能够推理出类,对象,继承,多态等等。这实际上比一个知道心灵答案的候选人要好得多不明白为什么
答案 3 :(得分:23)
在方法调用中使用 final 关键字。
例如,尽管对方法参数使用 final 限定符,但为什么下面代码中的方法 test 不会给出任何编译错误。
class Name {
private String name;
public Name (String s) {
this.name = s;
}
public void setName(String s) {
this.name = s;
}
}
private void test (final Name n) {
n.setName("test");
}
class Name {
private String name;
public Name (String s) {
this.name = s;
}
public void setName(String s) {
this.name = s;
}
}
private void test (final Name n) {
n.setName("test");
}
答案 4 :(得分:19)
一个肯定是字符串的比较。
之间的区别String helloWorld =“Hello World”;
helloWorld ==“Hello World”;
“Hello World”.equals(helloWorld);
答案 5 :(得分:17)
你说“好”,“开发者”。这是我的2美分.. :))
对于J2EE:
我可以想到很多很多很多,但现在这样做了。)
答案 6 :(得分:17)
技巧问题:在Java中通过引用传递了哪些参数?
令人惊讶的是,有多少人仍在鹦鹉学舌“原始人通过价值传递,物品通过参照传递”咒语。
答案 7 :(得分:16)
String,StringBuffer和StringBuilder之间有什么区别?
答案 8 :(得分:13)
“什么是部署描述符?”
如果候选人不情愿地发抖,他有使用3.0之前的EJB的经验。
答案 9 :(得分:12)
http://www.techinterviews.com/interview-questions/java提供了许多问题和访谈,我并不真正看到复制/粘贴其中一些内容的价值。
不,您可以自行创建自己的 认为非常重要的内容。就个人而言,我总是分两步进行:首先是几个问题,以获得经验和技能的基本概念,然后解决问题。我确实不相信能够回答任何已知的问题会让你成为一个好的或坏的未知问题解决者。所以,我更愿意让人们解决给定的问题,给他们一些要求,并要求他们编写代码(但不是在纸上)。我给他们一些时间回到我身边,检查他们是如何做到的,他们的编码风格,他们如何使用建议的API等等。
尽管如此,我最喜欢的问题是“你对Java有什么不喜欢的?” (本着this one的精神)。这是一个非常好的问题,它可以让您立即反馈候选人使用Java的程度并探索其API,以及他是否只是虔诚于此(如OP所写)。
更新:正如CPerkins所建议的那样,对于上面提出的问题,更好的措辞可能是“您最希望看到哪些内容在Java中发生了变化?”。事实上,我更喜欢这种方式。
答案 10 :(得分:11)
System.out.println中的'System','out','println'是什么? 当你在HashMap上调用'put'时会发生什么?
答案 11 :(得分:10)
答案 12 :(得分:10)
答案 13 :(得分:9)
将要打印什么?
public void testFinally(){
System.out.println(setOne().toString());
}
protected StringBuilder setOne(){
StringBuilder builder=new StringBuilder();
try{
builder.append("Cool");
return builder.append("Return");
}finally{
builder.append("+1");
}
}
回答:CoolReturn + 1
有点困难:
public void testFinally(){
System.out.println(setOne().toString());
}
protected StringBuilder setOne(){
StringBuilder builder=new StringBuilder();
try{
builder.append("Cool");
return builder.append("Return");
}finally{
builder=null; /* ;) */
}
}
回答:CoolReturn
答案 14 :(得分:9)
如果您正在招聘具有Java“经验”的毕业生一个简单的问题,例如编写一些会导致抛出NullPointerException的代码可以区分哪些候选人最近使用过Java,并且不仅仅停止当他们完成单位/课程时。
答案 15 :(得分:8)
简单的问题,例如,
虽然这些是非常基础的,但许多开发人员并不知道答案。我建议在与代码相关的查询之前询问这些问题。
答案 16 :(得分:8)
抽象类和接口有什么区别?你什么时候使用它们?
很多Java开发人员都不知道这一点,我问大多数人在大学的计算机科学课程,绝大多数人都无法回答。
答案 17 :(得分:6)
我所遇到的J2EE / JEE中间件问题列表非常长,但这里是我被问到的前五名,并引发了很好的讨论:
javax.naming.Context
问题。我发现另一个令人不安的问题但面对很多次的棘手问题是,
如何将依赖库打包到存档中?
或捆绑存档中各种类的可见性。
如果讨论没有导致不同应用程序服务器,资源档案等的类加载器层次结构,则最好辞职并继续前进。
Set
,List
,Map
以及Object.equals()
和Object.hashCode()
在这些界面的每个实现中的重要性。答案 18 :(得分:5)
您最喜欢/最不喜欢Java的原因是什么?
答案 19 :(得分:5)
与Web服务器和Web容器之间的区别
答案 20 :(得分:5)
为什么要覆盖toString()方法?
答案 21 :(得分:4)
这是我在采访中遇到的问题。
为什么Java中的main方法被称为public static void main(String [] args)?
答案:
1. main()必须声明为public ,因为只要程序执行开始,JVM就会调用它.JVM不属于我们的程序包。
为了访问包外的main,我们必须将其声明为public。如果我们将其声明为public以外的任何内容,则显示 运行时错误 但不是 编译时错误
2. main()必须声明为static ,因为如果一个方法声明为static,那么我们可以使用 ClassName.methodName();
class Sample
{
static void fun()
{
System.out.println("Hello");
}
}
class Test
{
public static void main(String[] args)
{
Sample.fun();
}
}
JVM将首先加载Test类,并检查Commandline参数并将main方法调用为Test.main();
3. main()必须声明为void main(),因为JVM不期望main()的任何值。所以,它必须声明为void。
如果提供了其他返回类型,则它是RunTimeError,即NoSuchMethodFoundError。
4. main()必须将String争论作为数组,因为JVM通过传递命令行arguement来调用main方法。因为它们存储在字符串数组对象中,所以它作为参数传递给main()
答案 22 :(得分:4)
更纯粹的Java问题:
睡眠和等待有什么区别?没有多少人真正了解等待是如何运作的。
您如何处理InterruptedExceptions?
答案 23 :(得分:3)
J2SE和J2EE(或JSE和JEE)之间有什么区别?
开发人员应该能够指出企业版基本上是可以由供应商实现的接口定义(即规范)。鉴于标准版本身就是一种实施方式
答案 24 :(得分:3)
volatile
如何影响编译器的代码优化?
答案 25 :(得分:2)
核心: 1.什么是检查和未检查的例外? 2.在代码中添加新的异常时使用什么类型(Checked / Unchecked)?
的Servlet: 1. response.sendRedirect()和request.forward()有什么区别?
答案 26 :(得分:2)
编写程序以接受两个整数,并将两个数字中最大的一个输出到您选择的位置的文件中。现在描述每个语句的作用。
从导入语句的重要性,直到异常终止,可以深入挖掘
答案 27 :(得分:2)
什么是会话bean,并描述无状态会话bean和有状态会话bean之间的一些差异。
答案 28 :(得分:1)
threads
如何运作?什么是synchronized
?如果一个类中有两个synchronized
方法,它们可以由两个线程同时执行。听到很多人回答是,你会感到惊讶。然后所有线程相关的问题,例如死锁,饥饿等
答案 29 :(得分:1)
许多Java程序员不知道的一点是Strings是不可变的,所以使用StringBuilder或StringBuffer!
String s = "";
for(int i = 0; i < 100; i++) {
s += "Strings " + "are " + "immutable, " + " so use StringBuilder/StringBuffer to reduce memory footprint";
}
答案 30 :(得分:0)
Q值。给出一个真实世界的示例场景,您将使用GenericServlet而不是HttpServlet?
答案 31 :(得分:0)
您何时会使用会话Bean或消息驱动Bean?
如何在会话bean中处理事务?
本地和远程会话bean之间有什么区别?这个问题更多的是关于知道RPC是否在图片中,因为暴露为本地或远程的方法可能仍然以不同方式工作(对于参数的副作用可能与本地有关,而对于遥控器不可能)。
一个好的测试是:永远不要以相同的顺序提出问题。我们有离岸外包的经验,有时他们实际上是以错误的顺序给出响应:-)。因此,您应该确保您能够真正看到您正在询问的人。
答案 32 :(得分:0)
线程安全类的优缺点和明确同步的代码以及两者的良好应用程序示例。信任线程安全类通常是不正确的,因为它保证了多线程应用程序中的数据一致性。
答案 33 :(得分:0)
描述内部类的“四”(而不是三种)类型之间的差异。
答案 34 :(得分:0)