How I prepared for my Google interview

Every software engineer strives to impress people with his technical prowess. The tech giants of this world are a great place to work for techies who can provide services to billions of users. In my recent interview there were several rounds, I received offers from Google and Amazon. In the past few years, the online community has helped me a lot in preparing for interviews. In this post, I will share all about my path to interview and bring back the community's contribution to my learning.








Interview SWE



The process usually starts with the recruiter putting together a list of potential candidates. The candidate then goes through an initial screening or screenings in which it is determined whether he / she is suitable for the job. Once this is clear, a typical SWE interview is conducted with the following steps:



  • Programming - from 3 to 5 rounds;

  • Systems design - 1 round;

  • Leadership Principles - Round 1.



I will focus on preparing for the coding cycle as it takes up most of the interview. But we'll take a quick look at systems design and leadership skills in the following sections.



A. Programming



Software engineers often find themselves in difficult situations, for example, working with ambiguity, unclear requirements, breaking complex tasks into subtasks, handling edge cases, completing work on a compromise, taking into account compromises, etc. Programming interviews are one way to get an idea of these skills.



For the sake of simplicity, programming steps focus on solving problems using data structures and algorithms. These questions are generally complex and provide valuable insight into a candidate's analytical ability.



Learn to solve problems using algorithms and data structures. This skill is acquired over time, there is no shortcut to it; the only true formula is consistency. Practice, practice, and practice until you develop your natural problem-solving ability.



Preparation strategy



1. Estimation of preparation time



Time estimation is often ignored and not considered necessary. I suggest calibrating how well you are at solving problems with algorithms and data structures. I examined my strengths and weaknesses and made a rough estimate of the preparation time. This assessment helped me prepare my mind for a long-term (and short-term) goal and kept me motivated.



“Give yourself enough time to prepare. Always. It is better to be too prepared than not sufficiently prepared **.


The total preparation time may vary, depending on your experience. In general, I divided the levels of training as follows:



  • A beginner can comfortably write code in at least one programming language. He lacks basic knowledge of DS and algorithms. Difficulty solving easy problems or taking time.

  • Average. The person knows data structures and algorithms well. No problem with easy difficulty. Can solve most problems of average complexity. Fights Hard.

  • Advanced. No problem with medium difficulty. Able to solve most complex problems.



Before the interview, I put myself on the intermediate level.





Estimation of preparation time



2. Platforms where you learn to program



I mainly practiced programming with LeetCode , InterviewBit and GFG . Before the interview, I solved about 320 LeetCode problems, 80 InterviewBit and 30 GFG questions.





How the tasks were distributed



Medium difficulty tasks are very important: most of the interview questions are of medium difficulty. Solving problems of medium difficulty will make you faster and increase your problem solving skills.



Early on, it's important to start with simple to medium questions. Start with challenging tasks as soon as you feel adequate confidence. Stay motivated if you can't solve difficult problems. It may take longer than you bargained to work through and improve their solution. Whenever I felt overwhelmed, to increase my motivation, I returned to easy tasks.



Maintain a growth mindset. Every problem you can't solve is an opportunity to learn something new.



  • LeetCode: , . LeetCode — . . , LeetCode Premium; .

  • InterviewBit: . . , ( ). InterviewBit .

  • GFG: I used this platform to find problems and articles about the basics of algorithms and data structures. The explanations of the topics and the implementations there are really good. The GFG also has a set of tasks related to specific companies and topics.



I did not rely entirely on any one resource. Everyone gave me new ideas. I kept a diary, constantly expanding my knowledge.



  • Algorithms Specialization on Coursera : This Coursera track is awesome! There are 4 courses in total, covering all basic and several advanced topics of data structures and algorithms. Great for beginners.

  • Youtube: . . ( , , THNLGf019nRo) — ! BackToBack SWE.

  • CTCI EPI:   . . , . .

  • CLRS:   , . , .



Last but not least, the articles about BaseCS by Vaidehi Joshi . She writes intuitive and simple explanations on several topics of algorithms and data structures.



3. Start the timer



As the duration of interviews shrinks, it is very important to work on how you solve problems. Typically, a programming interview lasts 45-50 minutes, and the candidate is expected to solve two intermediate, one hard, or one easy and one hard problem.



Even if you could have solved the original question, but spent more time, it means that you do not have enough time to solve the second.



I set a timer to count down the time it took to solve problems:



  • Average task: 20 minutes.

  • Challenge: 40–45 minutes.



Beginners can ignore time: for them, finding the right solution is obviously more important.



4. Simulated interview



Before the actual interview, I went through a lot of simulation. A mock interview can be very helpful. Failure early in a test environment gives you useful information. It will help you spot gaps in your thought process. Try to fix every mistake and get better with every false interview.



"If you pass the simulations several times, take it as a good sign."



Free:



  • Imitation on LeetCode .

  • [Free peer-to-peer peer-to-peer] Pramp .

  • [Free peer-to-peer] InterviewBit .



Paid mock interviews are beneficial. For example, post-interview feedback gives a lot of details about what the recruiter was expecting.



  • [Paid] ExpertMitra .

  • [Paid] Mocki .

  • [Paid] Trial technical interview .



5. Prepare a promotion plan



So far, we have talked a lot about the various elements of preparation. Now let's try to put everything together and create a promotion plan! Check out the screenshot of my calendar a month before the interview.





Preparation Schedule



I have broken down all preparation into tasks. Set goals for each day in the weeks (and even months) before the interview. This helped me to avoid chaos and not get lost on the way to the goal.



  • On weekdays, I could allocate a few hours, because I was doing office work. I have planned the solution of problems for this time.

  • I read theory on weekends, when I could devote a lot of time to it.

  • Closer to the interview, I planned imitations. In recent weeks, I have cut down on my programming sessions and focused on reading CTCI and EPI.







Time Allocation Weekly



I know many of us have family responsibilities and full-time jobs. Not everything and does not always go according to plan. But the idea is to form a habit. Track your progress and what is not completed. Adjust the schedule until you find a suitable one.



B. Systems design



This round tests technical design skills. It can be divided into low level design (LLD) and high level design (HLD). Knowledge in this area grows with experience in the industry.



Try to gain knowledge of concepts such as distributed systems, load balancing, network protocols, consistent hashing, CAP theorem, replication, sharding, etc.





C. Principles of leadership. Behavior



Unlike previous rounds, this section is not technical. The company expects to learn more about the candidate with his words. The company may be interested in:

  • Personality of the candidate.

  • Previous projects and work experience.

  • What have you done in difficult situations.

  • How did you respond to good and bad reviews.



The main thing is to stay transparent and just be yourself.

I will highlight the section mentioned in the CTCI on the SAR model (situation, action, outcome). The idea is to identify important important discussions by distributing stories from the previous job. Here's a map of the community skills (aka soft skills) so you can learn more about them.





SAR





  • LeetCode Codeforces. , , .

  • «Shuffle» LeetCode. . .

  • IDE, Google Docs, CollabEdit, .

  • . , .

  • , . , , . , .





Q1. What topics of data structures and algorithms should you focus on? What resources did you link to?

The learning resources mentioned earlier will be helpful. I didn't add a separate resource for each topic, this would make the post too large.



Topics in no particular order:

Linked Lists, Bit Manipulations, Stacks and Queues, Binary Search, Heaps, Greedy Algorithms, Dynamic Programming, Vectors / ArrayList, Big O notation, Time and Space, Sorts, Pointers, TCP / IP Windows, Systems disjoint sets, string operations, graphs and trees, maintaining system stability, breadth-first and depth-first search, recursion, backtracking, hashing, syntax tree, pruning trees and indexed binary trees.



Q2. What programming languages ​​have you studied?

Learn one language inside and out; in my opinion, this is enough. I prefer Java.



Q3. How do you know which tasks are appropriate to practice to solve all problems?

It is almost impossible to solve all problems. However, there are a maximum of 12-15 topics from the area of ​​data structures and algorithms. Try to master each topic better by solving thematic problems. With practice, you will be able to determine the desired data structure and algorithm. Focus on quality over quantity.



Q4. Do I have a chance if I don't program in competitions?

Yes, absolutely. Programming for competitions in this context is optional.



  • Competition programming is a sport, and its range of tasks is broader than production programming. Platforms such as CodeChef and Codeforces are more inclined towards this kind of programming.

  • Of course, there are areas where competitive programming overlaps with production programming and can be useful: for example, it helps to draw a recruiter's attention to your profile, problem solving skills, etc.



However, the coding rounds represent a very different stage and have different priorities.



Q5. How do I get an invitation for an interview? How did you apply?

The recruiter contacted me directly via LinkedIn. I don't know how the candidates are selected. But I have a few suggestions.



  • While you are a student, focus on your studies. Participate in contests, hackathons, work on interesting and innovative projects. Try to contribute to an open source project. There are tons of ways to make your profile stand out.



Most importantly, enjoy your trip. Be diligent in your work. Have patience, respect and always strive to be better today than yesterday, and do not forget about the special HABR promo code, which will add 10% to the discount on the banner. The rest will follow.






image






Other professions and courses


















All Articles