Cracking Programming Interviews: 500 Questions with Solutions