Journey to Google : Part 1

Prerna Gupta
6 min readMay 11, 2021

My journey to FAANG companies.. the journey of rejection and selection.

I was working as a software engineer with almost 5 years of experience. At that point, I thought of taking on new challenges which led me to prepare for FAANG companies. Also, it was my dream to be in Google.

I knew the road ahead of preparation and cracking the FAANG interviews along with my office work would be difficult.

After looking into the interview pattern of FAANG companies, I realized that I need rigorous preparation of both data structure and system design since both are equally important. It took almost 6 months of preparation (~3–4 hrs/day).

After that, I was able to crack Google, Amazon, Microsoft and got rejected by Facebook.

In this post, I will share my preparation strategies and also the interview experience of these companies. Hopefully, it may help you and you find it useful in your journey to FAANG.

After that, I was able to crack Google, Amazon, Microsoft and got a rejection from Facebook.

In this post, I will share my preparation strategies, and also the interview experience of these companies. Hopefully, it may help you in your journey to FAANG.

Also, I will shortly start a series where I will focus on approaches for solving different categories of data structure questions. This I have created after solving ~600 questions on leetcode.

Before starting, I would like to tell you that cracking these company interviews is challenging, and many times during your preparation journey you may feel frustrated. But, Please remember the main key to cracking FAANG is dedication and a positive attitude. Keep with you something that can motivate you every day. Me working for google was my father’s dream more than mine, So I kept my family photo in front of me. Whenever I came to the stage of giving up looking at them instantly motivated me.

Also, always remember :

Data structure problems preparation :

For practicing data structure questions I used leetcode. Along with that, I had scheduled many mock interviews on pramp. Giving mock interviews helps build confidence.

Few tips while preparing for data structure questions are :

  • Make it a habit that you should do at least 1 question every day, and gradually increase this count. Most of us go out of touch with data structure questions, practicing daily will build the much-required habit to crack the FAANG interviews.
  • List down the main topics of data structures, and important algorithms and concepts that you need to work upon. Some concepts which I had gone through before starting data structures questions were :

Arrays — Kadane algorithm, Binary search (custom binary search)

String — KMP algorithm, Robin Karp

Trees — Inorder, preorder, postorder traversal (both with recursion and without recursion), Binary lifting.

Graph — Union find, Dijikstra, Prims , Kruskal, Floyd warshall, BFS , DFS, Topological Sort.

Priority Queue, Segment tree, Quick select algorithm

  • Before starting your practice make it a custom to never use the autocomplete feature of your IDE. Also, try to avoid debugger. Start making notes of the important built-in functions that you are using and revise them daily. Resolve compilation errors before submitting an answer.
  • After you go through the major concepts, go topic-wise, and practice at least 2–3 questions of each concept so that you can identify the concept of question from the first look.
  • The next step is to start with the most difficult, and most frequently asked questions. I had realized that Google asks graph questions where candidates fail the most. So, I had started with the Graph topic first, then went to trees, arrays, strings, Dynamic programming, linklist, bit manipulation. You can decide topic order based on your strength and weakness. Do at least ~20–30 questions on each topic.
  • Practice by selecting random questions, Avoid seeing tags of the question. During interviews we get random questions, Sometimes the approach doesn’t get clicked in the first place. e.g. Couple holding hands question, there are multiple approaches to solve it, But most of the time we fail to realize that a graph-based approach can be used to solve it.
  • While practicing make a list of the question that you need to revise again (where you have seen the solution, or where you think that it is an important question), and revise it periodically. I had bookmarked questions with various tags like “To do questions”, “Revise questions”, “Reduce complexity”.
  • Also never see the solution of a question directly at least try to come up with a solution even if it is not optimized. Try for at least 1 day on that question seriously. Even then if you are not able to come up with a solution, first see the tags to which it refers to, later some hints, and at last, if you are not able to solve refer to the solution. Also analyze why you were not able to come up with a solution, where you were wrong.
  • Always find a pattern in question. Once you start practicing you will realize that questions can be subdivided into some patterns. Once you start finding these patterns, the road will get much easier. As mentioned earlier, I will share these patterns in my upcoming blogs.
  • There is the “Discuss” section on leetcode, where one can see different solutions posted, Always look into them for each problem you solved, It gives insight on how to solve each question in multiple ways that will broaden your thinking.
  • Once you have confidence that you can solve questions, Start keeping track of your time limit. Try to solve the questions in ~20 min, if you are targetting for FAANG.

System design preparation

For system design, there is no specific resource from where you can gather knowledge as it’s very vast, and depends on your work experience.

I would suggest reading about the following important concepts :

  • Load Balancers
  • Sharding
  • Caching / Memcache
  • Grids
  • Distribution of Data
  • Speed / space / time trade-offs
  • Pagination
  • API’s
  • Client / Server relationships
  • Partitioning
  • Throughput
  • Stream processing
  • Shared nothing architecture
  • CAP theorem
  • Base Model
  • Client and server architecture
  • NoSQL
  • Key-value pair databases
  • Document databases
  • Wide column databases

I had found Designing data intensive applications book very useful for knowing all the pitfalls and issues we face while designing a distributed system.

Along with this go through the engineering blogs to get deep insight into how real systems are designed.Some of the engineering blogs and videos that I had referred are :

Instagram Enginnering

Uber engineering

Twitter engineering

Infoq youtube channel

Tech Dummies

Also, you should practice system design mock interviews with your friends or any senior teammate or from any other resources like pramp, where they can point out mistakes you are making.

Keep in mind that the system design question does not have a right or wrong answer. Interviewers analyze your approach and thinking, they judge you on points like how do you come up with a solution, how confident you are with your solution, how you trade-offs because no design can be perfect.

Plus always remember to be open-minded in these discussions. Don’t be rigid in your solution, because there can be many ways to design a system.

In the next part Journey to Google : Part 2, I have shared my interview experience with a few of the FAANG companies and my take from these interviews.

--

--