I have had two interviews with Amazon recently, within a span of 20 days, both over the phone. These were mostly technical interviews. The first interview started with the interviewer asking me to explain what I am working on and why I am interested in a position with Amazon. After I described my work and interests briefly, he started to ask technical questions. To start with, the questions were on time complexity of various data structures (arrays, vectors, linked lists, hashes) for accessing/inserting/deleting an item. Then he asked me a question about the difference between a thread and a process and some multi-threading concepts such as shared resources and semaphores. Finally the focus shifted to algorithms and the questions were mainly on finding the most frequent word(s) in a large file and efficient algorithms to do so. In the end he asked me to code up a program in my preferred language (C) to find the second maximum element in an array in linear time. I submitted the code by the end of the day. In summary, the interview went pretty good and I received an invitation for a second interview within a week.
The second interview also started in a similar way as the first one except that the person interviewing me gave a slightly better description of the kind of work in the position I was being interviewed for. Without spending too much time on this though, he started with technical questions by first asking me about what languages and platforms I used for programming. He then asked a few questions about efficient ways to merge sorted sub-arrays into one large sorted array (merge sort) followed by a hash-table question involving chaining to overcome collisions. I felt the second one was a bit more trickier than the first one and waiting for their decision so far.