← Alle Beiträge

Coding Challenge Grocery Store

Auf dieser Seite

Diese Coding Challenge ist die erste einer Reihe, die ich für TypeScript und Golang veröffentliche, auch wenn du sie in anderen Sprachen lösen kannst. Da sie für interne Recruiting-Zwecke genutzt werden, empfehle ich dir, die Repositories zu dieser Challenge privat zu halten.

Grocery Store

Ein Supermarkt muss jede Nacht um 12:00 Uhr nachts Updates für zwei Systeme vorbereiten. Die Systeme verarbeiten Daten in ihren eigenen proprietären Formaten. Eines ist bereits erzeugt und muss aktualisiert werden, das andere muss von Hand erzeugt werden.

Das erste System dient der Nachbestellung von Waren. Es muss wissen, wie viele Produkte im Laufe des Tages verbraucht wurden, damit es Bestellungen für den Laden erzeugen kann. Diese Daten sind als XML formatiert.

Das zweite System dient Angeboten an Kunden. Es muss wissen, welche Produkte jeder Kunde gekauft hat. Es erhält nur Informationen zu Kunden, die beim Einkauf ihre Kundenkarte benutzt haben. Diese Daten sind als JSON formatiert.

Die Bestellungen des Tages liegen als CSV vor. Jede Bestellung enthält die Bestell-ID, die Abteilung, das Produkt und die Kunden-ID (falls vorhanden).

Downloads

TypeScript-Starterkit

Wenn du die Challenge in TypeScript löst, nutz bitte das Starterkit, das du hier findest. Es bringt TypeScript, Jest, eslint und prettier fertig eingerichtet mit.

Wenn du die Challenge für Coles löst, nutz bitte das Starterkit.

Aufgabe

Teil 1: Bestellungen pro Kunde gruppieren

Gruppiere für jeden Kunden, der am Tag etwas gekauft hat, die Bestellungen nach Kunden-ID. Nimm nur die gekauften Produkte und die jeweils gekaufte Menge auf.

Nimm keine Bestellungen auf, die keine Kunden-ID enthalten.

Schreib diese JSON-Ausgabe in eine Datei namens summaries/GroupedOrders.json.

Behandle die Datei Customers.json wie eine Datenbank. Nicht alle Kunden in der Datei haben an diesem Tag etwas gekauft, und beim Lesen der Datei solltest du speichereffiziente Ansätze in Betracht ziehen.

Teil 2: Lagerbestand aktualisieren

Die Datei Stock.xml enthält die Menge jedes Artikels, der an diesem Tag gekauft wurde, und sie ist falsch, bis sie mit den heutigen Bestellungen aktualisiert wird. Aktualisiere für jede Bestellung die passenden Mengen in der Datei Stock.xml.

Entferne Duplikate und füge Produkte hinzu, wenn es sie noch nicht gibt.

Der aktualisierte Lagerbestand soll nach summaries/Stock.xml geschrieben werden.

Überlegungen

  1. Geh sparsam mit dem Speicher um. Diese Challenge hat zwar nur rund 3000 Datensätze, aber in der Praxis können Datenbanken Billionen von Datensätzen enthalten.
  2. Behandle das Dateisystem wie eine Datenbank. Denk an IOPS und die Folgen vieler gleichzeitiger Schreibvorgänge.
  3. Nutz asynchrone fs-Methoden, wenn du die Challenge in TypeScript löst.
  4. Denk an skalierbaren Code. In einem Interview wirst du eventuell gebeten, die aktuelle Challenge um neue Komponenten oder Daten zu erweitern.
  5. Halt es DRY: Wiederhol dich nicht. Schreib Tests und kopier keine Logik.
  6. Hab Spaß. Auch wenn du es nicht in die nächste Runde schaffst, lernst du Neues.

Abgabe

Stell bei der Vorbereitung der Abgabe sicher, dass dein Repository privat ist und dein Reviewer als Contributor hinzugefügt wurde. Wenn ich dein Reviewer bin, füg willhackett hinzu.

Committe regelmäßig. Deine ersten Versuche sind vielleicht nicht ideal, aber es ist gut, die Entwicklung zu zeigen, und es kann helfen zu erzählen, wie du zum fertigen Ergebnis gekommen bist.