Future Software Engineers, read this article before and during your placements
At this time of the year, there will be job placement fever in most colleges, and students will go through a lot of tension and pressure.
If you are a student who's feeling unbearable pressure, let me assure you that things will change, and this isn't the end. Don't be miserable as I was; at least be happy during your farewell and convocation.
Now that I have discussed the mindset you shouldn't carry, let me give some guidelines on how I prepared for my interview season during college.
My goal during the placement season was to get a job at a technology product-based company which pays decently.
If you are looking for guidelines on getting a job at banks, financial institutions, service-based companies, or job roles not related to Software Engineering, this article will not be of much help! :(
I received a lot of help from my brother, a Software Engineer, who shared guidelines on preparing for interviews. The advice I've shared below is an enriched version of my brother's advice.
These are the same guidelines I've used during my final year job placement, during which I got an internship and pre-placement offer from Amazon Hyderabad and then used it in 2017, which got me an offer from Flipkart Bangalore.
These guidelines might also work for the current final year college students, but there could be attributes that might be outdated. So, read and follow these guidelines with care.
In short, enrich my guidelines to meet the needs of you! 😉
General Suggestions:
- Read the interview experiences of other freshers to understand the questions asked.
- Keep your resume as a pdf in Dropbox, Google Drive, or any cloud storage service so you can get it whenever needed. Even better would be to create a short URL and memorise it. Here's my resume link: bit.ly/narendravardi-resume. Isn't it easy to remember?
- Create a GitHub account and upload all your projects to it. If you do not have projects, at least upload the problems you solve. This process will give you an understanding of what Git is.
Programming Language
- Choose a programming language and stick to it. Don't forget other programming languages if you know any.
- My choice of programming language was C++. Java has lengthy and verbose syntax and is tough to remember. (Java is my favourite language of choice, but I didn't use it)
- Even if you choose Java, pointers are frequently asked questions in the first round of placements, meaning you must study C or C++. So, go with C++ and not even C.
- Don't do development in Windows compilers like Dev C++. Use HackerRank compiler or repl.it, or Ubuntu for compiling C++ code.
- Learn C++ STL (for C++ developers) or Java Collections (for Java developers).
Sources for learning Data structures and Algorithms (DSA) :
- Algorithms course by Robert Sedgewick in Coursera.
- YouTube channel: mycodeschool (Deep respects to the creator).
- Excellent articles by fellow engineers. Visit hackerearth.com/notes
Problem-Solving Practice:
Get comfortable with coding the questions in the below links in the language of your choice. Solve all the easy ones first.
- https://www.hackerrank.com/domains/algorithms/warmup
- https://www.hackerrank.com/domains/algorithms/implementation
Time Complexity
Time complexity analysis is critical. Learn to calculate and remember the best and worst case scenarios of time complexity scenarios of all algorithms listed.
Practice and implement the following DSA
- Binary Search
- Bubble sort
- Insertion Sort
- Selection Sort
- Merge Sort
- Quick Sort
- Heap Sort
- Counting Sort
Reading resource
Practice resources
Data Structures
- Stack
- Queues
- LinkedList
- Priority Queues & Heaps
- Binary search trees
- Balanced Binary Search Trees (Studying these trees will be very advantageous)
- Binary Trees
- Hash Tables
Graphs
- Adjacency matrix representation of Graphs
- Adjacency LinkedList Representation of Graphs
- BFS
- DFS
Best reading resource for graphs
Object Oriented Concepts
Many people neglect Object Oriented Concepts, which are equally crucial in interviews. Know the below topics for sure.
- Classes and Objects
- Data abstraction
- Encapsulation
- Inheritance
- Overloading
- Polymorphism
- Access Control(private, protected and public)
I read the Mastering C++ book by K Venugopal.
Database
- Simple queries
- Joins (Reading Resource)
- Normalisation (1NF, 2NF, 3NF and BCNF)
- Difference between 3NF and BCNF
- Taking a course on this topic helps.
Operating Systems
- Semaphores
- Deadlocks
- Memory Management
- Context Switching
- Caching algorithms
- Taking a course on this topic helps.
Computer Networks
I'm not an expert on this topic.
- One of my friends, an expert in networks, told me to read all interview experiences in geeksforgeeks, jot down the networking questions, and search for their answers.
- Another friend told me to read all networking questions from previous GATE exams.
I'll leave it to you how you prepare for computer networks.
General Computer Knowledge Questions (2016)
- What happens when you enter a link in the browser and press enter?
- What happens when you turn the power on button in Unix operating systems?
- What is the difference between white box testing and black box testing?
- What is the difference between TCP and UDP?
- What is the Singleton Design Pattern (not quite often)?
Puzzles
Some companies ask for puzzles in interviews!!!
I suggest visiting geeksforgeeks (geeksforgeeks.org) and searching for fresher interview experiences. Jot down the puzzles asked in the interviews. Allot 30 minutes to solve those problems. If you cannot solve that problem, start reading the solution (which you can quickly get by Googling).
Power of forming teams
When I started learning to program, I was terrified of submitting solutions to online judges, and I couldn't even solve the most straightforward question. But, I got help from others who are good at programming. So, I would suggest forming groups to solve problems on HackerRank (or any other, for that matter).
Advanced
Dynamic Programming (DP):
- Try to implement a Fibonacci series using the DP concept.
- Understand the difference between DP vs Recursion using Memorisation.
- Solve SUMTRIAN problem on leetcode. This problem will help you understand DP and double recursion calls in a single statement. If you have solved them, you will have a more significant advantage over others.
Implementing advanced algorithms or Data Structures
- LRU cache
- Implementation of HashMap and LinkedHashMap
Closing Thoughts
This is an article from 2016 with very minimal modifications. HackerRank and HackerEarth might feel outdated in the Leetcode era, but I assure you, the foundation will be strong in both ways.
I didn't talk anything about Python programming language because it's risky. Around 2016, many companies didn't even include Python in their machine coding rounds. If you are a Python programmer, let me know the situation by commenting below.
Finally, if you feel overwhelmed after reading this article, take a short walk and revisit this later. Allot manageable time for each section and keep making progress steadily.
Have any queries? Comment below! :)
All the best!