Eine häufig gestellte Frage in Tech Interview ist das Entwerfen eines bestimmten Systems, normalerweise eines vorhandenen Produkts des Unternehmens. Zum Beispiel "Google Text & Tabellen entwerfen".
Was ist die erwartete Antwort auf eine solche Frage? Ich meine, solche Systeme haben sicherlich ein komplexes Design, das über den Rahmen eines Interviews hinausgeht. Was erwarten die Interviewer in so kurzer Zeit?
Antworten:
Einblick, wie Ihr Gehirn dieses Problem sieht. Hier sind ein paar Ansatzpunkte, die ich sehen konnte, wie man versuchen könnte, dieses Gespräch zu führen:
Top-down - Wenn Sie von einer sehr hohen Ebene aus nach unten schauen, bauen Sie ein Design aus und konkretisieren Sie das Design, während verschiedene Komponenten fertiggestellt werden. Hier sind eine Handvoll Komponenten, die ich sehen konnte.
Bottom-up - Schauen Sie von Grund auf nach oben, hier sind einige Teile, die man zusammenbauen könnte, um sie zusammenzusetzen ...
Anforderungsklärung - Stellen Sie Fragen zu dem projizierten Umfang, der Größe, dem Budget und dem Team, die für diesen Entwurf verwendet werden. Sie könnten versuchen, eine Person dazu zu bringen, ein sehr vereinfachtes Textverarbeitungsprogramm zu erstellen, oder Sie könnten Hunderte Millionen Dollar ausgeben, um das ultimative Dokumentenverwaltungssystem zu erstellen, von dem Sie glauben, dass Sie Google Doc auf die Spitze getrieben haben. Außerdem können Sie hier die Frage stellen: "Was meinen Sie mit Google Doc? Wie viel von dieser Funktionalität möchten Sie duplizieren?". Fragen auch.
Der Schlüssel ist, wie gut Sie Ihre Gedanken und Herangehensweisen zur Lösung dieses Problems kommunizieren können, da Sie möglicherweise von einem Benutzer angesprochen werden und gefragt werden: "Psst, könnten Sie in 2 Wochen so etwas machen?" das könnte tatsächlich passieren. Daher ist es wichtiger , wie Sie die Antwort geben, als was die Antwort ist.
Meine persönliche Meinung wäre, dass vergangene Projekte hier keine gute Idee sind. Was man zu finden versucht, ist, welche Art von Kreativität und Kommunikationsfähigkeiten in einem neuen Bereich vorhanden sind, anstatt sich nur daran zu erinnern, wie etwas in der Vergangenheit getan wurde. Wahrscheinlich ähnelt etwas, das in der neuen Position passiert, etwas aus der Vergangenheit, aber es gibt gerade genug Unterschiede, die die alte Lösung nicht durchführbar machen. Dies ist der Grund, warum, obwohl das, was erstellt werden kann, einer vorhandenen Anwendung ähnlich ist, es verschiedene Anpassungen geben kann, die die Lösung vom ursprünglichen Beispiel deutlich unterscheiden.
Interviews sind eine Einbahnstraße. Manager und andere Entwickler beherrschen Interviews nur selten, daher bin ich mir nicht sicher, ob es sinnvoll ist, bei Vorstellungsgesprächen zu behaupten, dass sie Fachexperten sein sollten. Personalvermittler Ich konnte davon ausgehen, dass sie wissen, wie man ein Vorstellungsgespräch führt, aber es gibt viele schlechte Personalvermittler, die als Beispiele dafür herangezogen werden könnten, warum dies nicht immer eine gute Idee ist.
quelle
Gerade für Senior-Entwickler finde ich diese Fragen sehr gut. Sie zeigen, dass ein Entwickler in der Lage ist, von einer großen, komplizierten Beschreibung zu einer realistischen Implementierung überzugehen. Selbst mit einem völlig unbekannten System sollten Sie in der Lage sein, eine Reihe von interessanten Aktivitäten für den Interviewer durchzuführen:
Diese Frage ist nur eine übergeordnete Version von "Beschreiben Sie die Objekthierarchie, die Sie hierfür verwenden würden." "Beschreiben Sie die Schnittstelle, die Sie dafür entwerfen würden." "Entwerfen Sie einen Satz relationaler DB-Tabellen für diese Daten." Bei Entwicklern auf niedrigerer Ebene bewertet der Interviewer möglicherweise das langfristige Wachstumspotenzial der Person im Unternehmen oder sieht nur, was sie tut, wenn sie mit einem großen Problem konfrontiert ist, das möglicherweise überwältigend sein kann.
quelle
Es geht darum, Ihre Denkprozesse in Aktion zu sehen. Sie sind nicht an einer Lösung interessiert, aber wie würden Sie das Problem lösen, welche Fragen würden Sie stellen, welche Probleme würden Sie identifizieren usw.
Angesichts des Beispiels von Google Text & Tabellen stellen sich offensichtliche Probleme wie Speicher, Sicherheit, Skalierbarkeit, Verfügbarkeit, Design der Client-Oberfläche, Browserkompatibilität usw. dar. Wie würden Sie die Verantwortung zwischen Server und Client aufteilen? Wie würden Sie mit Backups umgehen? Was passiert, wenn ein Server ausfällt? Was würden Sie mit "aufgegebenen" Dokumenten tun (Sachen, auf die seit langer Zeit nicht mehr zugegriffen oder die geändert wurden)?
Auch hier geht es nicht darum , eines dieser Probleme zu lösen , sondern sie zu identifizieren , durchzusprechen, ein wenig über ihre Behebung nachzudenken usw.
quelle
Ich gehöre zu den Schuldigen, die solche Fragen in Interviews häufig stellen. (Um es festzuhalten, ich stelle auch ähnliche Fragen zu ihrem "Lieblingsprojekt".) Der Grund, den ich frage, ist, dass es etwas ist, was wir hier häufig machen. Wir beschäftigen Konstrukteure von allen Seiten einer Schnittstelle, jemanden aus dem System-Engineering, jemanden aus dem Test und jemanden mit Kenntnissen der Kunden-Anwendungsfälle für das Feature. Wir stehen um ein Whiteboard und sagen: "Okay, wie bauen wir dieses Ding?" Oft wissen Sie zu diesem Zeitpunkt nur sehr wenig über die neue Funktion und sind nur aufgrund Ihrer Fachkenntnisse in Ihrem Teil des Systems da, aber Sie werden dennoch erwartet, dass Sie einen produktiven Beitrag leisten. Es ist nicht nur eine hypothetische akademische Übung.
Was die Art der Antworten angeht, die ich erwarte, entwerfen Sie beispielsweise ein System zum Herunterladen neuer Firmware von einem Server über 20 eingebettete Leitungskarten in einer Zentrale, um 5000 Set-Top-Boxen im Feld gleichzeitig zu aktualisieren. Angenommen, auf der Verbindung zwischen dem Server und den Leitungskarten ist nur sehr wenig freie Kapazität vorhanden.
Falsche Antwort:
Gute Antwort:
Das sind fast wörtliche Transkriptionen zweier verschiedener Kandidaten. Die meisten Kandidaten sind irgendwo dazwischen, kommen aber normalerweise am Ende mit ein wenig Aufforderung dorthin, was vollkommen in Ordnung ist. Wir suchen hier nicht nach dem nächsten Einstein, nur ein Hinweis darauf, dass Sie tatsächlich intelligent über die Art von Problemen nachdenken können, an denen wir jeden Tag arbeiten.
quelle
Ich stelle auch solche Fragen und stimme den meisten anderen Antworten zu. Vielleicht würde es den Befragten helfen zu verstehen, WARUM diese Art von Frage wichtig ist? Angenommen, wir müssen eine wichtige Geschäftsentscheidung treffen, und um dies zu tun, müssen wir ein neues System aufbauen. Wenn jemand auf Sie zukommt und fragt, was zum Aufbau eines X-fähigen Systems erforderlich ist, können Sie ihm eine aufschlussreiche Antwort geben, die die wichtigsten Herausforderungen und erforderlichen Ressourcen vorhersagt?
Ein Junior-Programmierer hat keine Ahnung, wo er anfangen soll. Sie sind nicht bereit, ohne eine detaillierte Spezifikation zu sprechen. Ein erfahrener Programmierer wird sofort erkennen, dass das Problem viele Facetten hat, und wird versuchen, sich einer Herausforderung zu stellen. Sie müssen nicht jeden Aspekt entwerfen, sondern nur eine architektonische Herausforderung identifizieren und dann herausfinden, wie Sie sie angehen können.
Betrachten Sie das Problem von Google Text & Tabellen:
Eine interessante Sache ist die Scherskala der Anfragen, die kommen werden. Sie können nicht einfach einen einzelnen Server abrufen und Ihren Code darauf bereitstellen - dies ist ein größeres Unternehmen. Ein erfolgreicher Befragter könnte sich darauf einlassen und die Arten von Ressourcen beschreiben, die benötigt werden, sowie einige der technischen Herausforderungen bei der Implementierung in dieser Größenordnung mit einer Anwendung, die nicht nur den Status hat, sondern den Status für mehrere Benutzer gemeinsam hat.
Ein weiteres interessantes Merkmal von Google Text & Tabellen ist, dass mehrere Personen gleichzeitig bearbeiten können. Ein erfolgreicher Befragter kann Mechanismen diskutieren, um sicherzustellen, dass das resultierende Dokument kein Müll ist, und ein wirklich guter Kandidat wird erkennen, dass verschiedene Methoden zum Synchronisieren oder Zusammenführen von Bearbeitungen einen großen Einfluss auf die Leistung und UX haben. Diskutieren Sie vielleicht sogar Variationen: Ein freigegebener Dokumenteditor zum Schreiben von Code sollte wahrscheinlich eine andere Methode zum Lösen von Konflikten als das typische Google Doc verwenden, da sich die Ereignisse in einer anderen Reihenfolge oder mit einer leicht anderen Struktur unterschiedlich auswirken.
Es gibt keinen einzigen richtigen Weg, um eine App wie Google Text & Tabellen zu erstellen. Sie müssen nicht bei jedem Trade-Off angeben, was Sie tun würden, aber es ist wirklich großartig, einen Bereich mit einem interessanten Problem zu finden und den Trade klar zu erläutern -offs könnte sein.
-t.
quelle
Ich vermute, dass die Interviewer Folgendes hören möchten:
Dann ist der Ball im Gericht des Interviewers. Wenn sie mehr Details möchte, kann sie fragen. Nach was der Interviewer sucht, können Sie sich ein Problem oder ein Produkt ansehen und das Design extrahieren?
quelle
Wenn die Person nicht mit der Identifizierung der wichtigsten Use-Cases / Storys beginnt, ist dies für mich ausreichend, um zu wissen, dass sie nicht auf eine Position vorbereitet ist, die diese besondere Fähigkeit erfordert.
Anschließend sollten sie in der Lage sein, eine architektonische Lösung basierend auf den wichtigsten Anwendungsfällen / Geschichten zu entwickeln. Hoffentlich verwendeten sie einen systematischen Prozess, um andere Module zu identifizieren, als sie aus ihren zu ziehen ... Ich würde nicht viel mehr von einer Interview-Situation für die Lösung erwarten.
Ich könnte jedoch eines der Architekturmodule auswählen und nach einem detaillierteren Entwurf fragen, nur um zu sehen, ob sie über einige Designfähigkeiten verfügen. Es wäre auch schön zu sehen, dass sie die Fehlerfälle / Leistungsprobleme berücksichtigen. Aber ich vermute an dieser Stelle, dass wir auf eine Zeitmauer stoßen würden. Daher konnte ich sie wirklich nicht dafür bestrafen, dass sie diese Themen nicht berücksichtigt haben, weil nur so viel Zeit zur Verfügung steht, und ich halte es für vernünftig, davon auszugehen, dass aus einer zeitlich begrenzten Befragungssituation nicht jedes mögliche Szenario zu erwarten ist.
quelle
Ich hatte kürzlich ein Interview, in dem ich gebeten wurde, ein Aufzugssteuerungssystem zu entwerfen. Grundsätzlich möchten sie Ihre Herangehensweise an die Aufgabe sehen. Wenn Ihnen diese Frage gestellt wird, haben sie wahrscheinlich einen sehr hochrangigen Job für Sie im Sinn. Glückwunsch.
quelle
Entscheidend ist, wie Sie Probleme im Vergleich zu den Vorzügen der von Ihnen angegebenen Lösung lösen und ob Sie in der Lage sind, Probleme im großen Stil zu lösen.
Ich denke, es ist wichtig , Fragen zu den Anforderungen zu stellen. Machen Sie nicht nur Annahmen, die es Ihrer Haustierlösung ermöglichen, zu funktionieren. Zum Beispiel kennen Sie vielleicht eine wirklich raffinierte Methode zum Drucken von Dokumenten, mit der Sie versucht sein können, direkt in die Beschreibung einzusteigen. Google Text & Tabellen wird jedoch nicht direkt gedruckt. Es wird eine PDF-Datei erstellt, die der Client anschließend druckt. Wenn Sie damit anfangen, haben Sie die Hälfte Ihrer Zeit damit verbracht, ein Problem zu lösen, das nicht Teil des Problems ist, und Sie haben gezeigt, dass Sie mehr an der Verwendung Ihrer heißen Technologie interessiert sind als an der Lösung des Kundenproblems.
quelle
Um diese Art von Interviewfragen beantworten zu können, müssen Sie ein allgemeines Interesse daran haben, zu verstehen, wie Dinge funktionieren. Dies gilt nicht nur für Projekte, an denen Sie interessiert sind, sondern auch für Projekte, bei denen Sie der Meinung sind, dass sie zu weit von Ihren Erfahrungen entfernt sind.
Dies bedeutet, Blogs, Artikel, http://www.infoq.com , Hacker News usw. zu lesen . Sogar die Hardware-Bluffs von Coding Horror.
Trotz der Tatsache, dass Sie das meiste von dem, was Sie gelesen haben, vergessen werden (weil diese Informationen ohnehin nicht mit Ihrer persönlichen Arbeit verbunden sind), kann es einige Kleinigkeiten geben, die "Samen der Vorstellungskraft" sind, und einen winzigen Bruchteil dieser Samen keimen, wenn Sie in ferner, ferner Zukunft auf ein ähnliches Problem stoßen.
Der Interviewer interessiert sich vielleicht für Ihre Lesegewohnheit (als Teil Ihres Hobbys) und stellt fest, ob Sie die Gewohnheit haben, regelmäßig Samen von Ideen von zufälligen Orten zu sammeln.
quelle
Der Sinn einer solchen Frage besteht darin, einen Einblick in Ihren Verstand zu gewinnen. Eine häufig gestellte Frage ist, Programmierer zu bitten, ein System zu entwerfen, das PacMan simulieren kann.
Und ja, ich suche zuerst nach Anwendungsfällen, es zeigt mir, dass die Person denkt. Beim Multithreading werden dann zuerst die Datenstrukturen berücksichtigt (diejenigen, die für das Problem verwendet werden könnten, dann geeignetere oder spezifischere mit den Gründen der Entscheidung).
Dies ist ein Muss für leitende Entwicklungspositionen. Es ist sowohl albern als auch sinnlos, Fragen zu Sortierimplementierungen auf dieser Ebene der Entwicklererfahrung zu beantworten. Das Systemdesign ist das, was ich auf dieser Ebene erwarten würde.
quelle