Freshers guide to prepare for Software Engineering technical interviews
Strategies every fresher must follow to get the best job as a Software Engineer
This article talks about how to prepare for technical interviews for SDE role as a fresher, and the lessons that I learned through my interview experiences as a fresher. It will help you understand how to start preparation so that you can get a good job offer at a product based company as a SDE / Software Engineer.
If you are looking for a job via college campus placements, companies usually start visiting colleges for hiring right from the start of the degree final year. Companies may have different requirements based on their job profile, packages, and engineering grades. I would suggest you to start planning and preparing for interviews atleast three months before the first job interview.
Start solving aptitude questions. As you are a fresher, the companies generally conduct aptitude tests as a first round to filter out students based on some threshold of minimum marks in these tests. You may start solving aptitude questions on websites like Indiabix, as it has almost every basic topic of aptitude covered.
I believe that you must have solved some basic programming questions in college theory and practical assessments and have basic knowledge of programming languages such as C, C++, Java, etc. However, if you are not much into programming but want to get into a good company as a SDE, you still have good time. Pick any one of the above language and start going through the basics like data types, loops, function definition and declarations, program flow, etc. Geeksforgeeks is the best platform according to me for getting started and knowing the basics of language. For example: if you have picked Java, you can go through https://www.geeksforgeeks.org/java/. It starts with the very basic concepts and goes all the way till advanced concepts like Multithreading, OOP using java, etc.
Start solving programming questions on leetcode. Start by solving easy level questions, and gradually move to medium level only when you are comfortable enough in solving easy questions. Practice daily for at least an hour so you get your basics cleared before your campus placements.
Thoroughly read through core topics such as OOP, databases, operating systems, and networking, and understand how various things work. Personally, I prefer GeeksforGeeks is the best website for understanding these concepts and you can get all the relevant topic related to Software Engineering there.
Data Structures and Algorithms (DSA)
After you have picked up the language you are comfortable with, start understanding various data structures and algorithms. Again, Leetcode and GeeksforGeeks are the best websites I would recommend for getting good at DSA. Leetcode also has filters based on difficulty level or topics, which you can use to get started initially.
I have provided a list of data structure and algorithms below that you must know and practice before appearing for interviews. You can filter them in leetcode and try to solve problems one data structure/algorithm at a time, starting with easy level and moving to medium level questions once you are comfortable solving easy ones.
Data structures
Arrays (1D and 2D Arrays)
Linked List (Single and doubly linked lists)
Stack
Queue(Simple, circular, priority and double-ended)
Trees(Binary Tree, Binary Search Tree, Heap structure and Trie)
Graphs
Hashing
Algorithms
Searching (Linear and Binary Search)
Sorting (Bubble, insertion, selection, quick, merge sort, etc.)
Recursion
Pattern searching
Graph Algorithms(BFS and DFS)
Greedy approach
Dynamic programming
Divide and Conquer
Backtracking
Analysis of algorithm (Big O)
There are also many advanced data structures and algorithms, but the above listed are the most important ones that you should thoroughly understand first before moving on to advanced DSA.
Build projects
Most of you might already have worked on building projects throughout your engineering years. If you haven’t, try to build some good projects using various technologies.
Building projects does not mean making a very simple website or an application that would have built in a day or two, or any high-end project that has a thousand features in it. Just try to make something significant enough so you understand how the project development works in general and also try to explore some important concepts like MVC, APIs, etc. Learn about Git and start using git commands while making your projects.
If you have no idea what kind of projects to make, I would suggest learning technologies like Ruby on Rails or Node.js, Express.js, etc and make a web application using these technologies for starters.
I strongly believe that projects and internships are as important as learning and practicing data structures and algorithms.
Data structures and algorithms will help you in improving your problem-solving and debugging capabilities, and projects will help you gain confidence in building some real-world stuff and understanding the concepts which are commonly used in software development. Apart from that, it makes your resume look good and gives an impression that you have your hands on many technologies(not just DSA) and you are a self-starter.
If you still have no idea about any topic for projects, here are some of the simple yet significant case studies and ideas I would suggest you can work on:
A news-based web application where admin can create and manage users and users can publish, edit or delete their news.
Making a RESTful API of an e-commerce website that facilitates CRUD(create, read, update, delete) operations on products and comments over products.
Developing a mobile application to manage your day to day events.
A chat-bot or any face recognition based application.
Learn basics of System Design
Companies might also have a round where they will ask you to design some system, like movie e-ticketing system, chat application, elevator system, etc. In this round, interviewer usually want to know your approach on building these systems.
The usual steps on approaching these kinds of questions are-
Try to understand and note down the scope of the problem. Ask questions to clarify incase of any ambiguity.
Note down functional and non-functional requirements.
Start exploring and thinking on
How end-users will interact with your system(ex: front-end UI),
How frontend will interact with backend(ex: using APIs),
How APIs will be designed(i.e. what will be request / response look like),
How will the data be stored in DB(i.e. what will be your db schema, what tables will you create, will you have any foreign keys, indexes, etc).
For this, you should know the basics about APIs, DBMS, OOPs, ER Diagrams, etc.
There are other things to think about as well, like-
How will your system handle failures (ex: using resiliency, circuit breaker, etc)
How will your system handle scale ? (ex: increase read/write replicas of db, etc)
If your system includes booking or monetary transactions, how will you ensure strong consistency ? (ex: by using transactional db queries)
If you are able to go through, understand and evaluate above concepts as well in your system design interview, then it would be a great deal.
Usually in system design interviews, there are other advanced topics as well but they are mostly expected from the experienced person who has worked on scalable products.
Extra-curricular activities
Two to three months before your first interview is not the right time probably for starting to do some extracurricular activities, but if you haven’t done anything other than academics and technical profile, there are chances that the recruiter may not consider you an ideal candidate atleast as a fresher.
Companies want to hire people that are something more than just academics. If you were ever into any student or technical bodies of your college, or have been involved in any program outside college, have worked for an NGO, or have been into sports or any art, make sure you specify that in your resume as an extra-curricular activity.
If you haven't done anything yet, best way is to try to volunteer for some NGO or do some social work. You can mention this in your resume and it will help you in developing your personality and develop empathy as well :)
Build your resume
Ideally, your resume should be of one page and should highlight your education, work experiences(internships), projects, achievements, publications(if any) and extra-curricular activities.
Make your resume look professional, clean and crisp. Always have 3-4 copies of your resume handy during your interview. Also have a soft-copy in PDF and save as "RESUME_{NAME}", ex: RESUME_JOHN_DOE.pdf
Prepare the commonly asked questions in advance
There are some standard questions that will be asked in almost every company interview. Most of them are behavioural questions such as “Tell me about yourself”, "Tell me about situation where you had a tight deadline and how did you manage it", “Where do you see yourself in five years?”, “Why would you like to join this company?”, "How do you handle rejections" and so on.
Come up with the best and honest answers for such behavioral questions in advance. You don’t want to be a person who is unprepared for such frequent questions and make up a satisfactory answer during your interview.
Always remember, your first impression can affect your image that the interviewer has, so make it the best.
Also, research well about the company that you are going to apply for, and understand what they do, what technologies they use, any recent news like new funding round, etc and make a list of relevant questions about the company.
Usually, at the end of the interview, the interviewer asks whether you have any questions for them. Don’t ask obvious questions like “What does your company do?”, you should already know that. Ask something about their products and any current projects they are working on. This helps them know that you are genuinely interested in working with them.
During your interview-
Wear proper formals clothes and shoes.
Greet your interviewer when you enter the room.
Always ask before you sit. (if at all it's an onsite interview ;) )
Make yourself comfortable and sit with a straight back.
Maintain eye contact with the interviewer and use proper body language when required.
Speak clearly and confidently.
Most importantly, if you don’t know an answer, don’t try to fake it. It is always better to tell the interviewer that you don’t know the answer. They may not disqualify you if you don’t answer the question but faking an answer will surely make you disqualified.
After the interview process is over, wait for the results. If you don’t get selected at a company, don’t be sad and lose hope.
“Don’t cry because it’s over, smile because it happened.” ― Dr. Seuss
Try to understand where did you lack and what mistakes did you make.
Learn from your mistakes and work on improving it for the next interview. Tons of companies visit the campus for recruiting purpose and are out there, so actively apply for jobs at good companies and keep trying until you finally get selected.
Do let me know in comments if this article helped you :)
Also, please share this article on LinkedIn or Twitter or any preferred social netwok so that it can help others who are also preparing for interviews.
You can follow me on Twitter and LinkedIn for more such articles or if you need any guidance or want to curate your resume.