Switching jobs is one of the integral part of career in IT. Techies explore better work, better compensation, better work life balance and learning through job switching. But it is not that easy or straightforward to switch. With experience, interviews get more complicated and expectations keep getting high. Let me share my experience and if others can also get some benefits out of that.
Starting preparation and preparation time
I was not thinking to switch but I started getting messages from recruiters of different companies (mostly from startups). Thanks to my current org Amazon at that time, which I think played major roles that recruiters would reaching to me. I thought it is better to start preparing for interviews and be prepared at least. I didn't decide any timeframe to finish my preparation but it after approx 3 months I got interview call from Microsoft for interview.
Topics I prepared
- DS and algo
- Java
- Spring
- Hibernate
- Database -> Postgres, Mongo and introduction of various other types of no sql DB, like — graph DB etc.
- REST -> For microservice architecture
- Kafka -> for messaging communication
- Low level design and design patterns
- High level system design -> Not in much depth
- My work related project
Prior knowledge
- I was not in touch of DS and algo from past 2 years but I did lot of practice in college so it was not that much tough to start.
- I worked on Mongo DB so was having good understanding, postgres I brushed up my understanding.
- REST -> I was using at my job so was aware but not in depth about each concept
- Spring and hibernate -> It required lot of attentions.
- Kafka I was aware as I was using it but again not in depth.
My schedule
It was difficult for me to give time daily due to job responsibilities. So I decided to utilize 2 hours in morning daily and my weekends. I studied daily in morning approx 90% of working days and weekends or any public holiday, 5–6 hours approx.
Resources I used
- For Java I used https://javarevisited.blogspot.com/ and https://howtodoinjava.com/ to revise my concepts. Also searched on net java interview questions.
- For concurrency I purchased one book but couldn't go through it fully. It is really nice book — https://amzn.to/3YJpzdJ
- For coding I used Karumanchi's book and practiced from leet code etc. https://amzn.to/3M4CL5i Also I purchased one more book which is called best book for coding interviews but couldn't make full use of that due to time constraints. https://amzn.to/4crH0mh
- For REST and kafka, I searched random resources from net and mostly looked into interview questions.
- Same for spring and hibernate -> mostly I explored interview questions and important concepts.
Preparation Strategy
- I tried to find patterns of questions and how to solve those patterns and practice accordingly.
- We can't practice each and every question, so it is necessary to know concepts in depth and think towards problem solving.
- Always focused on finding multiple solutions, brute force, optimal, time and memory trade off etc.
- I was practicing on notepad and used to dry run my code and interviewers does and find issues and then correct it.
- I always started from easy level questions and slowly moved towards medium and difficult level problems.
- Always taking notes of concepts of types of questions giving me trouble.
- Understood my office project in depth and including its design, architecture and my roles and responsibilities in that project.
- For other tech topics, I went through frequently asked interview questions and important topics.
Deep dive into each topic
- DSA -> Array -> various operations on array, searching and sorting, different types of patterns, string, string manipulation etc. Practice problems on these topics. Stack and queues -> various types and implementations(like — circular queue, priority queue etc). Practice problems on them. Recursion -> practice problems Linked list -> various types and implementations and various problems on linked list Tree -> binary tree, BST, implementation, insertion, deletion, rotations etc. Few practice problems Heap -> Use of heap specifically for k-max or k-min problems Dynamic programming -> understanding the concept and practice on dynamic programming problems
- Java -> Deep understanding of collections. Thread and few programs on thread. String, IO, anonymous classes etc. Searched on net important interview questions for Java.
- Hibernate -> Hibernate validators, hibernate mappings, native queries, HQL, hibernate criteria, scrollable results, caching etc. Important interview questions based on hibernate.
- REST -> REST framework, various methods, error handling, important error codes, interview questions from net.
- Spring -> IOC, dependency injections, REST using spring, Hibernate with spring, spring security, important interview questions from net.
- Kafka -> Kafka architecture, important interview questions, message guarantee patterns etc.
- Projects -> Deep understanding of my work projects and understanding of my role in that.
- Low level design and system design -> I did random practice from net. But was not asked in interview.
Handling interview
- Be calm and confident, hold on your nerves. There are so many companies out there offering good package, learning opportunity etc. So there is not only one company.
- If you are not able to think about optimal solution at least explain brute force approach. Otherwise interviewer would give feedback that — can't come up even with brute force approach.
- Try to think few solutions, if you think for few approaches interviewer would also give some hints.
- Ask clarifying questions to interviewer for any doubt.
- While practicing, focus on edge conditions so that you become habitual to handle these edge conditions in interview as well.
That's all, I hope this is going to help multiple people out there. Also if you are college perusing and preparing for tech interviews as fresher then check below article about how I cracked amazon