Ich habe viele Interviews besucht und war auf beiden Seiten der Konfrontation. Jetzt ist es Zeit, die interessantesten Rätsel mit anderen zu teilen. Denn Interviews sollten interessant und einprägsam sein und nicht elend und demotivierend.
Einige Kommentare
- Alle Aufgaben zur Logik und / oder Programmierung. Keine psychologischen Obertöne und runden Luken.
- Die Entscheidung wird nicht absichtlich getroffen. Ich versichere Ihnen jedoch, dass fast alle Aufgaben eine einfache und schöne Lösung haben. Genieße es!
Die Aufgaben
Hier sind sie.
Zeichenfolgen in SQL spiegeln
Angenommen, wir haben eine Tabelle mit einer Zeichenfolgenspalte und möchten ähnliche Zeilen basierend auf einer bestimmten Bedingung finden (z. B. kann es sich um eine Volltextsuche oder eine interne Funktion handeln, die an der Eingabe zwei Werte empfängt und true / false zurückgibt). Wir schreiben also Self-Join und erhalten natürlich Duplikate zwischen den Werten. Das heißt, wir erhalten als Ergebnis Spiegelpaare und die Gesamtwerte sind genau doppelt so hoch wie wir möchten. Frage: Wie kann man ein Element aus jedem Spiegelpaar aus dem Ergebnis entfernen und dort nur eindeutige Werte für Permutationen belassen?
Tipps & Tricks- Es gibt eine nicht offensichtliche Eigenschaft von Zeichenfolgen und grundlegenden SQL-Anweisungen, die Sie verwenden können ...
- Oder Sie können es googeln. Wenn die Anfrage korrekt ist, befindet sich die Antwort im ersten Link zum Stapelüberlauf.
Löcher mit SQL finden
Dies ist eine hervorragende Aufgabe, um das Wissen über alle grundlegenden Funktionen von SQL zu bewerten.
Angenommen, wir haben eine Tabelle mit einer int-Spalte. Wir wissen nichts über die darin enthaltenen Minimal- / Maximalwerte. Außerdem wissen wir nichts über die Anzahl der Zeilen in der Tabelle und im Allgemeinen variiert sie und wir sollten uns nicht darauf verlassen. Wir wissen auch, dass es unter den Werten Auslassungen gibt, deren Länge eins nicht überschreitet. Beispiel für eine Tabelle mit 5 (fünf) Elementen: 1, 2, 4, 6, 7. Frage: Schreiben Sie eine einzelne SQL-Abfrage nur mit den Basisoperatoren (dh ohne Prozedur und Variablen), die den Wert aller "Löcher" zurückgibt. Für das obige Beispiel sollte das Ergebnis 3, 5 sein. Beachten Sie, dass am Sprungort keine NULL-Werte vorhanden sind. Die Werte 3 und 5 sind physisch nicht in der Tabelle enthalten.
Tipp- Wenn der Umzug fehlschlägt, schreiben Sie mehrere Abfragen oder verwenden Sie pl / sql. Wenn Ihre Idee richtig ist, können Sie logisch zu einer Abfrage wechseln.
Hinweis- Die schönste Anfrage ist, wenn die Anfrage für die obigen Eingabebedingungen nicht "3, 5", sondern "3, 5, 8" zurückgibt.
Schleifen in einer einfach verknüpften Liste
Dies ist ein Problem in Bezug auf Algorithmen und Komplexität.
Angenommen, wir haben eine endliche, einfach verbundene Liste. Wir wissen, dass es wahrscheinlich einen Zyklus hat. Das heißt, eines der folgenden Elemente bezieht sich auf eines der vorherigen. Es ist notwendig, die Methode zum Auffinden von Zyklen in einer solchen Struktur in einer endlichen Zeit zu beschreiben. Außerdem müssen Sie eine Schätzung der Zeit und des Speichers bereitstellen, die zum Ausführen des vorgeschlagenen Algorithmus erforderlich sind.
Fortsetzung
Das Ergebnis muss so geändert werden, dass die Speicherkomplexität O (1) beträgt. Das heißt, dass der Speicherverbrauch nicht von der Größe der Liste abhängt.
Hinweis- Denken Sie daran, dass genau wie Masse in Energie umgewandelt werden kann, auch Zeitkomplexität in Speicherverbrauch umgewandelt werden kann und umgekehrt.
Schlüsselwertspeicherung
Eine weitere Aufgabe, um Code mitzuschreiben und beim Schreiben zu diskutieren.
Schreiben Sie Schlüsselwertspeicher in einer beliebigen Sprache. Fügen Sie die Funktion set_all
, die einen Wert annimmt und ihn für alle vorhandenen Schlüssel festlegt. Schätzen Sie die Zeit- und Speicherkosten für die resultierende Implementierung.
set_all
nun set_all
für O (1) arbeiten.
Und können Sie sicherstellen, dass die Komplexität der Methoden get
und set
ganz am Anfang bleibt und set_all
weiterhin für O (1) funktioniert? Wenn ja, dann implementieren. Wenn nicht, beweisen Sie, warum dies nicht möglich ist.
Menschen retten
Und bei dieser Aufgabe müssen Sie mit dem Befragten nachdenken und argumentieren. Und die Implementierung ist eine Frage der Technologie und nicht besonders interessant.
Stellen Sie sich vor, wir haben eine Gruppe von Menschen. Die Menge spielt keine Rolle. Die gesamte Gruppe ist im Hinterkopf aneinandergereiht und auf jeden Kopf wird ein schwarzer oder weißer Hut gesetzt. Niemand kennt die Farbe des Hutes, den er trägt. Jeder sieht jedoch, was vor ihnen passiert und hört, was hinter ihnen passiert. Danach kommt ein Fremder mit einer Pistole zum Ende des letzten Teils der Gruppe. Er fragt: "Welche Farbe hat dein Hut?" Die Antwort kann nur schwarz oder weiß sein. Es können keine anderen Nachrichten vorhanden sein. Wenn eine Person geraten hat, wird sie ihn gehen lassen. Andernfalls tritt ein Schuss auf und der Vorgang wird in jedem Fall mit dem „neuen“ letzten Mitglied in der Warteschlange wiederholt.
Eine wichtige Klarstellung: Bevor diese unmenschliche Erfahrung beginnt, können sich alle Mitglieder der Gruppe treffen und über ihre Überlebensstrategie nachdenken.
Frage: Wie kann die Anzahl der Überlebenden maximiert werden? Gibt es eine genaue Schätzung der Anzahl der Überlebenden in Abhängigkeit von der Größe der Gruppe?
Tipp- Überlegen Sie, wie jedes Mitglied alle verfügbaren Informationen sammeln und in einem Bit übertragen kann?
Hinweis- Vielleicht kann gerade / ungerade oder der XOR-Operator Ihnen helfen?
Das ist alles. Jetzt sind Sie an der Reihe, eines der Probleme zu lösen und über Ihre interessante Auswahl an s / für Interviews zu sprechen.