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

Rac*_*hel 138 java java-ee

我所经历的问题,每一个良好的.NET开发人员应该能够回答,是这个问题的内容和方法非常深刻的印象,因此,在同样的精神,我要求的Java/Java EE的开发者这个问题.

有什么问题你认为应在良好的Java/Java EE的程序员能够回答?

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

期待一些惊人的回应.

编辑:请回答问题,如评论中所建议的那样,这样人们也可以学习一些关于语言的新知识.

Jef*_*eff 83

hashCode()和equals()之间有什么关系?这些方法有什么意义?实施它们有哪些要求?

  • java @ http://www.technofundo.com/tech/java/equalhash.html中的equals()和hashCode() (3认同)

Jon*_*Jon 70

Set,Map和List有什么区别?

我仍然惊讶于有多少人在电话采访中不知道这个.

  • 不抱歉不要买,这是每个开发人员都应该知道的基本知识. (127认同)
  • 我甚至可以说任何人甚至想到软件中的工作不仅需要了解它,还需要了解不同类型的列表之间的差异(ArrayList/LinkedList).不一定是最佳实现,甚至不是O(n)符号,而是了解何时使用什么是正确的. (15认同)
  • @Joachim:你可以从你的陈述中删除"Java"这个词.集,映射和列表是基本的算法概念. (13认同)
  • +1 @Jon:我通常订阅"无需记住细节"的思想,但如果你甚至不知道这些基本接口之间的基本概念差异,那么你肯定不是一个优秀的Java开发人员. (11认同)
  • 当然,但是看网上的文档("java集合框架")需要花费20秒的时间,所以很多有价值的人可能不会费心将它留在内存中. (8认同)
  • 很多开发人员只使用列表.我遇到了不幸遇到一个编写方法来实现列表周围的集合语义的人.+1是一个简单但有用的问题,可以找出是否有人有一半的线索. (2认同)

ewe*_*nli 44

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

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

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

所以你在面试中学到了一些东西(你自己),你向面试官展示了你能够推理出类,对象,继承,多态等等.这实际上比一个知道答案的候选人要好得多但却没有明白为什么

  • 这个问题的一个棘手的版本是"java支持多重继承吗?" 对于接口,答案只是"有点" (3认同)
  • 我曾经被问到这个问题,我回答"不".我认为这是压力加上我的回答太快了.它总是很难知道你从未使用的东西的答案. (2认同)

sat*_*esh 23

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

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");
}
Run Code Online (Sandbox Code Playgroud)

  • 好吧,参数`n`被声明为final,这意味着它不能在`test`方法体中重新分配.它不会导致错误,因为test`不会尝试重新分配参数的方法`,它只是设置的参数...`N =新名称("测试")的属性;`会导致编译错误... (20认同)
  • 添加到@ rjohnston的注释:使用final方法参数不能确保类实例的不变性.如果需要不变性,则应该设计类(本例中的名称)(例如,在目前的情况下不提供设置者) (7认同)

zap*_*ing 19

一个肯定是字符串的比较.之间的区别

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

  • 很确定你需要做一些像新的字符串("Hello World").是不是从池中拉出字符串常量,就像intern()的效果一样,因此使两个语句都成立? (14认同)

Chi*_*chi 17

特技提问:Java中通过引用传递了哪些参数?

令人惊讶的是,有多少人仍然鹦鹉学舌"原始人通过价值传递,物品通过参考传递"咒语.

  • 这是一个愚蠢的问题,因为如果你也问"通过引用传递了什么后果?",那么"错误"答案最有可能在技术上正确.这只是定义*通过引用*传递意味着什么,因此在Java世界中没有太多价值,因为只有一种方法可以传递对象.理解究竟发生了什么比使用aribitrary定义*以你想要的方式传递*更为重要. (23认同)
  • 我想知道正确答案是否总是在面试中给出的答案.在我采访过的地方,面试官也嘲笑同样的事情. (4认同)
  • 这个问题至少是有问题的,因为它主要取决于"按值传递"/"通过引用传递"的确切定义,这通常被错误地使用.虽然我同意一个优秀的开发人员应该知道这些定义,但了解后果更为重要.如果您了解Java的实际行为,那么知道该概念的正确名称并不是很有意义,因为它不是您在实践中讨论的内容,因为它永远不会改变. (3认同)
  • Erm,对象*在Java中通过引用传递.您不能按值传递对象; 除其他外,对象永远不会存在于堆栈中.*参考*通过值传递,当然. (3认同)
  • 我注意到将C语言作为第一语言学习的人和在回答有关Java的这个问题时学习C++作为第一语言的人们之间存在差异.可能是因为C用户被教导将指针传递给值是"通过引用传递". (2认同)

Eli*_*ter 17

你说"好","开发者".这是我的2美分.. :)

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

对于J2EE:

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

我可以想到很多很多很多,但是现在这样做:)

  • 答案会很好,我不知道其中一些答案. (8认同)
  • 使用断言"这应该永远不会发生"错误,这些错误将在开发中处理.对运行时可能发生的错误使用异常,程序需要以某种方式处理它们. (2认同)

Thu*_*shy 16

String,StringBuffer和StringBuilder有什么区别?

  • String - 表示String的不可变类.StringBuffer - 旧版Java中引入的构建器模式,它在每​​个操作(或大多数操作)上进行同步,以用于构建String.StringBuilder - 在Java 5(JDK 1.5)中引入,这是一个共享StringBuffer API的类,用于构建一个在每个操作(或大多数操作)上执行*not*同步的String.因为字符串的构造倾向于在单个线程中发生,所以StringBuilder在支持它的Java运行时/ JDK中是首选. (5认同)

Mic*_*rdt 13

"什么是部署描述符?"

如果候选人不情愿地发抖,他有使用3.0之前的EJB的经验.


Pas*_*ent 12

很多问题和访谈可以在http://www.techinterviews.com/interview-questions/java上找到,我真的没有看到复制/粘贴选择它们的价值.

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

尽管如此,我最喜欢的问题是"你对Java有什么不喜欢的?" (本着这一点的精神).这是一个非常好的问题,它可以让您立即反馈候选人使用Java的程度并探索其API,以及他是否只是虔诚于此(正如OP所写).

更新:正如CPerkins所建议的那样,对于上面提出的问题,更好的措辞可能是"你最希望看到Java中有什么变化?".事实上,我更喜欢这种方式.


Adi*_*Adi 11

System.out.println中的'System','out','println'是什么?在HashMap上调用'put'会发生什么?


Mar*_*ark 10

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

  • 如果只有_one_事我可以改变,我会在语言中添加运算符重载,可能只有一组有限的可重载运算符(即没有重载`new`或`^`或`>>`,<< `和`>>>`).如果我可以改变另一件事,那就是添加_true_ call-by-reference语义.第三件事是添加`unsigned`整数类型. (3认同)

Jua*_*nZe 10

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


Dav*_*vid 9

如果您正在招聘具有Java"经验"的毕业生一个简单的问题,例如编写一些会导致抛出NullPointerException的代码,可以区分哪些候选人最近使用过Java,并且当他们完成单位/课程时不会停止.

  • "抛出新的NullPointerException()"是正确的答案吗? (16认同)

zal*_*niy 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");
    }
}
Run Code Online (Sandbox Code Playgroud)

答案: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;  /* ;) */
    }
}
Run Code Online (Sandbox Code Playgroud)

:CoolReturn

  • return语句返回对StringBuilder对象的引用.更改finally中的引用对实际返回的引用没有任何作用.但是,更改对象的__contents__会影响返回的内容,如第一个示例中所示. (4认同)
  • @Alaa,它几乎就像一个临时值设置为构建器,构建器在finally块中设置为null,然后临时值是返回的值. (3认同)

Rav*_*sha 8

简单的问题,如,

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

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


ZoF*_*reX 8

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

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


CMR*_*CMR 6

前5个J2EE/JEE问题

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

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

我发现另一个令人不安的问题,但多次遇到的问题是, 如何将依赖库打包到存档中?
捆绑存档中各种类的可见性.
如果讨论没有导致不同应用程序服务器,资源档案等的类加载器层次结构,则最好辞职并继续前进.

前5个核心Java问题:

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


小智 5

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


Car*_*ten 5

你最喜欢/最喜欢Java的原因是什么?为什么?


小智 5

为什么要覆盖toString()方法?