Many interview prep books focus on the bread and butter coding interviewing questions, but in real interviews your interviewer may pose other types of questions. It is important to be comfortable and come prepared for these other types of questions which depart dramatically for coding questions yet still may bear considerable weight in your interview evaluation.
Behavioral & experience
These are the standard non-technical interview questions where the interviewer asks about what you did in particular scenarios and how you performed in the roles listed on your resume.
Language specific knowledge questions
There is a manageable set of questions for each common programming language. There are questions for uncommon languages too should to encounter a company that emphasizes their use of some of the lesser known languages. Usually these questions attempt to probe for your knowledge of some differentiator and key feature of the programming language. For example, virtual functions often come up as a question in C++ interviews. As a means for dynamic dispatch in C++, it is central to C++'s notion of polymorphism. For the purpose of the interview, however, the interviewer would most likely want to see if you know how virtual functions are implemented and what are they like underneath the hood besides what they are and how to use them. For Java, an interviewer may ask about the how the synchronized keyword works.
Coding on a whiteboard, takehome, pair programming, in front of computer
This is your standard type of programming problem solving. There is some variation from interview to interview in this category. Coding on a whiteboard is a base case, but adventurous companies are now testing candidates by inviting them to code on a computer furnished by them, with a choice of IDE, text editor, and compiler/interpreter. Though coding on a computer may be more natural, you are still under artificial time pressure. Moreover, with all the tools available to you, I would say that you are sometimes held to a higher standard than whiteboard interviews because in a whiteboard interview an occasional syntax error won't be blatantly obvious whereas on a computer, it is a deal breaker.
Find the bugs & code review
These questions can be very tricky. It is also more challenging to get prepared for these since the material out there is limited. To do well, you need a good amount of language-specific knowledge, since many of these questions are grounded in implementations in a specific language sometimes with an emphasis on the correct usage of language features. You need to be able to identify bugs, efficiency issues, and style issues. The best way to get prepared for these is to give and get code reviews, but short of that, read up some coding style and pitfalls in languages. Books such as Effective C++ and Effective Java should give you a good head start on what exactly to watch out for.
System/API design
These can seem daunting to those new to the interview process. Although it may seem that the interviewer expects you to have experience designing and implementing some huge system used by millions or billions of people, actually they just want to check that you know the language, framework, and trivia of scalable computing. In particular, they want to know if you can explain what are the common components in large scale systems and what tradeoffs are involved in using them. Common elements are load balancers, databases, and sharding of data stores. For API questions, you can prepare by getting familiar with some of the exemplary APIs out there such as Amazon AWS's S3 or the Flickr API. Get to know the lingo: what is REST and what makes one API more RESTful than another?
Other knowledge
These will cover the gamut: networking, HTTP, distributed systems, OS, compilers/runtimes, machine learning, architecture.
Stay tuned. I'll go over each of these in the practice sessions and in blog posts.
Comments
Post a Comment