Reservoir Sampling refers to a family of algorithms for sampling a fixed number of elements from an input of unknown length with uniform probabilities. In this article, I aim to answer the following questions: When/why is Reservoir Sampling useful? How does Reservoir Sampling work? How can Reservoir Sampling be implemented? How can a Reservoir Sampling implementation be practically tested for correctness? When/why is Reservoir Sampling useful? The main benefit of Reservoir Sampling is that it provides an upper bound on memory usage that is invariant of the input stream length.