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 die beste halte, lautet: Können Sie "delete this" nennen? innerhalb einer Mitgliedsfunktion? (Ich habe dies als Link eingefügt, damit du es dir zuerst überlegen kannst. Dann gehe zu The Best C ++ Interview Question - Ever!, Um die richtige Antwort zu finden.)
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 und wie sie es schaffen, die richtige Antwort zu finden.
Die beste C ++ - Interviewfrage wäre ein Programmierproblem, keine Quizfrage.
quelle
CString
,char*
,std::string
usw .; geben sie einen neuen String zurück oder kehren ihn um? Durchlaufen sie die Zeichen manuell oder rufen sie eine Bibliotheksfunktion auf? Und wenn sie etwas Einfaches wie das Umkehren einer Saite nicht können, sagt das natürlich auch viel über sie aus! Es gibt auch viele Anschlussfragen, wie funktioniert es mit Unicode, funktioniert es mit UTF-8 usw.Ich würde sie fragen, was sie an C ++ 0x mögen. Daraus könnte ich sie in verschiedene Stereotype "gruppieren":
Es besteht die Möglichkeit, dass einige dieser Eimer perfekt für Sie sind und andere "Danke, dass Sie hereingekommen sind". Als eine Frage, die Ihnen schnell viele Informationen liefert, ist dies mein Gewinner.
quelle
Ich bin etwas amüsiert, warum "kannst du das 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, die korrekte Verwendung von "delete this" ist. Ich nehme an, es könnte nützlich sein zu bestimmen, 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, werden sie nicht gut passen für mein team.
Wenn es Ihr Ziel ist, eine Frage zu entwickeln, die die C ++ - Fähigkeiten misst, dann ist die Auswahl einer Frage der falsche Weg. Dreh es um. Die richtige Frage ist:
Dies ist nicht die Frage, mit der Sie die gewünschte Antwort erhalten. Jeder sagt "acht", egal. Die Frage, mit der Sie die gewünschte Antwort erhalten, lautet:
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" die Art von Dingen ist, mit denen eine Sieben Schwierigkeiten 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 ermöglichen, als wenn Sie sich eine Quizfrage stellen. Wenn Sie mich zwingen würden, eine gute Frage zu einem Faktum über C ++ zu stellen, würde ich wahrscheinlich fragen: "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.
quelle
Aus Spaß hatte ich C ++ - Programmierer, die sich mit diesem kleinen Baby beschäftigten:
Warum läuft dies in eine Endlosschleife (und ja, es ist richtig geschrieben)?
Es ist verblüffend, wie viele sich in die Irre führen. Natürlich kann ich es nicht mehr benutzen, 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 absoluten Klassiker FizzBuzz (wie im mittlerweile berühmten Coding Horror-Artikel beschrieben ). Ich habe es selbst noch nie in einem Interview verwendet, aber nachdem ich es eines Mittags im Entwicklerteam herumgeschmissen hatte, waren die Ergebnisse ... ähm ... überraschend genau.
Bekenntnis
Ich war über die Standardantwort "x ++ gibt den ursprünglichen Wert zurück" auf dem Laufenden. Die richtige Antwort ist jedoch, dass das Verhalten aufgrund von Sequenzpunkten undefiniert ist. Niemand hat jemals Sequenzpunkte erwähnt, solange ich diese verwendet habe, bis ich sie hier gepostet habe.
Ich bin gebildet worden und möchte aufrichtig allen danken, die sich die Zeit genommen haben, Kommentare abzugeben.
quelle
Das erste, was zu fragen 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 tatsächlich C ++ kennt oder nicht.
quelle
Das hängt sehr davon ab, welche Art von C ++ in Ihrem Unternehmen geschrieben wird. (Als ich C ++ - Programmierer einstellen musste, habe ich nie danach gefragt
delete
, weil ich sie nach Techniken gefragt habe, die es vermeiden sollen, dass sie zusammen schreiben müssendelete
.)Idealerweise möchten Sie Mitarbeiter einstellen, die Code schreiben, der über dem Niveau Ihres Teams liegt, aber nicht zu hoch darüber liegt, es sei denn, Sie möchten dies mit dem Training des Teams kombinieren, um es auf ein höheres Niveau zu bringen.
quelle
quelle
Ich glaube, ich würde sie fragen, was sie sonst noch wissen, oder ihnen eher eine Frage zu etwas ganz anderem stellen.
Viel zu viele C ++ - Programmierer, die wenig Erfahrung mit anderen Sprachen haben. Schmale Erfahrung ist normalerweise einschränkend.
quelle
Die beste Frage für einen großartigen C ++ - Entwickler lautet: "Nennen Sie mir die Gründe, warum wir C ++ NICHT verwenden sollten ?"
quelle
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 Unterdomäne der Sprache stark sein können und nicht wenig über einen anderen Teil der Sprache. Bei einer One-Shot-Frage wird nur ein kleiner Teil der Sprache von jemandem beherrscht, und es besteht die Gefahr, dass die Kenntnis anderer Aspekte der Sprache von jemandem übersehen wird.
quelle
StackOverflow hat einiges zu bieten. Ich werde ein paar teilen:
https://stackoverflow.com/questions/2428404/tricky-interview-question-for-c
https://stackoverflow.com/questions/50447/favorite-c-interview-question
https://stackoverflow.com/questions/4269838/interview-question
https://stackoverflow.com/questions/2532102/can-a-pointer-ever-point-to-itself
https://stackoverflow.com/questions/3055141/interview-question-about-virtual-functions-in-c
quelle
Meine Lieblingsfrage ist einfach:
a) Hast du mit C angefangen und dann zu C ++ gewechselt?
b) Wenn ja, was waren dann die ersten Dinge, die Sie gelernt haben, anders zu machen?
Diese Antwort gibt mir normalerweise einen Überblick darüber, wie sich der Programmierer C ++ nähert und wie er OOP und C ++ im Allgemeinen versteht.
Es gibt hier keine "Richtige" oder "Falsche" Antwort, aber normalerweise ist es eine großartige Möglichkeit, einen Eindruck davon zu bekommen, woher der Kandidat kommt.
quelle
Ich würde der Person tatsächlich ein Stück Code aus einer anderen Programmiersprache präsentieren, die objektorientiert 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 bestimmen, sondern herauszufinden, wie gut sie die Programmierung verstehen. Wenn Sie die grundlegenden Konzepte hinter der Programmierung verstehen, können Sie Probleme lösen.
quelle
Wie Sie virtuelle Funktionen in C ++ implementieren, erklären Sie ein reales Szenario.
quelle
Im Moment würde ich sagen: "Wie würden Sie vorgehen, um einen Verschiebungskonstruktor für einen Container zu implementieren?"
Mein Grundgedanke ist, dass die Antwort des Kandidaten angibt, ob der betreffende Entwickler aktiv Kenntnisse über seine Sprache anstrebt oder sich nur an die ihm bekannten Tricks hält, da Verschiebungskonstruktoren ein Merkmal des nächsten und nicht des aktuellen Standards sind.
quelle
Ich denke, ich würde ihre Meinung über das Design von sagen wir, fragen
std::string
. Ich würde sie auch fragen , ob sie andere Konstruktionen verwendet haben (zB MFC / ATLCString
,wxString
etc.) und vorausgesetzt , sie haben, fragen sie die Entwürfe zu vergleichen und gegenüberzustellen .Strings sind weit genug verbreitet, sodass fast jeder, der echte Erfahrung mit C ++ hat, mindestens eines oder zwei der oben genannten verwenden sollte. Fast alle Entwürfe enthalten Kompromisse zwischen theoretischer Reinheit und praktischer Anwendung. Einige können wirklich gut funktionieren, aber nur, wenn sie genau so verwendet werden, wie sie beabsichtigt sind, während andere eine größere Vielseitigkeit gegen mögliche Ungeschicklichkeit eintauschen. Kurz gesagt, die fast jeder wirkliche Erfahrung sollten einige aussagekräftige Meinungen ihrer Entwürfe und diese Meinungen sollten Sie eine angemessene auszudrücken sagen Menge darüber , wie sie denken können, wie sie Code - Design, das Ausmaß , in dem sie Wert Pragmatismus gegenüber theoretischen Reinheit, und so weiter.
quelle