关于泛型和注释有哪些优秀的java面试问题和答案?
答案 0 :(得分:7)
自Java 5问世以来,我看到有数十人不明白为什么,给定一个接口I
,以及类A
和B 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()
是一个有用的签名吗?哈德:
答案 3 :(得分:2)
问题:如何确定通用在运行时使用的对象类型?
答案:由于类型擦除,无法确定类型。
答案 4 :(得分:2)
问:Hashmap和Hashtable有什么区别?
答:Hashtable是同步的,Hashmap不是。
问:描述使用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]
这样的东西是非法的。你能想到一个场景,如果这个 合法,你会遇到麻烦吗?
作为练习留给读者的答案 - 如果你不自己弄明白,你就不会学到任何东西!但这里有一些提示。
?
是什么意思?你还记得“协方差”一词吗?Object[] arr = new List<String>[]
。您能否编写一些代码,将某些内容放入arr
的{{1}}中,而不应该放在那里?答案 10 :(得分:1)
“注释擅长什么类型的东西?”和“什么类型的东西注释不好?”浮现在脑海中。
注释擅长元编程,但作为一种可能的最佳实践,如果将所有这些注释全部用于 注释,那么该代码仍然有用。
或不。您的里程可能会有所不同,但您可能希望所有高级开发人员都同意这一点。