it-swarm-eu.dev

Wie entwerfe ich ein beliebiges System in einem Interview?

Eine häufig gestellte Frage im 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?

36
Shamim Hafiz

Einblick, wie Ihr Gehirn dieses Problem betrachtet. Hier sind einige Ausgangspunkte, die ich sehen könnte, wie man versuchen könnte, dieses Gespräch zu führen:

  • Von oben nach unten - Wenn Sie von einer sehr hohen Ebene aus nach unten schauen, bauen Sie ein Design aus und konkretisieren Sie das Design, wenn verschiedene Komponenten fertig sind. Hier sind eine Handvoll Komponenten, die ich sehen konnte ...

  • Bottom-up - Von Grund auf betrachtet, hier sind einige Teile, die man bauen könnte, um sie zusammenzusetzen ...

  • Klärung der Anforderungen - Fragen zu dem projizierten Maßstab, der Größe, dem Budget und dem Team, die für dieses Design verwendet werden. Sie könnten versuchen, eine Person ein sehr vereinfachtes Textverarbeitungsprogramm codieren zu lassen, oder Sie könnten planen, Hunderte Millionen Dollar auszugeben, um das ultimative Dokumentenverwaltungssystem zu entwickeln, von dem Sie glauben, dass es das ist, was Sie mit Google Doc auf die Spitze getrieben haben. Hier können Sie auch fragen: "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 Ihre Herangehensweise an die Lösung dieser Art von Problem kommunizieren können, da Sie möglicherweise von einem Benutzer angesprochen werden und fragen: "Psst, könnten Sie in 2 Wochen so etwas machen?" das könnte tatsächlich passieren. Daher ist wie Sie die Antwort geben wichtiger 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. Es besteht die Möglichkeit, dass etwas, das in der neuen Position passiert, etwas aus der Vergangenheit ähnelt, es jedoch gerade genug Unterschiede gibt, dass die alte Lösung nicht durchführbar ist. Aus diesem Grund kann das, was erstellt werden kann, einer vorhandenen Anwendung ähneln, es kann jedoch verschiedene Anpassungen geben, die die Lösung erheblich vom ursprünglichen Beispiel unterscheiden.

Interviews sind eine Einbahnstraße. Manager und andere Entwickler beherrschen Interviews selten, daher bin ich mir nicht sicher, ob es sinnvoll ist, zu sagen, dass sie bei Vorstellungsgesprächen Fachexperten sein sollten. Personalvermittler Ich konnte erwarten, dass ich weiß, wie man ein Interview führt, aber es gibt viele arme Personalvermittler, die als Beispiele dafür dienen könnten, warum dies nicht immer eine gute Idee ist.

22
JB King

Insbesondere für leitende Entwickler denke ich, dass diese Fragen sehr gut sein können. 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 interessanter Aktivitäten für den Interviewer durchzuführen:

  • Sammeln Sie Anforderungen, um die Frage zu beantworten (z. B. Umfang).
  • Teilen Sie das Problem in überschaubare Teile auf. Identifizieren Sie möglicherweise Schnittstellen oder Objekte, die möglicherweise benötigt werden, oder teilen Sie die Logik in Front-End, Back-End, DB usw. auf.
  • Zeigen Sie Vertrautheit mit der Struktur und den Konzepten hinter diesem Systemtyp, z. B. Web-Apps im Fall von Google Text & Tabellen
  • Zeigen Sie, worauf Sie sich bei einem Entwurfsproblem konzentrieren (Objektentwurf? SQL-Tabellen? Entwurfsmuster?)
  • Zeigen Sie dem Chef eine Vorschau darauf, wie es sein wird, mit Ihnen ein neues System zu entwickeln, bei dem der Chef mit einer Spezifikation hereinkommt und sagt: "Was würde es brauchen, um dies zu bauen?"

Diese Frage ist nur eine übergeordnete Version von "Beschreiben Sie die Objekthierarchie, die Sie dafür verwenden würden." "Beschreiben Sie die Schnittstelle, die Sie dafür entwerfen würden ..." "Entwerfen Sie eine Reihe von relationalen DB-Tabellen für diese Daten ..." usw., die an Junior- bis Mid-Level-Entwickler weitergegeben werden. 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 wird, das möglicherweise überwältigend sein kann.

16
Ethel Evans

Es geht darum, Ihre Denkprozesse in Aktion zu sehen. Sie sind nicht an einer Lösung interessiert, sondern daran, wie Sie das Problem lösen würden, welche Fragen Sie stellen würden, welche Probleme Sie identifizieren würden usw.

Am Beispiel von Google Text & Tabellen sind die offensichtlichen Probleme, die in den Sinn kommen, Dinge wie Speicher, Sicherheit, Skalierbarkeit, Verfügbarkeit, Design der Clientschnittstelle, Browserkompatibilität usw. 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 "verlassenen" Dokumenten tun (Sachen, auf die über einen längeren Zeitraum nicht zugegriffen oder die nicht geändert wurden)?

Auch hier geht es nicht darum, eines dieser Probleme zu lösen , sondern zu identifizieren -) sie, durch sie reden, ein bisschen darüber nachdenken, wie man sie anspricht, etc.

11
John Bode

Ich bin einer dieser Schuldigen, die diese Art von Fragen häufig in Interviews stellen. (Für die Aufzeichnung stelle ich auch ähnliche Fragen zu ihrem "Lieblingsprojekt".) Der Grund, den ich frage, ist, dass es etwas ist, was wir hier häufig tun. Wir erhalten Konstrukteure von allen Seiten einer Schnittstelle, jemanden aus der Systemtechnik, jemanden aus dem Test und jemanden mit Kenntnissen über Kundenanwendungsfälle für die Funktion. Wir stehen um ein Whiteboard und sagen: "Okay, wie sollen wir dieses Ding bauen?" Oft wissen Sie zu diesem Zeitpunkt nur sehr wenig über die neue Funktion und sind nur aufgrund Ihres Fachwissens in Ihrem Teil des Systems da, aber es wird dennoch erwartet, dass Sie einen produktiven Beitrag leisten. Es ist nicht nur eine hypothetische akademische Übung.

Was die von mir erwarteten Antworten angeht, nehmen wir zum Beispiel das Entwerfen eines Systems zum Herunterladen neuer Firmware von einem Server über 20 Embedded Line-Karten in einer Zentrale, um 5000 Set-Top-Boxen vor Ort gleichzeitig zu aktualisieren. Angenommen, auf der Verbindung zwischen dem Server und den Leitungskarten ist nur sehr wenig freie Kapazität vorhanden.

Falsche Antwort:

Ähm, ich würde wahrscheinlich Ethernet oder so etwas verwenden.

Gute Antwort:

Von wie großem Bild sprechen wir? [Ungefähr 7 MB.] Nun, Sie möchten sicherstellen, dass der Dienst während des Downloads nicht beeinträchtigt wurde. Sie benötigen zusätzlichen Flash oder RAM, um zwei Bilder gleichzeitig zu speichern. Sie möchten das Bild wahrscheinlich auf Ihren Linienkarten zwischenspeichern, um zu vermeiden, dass dasselbe Bild immer wieder von der heruntergeladen wird Da Ihre Line Cards eingebettet sind, haben Ihre Line Cards wahrscheinlich selbst eine begrenzte CPU. Daher müssen Sie möglicherweise die Downloads serialisieren, um genügend Kapazität für den Service zu erhalten. Sie möchten auf irgendeine Weise überprüfen, ob das Image gut ist, und auf die alte Version zurückgreifen Wenn es nicht funktioniert hat, müssten Sie einige Male versuchen, Fehler zu melden und einem Menschen zu melden, wenn das Upgrade fehlschlägt. Wenn Sie Set-Top-Boxen verschiedener Marken haben, benötigen Sie eine Möglichkeit, um festzustellen, welche Bild müssen Sie es senden.

Das sind fast Wort-für-Wort-Transkriptionen von zwei verschiedenen Kandidaten. Die meisten Kandidaten sind irgendwo dazwischen, kommen aber normalerweise am Ende mit einer kleinen Aufforderung dorthin, was vollkommen in Ordnung ist. Wir suchen hier nicht nach dem nächsten Einstein, sondern nur nach einem Hinweis darauf, dass Sie tatsächlich intelligent über die Art von Problemen nachdenken können, an denen wir jeden Tag arbeiten.

9
Karl Bielefeldt

Ich stelle auch diese Art von Frage 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 dazu müssen wir ein neues System aufbauen. Wenn jemand auf Sie zukommt und fragt, was zum Aufbau eines Systems mit X 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 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 Unterfangen. Ein erfolgreicher Befragter könnte sich darauf konzentrieren 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 teilt.

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 Änderungen einen großen Einfluss auf die Leistung und UX haben. Vielleicht diskutieren Sie sogar Variationen: Ein gemeinsam genutzter Dokumenteditor zum Schreiben von Code sollte wahrscheinlich eine andere Methode zur Lösung von Konflikten verwenden als das typische Google Doc, da die Ereignisse in einer anderen Reihenfolge oder mit einer leicht unterschiedlichen Struktur unterschiedliche Konsequenzen haben.

Es gibt keinen einzigen richtigen Weg, um eine App wie Google Text & Tabellen zu erstellen. Sie müssen nicht bei jedem Kompromiss angeben, was Sie tun würden, aber es ist wirklich großartig, einen Bereich zu finden, der ein interessantes Problem aufweist, und den Handel klar zu erklären -offs könnte sein.

-t.

5
Tristan Reid

Ich vermute, dass die Interviewer Folgendes hören wollen:

Google Doc ist eine Weboberfläche für ein Textverarbeitungsprogramm. Benutzerdokumente werden eingegeben und gespeichert und können vom Benutzer auf demselben oder einem anderen Computer abgerufen werden.

Was möchten Sie weiter diskutieren?

Dann ist der Ball im Spielfeld des Interviewers. Wenn sie mehr Details will, kann sie fragen. Was der Interviewer sucht, ist, können Sie sich ein Problem oder ein Produkt ansehen und das Design extrahieren?

2

Wenn die Person nicht mit der Identifizierung der wichtigsten Anwendungsfälle/Geschichten beginnt, reicht dies für mich aus, 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 Architekturlösung zu entwickeln, die auf den wichtigsten Anwendungsfällen/Geschichten basiert. Hoffentlich haben sie einen systematischen Prozess verwendet, 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 Design fragen, 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 gegen eine Zeitmauer stoßen würden. Daher konnte ich sie wirklich nicht dafür bestrafen, dass sie diese Probleme nicht berücksichtigt haben, weil sie nur so viel Zeit haben und ich denke, dass es vernünftig ist anzunehmen, dass die Berücksichtigung jedes möglichen Szenarios nicht aus einer zeitlich begrenzten Interview-Situation heraus zu erwarten ist.

2
Dunk

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.

1
Michael Brown

Der Schlüssel 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, eine wichtige Sache ist Fragen stellen über die Anforderungen. Machen Sie nicht nur Annahmen, die es Ihrer Haustierlösung ermöglichen, zu funktionieren. Zum Beispiel kennen Sie möglicherweise eine wirklich raffinierte Methode zum Drucken von Dokumenten, die Sie möglicherweise direkt beschreiben möchten. Google Text & Tabellen wird jedoch nicht direkt gedruckt. Es erzeugt ein PDF, das der Client dann druckt. Wenn Sie damit beginnen, haben Sie die Hälfte Ihrer Zeit damit verbracht, ein Problem zu lösen, das nicht Teil des Problems ist, und haben gezeigt, dass Sie es sind Sie sind mehr daran interessiert, Ihre heiße Technologie zu nutzen, als das Problem des Kunden zu lösen.

1
JohnMcG

Um diese Art von Interviewfragen zu beantworten, müssen Sie ein allgemeines Interesse daran haben, zu verstehen, wie die Dinge funktionieren, nicht nur an Projekten, an denen Sie interessiert sind, sondern auch an Projekten, die Ihrer Meinung nach zu weit von Ihren Erfahrungen entfernt sind.

Dies bedeutet das Lesen von Blogs, Artikeln, http://www.infoq.com , Hacker News usw. 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 Arbeit persönlich verbunden sind), kann es einige Leckerbissen geben, die die "Samen der Fantasie" sind, und einen winzigen Bruchteil dieser Samen wird 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 prüft, ob Sie regelmäßig Gewohnheiten von zufälligen Orten sammeln.

0
rwong

Der Grund für diese Art von Frage ist, einen Einblick in Ihren Geist zu gewinnen. Eine häufig verwendete 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. Berücksichtigen Sie dann beim Multithreading zuerst die Datenstrukturen (diejenigen, die für das Problem verwendet werden könnten, dann geeignetere oder spezifischere mit dem Warum der Entscheidung).

Dies ist ein Muss für leitende Entwicklungspositionen. Es ist sowohl albern als auch sinnlos, auf dieser Ebene der Entwicklererfahrung zu sitzen und Fragen zu Sortierimplementierungen zu beantworten. Systemdesign ist das, was ich auf dieser Ebene erwarten würde.

0
Wile E K