Google | L3 | On-site | Bangalore | Offer
Summary
I successfully interviewed for an L3 Software Engineer position at Google in Bangalore, navigating through 4 technical rounds and a Googliness assessment, which ultimately resulted in receiving an offer.
Full Experience
I was reached out to by a Google recruiter for an L3 position. Initially, a phone interview was scheduled, but my recruiter managed to fast-track me directly to the on-site interviews. All five on-site rounds—four technical and one 'googliness' round—were scheduled across five consecutive days.
Interview Questions (5)
Given two arrays appointmentTime and appointmentDuration and an integer numRooms. Each room has an id ranging from 0 to n-1. Find the room that gets most appointments if a room can have only one appointment at a time, and each appointment is assigned an available room with the smallest room ID.
There is a highway of length m and has n+1 lanes. I am a frog trying to get across the highway. I can either move left, right, up or stay in my current position for 1 unit of time. There are k cars on the highway, given as {laneNumber, initialPosition, velocity}. The cars can move in either directions with unit speed. Find the minimum time the frog will take to cross the highway. Also find the worst-case time complexity.
Assume the initial lane and last lane are empty. My frog starts from lane 0 and position x. The cars can have either +1 or -1 velocity. Once a car leaves the frame, they don't return.
You are given an array of commit IDs in chronological order. There is one bad commit in the order that renders all subsequent commits bad. You have an isBad(commit#) function that tells if a particular commit is bad or not. You have to find the first bad commit. This is the same as First Bad Version question on LeetCode.
A question very similar to Word Break II.
I am sitting on a computer (Main-computer) on a network. The network has a few computers, connected directly or indirectly to me. Each computer has a 'unique' string identifying it (like MAC address), but for simplicity, these MAC addresses can be assumed to be from A-Z. The goal is to find the total number of computers on the network. I cannot access other computers on the network directly, but I can send a program on the network that EACH computer on the network will install. This program will have a send(string) function and a receive() function. The send function will send the string passed to the function to all its IMMEDIATE neighbours (it's handled implicitly - no information about neighbours is given). The 'receive' function takes the string sent from its immediate neighbours. I need to write a 'receive' function such that after a while, the Main-computer can print out the total number of computers on the network.
Some clarifications discussed with the interviewer:
- Each computer gets identical
send()andreceive()functions. - I only have access to the
send()function on the main-computer. - There is no global memory that can be accessed by all computers, but each program can access the local memory of the computer it is running on.
- Since there are a lot of async calls happening, assume a mutex lock on this memory while in use.
Preparation Tips
I began my preparations approximately three months before the interviews. By the time of the interviews, I had solved around 250 problems on LeetCode, broken down as 50 easy, 140 medium, and 60 hard questions. Additionally, I went through numerous previous interview experiences. A helpful tip I found was using LeetCode premium for company-specific questions. Although most of the interview questions were new to me (except for one), practicing company-specific problems gave me a good understanding of the expected difficulty level. From my experience, for on-site interviews, the expectation is generally to solve two medium or one hard question for 'strong-hire' feedback. Interviewers also assess speed, communication of ideas, code readability, and time/space complexity.