Interview Preparation Roadmap
To crack a great job that you have been dreaming of, the most important step is to nail the Interview. In Software Engineering, the interview procedure is pretty much standardized across most companies and comprises of the following phases:
Coding Test: the purpose of the Coding Test is to filter out the bad candidates who certainly do not have much idea of Coding or general Computer Science.
Interview Round 1: the objective of the Interview Round 1 is to assess the basic programming and problem-solving skills of the candidate.
Interview Round 2: this is the final round to confirm that the candidate is hired.
Some companies also conduct HR round, but it is uncommon in Software Companies.
Let us now delve into the details of each of these phases.
Coding Tests are typically conducted to filter out bad candidates. In a coding test, companies typically ask 2 - 3 coding problems that involve Data Structures and Algorithms. You are expected to solve the problem in a span of 2 - 3 hours of time. There are several test cases provided and your code should pass all of the test cases. Most companies do not have a partial marking - you get full marks if all test cases pass or else you get 0 marks.
In coding tests, the problems could be from a diverse set of topics from Data Structures and Algorithms. Here are some of the most important ones:
Arrays/Vectors/Lists: these are the most common ones. You could be given a simple array-based problem which would involve some logic to obtain the answer. For example, finding duplicates in an array, maximum continuous subarray sum, etc. These problems are most common not only in coding tests but also in interviews. Typically, the problems are easy and it should take you no more than 30 minutes to crack these type of problems, provided you have practised well. To get well-versed in this topic, aim to solve some 50 - 100 problems over a period of 1 - 2 weeks. At the end of this sprint, you will be familiar with almost all types of ad-hoc problems and you would be able to correlate a new problem with a problem that you’ve already solved. SPOJ, TopCoder, CodeForces, CodeChef, HackerEarth, etc. are all great problems to hone your skills in this section.
Dynamic Programming (DP): this is the 2nd most common domain from which problems are quite common in Coding Tests. Problems from DP range from simple 1D array problems to complicated 3 dimensional DP problems. DP is easy provided you practise a lot of problems from it. The problems in DP mostly have a specific pattern which is easy to observe if you are able to break down the problem into sub-problems. There are gazillions of online resources on learning DP and practising DP problems. Topcoder has some great problems on DP. You can filter problems by difficulty level and start with the easiest one. Gradually, you can increase the difficulty. Basically, start with Div 2, level 1 and gradually proceed to Div 2, level 2 and then Div 1, level 1. For most interviews, it would be sufficient if you are able to solve Div 1, level 2 of Topcoder. Aim to solve no less than 30 - 50 problems on DP to get a firm grip over it.
Trees and Graphs: this is another extremely common topic. Lots of Coding Tests involve problems from Trees and Graphs, particularly from Binary Search Trees. Problems could be as simple as traversing a tree in Depth-First Search manner and could be complicated involving DP in a Tree. You can use the above-mentioned resources to study Trees and Graphs as well. Solve a diverse set of 30 - 50 problems ranging across difficulty levels to master Trees and Graphs.
For Coding Tests, keep the following points in mind:
Right at the beginning, skim through all the problems quickly to get an idea of the easy ones and the difficult ones.
Start with the easiest problems first. Solving it will boost your confidence and you’d be able to do much better in other problems.
If you get stuck in a particular problem for more than 5 - 10 minutes, skip it and move to other problems.
Use the library functions heavily to arrive at a solution faster. No need to rewrite something which is already available as a part of the programming language.
In interview rounds, you are usually sitting 1 - on - 1 with an interviewer who would be asking you questions related to various topics. Questions could range from your likings and dislikings to the projects on your resume. You should, therefore, be thoroughly prepared for the same. Aim to prepare the following:
Projects on your resume: the interviewer may be interested in certain projects on your resume and they would certainly want to know more about the project. In particular, they would be interested in knowing your contributions to the project. Therefore, you should be absolutely comfortable explaining your projects. The interviewer may ask you about the tools and technologies you used and you should also be familiar with them. For instance, if you did a Java-based project, the interviewer may ask you general questions about Java like Object Oriented Programming in Java, garbage collection in Java, etc.
Interview problems: be prepared with 1 - 2 medium to tough level problems in which you would be asked to find a solution, explain it to the interviewer and implement it in the programming language of your choice. Most interviewers don’t really care which programming language you are using for the implementation, even if they are not very familiar with the language. However, C, C++, Python and Java are the recommended ones since most interviewers are familiar with at least one of these languages and so, can correlate better. Remember - your relative performance matters far more than your absolute performance. Most companies compare candidates and then choose the best one, rather than creating an absolute benchmark.
General questions: some interviewers may ask you general questions related to you, your family background, your hobbies, likes and dislikes, etc. Be frank and open and do not hesitate. The objective of such questions is not to judge you, but rather to give you an opportunity to stand out of other candidates. For instance, if you talk about something interesting that the interviewer remembers, it would be a good plus point for you.
Often at the end of the interview, you may be asked a simple question - ‘do you have any questions to ask?’ Now, this is often quite tricky to answer. Here are some recommended answers:
Generally, it is a bad practice to ask the interviewer ‘how did I perform in the interview?’. Remember, most companies evaluate you relative to other candidates and so, the question in itself is irrelevant.
Here are some great resources for Interview preparation:
Follow below phases to become a great software engineer