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

Questions every good Java/Java EE Developer should be able to answer?

每一个好的.NET开发者都应该能够回答问题,并且对这个问题的内容和方法印象深刻,因此,同样的精神,我问这个问题是为了Java/JavaEE开发者。

你认为一个好的Java/JavaEE程序员能回答什么问题?

我将这个问题标记为社区wiki,因为它不是特定于用户的,它的目标是为整个编程社区服务。

期待一些惊人的反应。

编辑:请按照评论中的建议回答问题,这样人们也可以学习有关语言的新知识。


hashcode()和equals()之间的关系是什么?这些方法的意义是什么?实施它们的要求是什么?


集合、映射和列表有什么区别?

在电话采访中有多少人不认识这个,我仍然感到惊讶。


Can an interface extend multiple
interfaces?

大多数人回答"否",因为他们知道Java没有多重继承。但是一个接口仍然可以扩展多个接口(但是一个类不能扩展多个类)。这不会导致钻石问题。

如果答案是"不",面试官应该问"为什么禁止?"然后你开始考虑它,你应该意识到它没有问题。

所以你在面试中(自己)学到了一些东西,你向面试官展示了你能够对类、对象、继承、多态性等进行推理。事实上,这比一个心中有数却不明白为什么的候选人要好得多。


在方法调用中使用final关键字。例如,为什么下面代码中的方法测试没有给出任何编译错误,尽管使用了方法参数的最终限定符。

ZZU1〔0〕


一个肯定是字符串的比较。两者之间的差异

String helloWorld ="Hello World";
helloWorld =="Hello World";
"Hello World".equals(helloWorld);


技巧问题:Java中引用引用的参数是什么?

令人惊讶的是,有多少人仍然重复着"原语是通过价值传递的,对象是通过引用传递的"这句咒语。


你说"好","开发商"。这也是我的2美分……:)

  • "检查异常"是什么意思?
  • 使用哪一个更好?何时:断言或异常来处理意外情况?
  • 为什么字符串类是最终类?(或者不是吗?);)
  • wait、notify和notifyall方法是否在对象类中?
  • 为什么线程类不是最终的?为什么我要延长线,永远?
  • 为什么有两个日期类:一个在java.util包中,另一个在java.sql中?
  • 如果在finally块中抛出异常,会发生什么?剩下的是否最终执行?
  • 有一个垃圾收集器没事,但是在Java应用程序中内存泄漏完全不存在吗?如果不是,怎么会这样?

对于J2EE:

  • 在servlet中使用实例/静态变量是否很好?为什么不?那么你把"州"储存在哪里呢?
  • 继续上述问题:对于(Web)应用程序,"状态"在哪里?
  • 如果我开始在"jsp"中创建/关闭db连接会发生什么?
  • 处理JSP异常的方法是什么?试试抓?六羟甲基三聚氰胺六甲醚。。还有别的吗?

我可以想象他们中的很多,很多,更多,但现在就这样了:)


String、StringBuffer和StringBuilder之间有什么区别?


"什么是部署描述符?"

如果候选人不由自主地发抖,他就有使用3.0版以前的EJB的经验。


在http://www.techinterfaces.com/interview-questions/java上可以找到许多问题和访谈,我并不认为复制/粘贴这些问题和访谈的价值所在。

不,这取决于你自己创造你认为重要的东西的汇编。就我个人而言,我总是分两步进行:首先是几个问题,了解基本的经验和技能,然后是解决问题的情况。我确实不相信能够回答任何已知的问题会让你成为一个好的或坏的未知问题解决者。所以,我更喜欢让人们解决一个给定的问题,给他们一些需求,并要求他们编写代码(但不是在纸上)。我给了他们一些时间,让他们回到我身边,检查他们是如何做到的,他们的编码风格,他们如何使用建议的API,等等。

尽管如此,我最喜欢的问题是"你不喜欢Java什么?"(本着这一点)。这确实是一个很好的问题,它给你一个即时反馈,说明一个候选人使用了多少Java并探索了它的API,以及他是否只信奉它(如OP写的)。

更新:正如CPerkins所建议的,上面提到的问题的一个更好的措辞可能是"在Java中你最希望看到什么变化?"我更喜欢这样。


system.out.println中的"system"、"out"、"println"是什么?当你在hashmap上调用"put"时会发生什么?


  • 解释Java中使用的各种访问修饰符。我已经有很多人为此而挣扎,尤其是默认访问。
  • 如果你能改变Java语言或平台的一点,它会是什么?优秀的开发人员在这里会有答案,而那些对开发不感兴趣的人可能不在乎。
  • 如果他们的简历上说他们使用ejb2.1,那么询问ejb3以了解他们对它的了解。即使不使用新版本,最好的开发人员也会跟上最新的开发。

    • 当覆盖等号时,一般合同是什么?
    • 更好的选项是首选列表还是数组?
    • 一般公认的命名约定是什么?
    • 序列化如何工作?
    • 如何实现可比性?
    • 使用JDBC准备好的语句有什么好处?
    • 什么是JavaEE?
    • 什么是容器,它提供什么服务?

    打印什么?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    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

    有点困难:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    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


    如果你用Java"经验"雇佣一个简单的问题,比如写一些会导致Null PoExtExchange异常的代码,可以区分哪些考生最近使用过Java,并且在他们完成单元/课程时并没有停止。


    简单的问题,例如,

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

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


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

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


    前5个J2EE/JEE问题

    我所面临的J2EE/JEE中间件问题列表非常长,但下面是我被问到的前5个问题,并导致了很好的讨论:

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

    Java核心5大问题:

  • 有关java.util.collections的问题这是所有问题的根源。一旦你能有效地让面试官进入这个领域,如果你做好了准备,面试的其余部分通常都会留在这里。一定要了解SetListMap以及Object.equals()Object.hashCode()在这些接口的每一个实现中的重要性。
  • 重构问题如果面试官思想开放的话,这些都很好。如果面试官已经有了一个具体的解决方案,而你的方案与他/她的方案不匹配,那么你就注定要失败。最好同意"我理解其他解决方案是可能的"的答案。
  • JDK5中的多线程问题,与早期的JDK版本比较我发现最好准备java.util.concurrent包类。DougLea的书有很多答案。
  • JDK1.6/JDK1.7中有什么新功能?这对许多面试官来说是一个很有把握的问题。尽管我很讨厌这个,但最好做好准备。至少记住一些我曾经共事过的事情,并把讨论引向另一个方向,在很大程度上有效地回避和解决了问题。
  • Java API中的模式一次又一次,我被要求在Java API中指出一个GOF模式。最好做好准备。

  • 你最喜欢Java什么?为什么?


    为什么要重写toString()方法?


    Web服务器和Web容器之间的区别


    一个更纯粹的Java问题:

    睡眠和等待有什么区别?没有多少人真正理解等待是如何工作的。

    您需要如何处理InterruptedExceptions?


    这是我在面试中面临的问题。

    为什么Java中的main方法被称为公共静态空隙main(String)[ARGs?

    答:

    1.main()必须声明为public,因为它在程序执行开始时由jvm调用。jvm不属于我们的程序包。

    为了访问包外部的main,我们必须将其声明为public。如果我们将其声明为public以外的任何内容,它将显示运行时错误,但不会显示编译时错误。

    2.main()必须声明为static,因为如果方法声明为static,那么我们可以使用classname.methodname()在类外部调用该方法;

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    class Sample
    {
         static void fun()
         {
               System.out.println("Hello");      
         }
    }

    class Test
    {
          public static void main(String[] args)
          {
                    Sample.fun();
          }
    }

    JVM将首先加载测试类,并检查命令行参数,并将main方法作为test.main()调用;

    3.main()必须声明为void main(),因为jvm不需要main()中的任何值。因此,必须声明为void。

    如果提供了其他返回类型,则它是一个运行时错误,即NoSuchMethodFoundError。

    4.main()必须将字符串参数作为数组,因为jvm通过传递命令行参数来调用main方法。当它们存储在字符串数组对象中时,它作为参数传递给main()。


    J2SE和J2EE(或JSE和JEE)有什么区别?

    开发人员应该能够指出,企业版基本上是一个接口定义(即规范),可以由供应商实现。而标准版本身就是一种实现。


    volatile如何影响编译器的代码优化?


    酷kù睿ruì:1。什么是选中和未选中的异常?2。在代码中添加新的异常时,使用什么类型(选中/未选中)?

    Servlet:1。response.sendRedirect()和request.forward()有什么区别?


    编写一个接受两个整数的程序,并将两个数字中最大的一个输出到您选择的位置的文件中。现在描述每个语句的作用。

    从进口声明的意义到异常终止,很有可能进行深入调查。


    会话bean是什么,描述无状态会话bean和有状态会话bean之间的一些区别。


    threads如何工作?什么是synchronized?如果一个类中有两个synchronized方法,那么它们可以由两个线程同时执行。听到很多人回答"是",你会很惊讶。然后所有与线程相关的问题,例如死锁、饥饿等。


    许多Java程序员不知道的一件事就是字符串是不可变的,所以使用StringBuilder或StringBuffer!

    1
    2
    3
    4
    String s ="";
    for(int i = 0; i < 100; i++) {
      s +="Strings" +"are" +"immutable," +" so use StringBuilder/StringBuffer to reduce memory footprint";
    }


    什么时候使用会话bean或消息驱动bean?

    会话bean中如何处理事务?

    本地和远程会话bean之间的区别是什么?这个问题更多的是关于是否知道rpc在图片中,因为暴露为本地或远程的方法可能仍然工作不同(对参数的副作用在本地是可能的,而在远程是不可能的)。

    一个好的测试是:不要按同样的顺序提问。我们在海外工作的经验是,有时候他们的反应顺序是错误的。因此,你应该确保你能看到你正在审问的人。


    线程安全类和显式同步代码的优缺点以及两者的良好应用实例。在多线程应用程序中,信任线程安全类作为数据一致性的保证通常是不正确的。


    描述内部类的"四"(不是三;)类型之间的差异。


    所有人的问题都很好,答案也很好。很高兴看到这样的问题。我想再添加一些可以使这个答案库更丰富的内容。

    核心Java在Java中主要是关键字吗?更多信息

    Java是独立于JVM的平台形式。

    我们可以在类中有私有构造函数吗,如果有,它的用法是什么?

    为什么我们需要在抽象类中有构造函数,尽管我们不能实例化它?更多信息

    而不是最重要的是,还有更多关于核心Java的问题。更多信息


    问:给出一个真实的例子场景,您将使用genericservlet而不是httpservlet?