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. .
(Regex) Write a regular expression which removes all tags from a block of HTML.
- Ich rieche ProblemeIch fand diese Listen auf Scott Hanselman ‚s Blog :
Hier sind meiner Meinung nach die wichtigsten Fragen aus diesen Beiträgen, die in Kategorien unterteilt sind. Ich habe sie bearbeitet und neu arrangiert. Glücklicherweise gibt es für die meisten dieser Fragen bereits eine gute Antwort auf Stack Overflow. Folgen Sie einfach den Links (ich werde sie alle so schnell wie möglich aktualisieren) .
Plattformunabhängige .NET-Fragen
a.Equals(b)
unda == b
?Assembly.LoadFrom
oderAssembly.LoadFile
angemessen?Finalize()
undDispose()
? ( externer Artikel )Debug.Write
undTrace.Write
? Wann sollte jeder verwendet werden?catch (Exception e) {throw e;}
und fangen(Exception e) {throw;}
?typeof(foo)
undmyFoo.GetType()
?ASP.NET
q=
außer woq=5
(wie inhttp://localhost/page.aspx?q=5
) generiert wurden ?quelle
Dies ist möglicherweise nicht das, was Sie hören möchten, aber ich würde empfehlen, sich nicht auf enge Technologien zu konzentrieren, sondern auf allgemeine Programmier- und Problemlösungsfähigkeiten. Solide Entwickler können schnell lernen, was sie wollen.
Ich bin zum Beispiel kein Compact Framework-Typ, daher könnte ich Ihr Interview nicht bestehen, wenn Sie in diese Richtung gehen. Aber wenn ich es benutzen müsste, könnte ich etwas recherchieren und direkt einsteigen.
Joels Buch " Smart and Gets Things Done" enthält großartige Ratschläge für die Einstellung von Entwicklern, und es gibt große, saftige Abschnitte über die Art der Fragen, die gestellt werden müssen. Ich empfehle es sehr.
quelle
Ich denke, wenn ich jemanden interviewen würde, der LINQ-Erfahrung hat, würde ich ihn möglicherweise nur bitten, LINQ zu erklären. Wenn sie die verzögerte Ausführung, das Streaming, die IEnumerable / IEnumerator-Schnittstellen, foreach, Iteratorblöcke und Ausdrucksbäume (für Bonuspunkte jedenfalls) erklären können, können sie wahrscheinlich den Rest bewältigen. (Zugegeben, sie könnten "ok" -Entwickler sein und LINQ noch nicht "bekommen" - ich denke wirklich an den Fall, in dem sie behauptet haben, genug LINQ zu kennen, um es zu einer fairen Frage zu machen.)
In der Vergangenheit habe ich einige der bereits aufgeführten und einige andere Fragen gestellt:
quelle
Ich bin mit den Leuten zusammen, die eher nach Fähigkeiten zur Problemlösung suchen als nach Dingen, die Sie in den 101 besten .NET-Interview-Fragen und Antworten nachschlagen und auswendig lernen können.
Um mich selbst als Beispiel zu nennen, neige ich dazu, die Dinge zu „kennen“, die ich von Tag zu Tag verwenden muss. Ich neige dazu, Dinge zu vergessen (und später nachschlagen zu müssen), die ich selten benutze.
Wenn Sie mich in einem Interview stolpern wollten, wäre es sehr einfach.
Trotzdem habe ich einen Großteil der Infrastruktur für ein System entworfen und codiert, das identische Business Objects- und Datenschichten für seine WinForms- und ASP.NET-Inkarnationen verwendet, und unsere Codebasis ist robust und wiederverwendbar genug, um 20+ unterstützen und entwickeln zu können unterschiedlich konfigurierte Versionen der Website sowie eine zunehmende Anzahl (derzeit 5) der WinForms-Anwendung ...
... mit einem Entwicklungsteam von zwei.
Ich habe in einem Team als technischer Leiter gearbeitet, und mein Job beinhaltete eine Menge Rekrutierung und Interviews. Mein spektakulärster Fehler war die Einstellung eines Mannes, der mehr über die Technologie wusste, die wir verwendeten, als alle anderen von uns zusammen, einschließlich mir, und ich zählte mich selbst als Experte. Er wusste alles ...
... außer wie man Code schreibt, der entweder den Anforderungen entspricht oder von jedem außer ihm verstanden werden kann. Als ich den Premierminister schließlich überredete, seinen Vertrag nicht zu verlängern, musste alles, was er schrieb, neu geschrieben werden.
Strukturieren Sie Ihre Interviews mit Bedacht ...
quelle
Wer ist Jon Skeet?
quelle
Gute Fragen, die mir gestellt wurden, sind
Es wäre interessant zu sehen, was sich ein Kandidat einfallen lassen würde, und Sie werden sicherlich einiges darüber lernen, wie er / sie das Framework verwendet.
quelle
Ich würde immer selbst nach den Soft Skills suchen - kein Wortspiel beabsichtigt. Also gutes OO-Design, testgetriebene Entwicklung, ein guter mehrsprachiger (Programmier-) Hintergrund und eine rundum allgemeine Intelligenz (und die Erledigung von Aufgaben, denke ich!).
Ein intelligenter Entwickler sollte keine Probleme haben, die einzelnen Technologien zu erlernen, die er kennen muss, auch wenn er sie noch nie zuvor angeschaut hat. Daher würde ich mir keine Sorgen über spezifische Fragen zu WCF / Compact Framework und dergleichen machen.
Ich würde sie Code schreiben lassen - der beste Weg, um herauszufinden, was sie wissen und wie sie funktionieren. Jeder kann sich die Antwort auf "Was ist der Unterschied zwischen einem Referenztyp und einem Werttyp?"
quelle
Ehrlich?
"Was ist .NET?"
Wenn sie Ihnen eine klare Antwort geben können, was .NET ist und was nicht, wie es verwendet wird, aus welchen Elementen es besteht usw. Wenn sie Sie davon überzeugen können, dass sie wissen, was es ist, sind sie wahrscheinlich weiß es ziemlich gut.
Tatsache ist, dass viele Leute nicht wirklich wissen, was .NET ist. Sogar diejenigen, die Programme dafür schreiben.
quelle
Eigentlich keine. Es gibt wahrscheinlich sehr einfache Fragen, auf die die klügsten Menschen der Welt keine Antworten kennen. Nicht weil sie hart sind, sondern einfach weil sie einfach nicht darauf gestoßen sind. Sie sollten sich das gesamte Paket und die Fähigkeiten des Entwicklers ansehen und nicht, ob er eine beliebige Frage beantworten kann.
Wenn die Frage leicht genug ist, um in ein oder zwei kurzen Sätzen beantwortet zu werden, ist es leicht genug, nur jemandem davon zu erzählen, der es nicht weiß. Sie sollten nach ihrem Verständnis für Konzepte und Argumentationsfähigkeiten suchen, nicht nach ihrer Fähigkeit, Fragen zu beantworten, "die jeder .NET-Entwickler beantworten kann".
quelle
Kennen Sie den Unterschied zwischen Referenz- und Werttypen.
Beachten Sie, dass Ereignisse als harte Referenzen gespeichert werden (dh denken Sie daran, die Registrierung von Ereignissen aufzuheben, da sonst die Anwendung Speicher verliert).
Saiten sind unveränderlich.
quelle
Martin Fowler bevorzugt Designfähigkeiten gegenüber Plattformkenntnissen . Auf der anderen Seite können Sie eine Frage stellen, die Kenntnisse über Entwurfsmuster und die .NET-Plattform wie folgt zeigt:
quelle
Ich schlage vor, sich nach Blogs zu erkundigen, die sie regelmäßig lesen, und nach persönlichen Programmierprojekten, an denen sie gearbeitet haben, da dies Lernbereitschaft und Leidenschaft für das Programmieren zeigt.
quelle
Hier sind einige, mit denen ich Programmierer gefiltert habe, die sich für Jobs als C # -Programmierer bewerben:
Was ist der Unterschied zwischen einem Referenztyp und einem Werttyp?
Erläutern Sie die IDisposable-Schnittstelle, für welches C # -Sprachenkonstrukt sie erforderlich ist und wie Sie sie implementieren würden.
Welche Ausnahme würden Sie auslösen, wenn eine Null als Argument an eine Methode übergeben wird, deren Vertrag keinen Nullwert für diesen Parameter zulässt?
quelle
"Welche der ASP: Welche Steuerungen würden Sie jemals in der Produktion verwenden und warum?"
So erfahren Sie schnell, ob Ihr Fach jemals ein großes Projekt erstellt und gewartet hat, das lange genug von DataGrids und LinkButtons gebrannt wurde, oder ob es sich noch in der Drag / Drop-Phase "Unterrichten Sie sich in 21 Tagen" befindet.
(Die Antwort lautet asp: Repeater, asp: PlaceHolder, asp: Literal und asp: Content)
quelle
Was ist ein Thread?
Was ist der GC?
quelle
Dies ist eine etwas variable Frage, und nicht wirklich eine, die Sie jetzt vollständig beantworten können sollten, sondern eine, die Sie gegebenenfalls beantworten können sollten:
"Was bietet das .NET Framework, um Aufgabe X zu erledigen?"
Oder genauer:
"Enthält das .NET Framework ein Objekt, das X ausführt?"
Zum Beispiel habe ich kürzlich einige Stunden damit verbracht, ein Objekt zu entwickeln, das für das Speichern eines Arrays von Booleschen Werten und dessen Bearbeitung optimiert ist, z. B. das Sammeln aller Werte in Bezug auf NOT, OR, XOR, AND usw. Es war nicht ' Erst nachdem ich alle meine Komponententests geschrieben und für die bestmögliche Leistung optimiert hatte, stellte ich fest, dass mein "BoolArray" -Objekt bereits im .NET Framework unter dem Namen "BitArray" vorhanden war.
Dies kann schwierig zu beantworten sein, da die beste Antwort auf die zu verwendenden Objekte / Helfer oft die ist, die Sie nicht kennen oder nicht vollständig verstehen. Wie wunderbar die .NET-Welt wäre, wenn jeder selbst über den einfachen StringBuilder Bescheid wüsste, ein grundlegendes Tool, mit dem die Leistung erheblich gesteigert werden kann.
quelle
Ich werde einige Fragen vorschlagen, die sich auf das Verständnis der Programmierkonzepte mit dotnet like konzentrieren
Was ist der Unterschied zwischen verwalteter und nicht verwalteter Umgebung? Vor- und Nachteile von GC Vor- und Nachteile von JIT Wenn wir Anwendung X entwickeln müssen, können wir dotnet verwenden? Warum? (Dies wird identifizieren, wie er das Dotnet sieht)
Ich schlage auch vor, kleine Methoden zu schreiben und ihn zu bitten, sie mit besserer Leistung unter Verwendung besserer Dotnet-Klassen oder Standardmethoden neu zu schreiben. Schreiben Sie auch falsche (logische) Methoden oder was auch immer und bitten Sie ihn, sie zu korrigieren.
quelle
Ich bin ein Fan von Folgendem zusätzlich zu einigen der bereits erwähnten Fragen:
quelle
Dies ist interessant, und es besteht die Gefahr, dass dies abgelehnt wird, weil ich meiner Meinung nach taub geboren bin. Eine solche Frage zu stellen, würde mehr Aufwand erfordern, um meine Gedanken persönlich zu kommunizieren.
Um ehrlich zu sein, würde ich wirklich nicht zu viel von den typischen Fragen lesen, da das zugrunde liegende Paradigma lautet: „ Wie gut können Sie Ihre Gedanken und Ihr Verständnis aussprechen? ', das ist wirklich das, wonach der Interviewer sucht. Kommunikation ist aufgrund meiner Art immer meine größte Schwäche und kann leicht frustriert werden.
Es wäre ideal, das Wissen zu haben und der Besserwisser zu sein, aber leider gibt es einige Dinge, die ich nicht weiß, aber keine Angst zu haben, wenn Sie die Antwort tatsächlich nicht kennen und sie eher zugeben als bluffen durch. Wenn mir ein Interviewer eine Frage wie eine der oben genannten stellen würde, bei der ich mir nicht sicher wäre oder die Frage nicht verstehe / falsch interpretiere, würde ich sie im Voraus sagen, was persönlich peinlich sein kann, aber gelernt hat, damit umzugehen.
Sie wären überrascht, wie viele tatsächlich waffeln und durchbluffen würden, in denen sie am Ende des Tages metaphorisch mit heruntergelassenen Hosen erwischt werden.
Meine 2 Cent, Mit freundlichen Grüßen, Tom.
quelle
Ein paar mehr:
quelle
Ich würde nicht die Fragen stellen, die "etwas aus dem Lehrbuch wissen", sondern ein paar Bastelarbeiten wie:
Diese sind nicht 100% sicher, abhängig von der Person, die ich sie fragen darf:
Ich würde ihn auch fragen, wie er / sie seine / ihre Sachen gelernt hat und was er / sie liest (welche Blogs, Bücher).
quelle
Ein paar mehr:
Was sind die Einschränkungen der Speicherbereinigung?
Wissen über Finalizer und IDisposable.
Beachten Sie den Thread-Pool und wann er verwendet werden soll.
Wenn Sie GUI-Anwendungen ausführen, beachten Sie, dass die Windows-GUI Single-Threaded ist.
Verwenden Sie foreach (ich sehe viele Leute, die MoveNext usw. machen)
quelle
Ich denke, es sollten nicht nur Fragen sein, ich kenne ein paar Leute, die brillant sind, wenn Sie sie interviewen, aber sobald sie die Realität erreicht haben, sind sie zu perfektionistisch. Ich würde sagen, dass sie die Aufgabe nicht kläglich codieren.
Ich wurde einmal interviewt und mochte den Ansatz, bei dem mir der erste Arbeitgeber einen technischen Fragebogen zum Ausfüllen von 30 Minuten gab. Wenn einer erfolgreich ist, wird er zu einem einstündigen Interview mit Fragen zur Beurteilung der Persönlichkeit und zur Charakterfindung sowie zu Fachjargons eingeladen.
Dann wurde ich gebeten, in 6 Stunden eine dreiseitige Webanwendung zu entwickeln. Die Einschränkungen, die in der Anwendung auferlegt wurden, deckten intelligent wichtige Aspekte der Anwendungsentwicklung ab, wie z. B. eine kleine ERD, Layerd-Design, UI-Konsistenz, die Steuerung spezifischer Probleme wie die Verwendung von Optionsfeldern in GridView und das Abrufen und Anzeigen von Bildtypen aus DB auf einer Webseite, eine Algorithmusentwicklung, Sicherheit, Verschlüsselung, Hashing, Datendarstellung und -manipulation.
Am nächsten Tag folgte eine 30-minütige Diskussion über die entwickelte Anwendung, die Bereiche mit Leistungsengpässen und Verbesserungen des Designs und der verwendeten Algorithmen abdeckte. Und 1 Stunde optionaler Test zur Verbesserung Ihres Algorithmus, der im vorherigen Schritt unter einer bestimmten Bedingung entwickelt wurde.
Es hat also ziemlich viel Zeit in Anspruch genommen, aber auf diese Weise können Sie sicherstellen, dass die Person, die Sie einstellen, zumindest die Konzepte kennt, die für einen guten Entwickler unerlässlich sind.
quelle
Ich würde es vorziehen, ihm ein Problem zu geben und ihn zu bitten, es mit den Funktionen von .net zu lösen, die Sie kennen und warum es Ihrer Meinung nach die beste Lösung ist.
Dies wird fast alle Fähigkeiten eines Kandidaten in Bezug auf technische, analytische und Problemlösungsfähigkeiten zusammen mit seinem Ansatz zur Lösung eines Problems knacken.
quelle