Aufgrund meiner Arbeit habe ich kürzlich Praktikanten in unserem Unternehmen ausgewählt. Jeder, der sich daran erinnert, wie es ist, ein Praktikant / Junior zu sein, sollte sich daran erinnern, wie schwierig es ist, ohne Erfahrung an einem mehr oder weniger normalen Ort festzuhalten, an dem er Ressourcen für Ihr Training ausgibt. Aufgrund der Tatsache, dass die Zahl der Anfängerentwickler sehr groß ist, hat der Arbeitgeber die Möglichkeit, aus diesem Strom zu wählen, wenn nicht den besten, dann zumindest klugen, vielversprechenden Leuten, die es wert sind, Zeit für Schulungen zu investieren, um sie später einzustellen.
Jedes Unternehmen hat seine eigene Methode, um solche Kandidaten zu finden. Heute halten wir uns an Folgendes: Wir geben eine kleine Testaufgabe (ungefähr eine Stunde Arbeit für einen erfahrenen Entwickler), für die Java-Kernwissen ausreicht, und bitten darum, sie auf einen Github zu stellen. Wir begrenzen die Ausführungszeit nicht. Um die Aufgabe qualitativ zu erfüllen, werden die Bewerber zu einem Vorstellungsgespräch eingeladen.

Eine Aufgabe enthält normalerweise eine Implementierung von CRUD-Methoden in eine Datei über ein
Konsolenmenü mit einer oder zwei Entitäten sowie die Validierung einiger Felder. Als Beispiel gebe ich eine klassische Situation mit einem Benutzer an, der eine E-Mail- und Telefonüberprüfung gemäß einer bestimmten Vorlage implementieren muss und dazu 1 bis 3 Telefone eingeben kann. Es gibt viele Antworten und nur sehr wenige Stellen - dementsprechend ist die Auswahl ziemlich schwierig.
Als ich anfing, alle Aufgaben hintereinander zu überprüfen, stellte sich heraus, dass es ungefähr 30 Minuten dauert, um die Leistung mit dem Starten und Feedback jeder Aufgabe zu testen. Ich musste die Überprüfungsmethode überarbeiten und Kriterien ableiten, um schnell nicht ausreichend hochwertigen Code herauszufiltern. Wenn ich zum Beispiel eine Lösung auf einem Github öffne, sehe ich, dass der gesamte Code in mehreren Klassen konzentriert und sogar in einem Paket zusammengefasst ist - eine schnelle Ablehnung (was ist mit den Prinzipien von OOP?).
Viele mögen diesen Ansatz unfair finden, um zu sagen, dass das Problem gelöst ist, der Code funktioniert, aber das Leben des Praktikanten und des Junioren ist hart und gnadenlos.
In diesem Zusammenhang biete ich meine Liste mit Empfehlungen zur Durchführung der Testaufgabe an
- Ihre Entscheidung sollte in Übereinstimmung mit dem ToR funktionieren
Befolgen Sie sorgfältig die Anforderungen in den Bedingungen zur Lösung des Problems. Denken Sie nicht über Ihre Felder in Entitäten nach, ändern Sie nicht die Validierungsbedingungen usw. usw. Dies zeigt, wie aufmerksam Sie auf die Details achten, was für den Entwickler sehr wichtig ist. - Überprüfen Sie die abgeschlossene Aufgabe sorgfältig
Erledigt die Aufgabe - überprüfen Sie die Leistung. Zuerst die im ToR beschriebene Hauptfunktionalität, dann zusätzlich. Versuchen Sie, Ihre Anwendung zu "brechen": Überprüfen Sie die Anwendung oder geben Sie sie entsprechend der Aufgabe ein. Wenn Sie ungültige Daten eingeben, sind die Daten so ähnlich wie möglich. Denken Sie daran, alles zu reparieren, was Sie finden. - Codierung
Alle Dateien müssen meiner Meinung nach in UTF-8 dieselbe Codierung haben. Konfigurieren Sie dazu Ihre IDE. Denken Sie daran, wenn Sie Windows haben, hat der Prüfer möglicherweise Linux, und zusätzliche Kniebeugen mit Codierung sind Zeitverschwendung für den Prüfer. - Commit nicht in einem Commit
Sie müssen sich verpflichten, wenn Sie Ihr Problem lösen, und den Festschreibungen klare Beschreibungen hinzufügen. Wenn Sie Englisch sprechen, ist es besser in Englisch. Dies zeigt indirekt an, dass Sie nicht nur die Lösung eines anderen aus dem Git zusammengeführt, sondern den Code selbst geschrieben haben. - Versuchen Sie, die Entscheidungen anderer nicht zusammenzuführen
Da Sie das Maximum für Juni beanspruchen, haben Sie meistens immer noch nicht genug Erfahrung, um den Code eines anderen zu verwenden. Die Bedingungen der Aufgabe können geringfügig variieren. Wenn Sie einfach die Lösung einer anderen Person kopieren, ist diese möglicherweise bereits ein wenig inkonsistent mit der aktuellen Aufgabe. Und die Aufgabe muss genau mit der Aufgabe erledigt werden (siehe P1). - Readme-Datei hinzufügen
Fügen Sie die Datei readme.md zum Projektstamm hinzu. Beschreiben Sie kurz Ihre Anwendung und legen Sie gegebenenfalls zusätzliche Erklärungen für den Start vor. Wenn Sie bereits andere Aufgaben erledigt haben, fügen Sie dort auch die Readme-Datei hinzu. Wenn ich beispielsweise an einem Kandidaten interessiert bin, kann ich seinen anderen Code sehen. Wenn Sie nicht hierher kommen, können Sie diesen Code auch Ihrem Lebenslauf hinzufügen. - Machen Sie ein bequemes Menü
Die Anwendung muss benutzerfreundlich sein. Denken Sie daran, dass die Zeit für die Überprüfung häufig begrenzt ist. Laden Sie die Anwendung daher vorab mit Daten, und fügen Sie eine Methode hinzu, um alle Entitäten anzuzeigen (die in den Bedingungen enthalten sind). Die Menüführung sollte bequem sein, beispielsweise mit Zahlen. Und manchmal implementieren sie es so, dass Sie zum Löschen einer Entität "Löschen" in die Konsole eingeben müssen. Man kann es jedoch nicht übertreiben und über den Rahmen von TK hinausgehen. - Tun Sie so gut es Ihre Fähigkeiten erlauben.
Da Sie sich entschieden haben, die Testaufgabe auszuführen, nähern Sie sich der Lösung mit maximaler Rendite. Selbst wenn die Aufgabe trivial und einfach erscheint, müssen Sie sich ihrer Lösung nicht formal nähern und Code auf Ihr Knie schreiben. Und wenn Sie nicht zu dieser Firma gehen, haben Sie eine fertige Lösung auf dem Github, die Praxis ist. - Vergessen Sie nicht die Prinzipien von OOP
Lassen Sie es Ihnen scheinen, dass eine kleine Aufgabe, nicht vergessen - die Aufgabe ist ein Test, und Java ist in erster Linie eine objektorientierte Sprache. Und sie werden nicht nur die Funktionsfähigkeit der Anwendung, sondern auch den Code untersuchen. Die Codequalität ist ein sehr wichtiger Bestandteil der Lösung . Schreiben Sie keinen Spaghetti-Code. Legen Sie alles in Klassen, Pakete. Erstellen Sie bei Bedarf Schnittstellen und übertragen Sie sie gegebenenfalls an ENUM . - Versuchen Sie, Entwurfsmuster zu verwenden
Eine erfolgreiche Anwendung mindestens eines Entwurfsmusters zeigt, dass Sie ein Konzept für Entwurfsmuster haben (oder nicht). Bevor Sie dieses oder jenes Muster anwenden, finden Sie heraus, was die Idee ist, wie sie funktionieren sollte und warum sie erfunden wurde. Wenn ich Muster im Code sehe, kann ich beim Interview eine Frage zum angewendeten Muster stellen. - Verwenden Sie Ressourcen
Alle dem Benutzer angezeigten Nachrichten werden am besten in Ressourcen aufgenommen und von dort übernommen. Dies zeigt dem Prüfer, dass Sie wissen, wie man mit Ressourcen arbeitet und wozu sie verwendet werden. Nachrichten werden am besten auf Englisch angezeigt. - Denken Sie daran, neu zu definieren, wo gleich & Hashcode ist
- Verwenden Sie Java8 + -Funktionen wie Lambda-Ausdrücke und Streams
Vergessen Sie nicht, dass Sammlungen häufiger bequemer sind als ein Array. Wenn die Auswahl zugunsten von Sammlungen gefallen ist, verwenden Sie die richtigen Sammlungen. Sie sollten beim Interview bereit sein, um Ihre Wahl zugunsten einer bestimmten Sammlung oder eines bestimmten Arrays zu rechtfertigen. - Tests
Wenn Sie können, schreiben Sie Tests, aber dies sind bereits fünf mit ein paar Pluspunkten. Oft versteht es sich, dass jeder gute Code normalerweise in Tests behandelt wird. Obwohl für die im Beispiel angegebene Aufgabe das Fehlen von Tests kein Minus ist, da dies eine einfache Konsolenanwendung zum Erkennen des Java-Kerns ist.
Zusammenfassung
Eine große Hälfte der Bewerber sendet eine fehlerfreie Lösung des Problems und einen soliden Code - Einheiten, die die natürliche Selektion durchlaufen und in die nächste Runde fallen. Alle Darsteller erhalten Feedback. Diejenigen, die einen soliden Code geschrieben haben, der zum Start kam - ein persönliches Feedback, diejenigen, die Spaghetti auf die Knie geschickt haben -, sind allgemeiner.
PS: Ich hoffe, mein Rat wird Ihnen helfen, liebe Bewerber, Ihre Testaufgaben besser auszuführen, und weniger wahrscheinlich, Tester mit blutigen Tränen zu weinen. Viel Glück bei Ihrer Suche und einen guten Startplatz!