C++ Interview Fragen
-
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.
-
Wozu überhaupt etwas machen? Ich denke, Spezialfälle wie Nicht-Palindrome sollte man in einem Interview nicht berücksichtigen.
-
DieEiOfSeTeiger schrieb:
Um die Frage halbwegs richtig beantworten zu können, hätte man mindestens nach dem Encoding fragen müssen.
Nö, die Aufgabe hätte "C-String" definieren müssen. Wenn nichts dabei steht, interpretiere ich C-String als Folge von
chars, die mit einer Null abgeschlossen wird. Und genau das dreht meine Lösung um.
Dass das Ergebnis vorwärts interpretiert noch gültiges UTF-8 sein soll, ist eine willkürliche Unterstellung. Es war schließlich nicht einmal gegeben, dass die Eingabe irgendein bestimmtes Encoding hat. In so eine realitätsferne Aufgabe sollte man IMO nichts hineininterpretieren. Wenn der Interviewer sich etwas Bestimmtes vorgestellt hatte, kann er das immernoch sagen.
-
Arcoth schrieb:
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...~Und was macht dein reverse_mbstr jetzt, wenn der string von Clients mit unterschiedlichem Encoding kommt? Am besten noch gleichzeitig von mehreren Threads.
TyRoXx schrieb:
DieEiOfSeTeiger schrieb:
Um die Frage halbwegs richtig beantworten zu können, hätte man mindestens nach dem Encoding fragen müssen.
Nö, die Aufgabe hätte "C-String" definieren müssen. Wenn nichts dabei steht, interpretiere ich C-String als Folge von
chars, die mit einer Null abgeschlossen wird. Und genau das dreht meine Lösung um.
Dass das Ergebnis vorwärts interpretiert noch gültiges UTF-8 sein soll, ist eine willkürliche Unterstellung. Es war schließlich nicht einmal gegeben, dass die Eingabe irgendein bestimmtes Encoding hat. In so eine realitätsferne Aufgabe sollte man IMO nichts hineininterpretieren. Wenn der Interviewer sich etwas Bestimmtes vorgestellt hatte, kann er das immernoch sagen.Tja, vielleicht wollte der Interviewer garnicht, dass du so eine triviale Aufgabe wie einen ASCII-String umkehren programmierst, sondern er wollte wissen, ob bei unklaren Aufgaben nochmal nachfragst, anstatt Kunden etwas abzuliefern, was sie vielleicht garnicht wollen.
-
Mal ehrlich: Wenn man den durchschnittlichen Interviewer fragt welches Encoding der "C-String" denn hat, wird er sowieso ASCII sagen und innerlich mit den Schultern zucken. Weil
chargleich ASCII undwchar_tgleich "Unicode".
-
Am besten noch gleichzeitig von mehreren Threads.
Dann ersetze durch mbsrtowcs und wcsrtombs. Klärt sich dann auch das andere Problem?