Between 2012-2021, I was employed by 5 different companies; Amazon, Microsoft, General Motors, CheckPoint and IBM. With that being said, I passed more than 40 interviews and received more than 15 offers. I gained experience on how to:

• Prepare correctly for technical/behavioral job interview
• Negotiate a job offer
• Land your new job on the right foot
• Handling office politics

I won’t keep my experience for myself, I will share it with you in my next posts.

## Start right (1-4 days)

The goal of this step is to master the basics which are:

1. The programming language you are going to use throughout your interviews, preferably Java 8+ or C++. I personally choose Java.
2. Introduction to computer science, bound and calculate time/space complexity.
3. Data-structures: Review your undergraduate data-structure materials with emphasis on: Lists/Set/ Heap/Binary trees/Balanced Trees
4. Algorithms:
1. Graph algorithms such as: BFS/DFS/Dijikstra/Kruskal/BellmanFord/Brim/…
2. Dynamic Programming and Greedy algorithms
3. NP-Hard/NP-Complete problems such as: The traveling salesman, Graph coloring problem
1. Quick Select: used to select k’th smallest element with O(n). we can find the median with quick select by selecting sub arrays of size n/2 each split.
2. Sort algorithms with emphasis on Bucket sort vs Radix sort
3. Fibonacci heap
4. Count Sort: say range of numbers is O(n), then you can allocate arr of size O(n) where the index is the number and the value is the count. a second array of size O(n) where the index is the count value and the value is the numbers that have that count
5. Read about the Hungarian algorithm and try to solve the Assignment problem
6. Knuth-Morris-Pratt KMP String Matching Algorithm

## Solve basic problems (3-7 days)

You need to solve the Strings/Sets/Lists/Trees/Graphs/Bits/Operating systems/Data Structures/Recursion chapters of the book Cracking the code interview. Take your time and compare the book solution with your solution if you didn’t get it right the first time. Don’t forget to retry solving it.

## Becoming a guru (1+ month)

LeetCode has top 100 problems, you need to solve most of the basic and medium problems and some of the hard problems. I will concentrate the top-picks for you down below.

Becoming a guru is a process which starts with mastering the basics of the right approach.

1. When you read a problem, assure yourself that you didn’t get it and think of it again
2. Whiteboard a sample or more without thinking of code
3. Think of edge cases
4. Take a step back and think of a generic algorithm. It doesn’t matter if you get it with high time/space complexity. You already learnt the data structures and you can use them to help the complexity case.
5. Code it as it is a production code with right naming and methods. Write methods that you implement later. For example, if you need an array of 100 prime numbers, then write it as follows:
final Array<Integer> first100Primes = getFirst100Primes();
6. Don’t submit, review the code and run it with the examples and edge cases of step 2 and 3
7. Submit and re-iterate if needed
8. Head to the Discussion/FAQ to see what smart people did so you learn from them (it helped me a lot to get better).

Train those steps on the basic leetcode problems and when you feel you got better, try it with some medium problems. Thank me later.

After you mastered the steps I mentioned before, you may be a mother with children or a father with enough on his plate. Therefore, you can handle your daily concerns while thinking about a solution to the problem you just picked on your smartphone and chew steps 1-4 for hours. When you find the solution, hit the keyboard and pass the tests.

## Review what you learnt constantly (1+ Hour)

Always take notes. I took many for you: