Ich denke, es gibt diese einfachen Fragen, Fizzbuzz, Vertauschen einer Zeichenfolge usw., und dann gibt es bestimmte Fragen, während es schwierig ist, mit dem zusätzlichen Druck des Interviews und der kurzen Zeit die beabsichtigte optimale Lösung zu finden, wenn Sie sie noch nicht gesehen haben Einschränkungen. Das Schlimmste ist, dass Personalvermittler ohne technische Kenntnisse manchmal einige dieser Fragen stellen und nach einer sehr spezifischen Antwort suchen. Wenn Sie nicht die optimale Antwort geben, denken sie, dass Sie ein absoluter Idiot sind. Auch wenn Ihre Antwort funktioniert, löst sie das Problem, und obwohl sie möglicherweise nicht optimal ist, ist sie nicht zu ineffizient.
Einige Beispiele:
Wie würden Sie ein Kartenspiel mischen? Sie suchen nach der Fisher-Yates-Methode http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle Andere Antworten sind "falsch". Dies ist nichts, was Sie wahrscheinlich wissen werden, es sei denn, Sie wollten vorher Karten mischen und haben es genau nachgeschlagen. Vielleicht stolpern Sie im Verlauf der Beantwortung darüber, aber nach meinen Erkenntnissen wird von Ihnen erwartet, dass Sie diese Erkältung kennen, und es ist zweifelhaft, dass Sie viel Zeit haben, um die Lösung zu finden. Eine andere weniger effiziente (aber vielleicht offensichtlichere) Möglichkeit besteht darin, ein neues Array mit einem Zeiger auf das ursprüngliche Array und einer Zufallszahl zu erstellen und das Array dann nach der Zufallszahl zu sortieren. Verwenden Sie dann das sortierte Array, um ein neues Array von Karten zu erstellen. Auf jeden Fall bekam ich 0 Punkte dafür, dass ich das einem Personalvermittler vorstellte.
Ein weiteres Beispiel ist die Frage, wie Sie eine doppelte Zahl in einer Liste von n Zahlen von 1 bis n-1 erkennen können. Die naheliegende Antwort (die in zeitlicher Hinsicht relativ effizient ist) ist die Verwendung einer Hash-Tabelle, um jedes Element einzufügen. Wenn Sie ein bereits eingefügtes Element finden, haben Sie das Duplikat gefunden. Die optimale Antwort liegt darin, dass die Zahlen zwischen 1 und n liegen, wenn es keine Duplikate gibt. Sie können die erwartete Summe als n (n + 1) / n erhalten. Wenn Sie dann das Array zusammenfassen, erhalten Sie die tatsächliche Summe, die nd kleiner als die erwartete Summe ist. Also im Grunde genommen n - (Erwartete Summe - Tatsächliche Summe) = doppelte Zahl ... Es ist ein ziemlich spezieller Fall ... Ich habe vor einiger Zeit in einem Online-Post über Interviewprobleme etwas über ein verwandtes Problem mit dem gleichen Trick gesehen Mir ging es gut ....
In einem anderen Fall kehren Sie alle Wörter in einer Zeichenfolge um, ohne zusätzliches Leerzeichen zu verwenden. Ich musste darüber nachdenken und der Personalvermittler war in den 5 Minuten, die ich dachte, ziemlich ungeduldig (das Aufteilen und Wiederzusammenfügen der Zeichenfolge in umgekehrter Reihenfolge oder das wörtliche Wechseln in ein neues Array ist sehr einfach). Ich fand den Rand des letzten Wortes, fand das Ende des ersten Wortes und verschob ständig die gesamte Liste um 1 nach unten und fügte dann den entsprechenden Buchstaben ein. Dann wiederholen, bis Sie das Ende der Liste erreicht haben. Diese Methode funktionierte und der Interviewer stimmte zu (er war ein bisschen technisch), aber sie ist ziemlich ineffizient. Als ich zu Hause ankam, suchte ich nach der optimalen Antwort. Es ist einfach, die Liste umzukehren und dann jedes einzelne Wort umzukehren. Einige Leute könnten sich das einfallen lassen,
Jetzt ist es wahr, wenn Sie einige dieser Probleme gesehen haben, können Sie sie einfacher lösen. Weil es einige ähnliche Fragen mit einigen der gleichen Tricks gibt. Ich weiß, dass insbesondere die n (n-1) / 2-Formel und die Nummernliste verschiedene Variationen aufweisen. Aber ich weiß immer noch nicht, was diese Fragen testen. Ein FizzBuzz ist etwas, das jeder können sollte (obwohl ich Variationen gesehen habe, die nicht so einfach sind. In diesem Fall frage ich mich, ob dies für eine Interview-Situation realistisch ist, ohne den Code eingeben / debuggen zu können). Einige dieser Fragen sind offensichtlich, sobald Sie sie sehen, aber wenn Sie sie nicht gesehen haben, sind sie nicht offensichtlich. Immerhin hat jemand erwähnt, dass es Jahre gedauert hat, bis die erste korrekte Implementierung der binären Suche angezeigt wurde ... Im Moment ist die binäre Suche so offensichtlich, dass jeder darüber lesen kann.
Trotzdem denke ich, das Schlimmste ist, wenn nicht-technische Leute die Fragen stellen, weil sie nicht zu schätzen wissen, dass Ihre Lösung korrekt, aber nicht optimal ist. Sie wissen nur, dass Ihre Lösung nicht die vorgestellte ist und daher ist alles falsch, Sie erhalten keine Anerkennung für den Versuch. Auch nicht optimale Lösungen zeigen oft Kenntnisse über Programmierkonstrukte. Es ist mir egal, wie gut jemand ein Kartenspiel mischen kann, es sei denn, ich programmiere Pokerspiele. Und selbst wenn, nachdem ich ihnen den effizienten Algorithmus gezeigt habe, bin ich sicher, dass jeder, der halbwegs anständig ist, ihm folgen kann.
Vorlagenfragen scheinen nur Kandidaten einen Vorteil zu verschaffen, die länger interviewt haben, da sie mit größerer Wahrscheinlichkeit mehr Vorlagenfragen gesehen haben. Sogar FizzBuzz, wenn Sie es zum ersten Mal sehen, können Sie ausflippen, aber wenn Sie es immer wieder sehen, gewöhnen Sie sich mehr daran. Das Beste, was Sie tun können, ist, eine Codierungsherausforderung zu erstellen, die eine benutzerdefinierte Geschäftslogik erfordert. Erstellen Sie beispielsweise einen Datensatz (ein Array von Objekten / Datensätzen) und anschließend einige Geschäftsregeln, die auf jedes Objekt angewendet werden sollen, und geben Sie eine Antwort zurück (z. B. eine Bewertung usw., aber sehr benutzerdefinierte Regeln). Wahrscheinlich haben sie schon unzählige Male durch Datensätze geschleift und Logik angewendet. Ihre Regeln sind jedoch eindeutig, sodass sie zumindest die von Ihnen erstellten Regeln verstehen und erfolgreich implementieren müssen.
Nehmen wir an, das prognostizierte Gehalt und eine Liste der Kandidaten und ihrer drei beliebtesten Videospiele sowie möglicherweise ein Anfangsgehalt. Kandidaten, die Zelda mögen, erhalten eine Strafe von 300, Kandidaten, die die kleine Meerjungfrau mögen, einen Bonus von 200. Kandidaten, die Donkey Kong und Super Mario Brothers, aber nicht Dr. Mario mögen, erhalten einen Bonus von 300. Kandidaten, die Metroid oder Kid Icarus mögen, erhalten einen Bonus von 200 usw. Es scheint ein bisschen verrückt zu sein, aber es würde Ihnen die Fähigkeit zeigen, Geschäftsregeln in logische Programmkonstrukte zu übersetzen und ihr Verständnis der Booleschen Logik zu testen. Insgesamt nicht viel anders als Fizzbuzz mit Ausnahme von Modulen und Schleifen. Sie können ihnen natürlich die Liste geben und sie durchlaufen lassen und die Ergebnisse auch unter Verwendung bestimmter Ausgabekriterien auf dem Bildschirm ausdrucken.