In this post, I'm going to talk about how I prepared for the Amazon interview and passed it!
I posted on my Facebook profile that I got an offer from the Amazon Instant Video team which was visiting Egypt to hire software development engineers for positions in Seattle, London, and India.
I was offered a Software Development Engineer II position in Seattle, US. Now I'm waiting for the results of the H1B visa lottery which should be coming within days, and see if I'm lucky enough to be selected!
I was offered a Software Development Engineer II position in Seattle, US. Now I'm waiting for the results of the H1B visa lottery which should be coming within days, and see if I'm lucky enough to be selected!
Anyway, I was really glad at the amount of feedback I received after sharing my experience with Amazon especially from Computer Science and Engineering students.
Apparently, many of them didn't know that the big software companies like Amazon and Microsoft regularly hire from Egypt and that there are MANY Egyptians working in the US and Europe for companies like Microsoft, Amazon, Facebook, Google, and even more.
Maybe that's because people no longer share their experience. I'm very glad I did.
Now to the important question: How to prepare for the Amazon interview? Same way you prepare for any other interview at a big software company:
Don't just study for the interview, but learn to become a better developer and continuously learn to improve!
That's what I'm going to talk about her. I will talk about my personal experience, how I improved, and how anyone else can also do the same.
- Learn at least C++, Java, or C# very well. It would be better if you learn C++ along with either Java or C#. Read about them and make your choice. For C++, I started by reading "The C++ Programming Language" by Bjarne Stroustrup, then "Professional C++ - Wrox". Some suggest "Object Oriented Programming using C++" too especially for beginners.
- Study Mathematics well, especially Discrete Mathematics. This MIT course is a good start http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-042j-mathematics-for-computer-science-spring-2005/index.htm
- Read the book "Introduction to Algorithms". You don't have to read about the very advanced topics and know how to implement Red-Black trees. Just read the basics and watch the online video course here http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-introduction-to-algorithms-sma-5503-fall-2005/video-lectures/. You should at least watch lectures 1-8 and 15-17. You should know about Linked Lists, Stacks, Queues, Heaps and Priority Queues, Binary Search Trees, Hashtable, Graphs. You should know Quick Sort, Merge Sort, Counting Sort which sorts in O(N) time! You should know about order statistics and the median, and how to select the kth smallest element(s) in O(N) using the quicksort partition routine. You should know how to implement hashtables and how they work, and how to do depth-first search and breadth-first search, topological sorting, and how to find the shortest path using at least one algorithm like Dijkstra's.
- JOIN ACM! If you're still a student, you have to do this. I didn't, and you can definitely become a good developer and very good at problem solving even if you didn't join ACM, but it helps a lot.
- Read the following books and try to do your best to solve the problems "Programming Interviews Exposed", "Cracking the Coding Interview", "Algorithms for Interviews", and "Programming Pearls" which is a bit old but gold.
- Become a problem solver! Join TopCoder and CodeForces, LeetCode, and participate in competitions and SRMs!
- Watch the very interesting videos here by Mostafa Saad on the topics of your interesthttps://www.facebook.com/ArabicAlgorithmsSeries, and try to solve the exercises at the end of each video. These are some great videos about very interesting problems related to Graph Theory, Dynamic Programming, Number Theory, and more. They definitely can speed things up and help you become better at programming competitions!
- Read about operating systems. Understand threads and different types of locks. Read about mutexes, sempahors, critical sections, spinlocks, read-write locks and how paging is done. Read about interrupts and interrupt service routines and understand computer architecture.
- Read on Object Oriented Design and understand design patterns. Read this book "Design Patterns: Elements of Reusable Object-Oriented Software"
- If you already graduated from college, try to work for a company where you will learn a lot! Amazon, Google and Facebook care a lot about scale! Try to find a company where you will work on scalability problems.
- While interviewing, just relax :) The interview is going to be challenging and a lot of fun. Communicate to the interviewer all the time and let him know what's in your mind. Try to solve the problem really hard, but if you're stuck, he'll probably jump in with hints. If he does, really think about them to guide you through the way!
- You're going to meet people who work on very interesting projects used by hundreds of millions around the world. It's going to going to be a fun experience that you can learn a lot from. Have fun!
Good Luck :)