it-swarm.com.de

Was ist die beste C ++ - Interviewfrage?

Wenn Sie einem C++ - Programmierer eine Frage stellen könnten, um seine C++ - Fähigkeiten zu messen, welche wäre das?

Die Frage, die ich für am besten halte, lautet: Können Sie "dies löschen" nennen? innerhalb einer Mitgliedsfunktion? (Ich habe dies als Link eingefügt, damit Sie es zuerst durchdenken können, und gehen Sie dann zu Die beste C++ - Interviewfrage - aller Zeiten! , um die zu sehen richtige Antwort.)

Ich frage das nicht, weil ich erwarte, dass die meisten Leute die Antwort wissen. Wenn sie das taten, wäre es keine so nützliche Frage. Ich frage, ob sie sich zur richtigen Antwort durcharbeiten können und wie sie dies tun.

28
David Thielen

Ich würde sie nach dem Grund fragen, warum die Funktion für virtuelle Mitglieder nicht mit Vorlagen in C++ verwendet werden kann. Natürlich gibt es nur wenige Menschen, die die Frage tatsächlich sofort beantworten können. Wenn ein Befragter jedoch die Kernmechanik von C++ richtig versteht (wie die Vorlage in C++ funktioniert, wie die virtuelle Funktion implementiert wird, wie Compiler und Linker eine ausführbare Datei aus dem Quellcode generieren usw.), erhalten Sie möglicherweise eine Antwort mit entsprechenden Schritten. Schritt führende Fragen.

Hinzugefügt: Virtuelle Vorlagenfunktion in dieser Antwort bedeutet Vorlagenfunktion, die die virtuelle Elementfunktion einer Klasse ist - keine reguläre Elementfunktion in der Vorlagenklasse. Entschuldigung für die Verwirrung :(

8
summerlight

Die beste C++ - Interviewfrage wäre ein Programmierproblem, keine Quizfrage.

57
Steven Evers

Ich würde sie fragen, was sie an C++ 0x mögen. Daraus könnte ich sie in verschiedene Stereotypen "zusammenfassen":

  • super Old School, verwendet C++ - Compiler zum Kompilieren von C-Code
  • die alte Schule, die Angst vor STL hat (oder keinen Sinn dafür hat), hat mit den Änderungen nicht Schritt gehalten
  • liebt Lambdas, liebt es, dass STL durch rvalue-Referenzen schneller wird, großer RAII-Fan, heiß auf shared_ptr, unique_ptr usw.
  • ist bitter, weil der gesamte in den letzten Jahren geschriebene Boost-Code angepasst werden muss, um C++ 0x-Äquivalente zu verwenden
  • wahnsinniger Vorlagen-Metaprogrammer, der meinen Kopf explodieren lässt, während er eine relativ kurze Frage beantwortet

Wahrscheinlich sind einige dieser Eimer perfekt für Sie und einige sind "Danke, dass Sie gekommen sind". Als eine Frage, die Ihnen schnell viele Informationen liefert, ist dies mein Gewinner.

32
Kate Gregory

Ich bin etwas amüsiert darüber, warum "können Sie dies löschen?" wird als interessante Frage angesehen. Jeder, der COM-Code in C++ geschrieben hat, weiß, dass das allererste, was Sie am ersten Tag der grundlegenden COM-Programmierung lernen, ist, wie man "dies löschen" richtig verwendet. Ich nehme an, es könnte nützlich sein, festzustellen, ob beispielsweise jemand in seinem Lebenslauf über das Schreiben von COM-Programmen lügt, aber als allgemeine C++ - Frage, wenn jemand sie nicht sofort beantworten kann, passt er nicht gut dazu für mein Team.

Wenn Ihr Ziel darin besteht, eine Frage zu erstellen, die die C++ - Fähigkeiten misst, ist die Auswahl einer Frage der falsche Weg. Dreh es um. Die richtige Frage ist:

Wie gut sind Sie auf einer Skala von eins bis zehn als C++ - Programmierer?

Dies ist nicht die Frage, mit der Sie die gewünschte Antwort erhalten. Jeder sagt "acht" unabhängig davon. Die Frage, mit der Sie die gewünschte Antwort erhalten, lautet:

OK, du bist also eine Acht. Was ist ein Problembereich, mit dem eine Sieben Ihrer Meinung nach nur schwer arbeiten kann?

Und Boom, jetzt hast du sie. Wenn der Kandidat der Meinung ist, dass "etwas mit Rekursion zu tun hat" oder "wann ein virtueller Destruktor verwendet werden muss", was eine Sieben schwer hat, dann wissen Sie, dass sie ein wenig über Rekursion oder Destruktoren oder was auch immer wissen und dass ihr Wissen nicht viel weiter geht.

Das sollte Ihnen eine viel bessere Kalibrierung geben, als sich eine Trivia-Frage zu stellen. Wenn Sie mich zwingen würden, eine gute Einzelfrage zu einer Tatsache über C++ zu stellen, würde ich wahrscheinlich etwas fragen wie "Wie würden Sie den semantischen Analysator und den Codegenerator für den Teil eines C++ - Compilers entwerfen, der sich mit virtuellen Methoden befasst?" in einem Basisklassen-Destruktor aufgerufen? " Sie sollten Fragen stellen, die mit echten Dingen zu tun haben, an denen Sie arbeiten und an denen der Kandidat wahrscheinlich arbeitet. Das ist ein Problem, an dem ich einmal arbeiten musste, und ich denke, es würde einen ziemlich guten Einblick geben, wie eine Person semantische Analysatoren und Codegeneratoren entwirft und wie sie C++ kennt.

28
Eric Lippert

Nur zum Spaß hatte ich C++ - Programmierer, die mit diesem kleinen Baby taumelten:

Warum läuft dies in eine Endlosschleife (und ja, es ist richtig eingegeben)?

int x=0;
while (x<3) {
  x = x++;
}

Es ist erstaunlich, wie viele stolpern. Natürlich kann ich es nicht mehr verwenden nachdem es auf Stack Overflow erschienen ist . Mutter ... murmeln ...

(Um die richtige Antwort zu erhalten, lesen Sie das Geständnis und auf jeden Fall die Kommentare)

Bonusfrage hinzugefügt

Es gibt den Klassiker FizzBuzz aller Zeiten (wie im mittlerweile berühmten Coding Horror-Artikel ). Ich habe es selbst noch nie in einem Interview verwendet, aber nachdem ich es eines Mittags im Entwicklungsteam herumgeschmissen hatte, waren die Ergebnisse ... ähm ... überraschend genau.

Geständnis

Ich war von der Standardantwort "x ++ gibt den ursprünglichen Wert zurück" eingeholt. Die richtige Antwort ist jedoch, dass das Verhalten aufgrund von Sequenzpunkten undefiniert ist. Niemand hat jemals Sequenzpunkte erwähnt, bis ich sie hier gepostet habe.

Ich bin gebildet worden und möchte mich ganz herzlich bei allen bedanken, die sich die Zeit genommen haben, Kommentare abzugeben.

14
Gary Rowe

Das erste, was zu stellen ist, ist eine einfache Frage zu Zeigern. Ich war erstaunt zu sehen, wie viele Leute, die behaupten, C++ oder, noch schlimmer, C zu kennen, nicht in der Lage sind, darauf zu antworten. Dann würde ich eine einfache Frage zu virtuellen Funktionen stellen. Diese Kombination sagt Ihnen sehr schnell, ob die Person C++ tatsächlich kennt oder nicht.

8
Dima

Erzähl mir von dem Kopierkonstruktor.

7
fredoverflow

Das hängt stark davon ab, welche Art von C++ in Ihrem Unternehmen geschrieben ist. (Als ich C++ - Programmierer einstellen musste, habe ich nie nach delete gefragt, weil ich sie nach Techniken gefragt habe, um zu vermeiden, dass delete insgesamt geschrieben werden muss.)

Idealerweise möchten Sie Mitarbeiter einstellen, die Code schreiben, der über dem Niveau liegt, das Ihr Team derzeit schreibt, jedoch nicht zu hoch darüber, es sei denn, Sie möchten dies mit der Schulung des Teams kombinieren, um ihn auf ein höheres Niveau zu bringen.

7
sbi

Die beste Frage für einen großartigen C++ - Entwickler lautet: "Sagen Sie mir die Gründe, warum wir NICHT C++ verwenden sollten?"

6
amadvance

Ich glaube, ich würde sie fragen, was sie sonst noch wissen, oder ihnen eher eine Frage in etwas ganz anderem stellen.

Viel zu viele C++ - Programmierer, die wenig Erfahrung mit anderen Sprachen haben. Enge Erfahrungen sind normalerweise restriktiv.

6
Orbling

Ich glaube nicht, dass es eine beste C++ - Frage gibt. C++ ist eine so große Sprache, und mit C++ 0X ist sie gewachsen, dass Sie in einer bestimmten Subdomäne der Sprache und nicht wenig über einen anderen Teil der Sprache stark sein können. Eine "One-Shot" -Frage übt nur die Kenntnis eines kleinen Teils der Sprache aus und es besteht die Gefahr, dass die Kenntnis anderer Personen über andere Aspekte der Sprache übersehen wird.

4
sashang
4
karlphillip

Meine Lieblingsfrage ist einfach:

a) Haben Sie mit C begonnen und dann zu C++ gewechselt?

b) Wenn ja, was waren die ersten Dinge, die Sie gelernt haben, anders zu machen?

Diese Antwort gibt mir normalerweise einen Einblick in die Herangehensweise des Programmierers an C++ und sein Verständnis von OOP und C++ im Allgemeinen).

hier gibt es keine "richtige" oder "falsche" Antwort, aber normalerweise ist dies eine gute Möglichkeit, um ein Gefühl dafür zu bekommen, woher der Kandidat kommt.

3
mohaps

Wie Sie virtuelle Funktionen in C++ implementieren, erklären Sie ein reales Szenario.

1
user616

Im Moment würde ich sagen: "Wie würden Sie einen Verschiebungskonstruktor für einen Container implementieren?"

Mein Grundprinzip ist, dass die Antwort des Kandidaten angibt, ob der betreffende Entwickler aktiv Kenntnisse über seine Sprache verfolgt oder sich nur an die Tricks hält, die er kennt, da Verschiebungskonstruktoren ein Merkmal des nächsten Standards und nicht des aktuellen Standards sind.

1
Kaz Dragon

Ich denke, ich würde sie nach ihrer Meinung zum Design von std::string Fragen. Ich würde sie auch fragen, ob sie andere Designs verwendet haben (z. B. MFC/ATL CString, wxString usw.) und unter der Annahme, dass dies der Fall ist, sie bitten, die Designs zu vergleichen und gegenüberzustellen.

Zeichenfolgen sind weit genug verbreitet, dass fast jeder mit wirklicher Erfahrung mit C++ mindestens eine oder zwei der oben genannten verwenden sollte. Fast alle Designs enthalten Kompromisse zwischen theoretischer Reinheit und praktischer Anwendung. Einige können sehr gut funktionieren, aber nur, wenn sie genau wie beabsichtigt verwendet werden, während andere eine größere Vielseitigkeit gegen eine mögliche Ungeschicklichkeit eintauschen. Kurz gesagt, fast jeder, der echte Erfahrung hat sollte in der Lage sein, einige bedeutungsvolle Meinungen über seine Entwürfe zu äußern, und diese Meinungen sollten Ihnen eine ganze Menge darüber sagen, wie sie denken, wie sie Design-Code, das Ausmaß, in dem sie Pragmatismus gegenüber theoretischer Reinheit schätzen, und so weiter.

1
Jerry Coffin

Ich würde der Person tatsächlich ein bisschen Code aus einer anderen Programmiersprache präsentieren, die objektorientiert war und vorzugsweise nicht auf der Liste der Sprachen steht, die sie kennt. Der Code sollte eine einfache Aufgabe darstellen, die in dieser Sprache ausgeführt wird.

Dabei geht es nicht darum, ihre Kenntnisse in C++ zu ermitteln, sondern herauszufinden, wie gut sie die Programmierung verstehen. Wenn Sie die grundlegenden Konzepte der Programmierung verstehen, können Sie Probleme lösen.

1
Paul