Ich habe eine Reihe von Interviewfragen gesammelt, darunter "Beschreibe, wie du eine Fotoalbum-Anwendung gestalten würdest", "Beschreibe, wie du diese bestimmte Funktion dieser Website gestalten würdest" (z. B. "Gefällt mir" auf Facebook, "Empfehlung bei Amazon", "Einkaufswagen", "Spiel") von Black Jack). Was ist dann, wenn es Millionen davon gibt? Was würdest du ändern?
Es sieht so aus, als würde dies entweder ein Datenbankschema oder eine Reihe von Klassendefinitionen (oder beides?) Erwarten. Ich habe in der Schule etwas über Datenbanken gelernt, aber ich habe noch nie zuvor eine Anwendung entwickelt und habe Probleme zu wissen, wo ich anfangen soll, ob die von mir entwickelten Designs "gut" sind und was ich ändern kann, um sie skalierbar zu machen.
Gibt es einen allgemeinen Ansatz oder Denkprozess beim Entwerfen dieser Systeme? Und allgemeine Probleme, die im Design häufig auftauchen und die ich zu vermeiden versuchen sollte? Könnte jemand mich vielleicht durch eines (oder am besten alle, während er die Bedürfnisse von jedem vergleicht) von diesen führen und erklären:
1) Wie kommen Sie auf die Entitäten, die benötigt werden? 2) Wie entscheidest du, welche Beziehungen alles haben wird? 3) Wie integrieren Sie die Leistungsoptimierung in Ihr Design? 4) Mache ich das mit Klassen oder Datenbanken? Macht es einen Unterschied (zB hätte ich eine Klasse, die nicht wirklich in eine Datenbanktabelle übersetzt werden kann?)
Der Hauptgrund, den ich frage, ist, dass ich das "Cracking the Coding Interview" durchlaufen habe und meine Antworten völlig anders waren als die des Autors - ich hatte sehr unterschiedliche Vorstellungen, welche Klassen wichtig sind.
MEIN VERSUCH: Mit der Foto-Sharing-App hätte ich die Klassen / Tabellen: Foto und Benutzer sicher.
Wenn wir dann versuchen, ein Schema zu erstellen, gibt es eine Tabelle, die Foto und Benutzer verknüpft, wenn wir davon ausgehen, dass jede Person auf dem Foto mit dem Foto verknüpft ist eine separate Tabelle für viele-zu-viele-Beziehungen haben oder nicht?).
Aber wenn wir versuchen, einen objektorientierten Ansatz zu verfolgen, haben wir vielleicht stattdessen eine Klasse namens album, die die ganze Arbeit erledigt und alle Informationen aus den beiden anderen Tabellen / Klassen enthält. Dies ist eine Sache, die mir im Buch aufgefallen ist - es gibt eine Reihe von Klassen und dann eine Klasse, die im Grunde alle Informationen enthält und die anderen Klassen verbindet - ist das üblich? Scheint dies zum Beispiel in meinen obigen Beispielen so, als würde es zutreffen?
Ich hoffe nur, dass einige allgemeine Regeln / Richtlinien befolgt werden, da ich im Moment keine Ahnung habe, wie eine gute Architektur für ein großes System aussieht.