Source: https://www.nareshit.in/advanced-java-course-material/.pdf