Nachdem ich mich entschlossen hatte, mich auf dem ausländischen Markt zu versuchen, begann ich, Lebensläufe an verschiedene Büros zu senden. Nicht einmal mit dem Ziel, Arbeit zu finden, sondern einfach den eigenen Horizont zu erweitern. Die Wahl fiel auf die Stelle von Java Developer. Ich habe keine industrielle Erfahrung in der Arbeit mit der Sprache, nur persönliche Erfahrung, Zertifikate aus dem Oracle Certification Center, Bücher usw. Ehrlich gesagt, am letzten Arbeitsplatz seit anderthalb Jahren habe ich nichts anderes als „forov“ und „ifas“ geschrieben (aber das ist eine ganz andere Geschichte), also habe ich mich entschieden, warum nicht.
Nachdem ich die Geschichte der Suche und des Gesprächs mit Arbeitgebern übersprungen habe, komme ich zur Sache. Eine Firma K aus Stadt G schrieb, dass sie daran interessiert seien, mich zu interviewen, nachdem ich das Problem gelöst hatte.
Nachdem ich mich entschieden und ihnen die Lösung geschickt hatte, antwortete K, dass sie nach dem Überprüfungscode beschlossen hätten, meine Bewerbung nicht mehr zu berücksichtigen. Es war ein Schlag für mein Selbstwertgefühl. Natürlich verstehe ich, dass die Sprache neu ist und im Allgemeinen alles passieren kann, aber ich hoffte zumindest auf Feedback zu meiner Entscheidung. Außerdem ist die Aufgabe wirklich einfach ... Ich hoffe, Sie werden an der Aufgabe interessiert sein.
Unten finden Sie den Originaltext der Aufgabe.
RESTAURANT ÜBUNG

RESTAURANT-ÜBUNG (bitte verwenden Sie die JAVA 7-Syntax)
Ihr Restaurant verfügt über eine Reihe von Tischen unterschiedlicher Größe: Jeder Tisch bietet Platz für 2, 3, 4, 5 oder 6 Personen. Kunden kommen alleine oder in Gruppen an, bis zu 6 Personen. Clients innerhalb einer bestimmten Gruppe müssen zusammen an einem Tisch sitzen. Daher können Sie eine Gruppe nur an einen Tisch leiten, an dem sie alle Platz finden. Wenn es keinen Tisch mit der erforderlichen Anzahl leerer Stühle gibt, muss die Gruppe in der Warteschlange warten.
Sobald die Gruppe Platz genommen hat, kann sie den Tisch nicht mehr ändern, d. H. Sie können eine Gruppe nicht von einem Tisch auf einen anderen verschieben, um Platz für neue Kunden zu schaffen.
Kundengruppen müssen in der Reihenfolge ihrer Ankunft bedient werden, mit einer Ausnahme: Wenn an einem Tisch genügend Platz für eine kleinere Gruppe vorhanden ist, die später ankommt, können Sie sie vor den größeren Gruppen in der Warteschlange platzieren. Wenn beispielsweise eine Gruppe mit sechs Personen auf einen Tisch mit sechs Sitzplätzen wartet und eine Gruppe mit zwei Personen ansteht oder ankommt, können Sie sie direkt an einen Tisch mit zwei leeren Stühlen senden.
Gruppen können sich Tische teilen. Wenn Sie jedoch gleichzeitig einen leeren Tisch mit der erforderlichen Anzahl von Stühlen und genügend leere Stühle an einem größeren Tisch haben, müssen Sie Ihre Kunden immer an einem leeren Tisch sitzen und nicht an einem teilweise sitzenden , auch wenn die leere Tabelle größer als die Größe der Gruppe ist.
Natürlich geht das System davon aus, dass es jeder größeren Gruppe langweilig werden kann, wenn kleinere Gruppen ankommen und ihre Tische vor sich haben, und dann entscheiden, zu gehen, was bedeuten würde, dass sie die Warteschlange verlassen, ohne bedient zu werden.
Bitte füllen Sie die RestManager-Klasse mit den entsprechenden Datenstrukturen und implementieren Sie den Konstruktor und drei öffentliche Methoden. Sie werden aufgefordert, auch andere Klassen zu ändern (damit wir sie testen können) und nach Ihrem Willen neue Methoden hinzuzufügen.
public class Table { public final int size;
Aufgabenanalyse
Nach der Analyse der Aufgabe, wie es mir und jetzt schien, gibt es absolut nichts Kompliziertes. Ich möchte jedoch sofort auf zwei Punkte aufmerksam machen, die mich ein wenig verwirrt haben.
- "Natürlich geht das System davon aus, dass es jeder größeren Gruppe langweilig werden kann, wenn kleinere Gruppen ankommen und ihre Tische vor sich haben, und dann entscheiden, zu gehen, was bedeuten würde, dass sie die Warteschlange verlassen, ohne bedient zu werden."
- RestManager-Klassenstruktur
In Bezug auf den ersten Absatz ist die Tatsache, dass unser Vertriebssystem gemäß den oben genannten Regeln arbeitet, sodass die in Absatz 1 beschriebene Situation nicht vermieden werden kann. Das einzige, was ich im Antwortschreiben geschrieben habe, ist, dass Sie eine Verzögerung hinzufügen können, bevor Sie eine kostenlose Tabelle ausstellen. Nehmen wir an, eine Gruppe von 3 Personen kommt in ein Restaurant. Im Moment gibt es nur einen Tisch am 6 .. Konventionell müssen wir ihnen einen Tisch zur Verfügung stellen (Sie müssen Ihre Kunden immer an einem leeren Tisch platzieren ... auch wenn der leere Tisch größer als die Größe der Gruppe ist). Wenn Sie dies jedoch nicht sofort, sondern nach etwa 5 Minuten tun, besteht während dieser Zeit die Möglichkeit, dass ein Sitz oder Tisch mit einer Abmessung von weniger frei ist, wenn auch nur in geringem Umfang. Aber es sieht natürlich leichtfertig aus.
Für den zweiten Punkt, zumindest IMHO, ist die öffentliche Tabellensuchmethode nicht in ihrer Klasse. Wir können die Tabelle mit einem Getter vom Kunden erhalten, der nach der Idee einen Link zur Tabelle speichern sollte.
Im Allgemeinen habe ich zwei Hauptpunkte hervorgehoben:
- Sie müssen die Tabellen in der richtigen Reihenfolge sortieren. Die Logik des Findens der gewünschten Tabelle kann leicht auf das Sortieren übertragen werden. Der erste Tisch, der eine Gruppe von Kunden aufnehmen kann und notwendig sein wird.
- Nur zwei Ereignisse machen es erforderlich, eine Tabelle für einen Client oder einen Client für eine Tabelle zu finden. Dies ist die Ankunft eines neuen Kunden und nachdem die Gruppe den Tisch entsprechend verlassen hat.
Tatsächlich reduziert sich das gesamte Problem auf die beiden oben aufgeführten Punkte. Die Verwendung der Sammlung ist übrigens nicht sinnvoll. Die Warteschlange ist eine Warteschlange, und abhängig von den freien Plätzen und der Gruppengröße kann jede der Warteschlangen bedingt bedient werden. Daher werden keine Methoden verwendet, die sich auf die Warteschlange beziehen.
Ich hinterlasse einen Link zu git mit einer Lösung:
RestaurantTask