Background:
- 4 years of experience as DevOp, graduated with Bachelor's Computer Science degree from one of the University of California.
- Interviewed for L4, but the offer was for L3.
Application:
-
I cold applied through LinkedIn to a new job listing with no referral (3rd application since mid-2020, this was the first time I got a response from a recruiter), the recruiter emailed me within a week of me submitting the application.
-
The entire process took a bit over 2 months from the first email contact from a Google recruiter to me receiving the offer letter.
-
There were numerous recruiter calls (1 before the first phone screen/technical interview) and multiple between each phase of the interview process, this probably depends on how your recruiter chooses to contact you. There were numerous email exchanges about schedules and availability, I'll omit them and just focus on the technical interviews below.
Phone screen/tech interview: 45 minutes
- Concepts: HashMap, LinkedList.
- 1 question (easy-medium) with a follow-up (easy-medium).
- Solved both within the time.
Virtual On-site (Google Meet) interviews: 5 back-to-back rounds 45 minutes each (4 technical + 1 behavioral), there was an hour lunch break between the 3rd and 4th round.
-
Round 1: Technical
- Concepts: Dynamic Programming, Array
- It was 1 question(easy-medium) with a follow-up to the question (medium-hard).
- Solved the first question, only had time to talk through potential solutions to the follow-up question.
-
Round 2: Technical
- Concepts: String manipulation, Object Oriented Programming
- Two questions: 1 easy-medium (implement a parseXXX method, used as warm-up) + 1 easy-medium (object oriented programming in the form of implementing small methods based on a user-defined object)
-
Round 3: Behavioral
- Talked about past work experience and then was asked a list of Googleyness questions.
- Googleyness questions are usually in the format of "Given problem X and situation Y, how would you go about resolving/tackling it?"
-
Round 4: Technical
- Concepts: Binary Tree, Stack/Queue/Deque
- It was 1 question (medium) with a follow-up to the question (medium)
- First question required solving the problem with a runtime better than linear, we had a bit of back and forth with the interviewer offering hints.
- Second question was a follow-up to the first, I only went through possible solutions and runtime analysis but did not have time to actually implement.
-
Round 5: Technical
- Concepts: Graph, Array
- It was 1 question (medium) first solved through brute force, then was tasked to optimize the solution with better runtime.
Tips/Things to look out for:
-
Most of my interviewers were very interested in hearing your thought process as you ask questions to clarify the requirements and potential solutions, and are actively looking for how you come up with and handle edge-cases early. I made sure to complete my runtime/space complexity analysis on potential solutions before actually implementing them.
-
Ask questions and clear any ambiguity. Take clean and concise notes on the interview document (this includes walking through your implementation with a testcase if your interviewer asks for it), whatever you write will potentially be evaluated by the Hiring Committee and looked by the hiring managers later on.
LeetCode specific preparation:
- Only used the free features available on LeetCode
- LeetCode problems solved: 170 Easy, 10 Medium, 0 Hard
- I solved on average 4 easy problems a day, initially it took up to 100 minutes (~25 minutes each) and then down to at most 60 minutes (~15 min each). I solved medium problems mostly to practice Dynamic Programming.
- Going through easy problems exposed and refreshed me on most of the data-structures and the basic algorithms that go with them as well as some of the "tricks" needed for optimized solutions, most of which can be directly applied to the more complex problems.
- Before implementing anything on any of the LeetCode problems, I treat them like it was during the interview, talking loudly to myself through my thoughts and potential solutions and most importantly the runtime/space analysis (big-O notations) before writing any code.
- Made sure to make my solutions generic, take care of edge cases even if the question on LeetCode already restricts the input range (i.e the solution should take care of negative integers, zero, or null inputs when the questions specifies that the input will be an integer greater than 0).
- On days where I don't feel like doing LeetCode problems I watched youtube videos or read articles on the concepts/algorithms I was rusty or had troubles on (such as Dynamic Programming, Dijkstra's algorithm for shortest paths, and quick/insertion/merge sorts).
Timeline after the virtual onsite:
- 1 week after my virtual on-site my recruiter called me to inform me that the Hiring Committee cleared me for L3 (though the interview was for L4)
- After that, team matching began and took 3 weeks before a mutual agreement between me and the team was reached.
- After confirming a team with the recruiter, we discussed compensation and the recruiter filed for me to request an offer letter.
- The offer letter came 3 days after
Final thoughts:
The recruiters are super helpful and do provide numerous study materials that you can look through to prepare, they also answer and deal with any logistical issues you may have. The interviewers have varying personality, some may be warmer and more encouraging and others may have aced their poker face, in any case as long as you are respectful they typically do want to see you succeed and will answer your questions as best as they can or offer hints when you're stuck.