How to prepare for top MNCs?
This article is a reflection of my learnings, experiences, and the practices I’ve followed over the years. It is NOT the only method to improve coding skills, strengthen data structures (DS) and algorithms, or enhance problem-solving abilities. I repeat, this is NOT the only way. There are approaches I couldn’t follow due to time constraints, or wasn’t aware of at the time. Please feel free to share any important aspects I might have missed.
Language
The choice of language has always sparked debate among aspirants. It’s essential to master one language deeply, understanding its nuances, rather than jumping between languages. Why? Because when faced with a problem, wondering which language to use can distract you from problem-solving. The focus should be on solving the problem — implementation comes after. Switching languages mid-solution can derail your thought process and hurt your performance in interviews. If you can solve a problem in language ‘X,’ you’ll eventually solve it in language ‘Y’ too. Learning new languages is just a matter of time. In the long run, the ability to solve problems is what matters, not the language you use.
Personally, I switch between C and C++. When time is limited, I prefer using STL (Standard Template Library) rather than reinventing the wheel for a linked list, for example. For projects like Android apps, I use a managed language because it’s easier. When automating tasks, like replying to birthday messages, a Python script is my go-to. The key takeaway? Master one language and learn others as needed.
Data Structures and Algorithms
Data structures and algorithms are fundamental and form the backbone of problem-solving.
For beginners, Fundamentals of Data Structures in C by Sahni Horowitz is an excellent starting point. This book provides a solid understanding of basic data structures, how they are implemented, and where they can be used. However, don’t expect to master advanced data structures here. Once you’re comfortable implementing basic data structures in your chosen language, move on to learning algorithms and solving problems.
Many websites, like GeeksforGeeks, present problems in an unstructured way, making it hard for beginners to gauge the difficulty level. Data Structures and Algorithms Made Easy by Narasimha Karumanchi is a great resource after mastering the basics, as it organizes problems by difficulty level. Try to solve problems on your own before checking the solutions. Once confident in DS, start solving problems on online platforms. GeeksforGeeks is a great place to start.
For algorithms, Introduction to Algorithms by Cormen is a must-read.
Advanced Data Structures

Basic data structures might not always suffice for complex problems. For instance, tasks like implementing a prefix-based search for a phone contact list or finding a dictionary word from a jumbled sequence of characters require advanced data structures. These include TST, Trie, Suffix Tree, Suffix Array, Fibonacci Heap, Segment Tree, Gap Buffer, Rope, Skip List, and K-Dimensional Tree, among others. While learning to implement these is essential, it’s equally important to know when to use each one.
Problem-Solving
You may know data structures, but knowing when and how to use them is key. Problem-solving is about dividing a problem into smaller modules, solving each module, and then combining them. For example, consider LinkedIn’s “degree of connection” feature. How would you implement it? Does your solution handle scalability when user numbers increase tenfold? These are critical questions top companies are interested in. How you approach and break down a problem is often more important than the code itself.
Dynamic Programming (DP)
Dynamic programming deserves its own mention due to its complexity. Even with experience, a new DP problem can still surprise you. The more you practice, the better you’ll recognize patterns. Google, in particular, often asks DP problems during interviews, so it’s essential to master them. GeeksforGeeks and TopCoder are great places to practice dynamic programming.
Competitive Programming
Participating in competitive programming is an excellent way to improve your problem-solving skills and perform under time pressure. Engage with platforms like TopCoder, CodeChef, and SPOJ. Competitive programming helps sharpen your skills for real-world scenarios and interviews.
Design and Testing
Being proficient in DS and algorithms is crucial, but applying them in real-world scenarios is the next step. Vague problem statements require discussion and thoughtful design. For instance, how would you design a redo-undo feature? What data structures would you use to store web browser history? How would you implement an auto-complete feature? Consider scalability, concurrency issues, and performance. These are the types of questions that distinguish a good developer from a great one.
Testing is another critical aspect. Think of corner cases, such as YouTube’s infamous integer overflow bug in its view count. When writing code, always consider potential edge cases and design your tests to cover them. Writing robust code early prevents bugs later and improves your chances of success in interviews.
What Else?
In addition to coding skills, having a sound understanding of operating systems, networking, and database management systems (DBMS) is vital. The Operating System Concepts book by Galvin is a good resource for OS fundamentals.
Resume Building
Your resume is your first impression, so make it count. HR typically spends 20 seconds to 2 minutes scanning resumes. Keep it clean, concise, and elegant. If you have less than one year of experience, keep it to one page.
Key points:
• Include a header with your name, email, address, and contact number.
• Mention your proficiency level in each language (e.g., Proficient in C, familiar with Java).
• For projects, highlight key learnings, team impact, and, if applicable, provide a link to the project.
Do’s and Don’ts
• Do: Practice, write clean and readable code, handle all corner cases, and use pen and paper to practice code since interviews often lack compilers.
• Don’t: Memorize solutions or use obscure variable names. Think through multiple solutions and consider their trade-offs.