有关泛型和注释的一些优秀的java面试问题和答案是什么?

时间:2010-05-21 15:15:35

标签: java generics annotations

关于泛型和注释有哪些优秀的java面试问题和答案?

11 个答案:

答案 0 :(得分:7)

自Java 5问世以来,我看到有数十人不明白为什么,给定一个接口I,以及类AB extends A,你无法通过{{1需要I<B>的地方。很多人觉得这是违反直觉的。

为了测试一个人推理关于泛型的能力,那么我首先会问他们是否可以将I<A>分配给{{1}如上所述的引用。如果没有,为什么不呢?如果他们弄错了,告诉他们他们错了,并要求他们尝试填写这里的空白,以说明为什么这个例子如果可以编译就是不安全的类型:

I<B>

此时它应该很容易,如果他们不能构建这样的例子,我会有点担心。一个例子是

I<A>

答案 1 :(得分:6)

这个测试:

http://tests4geeks.com/test/java

包含有关注释的一些问题。

它不包含任何有关通用的问题。但除此之外,还有一些其他有趣的主题,如:

多线程,

内存,

算法和数据结构,

OOP,

答案 2 :(得分:3)

  • Class Enum<E extends Enum<E>>确保了什么?
  • <T> List<? extends T> x()是一个有用的签名吗?
  • 注释保留政策及其原因?
  • 假设您想在不同的上下文中重用一个类,您会使用注释还是外部配置? (即注释引入依赖关系)。

哈德:

  • 无法用Java类型系统表示的有效泛型类型的示例,它将导致编译器警告。
  • java编译器将/不会推断泛型类型的示例? (编译器将推断错误类型的代码示例)
  • 哪些泛型类型信息没有被删除,可以从字节码中检索出来? (Super type tokes是一个申请表)
  • 什么是APT(不使用反射时的用例)?

答案 3 :(得分:2)

问题:如何确定通用在运行时使用的对象类型?

答案:由于类型擦除,无法确定类型。

答案 4 :(得分:2)

  1. Generic:
  2. 问:Hashmap和Hashtable有什么区别?

    答:Hashtable是同步的,Hashmap不是。

    1. 注解:
    2. 问:描述使用javax.xml.bind.Marshaller接口和注释序列化java对象。

      答:在有意义的背景下描述这样的事情应该是可以接受的:

      @XmlRootElement
      class Employee {
      ...
      }

答案 5 :(得分:1)

泛型:提出一个旨在了解他们是否理解type erasure的问题。

注释:询问他们最喜欢的注释是什么,以及它是如何工作的(你不需要详细的技术解释,但你需要的不仅仅是“魔法”)。

答案 6 :(得分:1)

注释:有哪些风险? (编译器可以进入无限循环并阻塞构建过程。)

泛型:如何使用泛型构建mixin? (编写一个接受参数的泛型类,然后以子类作为参数扩展它。)

此外,类型擦除+1。

答案 7 :(得分:1)

以下是关于泛型的一对:

<强> 1)

问题:如果我有这个方法,我将如何创建一个T类型的新实例,并将其分配给此方法中名为item的变量(假设{ {1}}有一个默认构造函数)?

Class<T>

<强>答案

public static <T> Collection<T> select(Class<T> c, String sqlStatement) {
}

<强> 2)

问题:如果你想表明泛型扩展了一些基类,但你不知道扩展基类的类到运行时是什么,你怎么能声明通用?

回答:使用通配符:T item = c.newInstance();

答案 8 :(得分:1)

如果您正在寻找摇滚明星Java程序员,您可以从Generics chapter in Bloch's Effective Java创建一些高级问题。诸如同类或异类容器(来自java教程之一的鸟笼和狮笼示例),擦除等等。

在不太高级的人中,我主要是想了解为什么人们会想要泛化(你会惊讶地发现有多少人不理解并且相信Java 2的做事方式仍然是规则),以及类似的东西

在注释中,我喜欢询问“覆盖”注释及其好处。我还想更深入地讨论注释的优缺点以及何时使用它们 - 我不喜欢过度热衷的元编程。这也是一个很好的机会,看看是否有人使用带有注释的Hibernate或JUnit。

答案 9 :(得分:1)

以下是我刚刚编写的一些内容:

- [Cagey generics]取消注释这些行是否会导致问题?哪个,如果有的话?为什么或为什么不呢?

public class Cage<T> { ... }
public class Animal { ... }
public class Bear extends Animal { ... }
// Cage<Animal> c = new Cage<Bear>();
// Cage<Bear> c = new Cage<Animal>();
// Cage<?> c = new Cage<Animal>();
// Cage<Animal> c = new Cage<?>();

- [限制因素]只有Animals应该进入Cages。我们如何收紧上述类定义以反映这一新要求?

- [法律问题]您无法实例化泛型类型的数组。因此,像new List<Animal>[10]这样的东西是非法的。你能想到一个场景,如果这个 合法,你会遇到麻烦吗?

作为练习留给读者的答案 - 如果你不自己弄明白,你就不会学到任何东西!但这里有一些提示。

  • [Cagey仿制药]:?是什么意思?你还记得“协方差”一词吗?
  • [Constraints]:Java允许您约束类型参数的值。你还记得这个的语法吗?
  • [法律问题]:假设您可以Object[] arr = new List<String>[]。您能否编写一些代码,将某些内容放入arr的{​​{1}}中,而不应该放在那里?

答案 10 :(得分:1)

“注释擅长什么类型的东西?”和“什么类型的东西注释不好?”浮现在脑海中。

注释擅长元编程,但作为一种可能的最佳实践,如果将所有这些注释全部用于 注释,那么该代码仍然有用。

或不。您的里程可能会有所不同,但您可能希望所有高级开发人员都同意这一点。