Grundlegende Fragen sind:
Ich denke, es ist normalerweise hilfreich, Ihre Bewerber zu bitten, eine einfache Kodierungsübung durchzuführen, wie z.
- Schreiben Sie Ihre eigene verknüpfte Listenklasse, ohne die integrierten Klassen zu verwenden.
- Schreiben Sie Ihre eigene Hashtable-Klasse, ohne die integrierten Klassen zu verwenden.
- Schreiben Sie eine Klasse, die einen Binärbaum darstellt. Schreiben Sie eine Methode, die alle Knoten des Baums durchläuft.
- Schreiben Sie eine Methode, um eine binäre Suche in einem Array durchzuführen, ohne integrierte Methoden zu verwenden.
- Zeichnen Sie ein Datenbankschema für ein Blog. Jeder Benutzer hat nur ein Blog, jedes Blog hat viele Kategorien, jede Kategorie hat viele Beiträge und jeder Beitrag kann zu mehr als einer Kategorie gehören. Bitten Sie Ihren Bewerber, Anfragen zu schreiben, um bestimmte Informationen herauszuholen.
Suchen Sie als Nächstes nach spezifischem technischem Know-how:
- (Ereignishandler) Erstellen Sie eine Klasse mit einem benutzerdefinierten Ereignishandler. Erstellen Sie eine weitere Klasse, die sich an den benutzerdefinierten Ereignishandler anschließt.
- (XML) Laden Sie ein XML-Dokument und wählen Sie alle Knoten mit den Eigenschaften x, y und z aus.
- (Funktionsprogrammierung) Erstellen Sie eine Funktion, die eine andere Funktion als Parameter akzeptiert. Eine Map- oder Fold-Funktion funktioniert hierfür sehr gut.
- (Reflexion) Schreiben Sie eine Funktion, die bestimmt, ob eine Klasse ein bestimmtes Attribut hat.
- (Regex) Schreiben Sie einen regulären Ausdruck, der alle Tags aus einem HTML-Block entfernt.
Keine dieser Fragen ist für einen erfahrenen C # -Programmierer besonders schwierig zu beantworten, und sie sollten Ihnen eine gute Vorstellung von den besonderen Stärken Ihrer Bewerber geben. Möglicherweise möchten Sie auch einige Fragen / Codebeispiele bearbeiten, die bestimmte Entwurfsmuster verwenden.
[Zur Verdeutlichung bearbeiten] :
Es scheint, dass viele Leute nicht verstehen, warum ich diese Art von Fragen stellen würde. Lassen Sie mich einige Kommentare der Leute ansprechen (ich zitiere nicht direkt, sondern umschreibe stattdessen):
F: Wann hat das letzte Mal jemand flüchtige Stoffe oder schwache Referenzen verwendet?
A: Wenn ich technische Interviews gebe, überprüfe ich, ob eine Person die Funktionen von .NET auf hoher und niedriger Ebene versteht. Flüchtige und schwache Referenzen sind zwei von .NET bereitgestellte Funktionen auf niedriger Ebene. Auch wenn diese Funktionen in der Praxis nicht häufig verwendet werden, sind die Antworten auf diese Fragen äußerst aufschlussreich:
Ein gutes Verständnis von flüchtigen Bestandteilen zeigt, dass eine Person versteht, wie Compiler-Optimierungen die Korrektheit von Code ändern, wie Threads lokale Kopien des gemeinsam genutzten Status halten, die zu einem bestimmten Zeitpunkt möglicherweise nicht synchron sind, und sich einiger Komplexitäten von Multithread-Code nur minimal bewusst ist .
Ein gutes Verständnis schwacher Referenzen zeigt, dass eine Person die intimen Details des Garbage Collectors kennt und weiß, wie sie entscheidet, wann Speicher freigegeben werden soll. Sicher, Sie könnten Kandidaten fragen, "wie funktioniert ein Garbage Collector", aber wenn Sie nach schwachen Referenzen fragen, erhalten Sie eine viel bessere und nachdenklichere Antwort.
.NET ist eine ziemlich abstrakte Sprache, aber Star-Entwickler haben fast immer ein tiefes Verständnis der CLR und der Details der .NET-Laufzeit auf niedriger Ebene.
F: Warum sollte jemand seine eigene Hashtabelle oder verknüpfte Liste implementieren müssen?
A: Ich impliziere nicht, dass die Dictionary-Klasse minderwertig ist oder dass die Leute ihre eigene Hashtabelle rollen sollten. Dies ist eine grundlegende Frage, die prüft, ob eine Person ein minimales Verständnis von Datenstrukturen hat. Das ist es, worauf diese Fragen testen: ein Minimum an Verständnis.
Sie erfahren diese Hashtabellen und verknüpften Listen am ersten Tag von Data Structures 101. Wenn jemand eine Hashtabelle oder eine verknüpfte Liste nicht von Grund auf neu schreiben kann, hat er eine große Lücke in seinem technischen Wissen.
F: Warum sind diese Fragen so grob orientiert?
A: Weil der Titel dieses Threads "Fragen, die jeder gute .NET-Entwickler kennen sollte" lautet. Jeder .NET-Entwickler beginnt seine Karriere mit dem Schreiben von Roh-Apps, und 90% aller Menschen in der Anwendungsentwicklung, die ihren Lebensunterhalt verdienen, befassen sich mit Branchenanwendungen.
Ich denke, Fragen, die das Wissen einer Person über Branchen-Apps testen, sind in den meisten Fällen angemessen, es sei denn, Sie suchen Entwickler in ganz bestimmten Nischen wie Compiler-Entwicklung, Game-Engine-Entwicklung, Theorem-Prüfung, Bildverarbeitung usw. .