每个优秀的Java / Java EE开发人员应该能够回答的问题?

时间:2010-01-22 00:56:36

标签: java java-ee

我正在经历Questions every good .Net developer should be able to answer并且对这个问题的内容和方法印象深刻,所以本着同样的精神,我在为Java / Java EE Developer提出这个问题。

您认为优秀的 Java / Java EE程序员能够回答哪些问题

我将此问题标记为社区维基,因为它不是用户特定的,它旨在为整个编程社区提供服务。

期待一些惊人的回应。

编辑:请按照评论中的建议回答问题,以便人们可以了解有关该语言的新内容。

35 个答案:

答案 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美分.. :))

  • “已检查的例外”是什么意思?
  • 最好使用哪一个以及何时:处理意外情况的断言或异常?
  • 为什么String类是最终的? (或者不是吗?;))
  • 是Object class中的wait,notify和notifyAll方法吗?
  • 为什么Thread类不是最终的?为什么我会延长线程?
  • 为什么有两个Date类;一个在java.util包中,另一个在java.sql中?
  • 如果在finally块中抛出异常,会发生什么?剩下的是否最终执行?
  • 有一个垃圾收集器好,但是Java应用程序中完全没有内存泄漏?如果没有,怎么会这样?

对于J2EE:

  • 在servlet中使用实例/静态变量是否合适?为什么不?那么你在哪里存储“州”?
  • 继续上述问题:什么&哪个是(网络)应用程序的“状态”?
  • 如果我在“JSP”中开始创建/关闭数据库连接会怎样?
  • 处理JSP异常的方法有哪些?试着抓?嗯..还有什么吗?

我可以想到很多很多很多,但现在这样做了。)

答案 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)

  1. 解释Java中使用的各种访问修饰符。我有很多人都在努力解决这个问题,特别是默认访问。
  2. 如果您可以改变Java语言或平台的一件事,它会是什么?好的开发人员会在这里得到答案,而那些对开发不感兴趣的人可能并不关心。
  3. 如果他们的简历中说他们使用的是EJB2.1,那么请询问EJB3以了解他们对此的了解。即使他们不使用新版本,最好的开发人员也会跟上最新的发展。

答案 12 :(得分:10)

  • 覆盖等于时的一般合约是什么?
  • 更好的选择是首选列表还是数组?
  • 普遍接受的命名约定是什么?
  • 序列化的工作原理?
  • 如何实施Comparable?
  • 使用JDBC的Prepared Statements有什么好处?
  • 什么是Java EE?
  • 什么是容器,它提供什么服务?

答案 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)

简单的问题,例如,

  • 什么是JRE和JDK?
  • 为什么java要求互操作性?

虽然这些是非常基础的,但许多开发人员并不知道答案。我建议在与代码相关的查询之前询问这些问题。

答案 16 :(得分:8)

抽象类和接口有什么区别?你什么时候使用它们?

很多Java开发人员都不知道这一点,我问大多数人在大学的计算机科学课程,绝大多数人都无法回答。

答案 17 :(得分:6)

前5个J2EE / JEE问题

我所遇到的J2EE / JEE中间件问题列表非常长,但这里是我被问到的前五名,并引发了很好的讨论:

  1. 当MDB遇到无法处理的异常时会发生什么?
    这个问题通常会引发有关毒药消息,错误队列等的各种有趣讨论,
  2. 鉴于JMS主题以及不同JVM上的一些消费者,对有和没有持久消费者的各种情况有疑问。
    这个问题通常允许我讨论何时使用持久订阅者,何时使用队列等,
  3. 如果遇到访问Hibernate / JPA POJO内容导致异常的情况,如何解决?
    这导致关于延迟加载,再水化等的精彩讨论,甚至导致比较和对比JPA与实体bean。我发现做好准备并在概念中明确是有用的。
  4. 如何提供简单的网络服务?
    从简单的Web服务器到复杂的SOAP / REST解决方案,以及介于两者之间的任何解决方案都应该足够好。此外,基于访问者,有时它会引发关于主题的非常有趣的讨论,例如一些设计思想 - 首先是WSDL,文档样式,SOAP中介等等。它可能导致诸如JAX-WS上的JAX列表改进之类的问题-RPC,或SOAP1.1上的SOAP1.2,答案往往基于我记得多少。
  5. JEE 5资源注入
    此问题以多种方式提出,从服务定位器模式开始到javax.naming.Context问题。
  6. 我发现另一个令人不安的问题但面对很多次的棘手问题是, 如何将依赖库打包到存档中?
    捆绑存档中各种类的可见性。
    如果讨论没有导致不同应用程序服务器,资源档案等的类加载器层次结构,则最好辞职并继续前进。

    五大核心Java问题:

    1. 有关java.util.collections的问题
      这是所有问题的母亲。一旦你能够有效地登陆该领域的面试官,如果你有准备,其余的面试通常会留在这里。请务必了解SetListMap以及Object.equals()Object.hashCode()在这些界面的每个实现中的重要性。
    2. 重构问题
      如果面试官心胸开阔,这些都很好。如果面试官已经有一个特定的解决方案,而你的人与他/她不匹配,那你几乎注定要失败。最好同意答案“我理解其他解决方案是可行的。”
    3. 有关JDK5中多线程的问题,与早期的JDK版本相比 我发现最好用 java.util.concurrent 包类做好准备。 Doug Lea的书中有大部分答案。
    4. JDK1.6 / JDK1.7中的新功能......
      对于很多面试官来说,这是一个肯定的问题。尽管我讨厌这个,但最好做好准备。至少还记得我曾与之合作的一些人,并在其他方向上引导讨论,在很大程度上有效地避开并解决了这个问题。
    5. Java API中的模式
      我一次又一次被要求在Java API中指出一个GoF模式。最好为这一个做好准备。

答案 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)

所有人都有很好的问题和很好的答案。很高兴看到这类问题。 我想补充一些可以使这个答案库更加丰富的内容。

适用于Core Java 主要是java中的关键字吗? More info

Java是独立于JVM的平台吗?

我们可以在课堂上使用私有构造函数,如果是,那么它的用法是什么。

为什么我们需要在抽象类中使用构造函数,尽管我们无法实例化它? More Info

而不是最重要的是,还有更多与核心java相关的问题。 More Info