2010-05-21 7 views

Antwort

1

Generika: Stellen Sie eine Frage, die entwickelt wurde, um zu sehen, ob sie type erasure verstehen.

Anmerkungen: Fragen Sie sie, was ihre Lieblingsannotation ist und wie sie funktioniert (Sie brauchen keine detaillierte technische Erklärung, aber Sie suchen etwas mehr als "Magie").

+0

Eine nette Art Löschung Frage ist, welche Signaturen nicht möglich sind, wegen Typ Löschung (z.x (Liste ) und x (Liste ) zusammen). –

1

Anmerkungen: Was sind die Risiken? (Der Compiler kann in eine Endlosschleife geraten und den Build-Prozess blockieren).

Generika: Wie baut man ein Mixin mit Generika? (Schreiben Sie eine generische Klasse, die einen Parameter akzeptiert, und erweitern Sie sie dann mit der Unterklasse als Parameter).

Auch +1 auf Typ löschen.

+1

Verweis auf "Compiler kann in eine Endlosschleife kommen" für Anmerkungen als ein Risiko. Ich dachte, selbstreferentielle Annotationen wurden aus diesem Grund explizit verhindert. – Nate

+0

@Nate - Ich bin auch neugierig, wie das passieren könnte. –

+0

Auf eine von zwei Arten: 1. Der Annotationsverarbeitungscode bleibt ohne Grund hängen - Stellen Sie sich beispielsweise eine Annotation vor, die eine Fakultät berechnet und @Fact (-1) erhält. 2. Ein Annotationsverarbeitungscode, der Code generiert, markiert den neuen Code für eine weitere Kompilierungsrunde, und der neue Code enthält auch Anmerkungen ... Ich erinnere mich nicht an das genaue Flag dafür. –

1

Hier sind ein paar auf Generika:

1)

Frage: Wenn ich diese Methode hatte, wie würde ich eine neue Instanz des Typs T und weisen Sie auf eine Variable erstellen genannt item innerhalb dieser Methode (angenommen, Class<T> hat einen Standardkonstruktor)?

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

Antwort:

T item = c.newInstance(); 

2)

Frage: Wenn Sie wollten, um anzuzeigen, dass die generische einige Basisklasse erweitert, aber Sie wissen nicht, was Die Klasse, die die Basisklasse erweitert, wird bis zur Laufzeit sein. Wie können Sie das Generische deklarieren?

Antwort: Verwenden Sie einen Platzhalter: <? extends SomeBaseClass>

+0

1.) nimmt Standardkonstruktor an. – Nate

+0

@Nate - Messepunkt, ich habe es aktualisiert, um dies zu reflektieren. – dcp

2

Frage: Wie können Sie bestimmen, welche Art von Objekt eine generische zur Laufzeit verwendet?

Antwort: Es ist nicht möglich, den Typ wegen Typ löschen zu bestimmen.

+1

Nicht genau richtig. Gute alte Supertyp-Tokens können nur implementiert werden, weil einige Typinformationen übrig sind. Es gibt eine weitere Ausnahme zu der netten, aber falschen Regel, aber ich habe sie leider vergessen. –

+1

Nun, der Typ eines Objekts zur Laufzeit wird erhalten, indem man 'object.getClass()' aufruft, unabhängig von irgendetwas, das es benutzt, also könnten Sie eine sorgfältigere Frage haben wollen. –

1

Wenn Sie nach einem Rockstar-Java-Programmierer suchen, könnten Sie einige erweiterte Fragen aus dem Generics chapter in Bloch's Effective Java erstellen. Dinge wie die homogenen oder heterogenen Container (die Vogelkäfig und Löwenkäfig Beispiele aus einem der Java-Tutorials), löschen, etc.

In weniger Senior Leute suche ich in erster Linie für ein Verständnis, warum man Generika (du ') Ich bin überrascht, wie viele Leute das nicht zu schätzen wissen und glauben, dass die Java-2-Methode immer noch Regeln macht) und solche Dinge.

In Anmerkungen, mag ich Fragen über die "Override" -Anmerkung und ihre Vorteile.Ich mag auch eine tiefere Diskussion über die Vor- und Nachteile von Annotationen und wann es angebracht ist, sie zu verwenden - ich bin kein Fan von übereifriger Meta-Programmierung. Es ist auch eine gute Chance zu sehen, ob jemand Hibernate oder JUnit mit Anmerkungen verwendet hat.

+0

Wirksames Java ist ein wesentliches Buch. Werde einen Blick in dieses Kapitel werfen. –

3
  • Was gewährleistet die Class Enum<E extends Enum<E>>?
  • Ist <T> List<? extends T> x() eine nützliche Signatur?
  • Annotation Retentions Richtlinien und warum sind sie vorhanden?
  • Angenommen, Sie möchten eine Klasse in verschiedenen Kontexten wiederverwenden würden Sie Anmerkungen oder externe Konfiguration verwenden? (d. h. Annotation führt Abhängigkeiten ein).

Härtere:

  • Beispiele eines gültigen Gattungstyp, der nicht mit dem Java-Typ-System ausgedrückt werden kann und zu Compiler-Warnungen führen.
  • Beispiele, in denen der Java-Compiler den generischen Typ nicht beeinflussen wird/wird? (Beispiele für Code, bei dem der Compiler den falschen Typ annimmt)
  • Welche generische Information wird nicht gelöscht und kann aus dem Byte-Code abgerufen werden? (Super type tokes sind eine Anwendung)
  • Was ist APT (Anwendungsfälle, wenn keine Reflexion zu verwenden)?
+0

Thomas, könnten Sie bitte generische Informationen, die nicht gelöscht werden (bullet 3 mit schwierigeren Fragen), ausarbeiten (oder einen Link bereitstellen)? Es ist sehr interessant ... – Oak

+1

@Oak - Hinzugefügt. –

1

Hier sind ein paar, die ich aus nur:

- [Cagey Generika] eine dieser Linien verursachen Probleme uncommenting würde? Welche, wenn überhaupt? Warum oder warum nicht?

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<?>(); 

- [Einschränkungen] Nur Animals in Cages gehen sollte. Wie können wir die obigen Klassendefinitionen verschärfen, damit sie diese neue Anforderung widerspiegeln?

- [Rechtliche Probleme] Sie können ein Array eines generischen Typs nicht instanziieren. So etwas wie new List<Animal>[10] ist illegal. Kannst du an ein Szenario denken, in dem, wenn dies wäre legal, würden Sie in Schwierigkeiten geraten?

Antworten, die dem Leser als Übung überlassen werden - Sie werden nichts lernen, wenn Sie sie nicht selbst herausfinden! Aber hier sind einige Hinweise.

  • [Cagey Generika]: Was bedeutet ?? Erinnerst du dich an den Begriff "Kovarianz"?
  • [Constraints]: Mit Java können Sie die Werte eines Typparameters einschränken. Erinnerst du dich an die Syntax dafür?
  • [Rechtliche Probleme]: Angenommen, Sie könnten Object[] arr = new List<String>[] tun. Kannst du etwas Code schreiben, der etwas in arr 's Lists steckt, das dort nicht gehen sollte?
1

"Welche Art von Dingen sind Anmerkungen gut?" und "welche Art von Dingen sind schlechte Anmerkungen?" kommt in den Sinn.

Anmerkungen sind gut bei Meta-Programmierung, aber als eine mögliche Best-Practice, Code, der mit funktioniert die Anmerkungen in sollte immer noch funktionieren, wenn Sie alle aus ihnen nehmen.

Oder nicht. Ihre Laufleistung kann variieren, aber wahrscheinlich möchten alle Ihre älteren Entwickler sich darauf einigen.

7

Seit Java 5 herauskam, habe ich Dutzende von Menschen gesehen nicht verstehen, warum, da eine Schnittstelle I und Klassen A und B extends A Sie können keine I<B> passieren, wo ein I<A> erforderlich ist. Viele Leute finden es kontraintuitiv.

Um die Fähigkeit einer Person zu Grunde über Generics zu testen, dann würde ich sie zuerst fragen, ob es möglich ist, ein I<B> zu einer I<A> Referenz zuzuweisen, wie oben beschrieben. Wenn nicht, warum nicht? Wenn sie es falsch, sagen sie, sie sind falsch und sie bitten, in die Lücken zu versuchen, hier zu füllen zu zeigen, warum dieses Beispiel würde Art un-sicher sein, wenn es zusammenstellen könnte:

//... 
    List<String> list = new LinkedList<String>(); 
    someMethod(list); 
    //blank 1 
} 
public void someMethod(List<Object> list) { 
    //blank 2 
} 

An dieser Stelle sollte ziemlich einfach sein und ich wäre ein bisschen besorgt, wenn sie ein solches Beispiel nicht konstruieren könnten. Ein Beispiel dafür ist

//blank 1 
String item = list.get(0); 

//blank 2 
list.add(Integer.valueOf(5)); 
+0

Nun habe ich es, Danke –

2
  1. Allgemein:

F: Was ist der Unterschied zwischen einem HashMap und Hashtable?

A: Hashtabelle ist synchronisiert, Hashmap ist nicht.

  1. Anmerkungen:

F: Beschreiben Sie die Serialisierung von Java-Objekten mit dem javax.xml.bind.Marshaller Schnittstelle und Anmerkungen.

A: sollte in einem sinnvollen Zusammenhang so etwas wie dies zu beschreiben akzeptabel sein:

@XmlRootElement
class Employee {
...
}

+6

Ich denke, Sie verwirren Generics mit der Java-Sammlungen-Bibliothek. –

6

Dieser Test:

http://tests4geeks.com/test/java

einige Fragen über Anmerkungen enthält.

Es enthält keine Fragen zu generischen. Aber anstatt es, gibt es einige andere interessante Themen wie:

Multi-Threading,

Speicher,

Algorithmen und Datenstrukturen,

OOP,

usw.

+0

Ich bevorzuge Ihre Lösung .. – Guru

+0

einige der Fragen, die dort von nicht-englischen Muttersprachler (oder alle Fragen) geschrieben werden. für die meisten ist es egal, aber für ein paar es verwirrt die Frage. – tgkprog

Verwandte Themen