system-design-primer/README-de.md

17 KiB

English日本語简体中文繁體中文 | العَرَبِيَّة‎বাংলাPortuguês do BrasilDeutschελληνικάעבריתItaliano한국어فارسیPolskiрусский языкEspañolภาษาไทยTürkçetiếng ViệtFrançais | Add Translation

Helfe diesen Leitfaden zu übersetzen!

The System Design Primer


Motivation

Lerne wie man umfangreiche Systeme entwirft.

Bereite dich auf ein System Design Interview vor

Lerne wie man umfangreiche Systeme entwirft

Das Lernen wie man skalierbare Systeme entwrift wird dir helfen ein besserer Engineer zu werden.

System-Design ist ein breites Fach. Es gibt viele Ressourcen verteilt über das ganze Internet über System Design Prizipien.

Dieses Repo ist eine organisierte Sammlung der Ressourcen um dich beim Lernen wie man Systeme im großen Ausmaß baut zu unterstützen.

Lerne von der Open-Source Gemeinschaft

Dies ist ein ständig aktualisiertes, Open-Source Projekt.

Mitwirken ist willkommen!

Bereite dich für das System Design Interview vor

Als Ergänzung zu Coding Interviews, System Design ist eine erforderliche Komponente im technischen Interview Prozess in viele Tech-Firmen.

Übe häufige System Design Interview Fragen und vergleiche deine Ergebnisse mit Beispiellösungen: Diskussionen, Code, und Diagramme.

Zusätzliche Themen für die Vorbereitung auf ein Coding Interview:

TODO links überarbeiten

Anki Karteikarten


Die hier zur Verfügung gestellten Anki Karteikarten nutzen das Konzept der verteilten Wiederholung. Damit sollst du beim Behalten der Schlüsselkonzepte des System Designs unterstützt werden.

Super um unterwegs zu üben!

Coding Ressourcen: Interaktive Coding Herausforderungen

Auf der Suche nach Ressourcen um dich bei der Vorbereitung auf ein Coding Interview vorzubereiten?


Schau dir das Partner Repo Interaktive Coding Herausforderungen mit einem zusätzlichen Anki Deck an:

Mitwirken

Lerne von der Gemeinschaft.

Zögere nicht durch Pull Requests zu helfen:

  • Fehler beheben
  • Abschnitte verbessern
  • Abschnitte hinzufügen
  • Übersetzen

Inhalte die etwas verbessert werden können finden sich in Entwicklung.

Beachte die Richtlinien zum Mitwirken.

Inhaltsverzeichnis der System Design Themen

Zusammenfassung verschiedener System Design Themen inklusive der Vor- und Nachteile Alles ist ein Kompromiss.

Jedes Kapitel beinhaltet Links zu vertiefenden Ressourcen.


Studienführer

Empfohlene Themen basierend auf deinen Zeithorizont zum Interview (kurz, mittel, lang).

Imgur

F: Muss ich für Interviews alles von hier wissen?

A: Nein, du musst nicht alles hier wissen um dich auf ein Interview vorzubereiten.

Was man dich bei einem Interview frägt hängt von verschiedenen Variablen ab:

  • Wie viel Erfahrung hast du
  • Welchen technischen Hintergrund hast du
  • Auf welche Position bewirbst du dich
  • Bei welcher Firma ist das Interview
  • Glück

Von erfahreneren Kandidaten wird allgemein mehr Wissen im Bereich System Design erwartet. Von Architekten oder Teamleitern wird mehr Wissen als vom individuellen Teammitglied erwartet. Moderne Tech-Unternehmen haben häufig multiple Vorstellungsrunden.

Beginne breit und fokussiere dich auf einige wenige Bereiche. Es hilft wenn man ein wenig über verschiedene Schlüsselthemen des System Designs. Passe den folgenden Studienführer basierend auf deinem Zeithorizont, deiner Erfahrung, die Position auf die du dich bewirbst und die Firma bei der du dich bewirbst, an.

  • Kurzer Zeithorizont - Strebe ein breites Wissen über System Design Themen an. Übe mit dem Lösen einiger Interview Fragen.
  • Mittlerer Zeithorizont - Strebe ein breites Wissen und etwas Tiefe über System Design Themen. Übe mit dem Lösen vieler Interview Fragen.
  • Langer Zeithorizont - Strebe ein breites Wissen und weit mehr Tiefe über System Design Themen. Übe mit dem Lösen der meisten Interview Fragen.

TODO Links überarbeiten

Kurzfristig Mittelfristig Langfristig
Lese dir System Design Themen: Starte hier durch um ein breites Verständnis vom Zusammenspiel von Systemen zu bekommen 👍 👍 👍
Lese dir ein paar Artikel von Engineering Blogs von Unternehmen zu den Firmen bei denen du dich vorstellst durch 👍 👍 👍
Lese dir ein paar Artikel von Architekturen aus der echten Welt durch 👍 👍 👍
Beschäftige dich mit How to approach a system design interview question 👍 👍 👍
Arbeite dich durch System design interview questions with solutions Einige Viele Alle
Arbeite dich durch Object-oriented design interview questions with solutions Einige Viele Alle
Beschäftige dich mit Additional system design interview questions Einige Viele Alle

Wie man eine System-Design Interview Frage angehen soll

Wie man eine System-Design Interview Frage anzupacken hat.

Das System-Design Interview ist ein offenenes Gespräch. Die Führung des Gesprächs wird von dir erwartet.

Du kannst die folgende Schritte nutzen um die Diskussion zu leiten. Zur Festigung dieses Prozesses, arbeite dich durch System design interview questions with solutions Abschnitt mit den folgenden Schritten.

Schritt 1: Umreiße Anwendungsfälle, Grenzen, und Annahmen

Sammle Anforderungen und erfasse das Problem. Stelle Fragen um Anwendungsfälle und Grenzen zu klarmachen. Diskutiere die Annahmen.

  • Wer wird es nutzen?
  • Wie werden sie es nutzen?
  • Wie viele Nutzer wird es geben?
  • Was macht das System?
  • Was sind die Eingaben und Ausgaben des Systems?
  • Wie viele Daten, welches das System verarbeitet, werden erwartet?
  • Wie viele Anfragen erwarten wir pro Sekunde?
  • Was ist das erwartete Lese/Schreib-Verhältnis?

Schritt 2: Entwurfe ein Grobdesign

Umreiße einen groben Entwurf mit alle wichtige Komponenten.

  • Skizziere die Entwerfe Kernkomponenten und Verbindungen
  • Beründe deine Ideen

Schritt 3: Entwurfe Kernkomponenten

Gehe für jede Kernkomponente ins Detail. Zum Beispiel, wenn du zum design a url shortening service gefragt wird, dann erläutere:

  • Generierung und Speicherung von hashes einer vollen URL
    • MD5 und Base62
    • Hashkollisionen
    • SQL oder NoSQL
    • Datenbankschema
  • Zuordnung einer hashed URL zu einer vollen URL
    • Datenbankabfragen
  • API and Objektorientiertes Design

Schritt 4: Skaliere den Entwurf

Identifiziere und adressiere Engpässe angesichts der Einschränkungen. Brauchst du zum Beispiel die folgenden Komponenten um ein Problem der Skalierbarkeit zu adressieren?

  • Load Balancer
  • Horizontale Skalierung
  • Caching
  • Datenbank Sharding

Diskutiere potentielle Lösungen und trade-offs. Alles ist ein trade-off. Addressiere Engpässe mit principles of scalable system design.

Überschlagsrechnung

Du wirst vielleicht einige Schätzungen von Hand vorzunehmen gebeten. Hinweist zu Appendix um die folgende Ressourcen zu sehen:

Quellen und weiterführende Artikel

Schaue dir die folgenden Links an um eine bessere Idee von dem was dich erwartet zu bekommen:

Verfügbarkeit vs Konsistenz

Das CAP-Theorem


Source: CAP theorem revisited

In einem verteilten System können lediglich zwei der folgenden Eigenschaften erfüllt werden:

  • Konsistenz - Alle lesenden Zugriffe erhalten den neuesten Stand oder einen Fehler
  • Verfügbarkeit - Alle Anfragen erhalten eine Antwort, jedoch ohne Garantie, dass diese den neuesten Informationsstand enthält
  • Ausfalltoleranz - Das System arbeitet auch dann weiter, wenn es durch den Ausfall von Knoten partitioniert wird

Netzwerke sind nie zuverlässig, weshalb du Ausfalltoleranz unterstützen und zwischen Konsistenz und Verfügbarkeit abwägen müssen wirst.

CP - Konsistenz und Ausfalltoleranz

Das Warten auf die Antwort eines ausgefallenen Knotens kann zu einem Timeout-Fehler führen. CP ist eine gute Wahl, wenn deine Geschäftsanforderungen atomare Lese- und Schreibzugriffe fordern.

AP - Verfügbarkeit und Ausfalltoleranz

Antworten liefern die neueste verfügbare Version der Daten auf einem Knoten, wobei es sich nicht um die tatsächlich neueste Version handeln muss. Schreiboperationen können eine Weile brauchen, um sich auf die ausgefallenen Knoten zu verbreiten, sobald sie wieder verfügbar sind.

AP ist eine gute Wahl, wenn die Geschäftsanforderungen Eventual Consistency erlauben oder wenn das System auch trotz Fehlern von Außerhalb weiterarbeiten muss.

Quellen und weiterführende Artikel