Programming Interview Questions: What They Are and How to Answer