This document summarizes a survey on the design of online judge systems. It discusses how online judge systems can be used to help students improve their programming skills through competitive programming contests and receiving personalized feedback. It describes the key components of an online judge system, including the user interface, sandbox environment for securely executing submissions, and database for storing results. Features like code similarity checking, test case generation, and allowing partial solutions to be built upon are discussed. The advantages of using docker containers for the sandbox environment and how online judge systems can also be used for education, online compiling, and recruitment are summarized.