Heim  >  Artikel  >  Java  >  Warum stürzt das Online-Bewertungssystem während eines Online-Programmierwettbewerbs ab?

Warum stürzt das Online-Bewertungssystem während eines Online-Programmierwettbewerbs ab?

WBOY
WBOYnach vorne
2023-08-27 15:57:061413Durchsuche

Warum stürzt das Online-Bewertungssystem während eines Online-Programmierwettbewerbs ab?

Wir alle wissen, dass heutzutage verschiedene Codierungsplattformen konkurrierende Codierung wie GeeksforGeeks, CodeChef, Codeforces, atCoder, SPOJ, HackerRank, HackerEarth usw. beinhalten. Sie sollten sich selbst codieren. Hängen Sie entweder eine lokale Editordatei an (z. B. Sublime Editor) oder schreiben Sie direkt auf dem jeweiligen Editor.

Wie greifen wir also auf diese Testfälle zu oder können wir auf einfache Weise sagen, dass unser Code kompiliert und ausgeführt wird? Auf diesen Programmierwettbewerbsplattformen dienen Online-Juroren als Rückgrat der Codekompilierung und -ausführung.

Online-Bewertung

Der von Benutzern eingereichte Code wird beurteilt und dann in einer homogenen Umgebung kompiliert und getestet, was von Online-Juroren durchgeführt wird. Die Online-Bewertung ist in Systeme unterteilt, die die Einrichtung wettbewerbsfähiger Programmierwettbewerbe unterstützen, Bildungs- und Rekrutierungsprozesse verbessern, die Lösung von Data-Mining-Herausforderungen erleichtern, Online-Compiler und Entwicklungsplattformen, die sich als Komponenten anderer benutzerdefinierter Systeme integrieren lassen. Daher wird es als effektives System implementiert, um Studierenden dabei zu helfen, Kenntnisse über Datenstrukturen und Programmierkenntnisse zu erwerben. Das System umfasst eine Benutzeroberfläche, eine Sandbox-Überprüfungsumgebung, Bewertungsergebnisse und die Möglichkeit, Berichte in einer Datenbank zu aktualisieren. In diesem Artikel besprechen wir, wie Online-Juroren bei Programmierwettbewerben scheitern. Dieses Bild wird uns helfen, besser zu erklären, wie es zusammenbricht.

  • Zeitlimit-Abschluss – Code sollte zu einem bestimmten Zeitpunkt ausgeführt werden. Können wir ein Zeitlimit festlegen, wann Threads standardmäßig auf dem Betriebssystem ausgeführt werden?

  • Speicherlimit erledigt – Programme sollten nicht den gesamten Speicher auf der CPU beanspruchen. Wie können wir das auf einfachere Weise ändern?

  • Stack Overflow Errorr – Nach der Verfolgung eines Programms weiß das System, ob das Programm erfolgreich ausgeführt wurde oder nicht. Wie gelangen diese Informationen zu uns?

Die oben genannten Punkte veranschaulichen alle die Probleme, die auftreten, wenn das System das Programm prüft und ausführt. Benutzer können jeden Code innerhalb des Programms einreichen. Wie stellen wir fest, ob und wie bösartig ein übermittelter Code ist?

Einige Codes können verschiedene Prozesse ausführen, Ihr Dokumentverzeichnis untersuchen und Informationen abrufen, Verwaltungsbefehle ausführen oder die Bandbreite des Servers beanspruchen. Der Code kann verschiedene Vorgänge ausführen. Das müssen wir dem System nicht erlauben. Die Frage ist also: Wie können wir diese Lizenzrichtlinien in die Praxis umsetzen? Um mit der oben genannten Situation umzugehen, erklären wir die folgenden Methoden -

Weg

Die zum Anwenden von Systemberechtigungen und Hardware verwendete Technologie wird Code-Sandboxing genannt. Web hat beschlossen, die Sandbox auf zwei Arten zu programmieren, um die oben genannten unterschiedlichen Szenarien zu bewältigen.

  • Lahme Art

  • Ein langer Weg in die Geschichte

Methode 1: Die beschissene Art

Es gibt nur wenige sichtbare Online-Entscheidungsinitiativen, die es Entwicklern ermöglichen, zu versuchen, schädliche Funktionen im Code zu entdecken, bevor dieser ausgeführt wird. Wenn unser Code beispielsweise auf C++ basiert, wird bei der Entscheidung zunächst geprüft, ob es Codezeilen gibt, die die Phrase „system“ verwenden. Diese Antwort zeichnet nicht anders, da viele Programmiersprachen nicht auf die gleiche Weise zeichnen. Sie können Features dynamisch generieren und in mehreren Programmiersprachen nutzen, sodass die Filterung nicht im Code dargestellt wird. Eine andere Sache: Was ist, wenn Sie „System“ als Ausgabe drucken möchten? Diese Antwort würde bedeuten, dass der Code bösartig ist, aber das ist nicht der Fall.

Methode 2: Der lange historische Weg

Bei dieser Methode gilt der vom Netzwerk festgelegte Maximalwert. Diese Antwort ist für vollständig Linux-basierte Systeme relevant. Stapelüberlauf-/Laufzeitfehler können anhand der Rückgabekosten des Programms überprüft werden. Wenn er weit von 0 entfernt ist, können wir sagen, dass das System erfolgreich ausgeführt werden konnte, wenn es in anderen Fällen abstürzte.

Probleme mit der Speicherbegrenzung und zeitliche Begrenzungen können durch die Verwendung verschiedener vollständiger Unix-basierter Bibliotheken vermieden werden. Einige Programmiersprachen, beispielsweise Java, aktivieren diese Funktion von Einschränkungsflags standardmäßig. Zeitlimitgrenzen und Speicherlimitfehler können durch die Verwendung vieler vollständiger Unix-basierter Bibliotheken behoben werden. Einige Programmiersprachen unterstützen diese Art von Grenzflag standardmäßig, beispielsweise Java.

Unter Linux sind Verzeichnisberechtigungen einfach. Wir können einfach einen Benutzer erstellen und diesem Benutzer Zugriff auf einige Verzeichnisse und einige Lese-/Schreibberechtigungen gewähren. Anschließend können Sie die Probleme mit der Dokumentliste lösen, indem Sie die Anwendung für die Verwendung durch diesen Benutzer ausführen. Darüber hinaus kann der Code einige Verwaltungsbefehle nicht ausführen.

Die Verwendung einiger Bibliotheken (z. B. Trickle) kann auch die Community-Fähigkeiten einschränken. Um eine Sicherheitslücke einfach zu schließen, können wir verschiedene Bibliotheken einrichten und unterschiedlichen Code schreiben.

Fazit

Wenn wir Docker oder Box verwenden, die vollständig auf VM (virtueller Maschine) basieren, können alle oben genannten Probleme gelöst werden. Wenn wir eine vorläufige Erinnerung haben möchten, können wir eine Box erstellen und die Community-Berechtigungen und Zeitlimits der Box voreinstellen. Mit Hilfe virtueller Maschinen können alle Probleme ignoriert werden. Es kann Alternativen geben, die den Entwicklern bekannt sind. Auch die gesamte Beurteilungsmaschinerie dieser Lösung scheint langsamer zu sein als bei anderen Technologien, aber im Großen und Ganzen ist sie viel schneller als jede andere Lösung und ist sicherer und sauberer. Sie können sich dieses GitHub-Repo ansehen, um zu erfahren, wie Sie Docker zur Beurteilung verwenden.

Die gesamte Bewertungsmethode ist einer der wichtigsten Teile der Online-Bewertung. Um eine Urteilsmaschine auszuführen, muss man verstehen, wie ein Betriebssystem oder eine Programmiersprache funktioniert.

Das obige ist der detaillierte Inhalt vonWarum stürzt das Online-Bewertungssystem während eines Online-Programmierwettbewerbs ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen