Last year, I interviewed for software engineering roles at Google and Facebook. I created the following curriculum for myself. For personal reasons, I had to continue working at my then day job (also as a software engineer), which meant that I could, at most, devote 2 hours per day, and 2 - 4 days per week (so, about 4 - 8 hours per week) , to my course of preparation. It took me 4 months to get through it all.
Basics
- http://www.hiredintech.com/algorithm-design/
- BOOK : Cracking Coding Interview
- BOOK : Programming Interview Exposed
- http://www.programcreek.com/2012/11/top-10-algorithms-for-coding-interview/ (100s of solved questions)
- https://www.topcoder.com/community/data-science/data-science-tutorials/ (Use CLRS and Skiena as references, to understand some algorithms in depth)
- http://www.hiredintech.com/system-design/system-design-intro/
Intermediate
- Dynamic Programming (video 1, video 2)
- http://www.techinterview.org/
- http://apps.topcoder.com/wiki/display/tc/Algorithm+Problem+Set+Analysis
Advanced
- https://projecteuler.net/
- Distributed Systems : http://book.mixu.net/distsys/single-page.html
Did it work out?
Yes. I got offers from both companies and chose to work at Facebook.