It's no secret to anyone who knows me that I've been looking for a job for the last few weeks. I wanted to share a terrific resource that every single software engineer should know about as they get ready for technical interviews.
Companies, of course, have a range of strategies for interviews but typically the best ones (for us Software Engineers) are going to ask tough technical questions. Many companies make it a point to focus on fundamentals, figuring that engineers who know the fundamentals will be better at learning new things. It doesn't matter what language, what operating system, what environment you are interviewing for, if you know your algorithms and data structures you are going to be more impressive in any interview.
I've been out of school awhile, I hadn't even thought much about different kinds of sort algorithms or how to create a balanced binary tree in a long time. Most of us know that our languages typically have libraries that implement these things and that's good enough. But a recruiter for one company happened to mention that their engineers recommended that candidates study The Algorithm Design Manual by Steven S. Skiena. This was one of those companies known for asking fundamental computer science questions as part of the interview process. I figured what the heck, its good practice for any interview and so I ordered a copy from Amazon.
Wow did I quickly learn how much I had known from school but hadn't thought about in ages. This book covers many things that any good engineer will use in their career to develop high quality solutions. You may remember graphs are a great data structure, but do you remember how to calculate the shortest path through one, how about a minimum spanning tree? Do you remember what this is? You should. We all know about NP complete problems and how we have to use heuristics to solve them as best as possible... how many nodes does your graph have to have before you have to give up on an exact solution? 10, 50, 100? (It's a lot closer to 10 than you might remember).
We all probably also remember that a few really good sort algorithms are really fast and the rest are crap. But there are differences between those best algorithms and certain ones are better for certain circumstances.
Every chapter is well written, with real world examples, sample code, and practical advice. Even better, the chapters are filled with exercises to give you a chance to practice and make sure you understand the material.
I also discovered Professor Skiena has his lectures available online. A good option for those who don't want to purchase what is admittedly a somewhat expensive book. And a great way to either supplement the material or learn the material for those who prefer an oral presentation. Here's the link: http://www.cs.sunysb.edu/~algorith/video-lectures/.
Here's a link to the book on Amazon (note this is NOT an affiliate link, I am not making any money off this): http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202/