Google interview experience | L4 Software engineer | All rounds

google logo
google
software engineer L42.8 yearsRejected
August 4, 20243 reads

Summary

I interviewed for an L4 Software Engineer role at Google, enduring a lengthy 6-month process across multiple technical and behavioral rounds. Despite performing well in most interviews, my application was ultimately rejected due to not meeting the strict 3-year experience criteria at the final stage.

Full Experience

I recently got the chance to interview with Google. I applied directly on the career portal, and a recruiter reached out to me, giving me 1 month to prepare.

Round 1: Screening Round 1

It started with a brief introduction, and then the panelist jumped to the question. I had already added a post for the same (linking to another LeetCode post). There was a slight miscommunication where the interviewer didn't explicitly ask for something, but it was expected from my end to further optimize the solution. The recruiter mentioned that the feedback was not negative, so I could have another round or reapply after the cooling period. I asked for another round. Feedback: Neither positive nor negative.

Round 2: Screening Round 2

This round focused on finding a vertical line to divide rectangles into equal areas. It was an open-ended question, and I was expected to clarify details by asking questions. It was challenging, but I eventually solved it using Binary Search, and the interviewer was happy. A few days later, the recruiter confirmed I had cleared the screening rounds and would proceed to onsite rounds. Feedback: Positive.

The onsite rounds were scheduled after 2 weeks.

Round 3: Onsite Round 1

After an introduction, the interviewer presented a problem: finding all subarrays forming a 'good' arithmetic sequence (common difference -1 or 1). I started with a brute-force solution, then optimized it to an O(n) solution, which satisfied the interviewer. I was also asked to write unit test use cases for the code. Feedback: Positive.

Round 4: Onsite Round 2

This round involved designing a job scheduler for N machines using given blocking APIs: countWords() and isTaskCompleted(). The goal was to optimize job completion time and minimize API calls. I used a round-robin mechanism with a queue to track available machines and a method to check job completion. The interviewer asked follow-up questions and tweaked the problem to assess my adaptability. Feedback: Positive.

Round 5: Onsite Round 3

I was asked to design a music playlist shuffler that returns a random song, ensuring no song is returned again for the next K plays. Initially, I proposed an O(n) time and O(n) space solution using a Queue. The interviewer pushed for optimization, and I came up with an O(1) time and O(K) space solution. I was also asked to write unit test cases. Feedback: Positive.

Round 6: Googlyness

This was a short behavioral round. I discussed my current role and answered team-based questions such as how I would build a team, manage an underperforming team, and resolve conflicts. Feedback: Positive (implied by proceeding).

After 1 week, the recruiter informed me that all feedback was in, and they wanted to proceed with team matching. This began the team matching phase.

Round 7: Team Matching

This started with a self-introduction, current role, responsibilities, and reasons for seeking a change. Then, a High-Level Design (HLD) problem was asked, focusing on my approach rather than detailed implementation. There were minor hiccups, but overall, the discussion went well. The manager briefed me on the team. Feedback: The manager was okay to proceed.

At this point, things took an unexpected turn. The recruiter called, stating an eligibility issue related to my years of experience. I had 2 years and 10 months, while the new strict criteria required 3 years. My expectations were shattered. I was asked if I would wait 2 months, during which the application would resume. I agreed.

After about 1.5 months, I received a call for another round.

Round 8: Extended Round

The interviewer started with an intro and then presented a design question, emphasizing the approach over implementation. I had to design a library to evaluate a boolean expression and determine if it could ever be TRUE. Expectations included user interaction (for non-coders), input format, library invocation, data structures (with complexity considerations), class/API declarations, the final evaluation logic (assuming helper APIs), and the algorithm's space/time complexity. I outlined the classes, APIs, and evaluation logic, proposing a 2^N approach for N variables. The discussion went well, and the interviewer seemed happy.

Subsequently, the process stalled again, and I was asked to wait. After another month, the recruiter called with the final verdict: the feedback on the Extended round didn't go well, and they couldn't proceed. The entire process took around 6 months. I had kept my focus solely on Google, which I now realize was a mistake. Despite my determination and confidence after the rounds, the outcome was not in my favor. I am now trying to move past this and hope to land a good offer soon. I initially planned to write this post only if I got selected, but it's important to share the journey; I won't give up and will come back stronger.

Interview Questions (6)

Q1
Vertical Line Dividing Rectangles into Equal Areas
Data Structures & Algorithms

Given a set of points in an X-Y plane representing rectangles, find a vertical line which divides the plane into two halves of equal areas. NOTE:

  1. Given rectangles can overlap with each other.
  2. The vertical line can pass through the rectangles.
It was an open-ended question where clarifications were expected by asking questions. I pictured out the question as shown below Image description

Q2
Find Good Arithmetic Subarrays
Data Structures & Algorithms

Given an array of numbers, find all the subarrays which are forming a good arithmetic sequence (AP). A good arithmetic sequence is a sequence of numbers having a common difference equal to -1 or 1. E.g., {1,2,3} and {3,2,1} are good arithmetic sequences with common differences 1 & -1 respectively. I was also asked to write use cases for unit testing the same code.

Q3
Implement Job Scheduler with Blocking APIs
Data Structures & Algorithms

There is a class given which has below APIs available:

  1. countWords() (blocking in nature, doesn't imply job is done)
  2. isTaskCompeleted() (tells whether the job is actually completed).
A task is represented as the number of words in a given document. There are N machines present where the job can be scheduled (1 machine can handle 1 job at a time). Implement a method responsible for scheduling jobs on these machines. NOTES:
  • Make sure scheduling is correct among all the machines.
  • Make sure to optimize the time for the jobs to be completed.
  • Make sure to use the available APIs minimal number of times (as they are blocking calls).
The interviewer asked follow-up questions to optimize the solution and tweaked the question slightly.

Q4
Design Music Playlist Shuffler with K-Play Constraint
Data Structures & Algorithms

Design a music playlist shuffler (music represented as an array of anything, e.g., integer, string).

  1. It should always return a random music.
  2. The returned music should not be returned again for the next K plays.
Randomness was expected similar to what rand() method provides in C++. I was also asked to write use cases for unit testing the same code.

Q5
Team Building and Management Scenarios
Behavioral

I was asked about my current role and some team-based questions:

  1. How would you build a team?
  2. You are being appointed as a manager of an underperforming team, how would you handle the team and what will be your approach to increase the efficiency of the team?
  3. How would you resolve a conflict within a team?

Q6
Design Library to Evaluate Boolean Expression to TRUE
System Design

Design a library to solve a boolean expression and return whether the boolean expression can be evaluated to TRUE or not in any case. E.g:

  • ( (a || b ) && c ): The expression will evaluate for TRUE when value for c is TRUE and any one of a & b is TRUE.
  • a && ~a: This expression can never be evaluated to TRUE.
The expectations were:
  1. How would a person who doesn't know how to code the underlying logic & only good with Maths going to use the Library to get the desired result?
  2. How the input should be?
  3. How the libarary will be invoked?
  4. Which data structures are going to be used & why (need to be cautious about the space & time complexity)?
  5. Can you write the associated Classes & APIs for the same (only declarations)?
  6. Can you code the final logic on how the expression will be evaluated? (we can assume we have helper APIs available to check for format & errors)
  7. What is the expected space & time complexity of the algorithm for part 6?

Preparation Tips

I was given 1 month to prepare for the screening rounds, and the onsite rounds were scheduled after 2 weeks. I focused my preparation solely on this opportunity and did not apply to any other jobs, which I later realized was a mistake.

Discussion (0)

Share your thoughts and ask questions

Join the Discussion

Sign in with Google to share your thoughts and ask questions

No comments yet

Be the first to share your thoughts and start the discussion!