I have learned a lot from this wonderful community, time to give back my bit to this awesome community.
Background:
Position: well known fintech product company
Experience: 6+ yrs
Questions solved: ~400: ~100 Easy, 250+ medium, 50 hard
Paypal: Reject
R0: Initial screening based on past projects
R1: Coin change problem, Questions on restful apis. [1hr]
R2: Database discussion on my current project [2hrs]
R3: System design round. [1hr]
All rounds went well, was confident of offer.
Feedback: They liked my candidature, but found someone better for that role.
UBER:
Online Hackerrank Test:
2 Problems: Array based problem, Max Sliding window question
Round 1:
Machine coding round:
Problem on pub-sub library: explained possible solutions and coded pub-sub library, basic methods.
It went for 90mins.
Round 2:
Problem on graphs:
https://leetcode.com/problems/reconstruct-itinerary/
explained my solution and coded it.
Later on constraint were changed, converted to DFS, coded it as well.
Had good dicsussion overall.
I was happy after both rounds, and expected to move forward in process.
But unfortunately they turned down my candidature without giving proper reason.
FaceBook:
Phonescreen:
I was made clear of expectation of solving 2 problems in 45 mins of time (
with most optimal solution, working code with all edge cases covered.
). There was hard stop at 20mins, so as to work on two problems.
I knew this in order to clear FB phonescreen you need to solve two problems perfectly, so was little nervous.
Problem1:
Medium level problem on stacks (involving parethesis..)
finding longest valid parenthesis.
Solved this problem in 25mins, was given 5mins extra as there was network issue.
Given array of strings, involved writing comparator on strings to sort it in certain way.
Dont remembar exact problem though.
I wrote working code for both questions, was very happy as I thought I did good job.
Few days, got rejection mail from FB, stating issues with code..
Introspection & takeaways: In order to save on time, I used poor variable names, Yes it costed me such an opportunity. Always use meaningful names while writing code, you can hardly save 40-50sec writing short names, but can end up paying a lot.
Google:
Timeline: July-Dec2020.
Recruiter reached out to me, and initially screened me on basics of computer science concepts, algorithms. For initial phone screen round, I asked for about one month to prepare.
Phonescreen:
I introduced myself, & interviewer directly pasted problem on doc and started explaining me.
Problem was based on sliding window, and could be solved by DP also.
I quickly gave brute force solution, optimised using sliding window approach. Wrote the code, explained the time complexity.
Few days later, recruiter called me & told me I did well and will be moving to onsites.
I took another 45 days to prepare for onsites:
fast-forward to onsites, got them scheduled one round a day.
My recruiter was awesome, he guided me along the process and share me very useful insights on how to prepare. In my experience, recruiters at Google are trained to provide you world class recruiting experience, they will mentor, guide you on essentials aspects to crack the interview and are most approachable & ever ready to clear your doubts.
Round 1:
Started with warm introduction about myself. Then interviewer quickly put up a vague problem statement on arrays. I initially gave sub optimal solution and quickly coded it up.
Interviewer asked if I could optimise it, I optmised and quickly wrote the code.
Now he changed the constraints, It became a binay search kind of problem. I explained him approach and coded the solution. I dry run it over few test cases too, I had missed an edge case, so interviewer gave me test case to run the code on. Then i indentified and improvised the code.
My solutions were in this order of complexity
O(nlogn) -> O(n) -> O(logn)
Best round I had.
feedback: This was positive one.
Round 2:
Though i was aware to finish up initial pleasentries within 3-4 mins, since interviewer was interested in my work, introduction only took around 10mins.
Interviewer asked me warm up probem on trees. I quickly told solution and coded in 5mins.
Now came the actual problem, it was hard level problem on trees. I proposed a solution, & with
interviewer's permission went up to write the code, My solution was incomplete, there were a few test cases which i didn't take into account..
Tip: Its important to think through all the test cases before presenting your solution..
This mistake costed me this round, interviewer gave few hints on test cases, I changed my code accordingly (again there was gap, which i corrected post interviewer pointed at it).. So its very important to think thoroughly on your approach, to check if its missing something..
Round 3:
Interviewer didn't even ask for introduction and directly pasted problem on tool. It was medium->hard level problem on trees.
I quickly gave brute force solution to it, and started coding it.. as I thought It might take time, and I was expecting a follow up question too.
It was little lengthy solution. Since interviewer was silent most times, So I spent more time in explaining him solution and dry running it over several examples. Had covered up corner cases too in solution..Overall it seemed to went well. But there was major red flag I gave, which turned up in my feedback too. Solution was sub-optimal. Google cares about, if your end solution are most optimal or not.
Tip: Its very tempting to quickly jump to coding with first solution that comes to your mind. But its important to resist, spend few minutes more to see how you can optimise it.
In my case, optimal solution was little tricky, but with careful thinking one could come up with that solution too.
Round 4:
It started with introduction and interviewer quickly moved to problem.
Again vague problem statement, asking to find optimal value of some parameter.
Solved this problem using BS in 20mins along with code, also explained my solution with sample inputs. 2 follow ups on same problem, did both.
I was happy as this interview went well.
But my feedback said, that my code wasn't readable, IMO I wrote conscise code with good variable names, small submethods. but again this is something subjective, may or mayn't be liked by your interviewer.
Round 5:
General behavioral problems with some scenario based questions. Overall this round went well.
All in all in order to succeed at google interviews, you have to make sure to leave no negative points in your interviews, atleast no recurring patterns.
Google judges its candidates on many parameters, and its very important to perform well wrt to each of those.
Communicating your ideas and thinking out loud is very important during interviews, as not doing so, put unnecessary pressure on you, plus your thought process to arrive at solution is as important as your working code.
It was quite wonderful ride preparing for Google, I was targeting Google only, got scheduled other interviews just for sake of hands-on, but yes there are more failure stories than success story, this was mine & got to learn a lot in process :)
I feel its important to take feedbacks positively and try again next time with better prepration.
Expedia: Offer
R0: Hackerrank Test
3problems:
2 easy array based questions.
1 Hard DP problem
R1: Problem solving round.
Easy question on trees.
Hard Level problem on Binary Search
Conceptually similar to https://leetcode.com/problems/divide-chocolate/
R2:
https://leetcode.com/problems/minimum-window-substring/
Slight modified version, with all character in same order as Input.
R3: Hiring Manager round with behavioral questions
Design Food delivery App.
R4 Design
Design rating & reviews system.
All interviews went great, was extended offer.