2009-07-07 14 views
29

Eine sehr offene Frage. Ich habe in C# für die letzten 5 Monate programmiert, die kleine Projekte beendeten, die ich erfolgreich abgeschlossen habe.Was C# Wissen sollte ich haben?

Heute ging ich zu einem Interview für eine C# -Rolle. Die erste Frage war 'Sag mir etwas über Boxen'. Angesichts meiner Erfahrung hatte ich keine Idee, was der Typ meinte. Unnötig zu sagen, dass das Interview nicht so gut lief. Andere Fragen waren: ‚Warum ist es nicht empfohlen ein ArrayList von int zu verwenden‘, ‚mir sagen, was Sie über Einfädeln wissen ‘ usw.

ich nicht wirklich will wieder passieren, damit ich bin Planung zu verbringen einige Zeit lesen (und üben) mehr auf C#. I verstehen, dass der beste Weg des Lernens ist durch Codierung, aber Codierung würde nicht wirklich geholfen haben, die Frage über 'Boxen' zum Beispiel zu beantworten.

Ich bitte Sie nicht, die oben genannten technischen Fragen zu beantworten. In der Tat, ich weiß jetzt ihre Antwort, wie ich ging direkt nach Google nach dem Interview und es ist, wie ich erkannte, dass meine C# Wissen ist etwas begrenzt.

Meine Frage ist: Ihrer Meinung nach, welches Wissen sollte jeder C# Entwickler haben? Im Idealfall wäre es besser, wenn Sie kategorisieren könnten (Grundkenntnisse sollte jeder ohne Ausnahme, Fortgeschrittene Kenntnisse, Expertenwissen usw. haben). Keine Notwendigkeit , um ins Detail zu gehen. Recherchieren auf was auch immer Sie auflisten werden eine gute Übung für mich sein.

+1

Ich werde hier keine ausführliche Antwort schreiben, aber Sie könnten an der folgenden Liste nützlicher C# -Features interessiert sein, von denen einige leicht unter dem Radar stehen: http://stackoverflow.com/questions/9033/hidden- features-of-c – mquander

+2

Sollte dies auch als subjektiv kennzeichnen und ein Community-Wiki betrachten. Außerdem würde ich wetten, dass der Interviewer nur versuchte, herauszufinden, was Sie wussten, im Gegensatz zu dem, was Sie nicht wussten, im Gegensatz zu erwarten, dass Sie sie von oben kennen. Nur eine Vermutung. –

+5

Wenn Sie C# in der Tiefe lernen wollen, dann empfehle ich, den genau betitelten "C# in Depth" zu lesen. Ich war der technische Gutachter; es ist ausgezeichnet. –

Antwort

11

Hier ist eine gute Liste: What Great .NET Developers Ought To Know.

+4

Ich merke, dass dies im Jahr 2005 veröffentlicht wurde. Ist es noch relevant? –

+0

Es ist für C# noch relevant ist verfügt über bis zu C# 2.0 ... aber natürlich wird es nicht über C sagen etwas # 3.0 und 4.0-Funktionen;) –

+0

Dies ist nur eine Sammlung von Fragen ist (ohne Angabe von richtigen Antworten) zu lesen Wissen über .NET - wie Sie von dort ausgehen, entscheiden Sie selbst. Wenn Sie ein Anfänger sind, wird es keine große Hilfe sein. BTW ein Versuch, die meisten Fragen zu beantworten, finden Sie hier: http://ayende.com/Blog/archive/2005/02/22/WhatAGreatNETDevelopersOughtToKnowAnswers.aspx – Josip

-11

Fünf Monate ohne Kenntnis des Boxens? Mein lieber, lieber Junge. Ich würde zögern, in Ihrer Position zu sein. Ich erinnere mich an jene glücklichen Tage, an denen ich, wie du jetzt, ein wenig Grundwissen über die Werkzeuge meines Handwerks hatte. Aber verzweifeln Sie nicht, Junge! Sie haben Zeit und Lust zu lernen. Lassen Sie uns sofort etwas Wissen weitergeben, das Sie für Ihren künftigen Nutzen nutzen können! Hurra!

Lesen Sie CLR Via C# Abdeckung zu decken. Besorgen Sie sich ein Linq-Buch (ich kann nichts von meinem Kopf her empfehlen). Schreiben Sie eine Anwendung mit WPF (für die XAML). Diese drei Dinge, denke ich, werden dir den größten Knall für dein Geld geben.

+6

Das ist ein bisschen hart, oder? Es ist möglich, ein Konzept zu verwenden, ohne zu wissen, was es ist. – Raithlin

+0

Es ist eines der Grundlagen. Fünf Monate sind eine lange Zeit, um nicht den Unterschied zwischen Referenzen und Werttypen zu bekommen. – Will

+0

Einverstanden. Es ist durchaus möglich, es in Bezug auf Upcasting und Downcasting ohne irgendeine Vorstellung von Boxen zu verstehen. Es ist nur eine Frage der Terminologie. –

11

ich jemand für einen professionellen C# Job geht erwarten würde wissen:

  • Generika und Generika Sammlungen
  • Interfaces (allgemein)
  • Interfaces (spezifische), nämlich -
    • IDisposable: wie es in die Sprache integriert ist und warum
    • IEnumerable: einschließlich der gemeinsamen Erweiterung Methoden, Iterator-Blöcke, ein d verzögerte Ausführung
  • Überblick über die Serialisierung in .net (vielleicht nicht getan hat, sondern verstehen, was es ist, und weiß, wo im Namespace-Hierarchie suchen und Dokumentation)
  • Überblick über XML in .NET (gleichen als Serialisierung)
  • Übersicht der Threading-Konzepte (gleich wie XML/Serialisierung). Bonuspunkte, um zu verstehen, warum die meisten thread-sicheren Sammlungen nicht verfügbar sind.
  • Haben Sie anonyme Delegierte/Lambdas in mindestens einem Projekt verwendet und haben daher auch eine Grundidee über Schließungen.
  • Bequeme einige grundlegende Konzepte von mindestens einer von WinForms zu erklären, wpf, Webformulare oder MVC
  • Lage sein, einige leicht Fragen zu spezifischen gemeinsamen Klassen im .NET BCL zu beantworten: nämlich von System.Data (denken parametrisierte Abfragen!) und System.IO (Filestreams, Pfad).
  • Garbage collection: und warum
+0

Sie benötigen Kenntnisse über die neuen funktionalen Aspekte von C# für * jede * Programmierposition? Ihr Bereich muss mit den Bewerbern übereinstimmen. Die meisten Leute werden dort kein Fachwissen haben. – quillbreaker

+0

Nein. Ich würde _Awareness_ des aktuellen Status der Plattform benötigen. Ich möchte vor allem Interesse für die weitere persönliche Verbesserung und das Wissen über die verfügbaren Werkzeuge sehen. –

0

hängt auch von der Rolle: Wenn Sie GC.Collect (so ziemlich nie Hinweis) nennen sollte. Wenn dies als jnr-Rolle beworben wird, ist eine Threading-Frage ein wenig schwierig ... manchmal haben Agenturen/Arbeitgeber unrealistische Erwartungen.

7

Meine persönlichen Erfahrungen von vor langer Zeit, als ich in der Schule war.

Ich ging, um meinen Vater bei der Arbeit in einer Bank zu sehen. Zu dieser Zeit kümmerte sich der größte Teil seines Tages um Konten und sorgte dafür, dass alles funktionierte. Was ich sah, war, dass er versuchte, große Zahlen zu berechnen und zu berechnen (grundlegende Additionen/Multiplikationen ...).

Nachdem ich ihn bemerkt hatte, fragte ich ihn: Dad, wenn alles, was du zu tun hast, einfache Ergänzungen und Multiplikationen ist, warum solltest du bis zum Abschluss lernen?

Seine Antwort war: Obwohl Sie nicht das ganze Wissen, das Sie erworben haben, verwenden müssen, würde dieses Wissen Ihnen helfen, gelernte Entscheidungen zu treffen.

Kommen zu Ihrer Frage: Während Sie nicht die gesamte Reihe von Konzepten verwenden müssen, würde das Wissen, dass sie existieren, Ihnen helfen, gute Entscheidungen zu treffen, während Sie programmieren.

Mein Vorschlag zusammen mit den anderen gepostet würde sein, zu versuchen, einige Zeit auf Stackoverflow jeden Tag verbringen.

Viel Glück.

0

Eine ähnliche Sache geschah mit meinem Lebensgefährten, der eine Fahrprüfung nahm. Der State Trooper sagte: "Machen Sie einen Kreisverkehr" und sie wusste nicht, wovon er sprach. Wir denken beide, dass ein Kreisverkehr eine Art von Straßenlayout mit einem großen Kreis ist, keine Kehrtwende, wie der Ausbilder meinte. Also ich weiß was du meinst.

Programmierung Vorstellungsgespräche variieren wild. Manche Leute denken, dass man einen Programmierer in einem Interview nicht wirklich gut beurteilen kann und bereit sind, jedem, der einen guten Eindruck macht, eine Chance zu geben. Andere sind zermürbend, und nur diejenigen, die für die Position überqualifiziert sind, werden überfallen, und Sie werden wahrscheinlich überrascht sein, wie oft Sie von diesen zurückgerufen werden.

0

Das ist etwas, worüber ich in letzter Zeit viel nachgedacht habe. Mit C# viel, aber nicht sicher, was ich vermisse.

Ich bestellte

Microsoft® .NET Framework Application Development Foundation

, die viel Boden zu C#

Auch auf der Suche bei C# in Depth

Lesen Sie einige dieser bereits im Zusammenhang abdeckt. Hat einige großartige Informationen von einem qualitativ hochwertigen Autor.

Vertiefen steht auch über Jon Skeet blog

2

Ich würde sagen, dass, wenn ein Interviewer kann in jemanden zu denken täuschen hat mehr .NET/C# Erfahrung er oder sie eine Webseite besuchen, dann ist die Interviewer versagt. Ich habe selbst eine Anzahl von Leuten interviewt, und ich mag den Ansatz, ihnen ein leicht zu verstehendes Problem zu geben und sie zu bitten, etwas Code auf eine Tafel zu schreiben. Auch wenn sie sich die Antworten auf jede Frage zu Scott Hanselmans Blog auswendig gelernt haben, würde ich viel darüber lernen, wie gut sie in der Sprache sind und wie sie Probleme lösen. Ich suche einen Entwickler, kein Partner für Trivial Pursuit, .NET Developer Edition.

Das heißt, mit Blogs wie Hanselman zu halten ist eine fantastische Möglichkeit, mit dem Jargon Schritt zu halten. Sie könnten C# in einem Vakuum für Jahre codieren, den Vorteil einer stark typisierten Liste über ArrayList vollständig verstehen, aber niemals den Begriff "Boxen" verwenden. Aber es ist viel zeitaufwendiger in einem Interview zu fragen: "Beschreibe den Vorteil einer Iteration durch eine Liste <int> anstelle einer ArrayList von int", als zu fragen: "Erzähl mir etwas über Boxen." Wenn Sie die Antworten auf Hanselmans Fragen zum .NET-Interview recherchieren (vor allem, wenn Sie die Details erkunden und "Warum?" Fragen), werden Sie ein besserer Entwickler. Also lesen Sie Hanselman auf alle Fälle.

Und noch eine Anmerkung ... Wenn ich jemanden frage, ob ein String ein Referenztyp oder ein Werttyp ist, und sie einfach sagen "Hmmm ... Referenztyp", werde ich nicht annähernd so glücklich sein wie ich, wenn die Antwort war, "Hmmm ... Referenztyp, aber das ist eine interessante Frage." "Warum ist das so?", Sage ich ... "Weil String so implementiert ist, dass der String unveränderlich ist und Sie damit Dinge tun können, die Sie sicher als Hash-Schlüssel verwenden. Oder übergeben Sie ihn an eine Methode, die den Wert kennt kann nicht geändert werden, also können Zeichenketten in gewisser Weise wie Wertetypen funktionieren ... "Und das wäre eine großartige Konversation, die mich dazu bringt zu fragen:" Also erzähl mir mehr darüber, warum Hash-Schlüssel unveränderlich sein sollten ... "

Es ist nicht nur der Unterschied zwischen der korrekten Beantwortung einer 50/50 Frage und allen zusätzlichen Informationen in der zweiten Antwort. Ein intelligentes Gespräch mit einem Interviewpartner führt mich zu der Annahme, dass ich solche Gespräche regelmäßig führen werde, sobald der Interviewpartner mein Kollege wird.Und das ist etwas, wonach ich definitiv suche.

4

Ein guter Interviewer wird nicht grillen Sie auf Nebensächlichkeiten. Deshalb haben wir Google. Ein guter Interviewer wird Bereiche finden, die Sie nicht kennen, und Ihnen dort Fragen stellen, da dies der beste Ort ist, um herauszufinden, wie Sie reagieren, wenn Sie mit etwas konfrontiert werden, das Sie nicht im Griff haben.

Der beste Rat, den ich für Interviews geben kann, ist, sich nicht zu sehr um die technischen Kleinigkeiten zu sorgen. Konzentrieren Sie sich stattdessen in einem Interview auf Problemlösungsfähigkeiten. Wenn du etwas nicht weißt, versuche es nicht zu verstecken, gib es einfach zu. Wenn Sie denken, dass Sie es wissen, ist es in Ordnung zu sagen "Ich bin mir nicht sicher, aber ich denke, es ist das." Und lassen Sie sich auch nicht aus der Fassung bringen - zu diesem Zeitpunkt gibt Ihnen der Interviewer normalerweise einen Hinweis. Dies ist nicht nur die Antwort, es ist ein weiterer Teil des Tests - um zu sehen, ob Sie, von einem Anstoß in die richtige Richtung, können Sie von dort aus extrapolieren.

Für die Boxen/ArrayList/int Fragen, wenn ich interviewte und Sie nicht verstehen, Boxen, würde ich Ihnen eine grundlegende Beschreibung, was Boxen getan hat. Dann würde ich Sie fragen, wissend, was ich Ihnen gerade gesagt habe, warum Sie vielleicht denken, dass die Verwendung von Ints in einer ArrayList eine schlechte Idee ist.

Eine Sache, die in jedem Interview weit gehen wird, konzentriert sich auf die Anforderungen, das gewünschte Ergebnis und die Randbedingungen oder Randfälle. Da die meisten Programmierinterviewfragen in die „schreiben diese Methode“ Kategorie fallen, stellen Sie sicher, erhalten Sie das folgende richtig:

1) Die Eingänge zu dem Verfahren 2) die erwartete Ausgabe des Verfahrens 3) Rand- und Grenzfälle .

Das klingt lächerlich einfach, aber es ist erstaunlich, wie viele Entwickler, selbst solche mit Erfahrung, nicht durch diese Dinge denken. Code löst ein Problem - wenn Sie das Problem nicht richtig verstehen, können Sie es nicht richtig lösen.

Verwandte Themen