Status: New Grad, PhD in not so well known CS school
Position: SWE L4 at Google
Location: Not going to disclose
I have signed an NDA so I won't discuss the question in details.
I started to apply around December 2019 when I failed my facebook interview (recruiter reached out to me). After my Google interview I realized how bad the interviewers were. They barely talked and I felt like it was a one way conversation. That was a wake up call to start studying harder and doing leetcode. I did around between 10 to 20 questions per day. After 2 months of leetcode around 300 questions, I felt confident to apply to other big tech companies.
I applied to Amazon through referral, but after two weeks my status was changed to "no longer under consideration" without any email/notification!
I applied to lot of other smaller companies but got no success.
NVIDIA rejected me for a senior position on phone screen because I did not know what std::function was.
Qualcomm hiring manager really liked me but there was some company restrictions to hire me (sponsership)!
I finally applied to Google with a referral. Got phone screen in about two weeks after recruiter contacted me. It was hard to understand the interviewer, but I felt confident after the interview was over. He was very nice and communicative as well.
Recruiter contacted me few days later and let me know that they want to move forward with virtual on-site. Someone else arranged the interviews around mid June. Recruiter calls you a week prior to the interview and prep you for it and answer if you have any questions.
Virtual On-Site:
1st interview: It was a 2D dynamic programming question. I answered with semi optimal solution. She asked a follow up question (I kind of put that question in her mind, I did say something along the lines of "and we can easily calculate the path if we store the best of each row in a vector") and I answered right away. She was a little confused about my answer and I had to explain more which took some time. Afterwards the interviewer tried to explain the optimal solution, but I couldn't understand what she meant. I ended up giving the optimal solution at the end of the interview but didn't have time to code it. This was the worst out of all my interviews.
2nd interview: The second interview was readibility interview. They just wanted to see if I can write clean code. I managed a fairly large code base during my PhD so this was the my best coding round. He asked some questions about scalibility as well, which my experience with OpenMP and MPI helped a lot in this case.
3rd interview: This was a basic behavioral and googlyness round. We had almost the same PhD experience so it went great and felt like a casual talk with one of my colleagues.
Lunch break: 1 hour break realy helped me clear my mind and take a walk.
4th interview: Array question. Again I answered with semi optimal solution. There was a slight improvement you could do using map to keep track of indeces. I did not manage to code the whole implementation. Half away through the implementation the next interviewer came and had to cut that one short.
5th interview: The last interview was a graph question (the week of interview I only practiced graph question because I knew Google always asks one question from graph) I first misunderstood the question. Half away in the implementation I asked about an edge case which I realized I did not understand the question well. However, I managed to finish the question in about 20 minutes. The interviewer did not have another question prepared because did not expect me to finish this question in such short time. I just asked few questions at the end and finished the call.
And team match took about two months, matched with 2 out of 4 teams.