ホームページ  >  記事  >  Java  >  オンライン プログラミング コンテスト中にオンライン レビュー システムがクラッシュするのはなぜですか?

オンライン プログラミング コンテスト中にオンライン レビュー システムがクラッシュするのはなぜですか?

WBOY
WBOY転載
2023-08-27 15:57:061413ブラウズ

オンライン プログラミング コンテスト中にオンライン レビュー システムがクラッシュするのはなぜですか?

現在、さまざまなコーディング プラットフォームに GeeksforGeeks、CodeChef、Codeforces、atCoder、SPOJ、HackerRank、HackerEarth などの競争力のあるコーディングが含まれており、それらのプラットフォームでコーディングする必要があることは誰もが知っています。ローカル エディター ファイル (Sublime Editor など) を添付するか、それぞれのエディターに直接書き込みます。

では、これらのテスト ケースにアクセスするにはどうすればよいでしょうか。あるいは、簡単な方法でコードがコンパイルされて実行されていると言えるでしょうか?これらのプログラミング コンテスト プラットフォームでは、オンライン審査員がコードのコンパイルと実行の中核として機能します。

オンライン審査

ユーザーが提出したコードは審査され、均質な環境でコンパイルおよびテストされ、オンライン審査員によって完成されます。オンライン審査は、競技プログラミング コンテストの設立をサポートするシステム、教育および採用プロセスの強化、データ マイニングの課題の解決を促進するシステム、オンライン コンパイラー、および他のカスタム システムのコンポーネントとして統合される開発プラットフォームに分かれています。したがって、学生がデータ構造の知識やプログラミングスキルを習得するのに効果的なシステムとして導入されます。このシステムには、ユーザー インターフェイス、サンドボックス レビュー環境、評価スコア、およびレポートをデータベースに更新する機能が含まれています。この記事では、プログラミング コンテストでオンライン審査員がどのように評価を下すかについて説明します。この図は、それがどのように壊れるかをよりよく説明するのに役立ちます。

  • 時間制限完了 - コードは特定の時間に実行される必要があります。オペレーティング システムでデフォルトでスレッドが実行されるときに時間制限を設定できますか?

  • メモリ制限完了 - プログラムが CPU 上のすべてのメモリを占有しないようにしてください。これをもっと簡単な方法で変更するにはどうすればよいでしょうか?

  • スタック オーバーフロー エラーr - プログラムをトレースした後、システムはプログラムが正常に実行されたかどうかを認識します。では、この情報はどのようにして私たちに届くのでしょうか?

上記の点はすべて、システムがプログラムをチェックして実行するときに発生する問題を示しています。ユーザーはプログラム内で任意のコードを送信できます。提出されたコードが悪意があるかどうか、またはその程度をどのように判断するのでしょうか。

一部のコードは、さまざまなプロセスを実行したり、ドキュメント ディレクトリを調査して情報を取得したり、管理コマンドを実行したり、サーバーの帯域幅を消費したりすることができ、さまざまな操作を実行できます。システムにこれを許可する必要はありません。そこで問題は、これらのライセンスガイドラインをどのように実践できるかということです。上記の状況に対処するために、次の方法を説明します -

###方法###

システム権限とハードウェアを適用するために使用されるテクノロジは、コード サンドボックスと呼ばれます。 Web は、上記のさまざまなシナリオを処理するために 2 つの方法でサンドボックスをコーディングすることにしました。

    下手なやり方
  • 歴史への長い道のり
  • 方法 1: 面倒な方法

開発者がコード上の悪意のある機能を実行前に発見できるような、目に見えるオンライン意思決定の取り組みはほとんどありません。たとえば、コードが C ベースの場合、最初にコード行で「system」句が使用されているかどうかが判断されます。多くのプログラミング言語は同じ方法で描画しないため、この答えの描画方法は異なります。フィーチャを動的に生成し、いくつかのプログラミング言語で操作できるため、フィルタリングはコード内で描画されません。もう 1 つ、出力として「system」を出力したい場合はどうすればよいでしょうか。この回答ではコードに悪意があると言えますが、そうではありません。

方法 2: 長い歴史の道のり

この方法ではネットワークで決められた最大値が有効となります。この回答は、完全に Linux ベースのシステムに当てはまります。スタック オーバーフロー/ランタイム エラーは、プログラムのリターン コストによってチェックできます。それが 0 から遠く離れている場合、システムは正常に実行できたと言えますが、他の場合はクラッシュしました。

メモリ制限の問題と時間制限の制限は、さまざまな完全な Unix ベースのライブラリを使用して提供できます。 Java など、一部のプログラミング言語では、この制限フラグの機能がデフォルトで有効になっています。時間制限の限界とメモリ制限の欠陥は、多くの完全な Unix ベースのライブラリを使用することで解決できます。 Java などの一部のプログラミング言語は、このタイプの境界フラグをデフォルトでサポートしています。

Linux では、ディレクトリのアクセス許可は簡単です。単純にユーザーを作成し、そのユーザーに一部のディレクトリへのアクセスと一部の読み取り/書き込み権限を許可することができます。その後、そのユーザーの用途に合わせてアプリケーションを実行することで、文書リストの問題を解決できます。さらに、コードでは一部の管理コマンドを実行できません。

一部のライブラリ (Trickle など) を使用すると、コミュニティ スキルが制限される可能性もあります。単純にセキュリティ ホールを閉じるには、別のライブラリを設定し、別のコードを記述します。

###結論は###

完全に VM (仮想マシン) に基づいた Docker またはボックスを使用すれば、上記の問題はすべて解決できます。予備的な記憶が必要な場合は、ボックスを作成し、そのボックスのコミュニティ権限と時間制限を事前に設定できます。仮想マシンの助けを借りて、すべての問題を無視できます。開発者が知っている代替手段がある可能性があります。このソリューションの判定マシン全体も他のテクノロジーより遅いように見えるかもしれませんが、大規模な場合には他のソリューションよりもはるかに高速で、より安全でより安全です。判断に Docker を使用する方法については、この GitHub リポジトリを参照してください。

審査方法全体は、オンライン審査の最も重要な部分の 1 つです。判定マシンを実行するには、オペレーティングシステムがどのように動作するか、またはプログラミング言語がどのように動作するかを理解する必要があります。

以上がオンライン プログラミング コンテスト中にオンライン レビュー システムがクラッシュするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。