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

每个优秀的Java/JavaEE开发人员都应该能够回答的问题?,java,jakarta-ee,Java,Jakarta Ee,我经历了这个问题,并且对这个问题的内容和方法印象深刻,因此本着同样的精神,我向Java/JavaEE开发人员提出这个问题 您认为一个优秀的Java/Java EE程序员应该能够回答哪些问题? 我把这个问题标记为社区维基,因为它不是特定于用户的,它的目的是为整个编程社区服务 期待一些令人惊讶的回应 编辑:请按照评论中的建议回答问题,这样人们也可以学习有关该语言的新知识 hashCode()和equals()之间的关系是什么?这些方法的意义是什么?实现它们的要求是什么?集合、映射和列表之间的区别是什

我经历了这个问题,并且对这个问题的内容和方法印象深刻,因此本着同样的精神,我向Java/JavaEE开发人员提出这个问题

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

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

期待一些令人惊讶的回应


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

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

集合、映射和列表之间的区别是什么


我仍然很惊讶有多少人在电话采访中不知道这一点。

技巧性问题:在Java中,哪些类型的参数是通过引用传递的

令人惊讶的是,有多少人还在鹦鹉学舌地唱着“原语按值传递,对象按引用传递”的咒语。

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


许多问题和采访都可以在网站上找到,但我并不认为复制/粘贴这些问题和采访有什么价值

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

话虽如此,我最喜欢的问题是“您不喜欢Java的哪些方面?”(本着的精神)。这确实是一个很好的问题,它可以立即向您反馈应聘者使用Java和探索其API的程度,以及他是否对Java抱有宗教信仰(如OP所写)


更新:正如CPerkins所建议的那样,对于上面建议的问题,更好的措辞可能是“您最希望看到Java中发生什么变化?”。事实上,我更喜欢这种方式。

简单的问题,比如

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

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

在System.out.println中什么是“System”、“out”、“println”?
当您在HashMap上调用“put”时会发生什么情况?

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

如果您正在招聘具有Java“经验”的毕业生一个简单的问题,比如写一些会引发NullPointerException的代码,可以区分哪些考生最近使用过Java,而不仅仅是在他们完成单元/课程后才停下来。

一个肯定的问题是字符串的比较。区别

字符串helloWorld=“helloWorld”
helloWorld==“你好世界”
“你好世界”,等于(你好世界)

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

    如果应征者不由自主地发抖,那么他有使用3.0之前的EJB的经验

    一个接口可以扩展多个接口吗 接口

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

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

    因此,你在面试中(自己)学到了一些东西,你向面试官展示了你能够对类、对象、继承、多态性等进行推理。事实上,这比一个背诵答案但不理解原因的应聘者要好得多
  • 当凌驾于平等之上时,什么是总合同
  • 更好的选择是列表还是数组
  • 什么是公认的命名约定
  • 序列化是如何工作的
  • 如何实现可比性
  • 使用JDBC准备好的语句有什么好处
  • 什么是JavaEE
  • 什么是容器,它提供什么服务

  • web服务器和web容器之间的区别

    您说的是“好”、“开发人员”。这也是我的2美分……)

    • “检查异常”是什么意思
    • 在何时使用哪一个更好:断言还是异常来处理意外情况
    • 为什么字符串类是最终的?(还是不是?;))
    • wait、notify和notifyAll方法是否在对象类中
    • 为什么线程类不是最终的?为什么我要延长线程,永远
    • 为什么有两个约会班;一个在jav
      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");
      }
      
      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");
          }
      }
      
      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;  /* ;) */
          }
      }
      
      String s = "";
      for(int i = 0; i < 100; i++) {
        s += "Strings " + "are " + "immutable, " + " so use StringBuilder/StringBuffer to reduce memory footprint";
      }
      
      class Sample
      {
           static void fun()
           {
                 System.out.println("Hello");       
           }
      }
      
      class Test
      {
            public static void main(String[] args)
            {
                      Sample.fun();
            }
      }