Hi, Leetcode,
Giving back to community with my Google and Facebook interviews experiences. :)
Experience: 10+ years as SWE, mostly backend
Level: E5/L5
Location: Bay Area
Date: mid-summer 2020
LC count: Almost 350, some easy, mostly medium, 30 hard. Started around 6 months before interviews, never solved problems like that before and never worked at companies of Google/Facebook level and never interviewed there before. Had to study a lot on theory as well (mostly read materials on LC and watched YouTube), not just practice problems. Was very slow at the beginning (took me almost 3 months to do first 100 problems), but pace significantly improved with every additional 50 problems solved.
Due to Covid all rounds were virtual.
My onsite interview at Google happened almost a month before interview at Facebook due to few reasons. I was rejected at Google but was able to learn a lot from feedback I received and improve for my Facebook interview.
Google.
Was contacted by recruited via LinkedIn multiple times for the past few years. Replied to most recent message and it got the process started. 30 mins introduction call, I provided names of few friends who work at Google, I believe they wrote recommendations for me as I had no phone interview, and was told we are moving strains to virtual onsite rounds. I asked if I can split up rounds into different days and I was told it’s OK, as soon as all rounds happen within 1 week. Had 5 rounds total - 3 coding, 1 system design, 1 behavior.
Coding
1)Not from LC. Write a function that accepts list of files and returns files with unique content (basically removes duplicates). Follow up. What if all these files have the same size and are huge?
2)Problem similar to LC #200 about number of islands. There is a grid, find if path from upper left corner exists to lower right corner. Can only move to neighbor cells that have smaller values than current cell. Follow up - find cheapest path, this time can move to any cell, if value is smaller or equal - pay 0, if bigger - difference in values.
3)This round was weird, as it had almost no coding, but some random conversation about systems design.
Systems design. Design a version of eCommerce web site, with products/customers, but a lot of questions of all kinds in random areas about DB, features, etc. Anything I’d say was immediately questioned “why?”. You do need to have very strong knowledge and confidence to be able to have these conversations.
Behavior. Standard questions.
I solved all the problems, as I thought, well. System design - was not sure how it went. In a week I received an email from recruiter asking if we can schedule some time tomorrow for follow up, we did and I was told that it’s a reject over the phone. Behavior went great, System design - was OK, but interviewer expected different versions of design, trade offs analysis, etc. Coding - 1 round did not go well. Yes, solved problems, but one of interviewers did not like pace and style of my code. Yes, I failed and was rejected. But - here is a lot to learn from this experience! Let’s call it a learning experience from now on.
Facebook.
Same as Google, replied to most recent email or LinkedIn message from their recruiter, we had 30 mins phone call, phone interview was scheduled.
Phone interview. 1 medium problem about trees, pretty standard. Went not good. I was so nervous it took me a while to concentrate and figure out what to do. Could not come up with any solution for 10-15 mins but eventually got my staff together and solved it. I was sure it’s a failure. It took me a while to get feedback, few weeks, when I did I was told I passed, but feedback is not on the greatest side at all. I was advised by recruiter to spend some time to prepare better before onsite rounds. I took this advice and spent a month improving before virtual onsite.
What I did during that month:
1)Had multiple phone interviews and few virtual onsites with other companies. It was not part of my self-improvement plan, but rather normal job search routine. If you have some companies you are interested in the most - make sure to save them towards the end! I improved a lot in my confidence during interviews, pace, stories and examples for behavior rounds, etc, not mentioning doing more coding and system design studying. I had virtual onsites with 5 different companies total (including Google and Facebook), and way more phone interviews.
2)Solved or looked over all top Facebook problems on LC, and other problems that had Facebook tag, even not super popular.
3)Had 3 mock sessions of systems design with a very knowledgeable friend of mine who gave me honest feedback on where to improve and how to go about it. Have read a lot of materials online and watched some videos to fill in the gaps I had, have read few chapters out of “Designing Data-Intensive Applications” book. At this point I realized that my coding skills are fine, of course there is always room for improvement, but somehow systems design is under-evaluated by a lot of peers. Without strong systems design, no way to get in for E5/L5 level. It became quite obvious for me after “learning experience” at Google.
Virtual onsite. I was told since it’s virtual you can split rounds into 2 days, but they have to be consecutive, like Mon and Tue, Thu and Fri, or Fri and Mon.
Coding
1)2 problems, easy and hard, but very popular Facebook problems, hard involves topological sort of graph. Was not enough time to do hard, but was asked to do only specific portion of it.
2)2 problems, easy and medium. Easy was completely random, not popular problem, medium is rather popular variation of “subarray sum”, however, I was told right away that O(n) solutions is expected, not O(n * n). How glad I was I solved this problem before and have read all proposed solutions and came up with O(n) solution pretty quick. Practice, practice and practice again!
I have to say that most Facebook questions are not hard, but you need to code really quick.
Behavior. Standard questions. 1 easy random coding problem at the end.
Systems design. As backend engineer, I was told that I could pick “systems design” or “product architecture”. I went with 1st. Standard question again, part of G-ro-k-k-ing course, very well known. I thought I did mostly great there, and was even told at the end I did great. Had to do end-to-end system design, do traffic estimates, storage estimates, discuss scalability, sharding, replication, CDN usage, etc.
A week and few days later I received a call from recruiter and was told that all rounds went well, except for systems design, which had some minor gaps. Follow up round is requested by HC, but “product architecture” this time.
I took another week to study.
Product architecture. Again, question was about very well known Facebook feature, and I was asked to focus on API this time, however, still had to do end-to-end system design, do traffic estimates, and for that round I focused more on clients-server interaction compare to “systems design”. Received a call from recruiter pretty quick, with feedback which was great, and few days later received another call and job offer! Spent few days negotiating and accepted. Very exited! :)
Thank you for reading and good luck!
#google #facebook