In November 2015, I had the great opportunity to spend some time in Dublin to demonstrate my knowledge and skills in an interview session at Microsoft. Although there are many articles on preparing for interviews at big companies such as Microsoft, Google, Facebook etc., this is my personal reading list to prepare for a Microsoft Interview.
I applied for an internship as Software Engineer during my master degree at RWTH Aachen University. Therefore, I already took several courses regarding the foundations of computer science (including object oriented/functional/logic programming, data structures, databases, software engineering, operating systems, theoretical computer science, calculus, linear algebra, discrete mathematics, probability theory etc.). The interviews are not specific to a particular programming language. Based on my background and prior experience, I chose to prepare using C++. Furthermore, I already completed several internships and worked in web development for some years.
There are many great resources on coding interviews in the web. Furthermore, several preparation books for coding interviews have been published. Personally (by recommendation of colleagues and friends), I bought the book by McDowell: Cracking the Coding Interview, 6th Edition, CareerCup. It is great to give a general overview over the process of such coding interviews at different companies and provides many examples and exercises.
The following readings and topics are independent of specific programming languages and are also covered in the official reading list (which can be found here). I explicitly revisited these topics, while not explicitly going over other topics (such as mathematics and databases among others).
- Algorithms and Data Structures: I used the book by Cormen and Leiserson: Introduction to Algorithms, 3rd Edition, MIT Press. In addition (or as alternative), I used the slides from the corresponding lecture at RWTH Aachen University, held by Prof. Katoen; the slides are available here. Unfortunately these are in German.
- Software Engineering/Project Management: I used the book by Sommerville: Software Engineering, 9th Edition, Pearson. In addition, I also used the slides from the corresponding lecture at RWTH Aachen University. The lecture was held by Prof. Rumpe and slides are not available publicly.
- Operating Systems: I used the book by Tanenbaum and Bos: Modern Operating Systems, 4th Edition, Prentice.
- Reference: Before starting my studies, I bought the C++ Primer by Lippman and Moo, 4th Edition, Addison Wesley. The book is great to study specific details of the C++ programming language in detail and get useful examples (e.g. for popular questions regarding pointers, strings, arrays, object orientation, templates etc.).
- Advanced: Right before the interview I acquired Effective C++ written by Meyers, 3rd Edition, Addison-Wesley. The book discusses several important aspects of every-day C++ programming and gives detailed examples.
- STL: The Standard Template Library is an important aspect of C++ programming. Although there are many books available, I prepared using the reference at en.cppreference.com. In particular, I focused on the most common data structures such as
unordered_mapincluding runtimes, trade-offs and implementation details.
- C++11 and C++14: Here, too, the reference at en.cppreference.com is useful.
Finally, I also read a bit about Microsoft; both concerning recent news as well as history. Up-to-date news can be found both on Microsoft's website as well as news portals such as TechCrunch, Wired, The Verge and similar websites. For example, Wikipedia offers an article on the history of Microsoft here. Specific dates and numbers can also be found on Microsoft's website, for example regarding the Windows operating system, see here. Some numbers and facts can also be found here.
Update. After revisiting this article, I updated the links and added additional resources.
There are many resources on the web that might help preparing for interviews. Here are some of them I found useful:
- Reddit list of coding questions;
- GitHub list of interview questions (organized by topic/programming language);
- GitHub list of interview resources;
- GitHub repository for "Cracking the Coding Interview";
There are also more and more websites providing online programming exercises that allow to code online and/or grade the solutions. Some of these websites include LeetCode and HackerRank.