Was kann ich von einer technischen Evaluierung für C ++ erwarten? [geschlossen]


10

Ich wurde gebeten, einen technischen Test / eine technische Bewertung für einen Job als Junior-Entwickler durchzuführen, hauptsächlich mit C ++. Dies ist mein erster Test / meine erste Bewertung und dauert 2 Stunden.

Mein C ++ ist etwas verrostet, da ich kürzlich Projekte auf PHP gemacht habe.

Dies ist ein britisches Unternehmen, aber ich gehe davon aus, dass die technischen Tests der Kandidaten überall ziemlich gleich sein werden.

Was kann ich bei einem dieser Tests erwarten?


1
Diese Frage ist für PHP, aber die Antworten gelten: programmers.stackexchange.com/questions/73654/…
Eric Wilson

Antworten:


5

Es ist C ++, also können Sie alles erwarten, ich meine WIRKLICH alles.

Normalerweise beinhaltet dies Trickfragen und irgendeine Art von Polymorphismusfragen.

Könnte aber auch etwas Einfaches sein.

Seien Sie bereit, eine Frage zu beantworten wie "Warum sollten Sie einen Destruktor virtuell machen", was "flüchtig" ist, "eine Klasse entwerfen" für ein unrealistisches Problem, "eine verknüpfte Liste implementieren", "eine Zeichenfolge umkehren" usw.


Ich würde hinzufügen "Wofür wird das mutableSchlüsselwort verwendet?" zur irgendetwas Kategorie.
Tom

5

Wenn dies ein reiner C ++ - Test ist (dh kein Windows / MFC / Managed C ++ - Test), dann verbringen Sie ein paar Stunden oder einen Tag mit Scott Meyers Effective C ++ und Sie sollten es sehr gut machen. Es werden keine Vorlagen und die STL behandelt, aber wenn sie daran interessiert wären, würden sie Ihnen wahrscheinlich keinen zweistündigen Test geben. Es ist einige Jahre her, aber ich habe häufig C ++ - Entwickler interviewt. Obwohl die Ideen in Effective C ++ für die C ++ - Programmierung von grundlegender Bedeutung sind, kannten sie nur etwa zehn Prozent der Kandidaten.


1
+1 für Buchempfehlung - und überspringen Sie Scott Meyers effektiveres C ++ - Buch. Wenn ich Programmierer interviewte, schaute ich auch auf intellektuelle Ehrlichkeit (versuchst du zu bluffen oder gibst du zu, dass du es nicht weißt), weißt du was du nicht weißt und weißt du wo du finden kannst eine Antwort. (Wenn Sie jemanden interviewen, der behauptet, in C ++ gearbeitet zu haben, wären die Fragen weitaus schwieriger). Wenn in Ihrem Lebenslauf nichts auf Programmierkenntnisse in anderen Sprachen hindeutet, würde ich Sie auch bitten, ein einfaches Programm zu schreiben und zu prüfen, ob Sie die Eckfälle richtig behandelt haben.
MZB

Ich bin ein Computer-Absolvent, mir wurde beigebracht, wie man Programme in der Konsole in C ++ erstellt, ich wurde in die Implementierung von binären Sortierbäumen und doppelt verknüpften Listen usw. eingewiesen. Dann wurden wir dort auch in abstrakten Klassen, Vererbung und Polymorphismus unterrichtet, aber nicht wie man sie umsetzt. Die Jobrolle ist für einen Absolventen, daher weiß ich nicht, was sie von mir erwarten, da ich keine wirkliche Erfahrung im Berufsleben von C ++ habe.
Bärenbrot

4

Nun, es hängt davon ab, ob Sie Google verwenden können oder nicht. : P.

Normalerweise mache ich technische Tests ziemlich gut, solange ich die Werkzeuge um mich herum verwenden kann. Wenn sie wollen, dass ich blind codiere, ist es, wenn ich in Schwierigkeiten gerate. Der beste Rat, den ich Ihnen geben kann, ist Code Blind zu Hause ... Stellen Sie sicher, dass Sie sich an triviale Dinge erinnern, die wir für selbstverständlich halten, da wir sie leicht überprüfen können, wenn wir uns nicht erinnern.

In der Regel auch die Überprüfung auf bestimmte Fähigkeiten, die sie benötigen. Wenn Sie also wissen, woran Sie arbeiten werden, konzentrieren Sie sich darauf.

(Dies ist meiner allgemeinen Erfahrung nach nicht aus Großbritannien)


Was ist mit Theorie, Polymorphismus, Vererbung? Ich kenne die Theorie dafür nur aus dem Abschluss, aber ich weiß nicht, wie ich sie in C ++ implementieren soll
Bearbread

Ihre Implementierung ist nicht so schwierig, Sie können sie wahrscheinlich sehr schnell überprüfen. Der wichtige Teil ist zu wissen, wann es angemessen ist, sie zu verwenden, wann Sie sie benötigen werden. Sie sind eher ein Funktionsmuster als eine tatsächliche Voraussetzung. Was ich meine ist, dass Sie davonkommen können, ohne sie zu benutzen, aber von Ihnen wird erwartet, dass Sie sie bei Bedarf kennen.
AJC

@bearbread: Theorie selbst ist nicht viel wert. Lesen Sie mehr über Entwurfsmuster und versuchen Sie, diese zu implementieren.
Karoly Horvath

Ich kenne Designmuster wie MVC für PHP. Ist das das, was du meinst?
Bärenbrot

1

Übungscode-Kata Wählen Sie einen einfachen Algorithmus (Ringpuffer, Hanoi-Turm, binäre Suche usw.) und codieren Sie ihn von Grund auf neu. Dann mach es das nächste Mal und das nächste Mal und das nächste Mal und das nächste Mal und so weiter. Sehen Sie sich an, wie Sie sie bei jeder Iteration verbessern können.


1
+1. Mach es auch mit einem Freund, der etwas erfahrener ist. Abwechselnd programmieren, lernen Sie beide etwas Neues.
Tom

0

Es ist wahr, dass Sie alles erwarten können.

Sie sagten Ihnen, der Test sei C ++, aber vielleicht ist es wirklich die C-Teilmenge von C ++, die sie in ihren Tests verwenden (Sie verwenden char-Arrays anstelle von Standardbibliothekszeichenfolgen). Das wird schwer zu wissen sein.

Wenn es wirklich C ++ ist, würde ich Ihnen raten, die Grundlagen zu sehen:

  • Klassen, Variablen, Arrays
  • Referenzen, Zeiger (und warum Sie sie nicht standardmäßig verwenden sollten)
  • die Verwendung des Schlüsselworts const
  • Orientierte Objektkonzepte (Vererbung, Polymorphismus ...)
  • Vorlagen

dann:

  • Standardbibliotheksverwendungen (std :: string, std :: vector, container, ...)

0

Was gepostet wurde, war bisher großartig, aber ich werde etwas und eine Geschichte hinzufügen! Ich würde sagen, üben Sie, das, was Sie in C ++ wissen, auf Probleme im Bereich des Softwareunternehmens anzuwenden. Es ist großartig, wenn Sie alle Vor- und Nachteile von C ++ kennen, aber wenn Sie sich nicht auf ein Problem anwenden können, sind Sie für das Unternehmen nutzlos. Da dies eine Junior-Entwicklerposition ist, würde ich nicht glauben, dass sie erwarten würden, dass Sie alles über C ++ wissen.

Ich habe letzte Woche meinen ersten technischen Test für meinen ersten Entwicklerjob gemacht und war überrascht, was ich gefunden habe. Ich hatte etwas wie FizzBuzz oder etwas Nitty Gritty erwartet (dies war übrigens für Java), aber ich fand, dass sie mir eine Datei gaben und mich sie in ein neues Format analysieren ließen, was Teil des Jobs war. Darüber hinaus ließen sie mich Google und ihre eigenen Bibliotheken verwenden. Unterm Strich müssen Sie C ++ kennen, aber wenn Sie wissen möchten, wie der Test aussehen könnte, schauen Sie sich die Domäne der Stelle an, für die Sie sich bewerben, und arbeiten Sie an der Implementierung von C ++ für etwas in dieser Domäne.


Ich würde vermuten, dass <1% der C ++ - Programmierer alles über die Sprache wissen :) Nehmen Sie einfach alle Fälle von undefiniertem / nicht spezifiziertem / implementierungsdefiniertem Verhalten als ein Beispiel.

0

Bist du:

  1. Code schreiben
  2. Multiple Choice nehmen
  3. Persönliches Interview

Beim Schreiben von Code

Sie erwarten von Ihnen, dass Sie Folgendes wissen (und verwenden):

  • RAII
  • Die Dreierregel
  • Verstehen Sie intelligente Zeiger

Sie werden dich wahrscheinlich testen auf:

  • Erbe
  • Virtuelle Funktionen
  • Serialisierung zu / von einem Stream
  • Überladen Sie die arithmetischen Operatoren (werden im wirklichen Leben nicht oft verwendet, aber es ist einfach, einen Test herumzuschreiben).

Wenn Sie Pech haben, denken sie vielleicht

  • Mehrfachvererbung und virtuelle Basisklassen sollten Sie kennen.
    • Es ist nicht so, aber einige Leute werden verrückt.

Bei Multiple Choice

  • Verstehe die gesamte OO-Terminologie
  • Kennen Sie die C ++ - Möglichkeiten zur Implementierung von OO

Persönliches Interview

  • Alles oben.
  • Kenntnis der Rekursion
  • So konvertieren Sie die Rekursion in eine Schleife
  • So schätzen Sie die Komplexität von Big O ()
  • Die Standard-Sortieralgorithmen (nicht nur Blase).

1
Ich bin eher ein C-Programmierer als C ++, daher kenne ich das Gespräch nicht ... aber ich habe noch nie von RIAA und der Dreierregel gehört. Ich habe jedoch von RAII gehört (Ressourcenbeschaffung ist Initialisierung, dh Ihr Destruktor sollte sein eigenes Chaos beseitigen), und ich weiß, dass Ihr Code alle drei benötigt, wenn er eine Kopier-Ctr, einen Überlastungszuweisungsoperator oder einen Destruktor benötigt. Es scheint mir, dass ein Interview, das eher eine kitschige Kleinigkeit in der Programmiersprache als ein Test Ihrer Fähigkeiten ist, etwas Schlechtes über das Unternehmen aussagt.

1
Und ebenso, wenn sie nach Mehrfachvererbung und Rekursion fragen, würde ich annehmen, dass ihre Codebasis ein großes Durcheinander ist. Wenn sie erwarten, dass Sie alle gängigen Sortieralgorithmen aus heiterem Himmel kennen, wie Rekursionsrollen, Objektserialisierung usw. durchgeführt werden, sagt dies auch etwas Schlechtes über das Unternehmen aus. Erwarten sie nicht, dass ihre Entwickler Roboter sind? In der realen Welt suchen Sie nach solchen Dingen, bevor Sie sie verwenden. Selbst wenn ich die Theorie hinter all diesen Dingen kenne, würde ich sie immer noch nachschlagen, nur um sicherzugehen, dass ich die optimale Lösung verwende und nicht etwas, also habe ich mir etwas ausgedacht.

@Lundin: Sie müssen die seidigen Namen nicht kennen, aber Sie müssen die Prinzipien kennen. Wenn Sie sie hier erwähnen, können Sie leicht nachschlagen. Sie müssen die Sortieralgorithmen kennen, weil Sie wissen müssen, welche wann verwendet werden sollen (und was noch wichtiger ist, warum) (Dinge, die Roboter nicht können, aber Menschen sehr gut können).
Martin York

An Rekursion oder Mehrfachvererbung ist nichts von Natur aus falsch. Das Problem ist, dass Entwickler es überbeanspruchen (und es falsch machen). Einige Probleme können nur (einfach) durch Rekursion gelöst werden (zuerst eine Baumstrukturtiefe analysieren).
Martin York


-1

Ich habe in meinem letzten Interview:

Unterschied zwischen der Übergabe eines Objekts an eine Funktion nach Wert / Referenz / Zeiger und wo und warum Sie das tun würden.

Tauschen Sie die 2 letzten 8 Bits einer Ganzzahl, z. B. RGBA, gegen RGAB aus.

Was ist RIAA?

Definieren Sie die Meta-Programmierung von Vorlagen: Möglicherweise wird die Frage "Dieses Problem mit TMP lösen" angezeigt.

Was bedeuten veränderlich, flüchtig, const etc etc etc? kenne alle Schlüsselwörter.

Mehrfachvererbung .... immer wieder.

Multithreading: Producer Consumer- und gepufferte Shared Memory-Objekte.

Noch ein paar Fragen zur Peripherie:

UML-Aggregation und -Komposition

Entwurfsmuster: Implementieren eines Singletons ... Was sind die allgemeinen Komponenten von MVC?

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.