代码之家  ›  专栏  ›  技术社区  ›  Clay

每一个好的Java/JavaEE开发者都应该能够回答的问题?[关闭]

  •  138
  • Clay  · 技术社区  · 6 年前

    我正在经历 Questions every good .Net developer should be able to answer 对这个问题的内容和方法印象深刻,因此,同样的精神,我要问Java/JavaEE开发者这个问题。

    什么问题 你认为应该 Java/JavaEE程序员能回答吗?

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

    期待一些惊人的反应。

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

    35 回复  |  直到 13 年前
        1
  •  83
  •   Jeff    15 年前

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

        2
  •  70
  •   Jon    15 年前

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

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

        3
  •  44
  •   CodeChef    15 年前

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

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

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

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

        4
  •  23
  •   Pieter    15 年前

    方法调用中关键字的用法。 例如,为什么在下面的代码中,尽管使用了方法参数的限定符,但该方法仍然没有给出任何编译错误。 <代码> >/P>

    类名{
    私有字符串名称;
    
    公用名(字符串){
    这个名字= s;
    }
    
    public void setname(字符串){
    这个名字= s;
    }
    }
    
    私有无效测试(最终名称n){
    n.setname(“测试”);
    }
    < /代码> 
    
    

    f最终的方法调用中的关键字。 例如,为什么该方法测试在下面的代码中,尽管使用最终的方法参数的限定符。

    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");
    }
    

        5
  •  19
  •   zapping    15 年前

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

    string hello world=“你好,世界”;
    hello world==“你好,世界”;
    “你好,世界”,等于(地狱世界);

        6
  •  17
  •   Chinmay Kanchi    15 年前

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

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

        7
  •  17
  •   Elister    15 年前

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

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

    对于J2EE:

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

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

        8
  •  16
  •   Thunderhashy    15 年前

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

        9
  •  13
  •   Michael Borgwardt    15 年前

    “什么是部署描述符?”

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

        10
  •  12
  •   Pascal Thivent    8 年前

    许多问题和访谈可在 http://www.techinterviews.com/interview-questions/java 我也没有看到复制/粘贴所选内容的价值。

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

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

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

        11
  •  11
  •   Adi    15 年前

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

        12
  •  10
  •   JWHEAT    15 年前
    1. 解释Java中使用的各种访问修饰符。我已经有很多人为此而挣扎,尤其是默认访问。
    2. 如果你能改变Java语言或平台的一点,它会是什么?优秀的开发人员在这里会有答案,而那些对开发不感兴趣的人可能不在乎。
    3. 如果他们的简历上说他们使用ejb2.1,那么询问ejb3以了解他们对它的了解。即使不使用新版本,最好的开发人员也会跟上最新的开发。
        13
  •  10
  •   JuanZe    15 年前
    • 当覆盖等号时,一般合同是什么?
    • 更好的选项是首选列表还是数组?
    • 一般公认的命名约定是什么?
    • 序列化如何工作?
    • 如何实现可比性?
    • 使用JDBC准备好的语句有什么好处?
    • 什么是JavaEE?
    • 什么是容器,它提供什么服务?
        14
  •  9
  •   David    15 年前

    如果你用JAVA“经验”雇佣毕业生,那么简单的问题 编写一些将导致引发NullPointerException的代码 可以区分哪些候选人最近使用过Java,并且在他们完成单元/课程时并没有停止。

        15
  •  9
  •   zaletniy    15 年前

    打印什么?

    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");
        }
    }
    

    回答 冷却返回+ 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

        16
  •  8
  •   ZoFreX    15 年前

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

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

        17
  •  8
  •   Ravisha    13 年前

    简单的问题,例如,

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

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

        18
  •  6
  •   tonyriddle    14 年前

    前5个J2EE/JEE问题

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

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

    我觉得另一个棘手的问题是, 依赖库如何打包到存档中?
    捆绑归档中各种类的可见性。
    如果讨论没有导致不同应用服务器、资源档案等的类装入器层次结构,那么最好辞职并继续。

    Java核心5大问题:

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

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

        20
  •  5
  •   Carsten    15 年前

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

        21
  •  5
  •   SWD    15 年前

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

        22
  •  4
  •   David Nouls    15 年前

    一个更纯粹的Java问题:

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

    您需要如何处理InterruptedExceptions?

        23
  •  4
  •   Sai Upadhyayula    14 年前

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

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

    回答:

    1。 main()必须声明为public 因为每当程序执行开始时,它都会被JVM调用。JVM不属于我们的程序包。

    为了访问包外部的main,我们必须将其声明为public。 运行时错误 但不是 编译时间错误

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

    class Sample
    {
         static void fun()
         {
               System.out.println("Hello");       
         }
    }
    
    class Test
    {
          public static void main(String[] args)
          {
                    Sample.fun();
          }
    }
    

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

    三。 main()必须声明为void main()。 因为jvm不需要来自main()的任何值,所以必须将其声明为void。

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

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

        24
  •  3
  •   oxbow_lakes    15 年前

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

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

        25
  •  3
  •   Roman    15 年前

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

        26
  •  2
  •   Kristian    15 年前

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

        27
  •  2
  •   Everyone    15 年前

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

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

        28
  •  2
  •   YoK    15 年前

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

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

        29
  •  1
  •   fastcodejava    15 年前

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

        30
  •  1
  •   Shervin Asgari    14 年前

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

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