Design LeetCode
Run untrusted code safely in sandboxes and judge submissions against test cases at scale.
Prompt latihan
Problem Statement, Functional Requirements, and Scale Assumptions
Tentukan ruang lingkup produk LeetCode: penjelajahan soal, pengiriman kode, judging real-time, leaderboard. Kecualikan secara eksplisit forum diskusi, langganan premium, dan sistem kontes dari desain awal. Nyatakan asumsi skala awal sebelum mengusulkan komponen apa pun.
Non-Functional Requirements
Tentukan NFR utama: latensi umpan balik pengiriman yang rendah, ketersediaan tinggi untuk penjelajahan soal, eksekusi kode yang aman dan terisolasi, konsistensi judging yang adil lintas bahasa, dan kapasitas judge yang skalabel. Putuskan jalur mana yang kritis-latensi versus mana yang dapat mentoleransi keterlambatan antrian.
Quantitative Analysis
Estimasikan QPS pengiriman bersamaan, waktu eksekusi rata-rata per pengiriman, kapasitas judge worker yang dibutuhkan, storage untuk soal dan pengiriman, serta dampak amplifikasi retry terhadap throughput judge. Turunkan working set cache untuk konten soal dan baca leaderboard.
API Design
Tentukan operasi API untuk mengirim solusi, polling atau streaming hasil pengiriman, mengambil detail soal, mendaftar soal dengan filter, dan query leaderboard. Sertakan bentuk request dan response, kode status untuk pending/accepted/wrong-answer/time-limit-exceeded/runtime-error, dan penanganan parameter bahasa.
High-Level Design
Usulkan komponen utama: web frontend, API service, submission queue, judge worker pool, problem store, submission store, leaderboard service. Jelaskan tanggung jawabnya, alur data dari pengiriman hingga verdict, bagaimana submission queue memisahkan API dari kapasitas judge, dan jalur panas penjelajahan soal.
Additional High-Level Design Prompts
Perjelas strategi dukungan multi-bahasa Anda (compiler/runtime terpisah per bahasa, execution harness terpadu), bagaimana isolasi mode kontes bekerja (penegakan deadline pengiriman, pembekuan leaderboard), dan apakah editorial serta berbagi solusi yang diterima masuk MVP atau ditangguhkan.
Deep Dives
Deep dive ke tiga area: (1) Sandboxing eksekusi kode, bandingkan isolasi berbasis container (Docker dengan profil seccomp) versus isolasi berbasis microVM (Firecracker, gVisor) untuk trade-off keamanan dan latensi startup; bahas batas sumber daya CPU dan memori, isolasi jaringan, dan strategi overlay filesystem; (2) Deteksi plagiarisme, rancang pipeline kesamaan kode berbasis AST: tokenisasi pengiriman, bangun fingerprint menggunakan pendekatan rolling hash mirip Moss, bandingkan set fingerprint, dan tune ambang deteksi untuk meminimalkan false positive pada pola algoritmik yang mirip; (3) Penskalaan test case, rancang strategi eksekusi tes progresif (edge case kecil dulu, fail-fast pada kegagalan pertama), bahas kalibrasi batas waktu dan memori per bahasa (warmup JVM, overhead Python), dan strategi pembuatan edge case untuk kondisi batas numerik.
Final Review Handoff Readiness
Ringkas keputusan desain end-to-end: teknologi sandbox yang dipilih, model penskalaan judge worker, konfigurasi submission queue, pipeline deteksi plagiarisme, dan strategi tes progresif. Soroti dua risiko terbesar yang tersisa (keandalan judge saat beban tinggi dan luas permukaan sandbox escape), dan berikan rencana rollout dengan feature flag untuk mengaktifkan eksekusi sandboxed secara bertahap.
Preview solusi
Jalur referensi Solusi LeetCode adalah materi belajar yang bersifat read-only. Gunakan untuk membandingkan desain Anda sendiri dengan sebuah jalur referensi yang ringkas sebelum memulai latihan atau setelah Anda menyelesaikan satu putaran. Pisahkan jalur browse problem yang read-heavy dari jalur submission yang write-heavy. Antrikan (queue) submission agar A…