Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
May 16, 2022 02:02 pm GMT

Not Your Usual Study Guide To Cracking Technical Interviews

Preparing for interviews can be a pain. I have been practicing problem solving for a while and I have successfully landed offers. I wanted to share my experience so you can also learn from my mistakes and maybe this can help you develop an effective strategy for your interview preparation.

Before you begin your interview preparation, have a clear goal in mind, what kind of company you want to work at? some strategies will be effective for some companies and not effective in others. Some companies are looking for engineers that are experienced in a particular field like a Java Developer or An Android Developer or an IOS developer, while for some of these job opportunities you may be asked to solve coding problems but that will mostly be a small scope of the interview. The interview will mainly focus on that particular technology. In this article I am discussing preparing for general Software Engineering roles at companies that focus on algorithms, data structures and system design.

Before you start solving problems, Pick a programming language that is easy for you and one that you are familiar with, it doesn't matter which one from my experience most large companies let you pick whatever language you want. Next is you need to make sure that you review data structures and all the popular algorithms. I have a few recommendations. Everyone will probably recommend CTCI (Cracking the coding Interview By Gayle Mcdowell), From my experience, it is a great reference but I see it more of a study guide. I will tell you what worked for me.

Learning

I watched MIT Data Structures and Algorithms lectures and I have looked through their notes. I also went through Cormen's Introduction to Algorithms. As for System Design, this depends on your level if you are a junior, check with your recruiter if you will be asked system design questions, try to get familiar with Object Oriented Programming, Design Patterns and Databases. If you have more experience, you will need to look for more references, I used this github repository along with some youtube videos you can also Check out Ustav's video on System Design.

You don't have to watch all the lectures or read all the references. Make a list of all the important topics and for each topic make sure you completely understand the concept. How do you know you understand it? Well can you explain it to somebody else? If you can explain it to any of your friends then do so and get feedback from them or if you are by yourself record yourself explaining the topic, try to draw any diagrams and write on a board or paper. This way you can make sure you fully grasp the concept.

Solving problems

You solve questions per topic. For this I used Elements of Programming Interviews in Java, there are other editions in other languages I personally solved problems in java that is why I used this edition. This is an excellent guide, it has detailed explanations and great problems of different difficulties and it covers all the major topics. At the beginning of the book there are also very helpful tips and tables that can help you create a timeline. Next you can start solving on coding platforms, I have used leetcode and hackerrank. While solving you will need to time yourself it is preferable that you write code on paper or a notepad, or if you use a code editor don't use an editor that can correct your syntax. Don't run your code before you are done. Wait till you finish and your time is over and then you can run your code.

Evaluation

Now for the most important part that really made me improve significantly at solving problems. You need to evaluate yourself. For each problem that you solve, once your time is over and you are done, look at what went wrong? what could have made your solution more optimal? and then score your solution. I learnt this from Engineering with Ustav's guide to coding interviews. This was a game changer for me. I made a trello board dedicated to problem solving and I created three lists (to-do, repeat, done). In the to-do list I added all the problems I wanted to solve from leetcode, hackerrank or any books or references, and everytime I solved a problem I scored it, if I didn't get 5/5 I would add it to the repeat list depending on my score, if my score was high I would add it to the bottom of the list, if it was low I added it to the top of the list. You can also use notion, or pen and paper or any simple to do list to apply this method. In my board all the to-do problems were problems I never solved before, problems in the repeat list are problems I want to solve again and the problems in the done list are the problems I can solve confidently and this is the list I am most proud of. Every time I want to solve problems I would pick problems from the top of my to-do list and from the top of my repeat list.

Mock Interviews

This is also an important part of your preparation. Mock interviews are where you apply everything you practiced. You need to reach a state where you are confident and calm during mock interviews. One video that gave me great tips on mock interviews was Chris Jereza's video on coding interviews. If you have a friend that is with you on your journey then do schedule time for mock interviewing one another, if not then you can schedule a mock interview on pramp.com, another method is you can try to replicate your interview experience, get dressed and record yourself solving problems with a timer. This is also a very useful way to become more confident with coding interviews. Real interviews with companies is also another way, try to schedule actual interviews and treat them as mock interviews, if you pass and get an offer yaaay! if not then this was basically a mock interview.

Things to keep in mind while solving problems

1. Quality over quantity.
It doesn't matter how many problems you have solved. The quality of your problems, the time taken on each problem and the way you approach the problem is more important.

2. Explain your solution and your approach clearly before you think of how to write code.
This is the most important part of solving problems, if you have a clear approach your interviewer will know that you are capable of solving the problem and you will be able to easily translate it into code.

3. You don't have to get the most optimal solution right away.
If you are stuck, think of the most simple solution or a brute force solution, once you have that then you can look for bottlenecks or spots where you can use a data structure maybe a hash map or maybe you need to use a particular algorithm. Once you have a clear correct brute force solution you can optimize it.

4. There is no such thing as failure.
Don't get discouraged by rejections or if you don't know how to solve a problem. I can't even count how many times I have failed, it doesn't really matter, think of it as trial and error and try to enjoy the process, don't think of the future and try to mindfully practice for your interviews one step at a time.

5. Problem solving is a skill you will need throughout your career.
Try to find what you like about it and look at it as a skill that you will constantly need to improve. You will always have interviews if you want to work full-time so you probably need to always nourish this skill.

Lessons I learnt along the way

1. Stress and overthinking will only get in your way.
Try to be as calm as you can be, if you are not in a position to put yourself under the stress of an interview then maybe take some time off if you can afford it and think of how to improve this process for you. Think what you really want to be doing and how you want to go about it.

2. Mass applying is not effective.
Be mindful with applying for jobs, I understand how looking for a job can be a painful experience but make sure you are applying for the right companies. Before applying to a role, look at the company and the role and try to understand more about it, is it what you want to do? what kind of interview preparation is required for this role? Do you know somebody who works at the company or someone who interviewed with them? Try to gather some information that can make the process easier.

3. Putting a deadline for landing an offer is toxic.
Imagine putting a deadline on something you can never predict, luck and fate has a major role in you getting an offer or not. If you keep expecting to land a job by a particular date you will only get discouraged. Try to learn from the process as you go in a calm manner, employ the same evaluation strategy that you used with problem solving in your interviews, try to evaluate each interview experience and think of what could have gone better.

Conclusion

At the end of the day, career is only one part of your life. This is your way of getting an income, interview preparation is the way to land a good opportunity. This is all meant to improve your life, be mindful while learning and also be easy on yourself and don't let it become a stressful experience that may decline your life quality or your mental health. I have gone through so many interviews and I have explored my way through different routes and methods so feel free to leave any questions and I will try to answer. I wish everyone who is interviewing the best of luck.


Original Link: https://dev.to/nouranbakry/not-your-usual-study-guide-to-cracking-technical-interviews-3f2l

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To