Kita semua tahu bahawa pada masa kini pelbagai platform pengekodan termasuk pengekodan kompetitif seperti GeeksforGeeks, CodeChef, Codeforces, atCoder, SPOJ, HackerRank, HackerEarth dan lain-lain. Mereka harus mengekodkan diri mereka sendiri. Sama ada lampirkan fail editor tempatan (cth. Editor Sublime) atau tulis terus pada editor masing-masing.
Jadi bagaimana untuk mengakses kes ujian ini atau dengan cara yang mudah kita boleh mengatakan kod kita sedang disusun dan dijalankan? Pada platform pertandingan pengaturcaraan ini, hakim dalam talian berfungsi sebagai tulang belakang penyusunan dan pelaksanaan kod.
Kod yang diserahkan oleh pengguna dinilai, dan kemudian disusun dan diuji dalam persekitaran yang homogen, yang dilengkapkan oleh hakim dalam talian. Penghakiman dalam talian dibahagikan kepada sistem yang menyokong penubuhan pertandingan pengaturcaraan yang kompetitif, mempertingkatkan proses pendidikan dan pengambilan, memudahkan penyelesaian cabaran perlombongan data, penyusun dalam talian dan platform pembangunan yang disepadukan sebagai komponen sistem tersuai yang lain. Oleh itu, ia akan dilaksanakan sebagai sistem yang berkesan untuk membantu pelajar memperoleh pengetahuan tentang struktur data dan kemahiran pengaturcaraan. Sistem ini termasuk antara muka pengguna, persekitaran semakan kotak pasir, skor penilaian dan keupayaan untuk mengemas kini laporan kepada pangkalan data. Dalam artikel ini, kita akan membincangkan cara hakim dalam talian berpecah dalam pertandingan pengaturcaraan. Gambar ini akan membantu kami menerangkan dengan lebih baik cara ia rosak.
Penyelesaian Had Masa - Kod hendaklah dilaksanakan pada masa tertentu. Bolehkah kita menetapkan had masa apabila utas dilaksanakan secara lalai pada sistem pengendalian?
Had Memori Selesai - Program tidak seharusnya mengambil semua memori pada CPU. Bagaimanakah kita boleh mengubahnya dengan cara yang lebih mudah?
Stack Overflow Errorr - Selepas mengesan program, sistem akan mengetahui sama ada program itu berjalan dengan jayanya atau tidak. Jadi bagaimana maklumat ini sampai kepada kami?
Titik di atas semuanya menggambarkan masalah yang berlaku apabila sistem menyemak dan menjalankan program. Pengguna boleh menghantar sebarang kod dalam program. Bagaimanakah kita menentukan sama ada atau sejauh mana hasad kod yang diserahkan.
Sesetengah kod boleh melaksanakan proses yang berbeza, atau ia boleh menyiasat direktori dokumen anda dan mendapatkan beberapa maklumat, atau ia boleh menjalankan perintah pentadbiran, atau ia boleh menggunakan lebar jalur pelayan. Kita tidak perlu membenarkan sistem melakukan ini. Jadi persoalannya, bagaimana kita boleh mengamalkan garis panduan pelesenan ini? Untuk menangani situasi di atas, kami akan menerangkan kaedah berikut -
Teknologi yang digunakan untuk menggunakan kebenaran sistem dan perkakasan dipanggil kotak pasir kod. Web memutuskan untuk mengekod kotak pasir dalam dua cara untuk mengendalikan senario berbeza yang dinyatakan di atas.
Lame way
Jalan panjang menuju sejarah
Terdapat beberapa inisiatif membuat keputusan dalam talian yang boleh dilihat yang membolehkan pembangun cuba menemui fungsi hasad pada kod sebelum ia dilaksanakan. Sebagai contoh, jika kod kami adalah berdasarkan C++, keputusan akan terlebih dahulu melihat sama ada terdapat sebarang baris kod yang menggunakan frasa "sistem". Jawapan ini tidak melukis secara berbeza kerana banyak bahasa pengaturcaraan tidak melukis dengan cara yang sama. Anda boleh menjana ciri secara dinamik dan menyentuhnya dalam beberapa bahasa pengaturcaraan, jadi penapisan tidak dilukis dalam kod. Satu lagi, bagaimana jika anda ingin mencetak "sistem" sebagai output? Jawapan ini akan mengatakan bahawa kod itu berniat jahat, tetapi tidak.
Dalam kaedah ini, nilai maksimum yang diputuskan oleh rangkaian adalah sah. Jawapan ini adalah relevan untuk sistem berasaskan Linux sepenuhnya. Ralat limpahan tindanan/masa jalan boleh disemak dengan cara kos pemulangan program. Jika ia jauh dari 0, maka kita boleh mengatakan bahawa sistem itu dapat berjalan dengan jayanya, jika dalam kes lain ia ranap.
Kerumitan Had Memori dan sekatan had masa boleh disediakan dengan menggunakan pelbagai perpustakaan lengkap berasaskan Unix. Sesetengah bahasa pengaturcaraan mendayakan ciri bendera sekatan ini secara lalai, seperti Java. Had had masa dan kelemahan had memori boleh diselesaikan dengan menggunakan banyak perpustakaan lengkap berasaskan Unix. Sesetengah bahasa pengaturcaraan menyokong jenis bendera sempadan ini secara lalai, seperti Java.
Di Linux, kebenaran direktori adalah mudah. Kami hanya boleh mencipta pengguna dan membenarkan pengguna itu mengakses beberapa direktori dan beberapa kebenaran baca/tulis. Anda kemudiannya boleh menyelesaikan masalah senarai dokumen dengan melaksanakan aplikasi untuk kegunaan pengguna tersebut. Selain itu, kod tidak boleh menjalankan beberapa arahan pentadbiran.
Menggunakan beberapa perpustakaan (seperti Trickle) juga boleh mengehadkan kemahiran komuniti. Untuk hanya menutup lubang keselamatan, kami boleh menyediakan perpustakaan yang berbeza dan menulis kod yang berbeza.
Jika kita menggunakan Docker atau box yang berasaskan sepenuhnya VM (mesin maya), semua masalah di atas boleh diselesaikan. Jika kita ingin mempunyai ingatan awal, kita boleh membuat kotak dan pratetapkan kebenaran komuniti dan had masa kotak itu. Dengan bantuan mesin maya, semua masalah boleh diabaikan. Terdapat alternatif yang diketahui oleh pembangun. Keseluruhan mesin penghakiman dalam penyelesaian ini juga mungkin kelihatan lebih perlahan daripada teknologi lain, tetapi secara mutlak ia adalah lebih pantas daripada penyelesaian lain dan lebih selamat dan lebih bersih. Anda boleh melihat Repo GitHub ini untuk mengetahui cara menggunakan docker untuk pertimbangan.
Keseluruhan kaedah penilaian adalah salah satu bahagian terpenting dalam penghakiman dalam talian. Untuk melaksanakan mesin penghakiman, seseorang perlu memahami bagaimana sistem pengendalian berfungsi, atau bagaimana bahasa pengaturcaraan berfungsi.
Atas ialah kandungan terperinci Mengapakah sistem semakan dalam talian ranap semasa pertandingan pengaturcaraan dalam talian?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!