C++ Interview Fragen
-
Ah, cool. Danke fürs Erklären.
Bei virtual inheritance will ich rausfinden, ob er weiß, was das ist. Vielleicht malt er nen Diamanten und erklärt was. Es geht doch nicht darum, irgendwelche Antworten genau zu treffen sondern rauszufinden, ob er überhaupt über sowas nachdenkt.
Auch bei der closure gehts nicht darum, Wikipedia auswendig zu können. Ich hatte gedacht, dass er dann vielleicht kurz ein Beispiel aufschreibt, wo das passend ist. Vielleicht benutzt er ein lambda um partial function application zu zeigen, oder wie man damit schick was in eine Eventloop schieben kann oder so.
Bei C++ wärs dann noch gut wenn erklären kann wie der mit per value und per ref aussieht usw.Klar kann man Versionsverwaltung lernen. Auch hier gehts mir mehr darum insgesamt rauszufinden, ob er sowas kann. Wenn er sowas nicht kennt, ist das ein kleiner Hinweis darauf, dass er sicht nicht so sehr damit beschäftigt, in seinem "Handwerk" besser zu werden.
Gut, die code-smell-Frage gefällt mir jetzt auch nicht mehr so sehr. Aber auch hier will ich doch nicht, dass er das triffst, was ich genau denke. Ich will ihn doch nur zum erzählen bringen, um einen Gesamteindruck zu bekommen. Wenn er von sich aus schon erzählt, z.B. wenn er von irgendwelchen vergangenen Projekten erzählt, müssen die speziellen Fragen natürlich gar nicht sein.

Ja, Programmieren-Lassen ist super. Das meinte ich ja mit codility-Aufgabe (https://codility.com).
Aber ich kenn halt auch Leute, die in solchen kleinen Projekt-Euler-mäßigen Aufgaben brillieren würden, aber die Computer-Bild-Trivialitäten von oben trotzdem gar nicht kennen und nichtmal versuchen, selbst sowas grundlegendes dazuzulernen.OK, ich hab beim Schreiben der Liste nicht drüber nachgedacht, wie das wohl rüberkommt. Ich hoffe, dass es jetzt nicht mehr ganz so bescheuert wirkt.
-
Ich finde man sollte einen Bewerber auf eine C++ Stelle nicht behandeln wie einen der gerade Angefangen hat und sich das 3 Youtube Tutorial Video reinzieht.
Das implizieren z.B. die Fragen von Dobi für mich. Ist das wirklich nötig im Programmierumfeld? Muss man im Gespräch herausfinden ob er grundlegende Sprachfeatures und Idiome kennt?
-
Dobi schrieb:
Bei virtual inheritance will ich rausfinden, ob er weiß, was das ist.
Du willst herausfinden, ob er fürs Unternehmen nutzbringend ist.
Sagt er jetzt "Ähm, Mist, hab's vergessen", so bringt ihm das als Anfänger sinnigerweise keinen Punktabzug, weils ausgeschrieben wäre "Ähm, Mist, hab's vergessen, es war zwar in mehreren Büchern drin, aber ich war jahrelang so schlau, sie nicht zu verwenden". Hab viel mehr Angst vor Leuten, die umständlich proggern, selbst wenn sie den Standard auswendig konnen, als vor Nubes, die solide und feige vorgehen.Dobi schrieb:
Vielleicht malt er nen Diamanten und erklärt was.
Ah, er soll die Probleme der Mehrfachvererbung aufzeigen. Hauptproblem ist natürlich, daß es sie in vielen Sprachen nicht gibt.
Aber das ist ein ProblemAndererLeute. http://de.wikipedia.org/wiki/Hintergründe_zu_Per_Anhalter_durch_die_Galaxis#Problem-anderer-Leute-FeldOhja, und daß sie fehlerverstärkend wirkt, wenn man Vererbung eh schon schief einsetzt. http://www.c-plusplus.net/forum/325554
Auch ein PAL.Seh ich ein
class IrgendwasManagerwo "Irgendwas" für einen Allgemeinplatz wie Ressorce, Property, Ability oder so steht, dann weiß ich schon, daß das Projekt umkippt. Ah, das zum "smells".
Auch ein PAL. Wobei ich mich als Prüfling dabei auch ganz leicht tief in die Nesseln setzen kann, wenn der Prüfer auch so ein -Manager-Programmierer ist oder (nicht selten) gar nicht proggern kann.Dobi schrieb:
Es geht doch nicht darum, irgendwelche Antworten genau zu treffen sondern rauszufinden, ob er überhaupt über sowas nachdenkt.
Ganz schwierig, sich dabei nicht von Schönrednern verarschen zu lassen.
Dobi schrieb:
Auch bei der closure gehts nicht darum, Wikipedia auswendig zu können.
Hihi. Dreiviertelstunde Zeit für "Finde 10 Wikipedia-Artikel über Programmierthemen, die gravierende sachliche Fehler enthalten."
Dobi schrieb:
Klar kann man Versionsverwaltung lernen. Auch hier gehts mir mehr darum insgesamt rauszufinden, ob er sowas kann. Wenn er sowas nicht kennt, ist das ein kleiner Hinweis darauf, dass er sicht nicht so sehr damit beschäftigt, in seinem "Handwerk" besser zu werden.
Oder daß er noch nicht beruflich damit zu tun hatte. Privat sollte er eh keins benutzen. Würde er es tun, müßte ich eher Ansgt bekommen, daß er auch umständlich proggert. Wobei man dann ja nachfragen kann, warum er keins verwendet, und erfährt, daß sein Backupsystem viel praktischer ist.
-
ScottZhang schrieb:
Ist das wirklich nötig im Programmierumfeld? Muss man im Gespräch herausfinden ob er grundlegende Sprachfeatures und Idiome kennt?
Wann willst du es sonst herausfinden? Hoffentlich noch in der Probezeit?
-
"Ähm, Mist, hab's vergessen, es war zwar in mehreren Büchern drin, aber ich war jahrelang so schlau, sie nicht zu verwenden"
wär in meinen Augen auch eine sehr gute Antwort gewesen.
"Ganz schwierig, sich dabei nicht von Schönrednern verarschen zu lassen."
Das ist sicherlich immer schwer. Deshalb würd ich ihn ja auch eine Mini-Aufgabe programmieren lassen und nicht nur erzählen lassen."Privat sollte er eh keins benutzen."
Ich benutz auch für meine kleineren Privatprojekte, also die nur wenige Wochen gehen, git. Find ich jetzt nicht super umständlich, sondern praktisch. Wenn der Kandidat mir erzählt, wie er mit seinem Backupsystem besser klar kommt und sich das gut anhört, ist das für mich auch OK.Das waren ja nur Fragen, über die ich mit jemandem, der von selbst nicht viel erzählt, versuchen würde, in ein nettes Gespräch zu kommen. Dass es so rüberkam, als ob ich einfach nur "die richtigen" Antworten hören will, war wohl mein Fehler. Ich hätte es direkt anders formulieren und meine Intention hinter den Punkten erklären sollen. Die ist ja nur, herauszufinden, ob der jenige Spaß an der Sache hat und sich aus Eigeninitiative diesbezüglich was beibringt und deshalb lernt.
@ScottZhang: Wenn ich schnell merke, dass der Bewerber was drauf hat, würde ich natürlich nicht diese Noob-Fragen runterleihern. Das waren ja nur Gedanken, die mir da so kamen, keine fester Plan. Ich hatte mir halt vorgestellt, wie ich herausfinde, ob einer, der bei der algorithmischen Beispielprogrammieraufgabe gut ist, nicht vielleicht doch ein faules Ei ist.

-
Ich glaube, volkard will primär Java-Programmierer aussortieren

Und zwar die auf "Business"-Ebene, wo simple Zusammenhänge durch OOP zu Tode abstrahiert werden, mit Managern, Observern, Strategies, Adaptors ... und ich muss sagen, da hat er nicht so Unrecht.volkard schrieb:
Privat sollte er eh [kein Versionierungssystem] benutzen. Würde er es tun, müßte ich eher Ansgt bekommen, daß er auch umständlich proggert.
Gewagte Schlussfolgerung. Meinst du, dass Versionierungssysteme nur im Team Sinn machen? Gerade Git ist auch super-praktisch alleine, z.B. zum Nachvollziehen alter Versionen, Bug-Suchen mit Bisect, oder einfach für effizientes Backup.
-
Nexus schrieb:
volkard schrieb:
Privat sollte er eh [kein Versionierungssystem] benutzen. Würde er es tun, müßte ich eher Ansgt bekommen, daß er auch umständlich proggert.
Gewagte Schlussfolgerung. Meinst du, dass Versionierungssysteme nur im Team Sinn machen? Gerade Git ist auch super-praktisch alleine, z.B. zum Nachvollziehen alter Versionen, Bug-Suchen mit Bisect, oder einfach für effizientes Backup.
Und wenn man mehrere Rechner (Desktop, Laptop etc.) hat auf denen man proggt

-
volkard schrieb:
Dobi schrieb:
Klar kann man
Versionsverwaltungsägen lernen. Auch hier gehts mir mehr darum insgesamt rauszufinden, ob er sowas kann. Wenn er sowas nicht kennt, ist das ein kleiner Hinweis darauf, dass er sicht nicht so sehr damit beschäftigt, in seinem "Handwerk" besser zu werden.Oder daß er noch nicht beruflich damit zu tun hatte. Privat sollte er eh
keinskeine Säge benutzen. Würde er es tun, müßte ich eher Ansgt bekommen, daß er auch umständlichproggerthämmert. Wobei man dann ja nachfragen kann, warum erkeinskeine verwendet, und erfährt, daß seinBackupsystemBleistift viel praktischer ist.
-
Bashar schrieb:
ScottZhang schrieb:
Ist das wirklich nötig im Programmierumfeld? Muss man im Gespräch herausfinden ob er grundlegende Sprachfeatures und Idiome kennt?
Wann willst du es sonst herausfinden? Hoffentlich noch in der Probezeit?
Ich weiss nicht, der Typ wird ja sicher noch ein paar Qualifizierungen vorweisen können. Und ja, wie Produktiv der ist wird man sicher erst in der Probezeit rausfinden.
Ansonsten denke ich halt nich das ein Bewerbungsgespräch eine Abschlussprüfung sein sollte (ich gehe auch davon aus das die sowas wissen und wenn nicht, das sie wissen wo sie nachschlagen müssen). Vielmehr will ich wissen ob ich mit dem Typen zusammen arbeiten kann. Also ihn direkt bei der Problemlösung zu beobachten durch eine kleine Aufgabe halte ich für sinnvoller.
-
volkard schrieb:
- Schreib eine Funktion, die einen C-String umdreht.
Hat bisher hier noch keiner richtig beantwortet.
-
TyRoXx schrieb:
std::reverse(s, s + std::strlen(s));
-
Wiederholung macht es auch nicht richtig.
Ein (C-)(std::)String ist nicht zwangsweise ASCII.
-
Und was hat std::reverse mit Ascii zu tun?
-
Eben Nichts, es damit funktioniert nur zufällig und darum meinen hier viele, dass man so Strings umdreht, aber mit fast allen anderen Encodings wie UTF-8 usw. geht das so nicht.
Um die Frage halbwegs richtig beantworten zu können, hätte man mindestens nach dem Encoding fragen müssen.
-
hier string reverse in C:
#include <iostream> #include <cstring> void my_swap(char *a, char *b) { char tmp = *a; *a = *b; *b = tmp; } void reverse(char *str) { if(str == NULL) { return; } unsigned long j = strlen(str) - 1; for(unsigned long i = 0; i < strlen(str) / 2; i++) { my_swap(&str[i], &str[j]); j--; } } int main() { // your code goes here char str[] = "Hello world"; reverse(str); std::cout << str << std::endl; return 0; }
-
Um die Frage halbwegs richtig beantworten zu können, hätte man mindestens nach dem Encoding fragen müssen.
Wieso?
void reverse_mbstr( char* str ) { auto const len = std::strlen(str) + 1; auto wstr = std::make_unique<wchar_t[]>(len); std::mbstowcs( wstr.get(), str, len ); std::reverse( wstr.get(), wstr.get() + len - 1 ); std::wcstombs( str, wstr.get(), len ); }(ungetestet)
~Edit²: Formatierung korrigiert...
Edit³: Längenangaben korrigiert...~
-
DieEiOfSeTeiger schrieb:
Eben Nichts, es damit funktioniert nur zufällig und darum meinen hier viele, dass man so Strings umdreht, aber mit fast allen anderen Encodings wie UTF-8 usw. geht das so nicht.
Um die Frage halbwegs richtig beantworten zu können, hätte man mindestens nach dem Encoding fragen müssen.
std::reverse funktioniert also zufällig. Komische Standardbib, nicht wahr

-
Wie definiert man das Umdrehen eines Unicode-Strings? Es gibt ja z.B. für Umlaute eine kanonische Codierung als Kombination aus ¨ + a. Soll man das beim Umdrehen berücksichtigen? Was ist mit Steuerzeichen, die z.B. die Schreibrichtung umkehren?
-
Wie definiert man das Umdrehen eines Unicode-Strings?
Umkehren aller Code-Points? Ich denke, Spezialfälle wie die von dir genannten sollte man in einem Interview nicht berücksichtigen.
-
std::reverse(s, s+strlen(s))reicht doch völlig, Spezialfälle wie Codepoints > 255 sollte man in einem Interview nicht berücksichtigen.