Conducting the interviews is a part of day-to-day job for any senior software developer. During my career I have conducted more than 200 interviews trying to find the best, the smartest, and the most talented software developers, test engineers and program managers for my companies. There is no doubt, interviewing is a skill worth developing for performing interviews and recognizing great talent, high technical level and passion for technology. From the other side of the table, going through the interview process, answering questions and proving yourself to be a great match for the position you desire is no less important.
Oftentimes a great performer and highly technical person starts searching for the new job and fails to get through even the prescreening stage, while a junior developer, recently graduated from the university, breezes though and impresses even the toughest of technical interviewers. What is the secret? How one can prepare for the interview in the companies well-known for the highest level of technical standards, toughest interviews and unsolvable problems? What are the most common elements of any technical interview?
Thinking about these questions and chatting with my friends and colleagues, I formed the idea of "Interview Patterns". The idea is quite simple but often overlooked by job seekers. In analogies with mathematical basis which is the minimal set of vectors necessary to define all other vectors in the space, there are basis interview questions and techniques which would let you solve big subset of related problems. The ability to recognize interview pattern (i.e. what is the intend of the question) and apply basis solution would not only give you powerful tool to solve the problem but also impress interviewer with your structural approach.
There are number of authors also looking on technical interviews with pattern oriented approach such as Interview Patterns for Tech Jobs by Chris Tuttle - Seattle Mind Camp 4 2007-07-01 (Video) or even ironical Thirteen Patterns Of Programmer Interviews from "Typical programmer".
However I am looking on this problem with slightly different angle. Patterns technique is certainly not intended to teach you new algorithms, data structures or technologies. It has the sole purpose of preparing you for the technical interview process. Even when an actual interview questions may differ from the questions provided here, the chances are good that these new questions will be based on already existing ones or be a combination. As a simple example, sorting algorithms are the essential prerequisite for some search and indexing problems, and your knowledge of standard algorithms can give you more time to think about new and challenging parts of the task. I will try to provide different solutions but don't take my work for it, play with the sample code, improvise, try to modify it while taking into consideration different constrains–reduce memory size, optimize performance or slightly modify task requirements and post your comments.
Suprisingly, I start getting lots of emails telling me what this approach might also work not only for technical interviews but also for any type of interview, including interview for financial positions, licensing questions, etc.
And again the idea is to don’t memorize the individual problems and solutions, but rather understand the core concept and be ready to apply it for the set of different problems. For instance, a common mistake of an experienced professional is to be too limited by the area in which he or she has been working lately. The interviewee feels frustrated and disappointed while getting questions from different fields, about new technologies and regarding different methodologies. At the same time the interviewer is trying to understand if this person is smart or just knowledgeable. Is this person willing to learn or is the job seeker very rigid and inflexible? How would she or he approach a problem without knowledge of the correct solution? That’s why if you have not been active in the job market for a while, you should not be surprised to see many new interview questions, coding problems—as well as new twists on well-known coding tasks. In other words knowing solution to the basic problem will give interviewee a key to solve hundreds of similar technical problems.