2010-05-06 8 views
15

fragte ich eine Frage wie diese in einem Interview für einen Entry-Level-Programmierer:An welchem ​​Punkt sollten Sie Referenzen verstehen?

var instance1 = new MyObject{Value = "hello"} 
var instance2 = instance1; 

instance1.Value = "bye"; 

Console.WriteLine(instance1.Value); 
Console.WriteLine(instance2.Value); 

Der Antragsteller mit „Hallo“ antwortete: „Auf Wiedersehen“ als Ausgabe.

Einige meiner Mitarbeiter sagten, dass "Zeiger" nicht mehr so ​​wichtig sind oder dass diese Frage kein richtiger Maßstab für Fähigkeiten ist.

Sind sie richtig?

EDIT: Der Punkt wurde gemacht, dass MyObject eine Struktur hätte sein können. Das ist ein guter Punkt. Allerdings habe ich nicht die vollständige Frage gestellt, die ich dem Interviewten gab. Die ganze Frage hatte eine Klasse, die eindeutig eine Klasse (keine Struktur) war. Es kann here gefunden werden.

+10

Das sind keine Zeiger. Das sind Referenzen. –

+6

Zeiger, vielleicht nicht. Das ist eine Low-Level-Speicherverwaltung, die ein LOB-Entwickler oft nicht benötigt. * Referenzen *, auf der anderen Seite, ist absolut kritisch. –

+0

Ich mag diese Frage. Ich könnte es eines Tages benutzen. +1 und. :) – EMP

Antwort

16

Einige meiner Mitarbeiter sagte, dass „Zeiger“ sind nicht mehr so ​​wichtig

die Differenz zwischen Referenzsemantik und Wertsemantik zu verstehen, ist von entscheidender Bedeutung. Es ist grundlegend für das Design der Sprache und des Typsystems. Zu verstehen, dass Referenzen mit Zeigern implementiert werden können, ist für C# -Programmierer auf Einstiegsebene nicht besonders relevant; Der Unterschied zwischen dem Kopieren durch Referenz und dem Kopieren nach Wert ist sehr relevant.

oder dass diese Frage kein echter Richter der Fähigkeit ist.

Nun, das hängt davon ab, welche Fähigkeit Sie versuchten zu testen. Wenn die Fähigkeit, das Verhalten trivialer C# -Programme schnell und genau vorherzusagen, für Ihre Arbeit relevant ist, würde ich sagen, dass dies ein guter Test der Fähigkeiten ist.

Wenn die Fähigkeiten zu bestimmen, wenn es nicht genügend Informationen gegeben, um das Problem zu lösen, und um die richtigen Fragen zu stellen, um diese Informationen zu erhalten, relevant sind, dann ja, dies ist ein Richter der relevanten Fähigkeiten. (Ein guter Kandidat würde bitten, die Implementierungen von Typ myObject und Mitglied Wert zu sehen, anstatt davon auszugehen, dass myObject eine Klasse ist und Wert ist ein veränderliches Eigenschaft vom Typ String.)

ich sage, dass alle diese Fähigkeiten relevant sind, und dass Dies ist eine vernünftige erste Frage für eine Einstiegsposition.

18

Sie sind absolut falsch. Außerdem ist dies eine Frage über Referenzen, nicht über Zeiger. Wenn Sie es nicht bekommen, verdienen Sie keinen bezahlten Job C# schreiben.

+0

Ich hatte einen Boss, der schon lange im Spiel war, und ich habe ihn dabei erwischt, C# -Container ausdrücklich als Referenz zu übergeben. – mikerobi

+1

@mikerobi, was genau ist ein "C# -Container"? –

+1

@ unforgiven3 Ich meinte Sammlung wie ArayList. – mikerobi

10

Das ist wirklich grundlegende Sachen. Die Frage bezieht sich nicht einmal auf Zeiger, sondern auf Referenzsemantik in C#, die einer der wichtigsten Aspekte der Sprache ist. Wer sich C# -Programmierer nennt, muss dies verstehen.

5

Sie sollten die Zeiger und Referenzen verstehen, lange bevor Sie das College verlassen.

Ich schrieb das oben genannte, bevor ich bemerkte, dass diese Frage C# getaggt wurde.

Sie müssen nichts über Zeiger wissen, die in C# programmiert werden sollen. Das heißt, ich halte mich an meine ursprüngliche Aussage in dem allgemeinen Sinn, ein professioneller Programmierer zu sein.

Außerdem, wie andere gesagt haben, ist diese Frage wirklich über Referenzen. Sie müssen wirklich verstehen, dass Referenzen ein C# -Programmierer sind.

+0

Zeiger sind nicht mehr so ​​wichtig. Ich würde unsicheren Code in C# ziemlich fortgeschritten vorstellen. – dtb

+5

@ dtb Zeiger sind grundlegend für die Programmierung und wie Computer funktionieren, auch wenn es Ihrer Sprache fehlt. Ich würde niemals in Erwägung ziehen jemanden einzustellen, der keine Zeiger versteht. –

+0

Es gibt einen Ozean zwischen dem Verstehen von Zeigern und dem Programmieren mit ihnen. – spender

3

Wissen, wie Objekt-Referenzierung in C# funktioniert, würde ich für wichtig halten. (Man kann sicherlich einen langen Weg überleben, ohne etwas zu wissen ... aber es ist selten OO-Code, den Sie bezahlen möchten)

Zeiger auf der anderen Seite, nicht so sehr.

4

Sie sollten Referenzen verstehen, bevor Sie beginnen, C# Interviews zu geben.

+0

lol. Guter Punkt. Ich hätte die richtige "Referenz" verwenden sollen. – Vaccano

+0

Diese Antwort hat die klare Absicht, die Frage falsch zu interpretieren und zu beleidigen, wer sie gemacht hat. Es fügt nichts zur Diskussion hinzu. –

+0

Mein Kommentar sieht gemeiner als beabsichtigt aus. Die Frage, wie ursprünglich von der OP (überprüfen Sie die Versionsgeschichte) gefragt war deutlich weniger klar, und es schien ein echtes Missverständnis von Zeigern vs. Referenzen. Bitte seien Sie nicht so schnell, etwas aus dem Zusammenhang zu beurteilen. –

1

diese Frage Passing sagt nicht viel über Fähigkeit jemand, aber andernfalls sagt es sehr viel über diemangelnde Fähigkeit einer Person. Verstehen der Referenz-Wert-Semantik ist fundamental zu wissen, wie man programmiert.

Wenn eine Person das falsche mental model über das Verhalten des Programms hat, kann er bestenfalls "aus Versehen programmieren". Wenn etwas schief läuft, wird er nicht herausfinden können, warum etwas schief gelaufen ist.

2

Ich denke, es ist eine faire Frage.

Seien Sie sicher, dass Sie diese Frage nicht einfach auf einer einfachen PASS/FAIL-Basis bewerten. Folge mit Fragen wie "Warum?" und "Was genau ist die Zeile 'instance1.Value =" bye "; ' oder Zeile 'var instance2 = instance1;' eigentlich tun?"Starten Sie einen Dialog darüber, was unter der Haube vor sich geht. Sie erfahren viel über einen Kandidaten, wie tief er die Konvertierung durchführen kann und ob er Ihren Erklärungen folgen kann."

2

Wenn a Kandidat kann diese Frage nicht beantwortet es großen Mangel zeigt in ihren Grundkenntnisse in C#. Zeigen Sie ihnen die Tür und sagt bye bye!

2

Auch wenn Sie keine Zeiger und unsicheren Code verwenden, können Sie auf jeden Fall sollten das verstehen Konzept und wissen, wie man es benutzt. Wenn Sie in C# arbeiten, kann ich verzeihen, Zeigerarithmetik nicht zu kennen, weil Sie höchstwahrscheinlich es nicht verwenden und höchstwahrscheinlich nicht verwenden sollten. Aber Zeiger existieren überall herum uns ev de in der verwalteten C# -Welt.

Eine dieser beiden Variablen, ist eigentlich ein Zeiger (Reference. Was auch immer. Gleiche Sache). Welcher? Ehrlich, eine Person, die das nicht weiß, muss einen Job mit C für ein Jahr bekommen, danach wird er das sicher verstehen.

Stellen Sie sich vor, dieser Typ muss eine Funktion schreiben, die eine Ref-Zeichenfolge akzeptiert. Es ist:

  1. unveränderlich.
  2. Ein Verweis auf ein unveränderliches Objekt.
  3. Ein Verweis auf einen Verweis auf ein unveränderliches Objekt. (Die Unveränderlichkeit hat nichts mit den Zeigern zu tun. Es wird nur noch verwirrend sein, wenn es unveränderlich ist ^^)

Der Mann verrückt gehen wird versuchen, das herauszufinden, ob er nicht seinen Zeiger verlieren Jungfräulichkeit in C vorher. Oder noch schlimmer, stellen Sie sich vor, dass ein kritischer Teil Ihres Codes ein Dictionary verwendet, das wertvolle Informationen in einer Klasse enthält, und dieser Typ ändert einen seiner Werte, was den GetHashValue des Objekts verändert und dazu führt, dass Sie die Instanz "verlieren".

Auch wenn normale C# -Entwickler keine expliziten Zeiger in ihrem Code verwenden, heißt das nicht, dass Zeiger nicht implizit verwendet werden.

Jeder gute Programmierer muss genau verstehen, was seine Sprache abstrahiert, sonst wird er die Sprache nie richtig verstehen können. Um C# richtig zu machen, müssen Sie C kennen, und um C richtig zu machen, müssen Sie Assembler kennen.

Auch Ihre Frage - Soweit Sie wissen, nahm Ihr Befragter an, dass myObject eine Struktur ist. Er hat es höchstwahrscheinlich nicht, aber trotzdem.
Edit: Ja, Referenzen sind nicht fest, im Gegensatz zu Zeigern. Aber konzeptionell gibt es wirklich keinen Unterschied.

1

Ehrlich gesagt, absolvierte ich vor etwa 2 Monaten die volle Farbe der Microsoft-Kurse. Zugegeben, ich programmiere schon länger, aber ich würde sagen, in C# gehe ich seit ungefähr 2 Jahren.

Ich weiß für eine Tatsache, dass diese Fragen mehrmals während meines Studiums kam, und es war absolut 100% wichtig, dass jeder in der Klasse dies wusste. Tatsächlich würde ich denken, dass die Microsoft-Prüfung sogar ein paar davon gemischt hat.

Aus der Sicht des Schülers (wenn auch ein hohes Maß Studenten Sicht), sollte jeder das wissen. Und wenn sie es nicht tun, dann wissen sie nicht genug Kernprogrammierung (oder Logik), um es weit in der Programmierung zu machen.

Als Randbemerkung, hatte Mein aktueller Job einen kleinen Test in dem zweiten Interview. Sie ließen mich eine App schreiben, um Prime Numbers, Factorials zu testen, schreibe meinen eigenen LastIndexOf und einen anderen, von dem ich mich nicht mehr erinnern kann.

Ich denke, Logik ist am wichtigsten in der Programmierung. Und mehr als nur die C# -Sprache zu kennen, ist dies mehr eine logische Frage.

1

Dies ist kein gutes Zeichen für jemanden mit Erfahrung in C#.

Sofern der Kandidat nur die Sprache zu lernen, und schien sehr brillant, wäre es nah an einem Deal-Breaker für mich.

Im Minimum eine klaffende Loch in der Erkenntnis, wie dies würde mir sagen, dass viel Coaching erforderlich wäre.

0

Wir haben eine Liste von technischen Fragen, die alle Entwickler Kandidaten während des Interviews Prozess gestellt werden. Von diesen Fragen muss eine bestimmte Anzahl richtig beantwortet werden, damit der Kandidat berücksichtigt werden kann. Das Verstehen von C# Referenzen wäre eine der Fragen.

Verwandte Themen