IBM Interview Question

What is a singleton? How do you write one? Why would you use one? What are the principles of object-orientated programming? What is abstraction?