How to prepare for coding interview of Google, Microsoft, Amazon & Facebook?
Many of us have question in our minds, how to prepare for the coding interview of dream companies like Google, Microsoft, Amazon, Flipkart, and Facebook. Well, you should start by strengthening your programming language skills. Get a good grasp over a language syntax and library methods, preferably Java or C++.
Once you have a good knowledge of a language’s basics. You should move onto data structures & algorithms.
For data structures & algorithm, Introduction to Algorithms by Thomas H. Cormen is a very well written book. Every aspiring software engineer learning about Data Structures and Algorithms, must read it once. You can also study from online tutorials:
While studying algorithms & data structures, try to code the problem on your own first, writing on paper or coding on a compiler. You must practice writing the code. Don’t try to memorise the code, rather try to solve the problem first. Try to understand and implement the code yourself for once. While understanding the problem, you must analyse the time complexity of your solution in Big O – notation. This Know Thy Complexities! cheatsheet might come in handy. And try to optimise the time and space complexity of your solution, iteratively.
Major data structures
- Linked Lists
- Binary Heaps
- Divide & Conquer
- Major Sorting algorithms
- Dynamic programming
- KMP (Knuth Morris Pratt) algorithm for string search
- Depth First Search (DFS) & Breadth First Search (BFS)
- Minimum spanning tree
- Shortest path
- Dijkstra’s (Single source)
- Floyd-Warshall’s (All pairs)
Practice, practice and practice writing the code. You can practice by participating in coding competitions on sites like Codechef, Codeforces, Spoj, Hackerearth etc. Or practice problems from Geeksforgeeks & LeetCode. Once you are confident on your programming skills, prepare for puzzles and design (Design patterns) related problems. Also revise your Database and Operating systems concepts. Practise writing a few SQL queries involving “joins”. In the end, work on your soft skills – Do a few mock up HR interviews. Read up the answers for standard cliche’ questions like what are your strengths/weaknesses, why this company?
Getting an interview!
Although offer decisions are mostly based on your performance in the coding interview, it’s your resume and your prior experience that lands you the interview. Both students and working professionals benefit from additional coding experience. So it’s always better to get your hands dirty with some coding projects.
For students this could mean:
- Getting an internship.
- Preparing for college minor and major programming projects intensely.
Following points are applicable to both professionals and students:
- Make something (Android/iOS/Web app) of your own. Doing something entrepreneurial will impress almost any company. It shows your initiative skills and “get the things done” attitude.
- Contribute to open source community. There are several open source projects on Github (maintained by the community) – where one could create a pull request for a new feature or a bug fix in an existing project.
Creating a perfect resume
It is strongly advised to keep the resume length upto 2 pages when going for a coding interview. The reason for doing this is that, recruiters only spend a fixed amount of time (about 30 seconds) to read your resume. If you would only put the impressive items, the recruiters are sure to see them. But putting additional (unnecessary) things in your resume would dilute the relevant information. Some points to remember while writing your resume:
- Employment history: Your resume should not include a full history of every role you ever had, some might not show your intelligence and aptitude like – winning in a sport tournament. Mostly add your technical roles, if you are applying for Software Engineering post.
- Projects: You should add only significant projects with the technical stack used in that project. Try to exclude details like finished on deadline, under the guidance or, references, unless they make you look better.
- Programming languages and Softwares: It’s advisable to add technical softwares and operating systems like Mac, Linux, Visual Studio etc. While adding programming languages, also include the level of proficiency in that particular language. For instance: Java (proficient), C++ (expert), exposed to : Python, Ruby.
Expanding your network
In the past few years, LinkedIn has proved to be a boon for both the recruiters and candidates. It has created a place for itself in the industry as one of the best job portal, especially after being acquired by Microsoft. So it’s always beneficial to create a splendid profile on the website because that’s where from, many recruiters hunt for the candidates. Also, it is necessary to follow and connect with important people on the website. Try to add your connections only from within your working domain and employed by magnificent companies. It is the best way to create a “vast & close” network. Better the network, better the opportunities.
NOTE: Many of the points in this post are from the famous book Cracking the Coding Interview by Gayle Laakmann McDowell.
All the best!