Post

The Google Dream Plan

The Google Dream Plan

This article is migrated from Medium and translated by Gemini pro 2.5.


Chase excellence, success will follow.

The Spark: Why Google?

In April 2022, I don’t know where the courage came from, but I suddenly felt I should try challenging a major international tech company.

The idea at the time was simple: both companies on my resume were small. At my age, I should try to make a leap to a bigger name. And since this was about my future, I figured I should dream big and aim for an international company. For a software engineer, the top choice is, unsurprisingly, Google.

Reviewing my work experience, it was almost all embedded-related. If I wanted to interview for a software role at Google, besides updating my LinkedIn and an English resume, I looked at countless articles about preparing for these interviews. English was a given. The other two pieces of advice you always see are: grind Leetcode, and read “Cracking the Coding Interview” (it’s genuinely good).

I had played with Leetcode before, but I was using C at the time. I quickly discovered that writing Leetcode solutions in C is a thankless, difficult task and gave up. My solved-problem count was probably less than 100. I thought, well, my resume is ready, so I’ll just apply for roles while I practice. It’s not like I’ll get an interview that quickly, right? And even if I did, I could chalk it up to interview experience.

Round 1: First Contact and First Failure

In June 2022, I received my first email from a Google Recruiter. A huge weight lifted off my shoulders. If I could get an interview invitation, it meant my resume was at least good enough for a ticket to the show. The rest was up to me.

Although I had read about the interview process, I was still nervous. I scheduled the call with the recruiter for July. I thought this was the first technical interview. I learned later that Google recruiters genuinely want to help every candidate find their best-fit role and perform at their best. It was a completely different experience from my past interviews. Google calls interviewees “Candidates,” and I was shocked at how much a small change in terminology could affect the feeling of respect.

Perhaps because it was my first time interviewing with Google, the recruiter did a simple technical Q&A to confirm I was ready for the interview stage; otherwise, it would waste both our time. At that point, my understanding of data structures and algorithms was basic and not very solid. I probably got one or two questions wrong, but they let me proceed to the next round.

Finally, it was time to enter the infamous Google technical interview stage. I scheduled it for August and bought Leetcode Premium to cram for Google’s most frequently asked questions. My solved count was around 200 at this point.

In August 2022, I had my first technical interview. It was three questions, back-to-back, where the later questions were advanced extensions of the first. The difficulty was roughly 1. Easy, 2. Medium, 3. Medium-Hard. I was in a daze. I passed the first question easily, but for the later ones, my mind could only come up with brute-force solutions, and I ran into problems during implementation. I knew I had failed. In the end, I just asked the interviewer for his opinion. He felt my problem-solving approach was correct, but I needed to go back and strengthen my fundamentals.

My first attempt ended in failure. But it also showed me exactly who I was up against. Once the target is clear, all that’s left is to move forward, one step at a time.

The Aftermath: Leveling Up with Leetcode

Since I had already paid for Leetcode Premium, I decided to use all its features. In Leetcode’s “Explore” section, there are cards divided by data structure and algorithm topics.

Leetcode explore

I went through all the cards in order, reading the material and practicing the problems. Very quickly, I gained a much deeper understanding of data structures and algorithms. Looking back at the me from that first interview, I had to admire my own audacity.

By October 2022, thanks to the Explore Card practice, my solved count quickly reached 300. During this time, I also applied to many other international companies. Partly because I was eager to make a move, and partly because I realized that interviewing is itself a skill that needs practice. So, if the logo was big enough and the role fit, I applied. I also formed a “Big Tech Grinding” study group with old university friends. Besides sharing our problem-solving, we used it to practice mock interviews and explain our thought processes. I feel this was a huge help for my communication skills in later interviews.

The Amazon Ring Detour: New Lessons in C++ and Behavioral

Around this time, I heard back from Amazon Ring. They wanted me to do an Online Assessment (OA) first—basically, two online coding problems where I also had to write down my thought process. Only after passing would I get a real interview. The OA was on the HackerRank platform. The problems on this platform felt a bit easier than Leetcode, but the descriptions were incredibly long; I thought I was taking an English reading comprehension test.

I passed the OA, and the recruiter scheduled a call… only to tell me that while my test results were OK, there was now a hiring freeze. So, that was the end of that.

It wasn’t until mid-November that the recruiter notified me of another opening. But I had to take another OA. No problem, just a piece of cake. I passed the OA and successfully landed the next round. This is when I was told that for Embedded roles, the interviews are in C++. I had been doing all my Leetcode grinding in Python—which is just so convenient. But since all my previous work was in C, I just asked for one week to quickly get familiar with C++. My solved count was now at 550.

In December 2022, I had my first challenge with Amazon Ring. The first round was basically another technical test. But the recruiter had warned me that Amazon really cares about behavioral interviews. Almost every interview is half behavioral, half technical. So, besides grinding problems and getting familiar with C++, I also had to prepare my resume and organize my work experience into a more complete story.

The interview started. I was immediately asked to introduce myself in English. Should be fine, I thought. After the intro, the interviewer said we could switch back to Mandarin. The behavioral part went smoothly. If you’re invested in your past work and have grown from it, you will definitely have memorable experiences to share. Paired with the online guides and books that teach the STAR method, it shouldn’t be too hard.

Then came the technical part. They asked two questions, neither of which was difficult. Thinking back, they were probably both Easy. But the follow-up questions made me realize my understanding of modern C++ was too shallow. Especially in an embedded environment, resource management is critical. When you don’t know how many resources you’re consuming by declaring an unordered_set, the interviewer can reasonably doubt your grasp of the system. In the end, although I solved both problems, my answers to the follow-ups must not have satisfied the interviewer, and I didn’t get to the next round. The interviewer ended by telling me Amazon is the most grueling of the FAANG companies, and we parted on bad terms. But that’s another story.

The Great Freeze: Grinding Through Anxiety

February 2023. After the Lunar New Year came the great tech hiring freeze. News of massive layoffs from big tech was everywhere. The internet was full of people saying the job market was ice cold. At first, getting interviews from Google and Amazon, I thought my resume was fine. But at this stage, no matter how many jobs I applied for, I heard nothing but silence. Even after redesigning my resume and lowering my target bar, I had probably applied to no less than 30 roles, and still not a single interview opportunity.

With no interviews, I could only blame the market. This period forced me to focus even more on improving my “interviewability.” Besides learning the underlying architecture of modern C++, I could feel my Leetcode skills visibly improving. I no longer stared blankly at new problems. My toolbox of data structures and algorithms was growing. In addition to grinding, I tried the Mock Assessments and participated in the weekly Contests. Usually, when I started getting too proud of my grinding, I’d do a Contest. It was always an effective way to crush my confidence. I also started some side projects, which I found was a great way to ease my anxiety. The E-Paper Calendar project was started around this time. My solved count reached 750.

Round 2: The Return of Google (and a Mock Interview)

In April 2023, I received an email from a Google Recruiter. My email wasn’t broken after all! I was incredibly moved to receive the email. Another chance had fallen in my lap. Of course, the stakes felt much higher. I couldn’t help but think if I failed again, who knows how long I’d have to wait. But I quickly adjusted my mindset and set a smaller goal to just “pass the first round” to encourage myself. As long as I did better than last time, it would prove my efforts were in the right direction. The recruiter noticed my last interview was months ago and specially arranged a Mock Interview for me. I thought it was just another online test, but it turned out to be a live mock interview with a real person.

Perhaps because it was just a mock, and because I had been grinding and could see my own growth, I wasn’t as nervous this time. I felt like I could handle whatever question came my way. The interview started with an intro, and then straight to the problem. What was special this time was that the interviewer asked to switch to English for the coding part. This was my first time solving a problem in English. All I can say is, English is a skill you have to keep ready at all times.

The problem was about Easy level. The biggest difference in my performance this time was that I was much more in control of the interview’s tempo. I confirmed the problem, the input ranges, proposed my solution, explained my choice of data structure, and then talked through my implementation as I coded. After coding, I verbally ran through a test case. I felt it was pretty smooth, but maybe just because the problem was simple. It also depends on if you “click” with the interviewer.

I solved it quickly, so there was a lot of time left to discuss edge cases and how to handle them. The interviewer also asked me to write comments to clearly define the input data ranges. The whole interview was pleasant. The interviewer gave me some great advice at the end, like breaking the program into smaller pieces for easier validation and explanation, and about my choice of test cases. This was a great help for my future interviews.

In May 2023, I was originally scheduled for my first official interview at the beginning of the month. But the recruiter told me that after discussing my performance with the mock interviewer, they decided I could skip the first round entirely. I was completely shocked and surprised. My goal of “getting to the second round” was achieved just like that. It made me wonder if that mock interview was really just a mock interview.

The second round was much tougher. A total of three technical interviews, including an Embedded domain-specific interview, all to be completed within a few days. Because I needed time to brush up on domain knowledge, I asked the recruiter for almost a month. During this time, besides practicing related problems, I also took an online RTOS course (though, in the end, they didn’t ask anything about OS).

The Gauntlet: Three Interviews, One Mindset Collapse

Round 2, Interview 1: An American interviewer. Due to the time zone, it was scheduled for first thing in the morning. The question was very “embedded.” It was a lot like problems I faced in my past jobs, parsing raw data from a sensor. In Leetcode terms, it was a “bit manipulation” problem. If you have the background, it’s probably Easy—just basic operations. The follow-up question was also very embedded: the volatile keyword. At first, I couldn’t tell that’s what he was asking, but after a hint, I thankfully got it. Overall, I was very satisfied with my performance.

Round 2, Interview 2: The same afternoon. A Taiwanese interviewer. Although the recruiter said both coding interviews would be in English, this one was in Mandarin. The problem was also bit manipulation, probably Medium level. But I don’t know if it was because scheduling two interviews in one day was too much, my performance in this one was terrible. The problem was just two lines of comments. The interviewer didn’t explain much and let me read it. After reading, I discussed my understanding with him and proposed a solution. He agreed, and I started coding. After I finished, he seemed a bit stunned and asked, “Are you done?” He then asked me to re-read the problem. It was only then I realized I had completely misunderstood the question.

At that point, my mindset had pretty much collapsed. Even after I correctly understood the problem, I could only think of a brute-force solution. After a hint from the interviewer, I thought of a better solution, but we just couldn’t get on the same communication frequency. My brain was a mess during the implementation. I was drawing a blank on basic index calculations. The 45-minute interview dragged on for an hour. By the time it had to end, I still hadn’t written out the solution I had in my head. I was extremely dissatisfied with my performance and couldn’t stop thinking about it after. I was so distracted while driving that I got into a fender-bender. It was a total loss. Please, everyone, concentrate when you’re driving.

I had the next day off. I collected myself and studied yesterday’s problem. It really wasn’t hard. Looking at it today, it was just simple index math. It was another lesson learned: you have to keep your cool to solve problems. If your mind breaks, even an Easy problem can trip you up.

Round 2, Interview 3: Also first thing in the morning, but in Mandarin. The interviewer had a friendly smile and asked me to introduce myself to relax. Then, the question. This time, it was a full problem description. The interviewer spoke a bit slowly, and after explaining the problem, he walked through a few examples. It was at this moment I realized… this was the exact same problem I had just bombed the day before.

I had a moral decision to make. Because the interviewer spoke slowly, some time had already passed by the time I realized it was a duplicate. Should I tell the interviewer and face a new problem with the remaining time? Or should I just solve this problem that I had just practiced yesterday?

What should I do

I chose to continue solving the problem.

I quickly explained my thought process and wrote out the solution. The interviewer then asked follow-up questions about optimization and code verification. After a small hint, I gave an answer that seemed to satisfy him. We were discussing an advanced follow-up when time ran out.

The Moral Dilemma and the First “Hold”

Later, the recruiter told me I got two “Pass” votes from the three interviews, and one of them was an “Outstanding” evaluation—my last interview. I wasn’t happy at all. I felt I didn’t deserve this result, and I was sure I’d be found out and rejected.

But apparently, no one noticed. The recruiter said that for the original role, they had a past experience where a candidate with two “Pass” votes was rejected by the Hiring Committee (HC). So, he suggested I try for a different role. He also arranged a third round for me: a one-hour Behavioral Interview + Fit-talk.

The third round went smoothly. The conversation was pleasant, and the role seemed to overlap with my experience. The recruiter said the hiring manager had also given the green light, so they would start preparing my packet for the Hiring Committee. It would be about two weeks to get a result. This was just a waiting game.

HC has three outcomes: Accept, Hold, Reject. “Hold” means they have doubts about the interview packet and will schedule additional interviews to confirm the candidate’s fit. My Leetcode count was now at 1000.

Those two weeks were pure torture. Not only could I do nothing, but I was also drowning in regret for not pointing out the duplicate question. I was convinced HC would discover this and reject me outright. I could live with being rejected for lack of ability, but being eliminated for something like this… I would regret it forever. But on the other hand, if I got in, I might feel I didn’t deserve the position because of that bit of luck.

In this state of anxiety, the two weeks finally passed. I received the HC result: I needed to do two more interviews. HC had concerns about both my technical and behavioral interviews. The technical, obviously, was the one I bombed. As for the behavioral, HC felt my stories were too technical and they wanted to hear more that demonstrated my soft skills.

So, I was probably in the clear? All I had to do was prepare for two more interviews, and it had nothing to do with the duplicate question. Then, the next day, the recruiter asked me: “Hey, in your second round, did you tell the interviewer that the two questions were the same?” My heart sank. I’m done, I thought. I could only confess, saying I was worried about running out of time and didn’t say anything.

Later, they had a meeting to discuss the situation and concluded that it’s a difficult decision to make in the moment, so they would stick to the original plan: two more interviews. Knowing this was an immense relief. The biggest mental block was gone. All that was left was to nail these last two interviews.

The Final Boss: Two More Interviews

In July 2023, I wanted to schedule the interviews for the following week, but the recruiter wanted to arrange for their most trusted interviewers, and their schedules were tight. We could only set it for mid-July. This gave me two more weeks. I could reset, readjust my rhythm, and meticulously prepare for this final battle. Both interviews were scheduled for the same day, back-to-back, with only a 15-minute break.

Round 4, Interview 1 (Technical): This question was harder, and not exactly what I was told to prepare for. It was about Medium-Hard difficulty. I didn’t have any ideas at first, so I proposed a brute-force solution. The interviewer agreed to let me implement it. While coding, I realized there was a test case that could cause an infinite loop. I proactively raised this, and the interviewer pulled out a hidden test case and said, “Yes, that can happen. Can you derive the conditions for the infinite loop?” I managed to give an answer, and he let me pass. I added a check in the code to avoid the loop. (Post-interview, I realized my derivation was incomplete, and there were more conditions for the loop. I’d love to know the real answer, but I can’t find a similar problem online.) The interviewer, of course, didn’t let my brute-force solution go, and asked if I could improve its efficiency. Maybe because the first part went well, my brain was warmed up. I thought of a suitable data structure to speed up the lookups. The interviewer approved, and I completed the implementation. Overall, I felt good about my performance.

Round 4, Interview 2 (Behavioral): This behavioral interview was intense. No time for self-introduction. He started firing questions from the very first second until the very end. He must have asked over a dozen questions. Even though I had prepared so much—with stories for every possible question—under that rapid-fire, by the end, I was almost just babbling. But overall, I was satisfied. It was within my expectations.

The same day, the recruiter told me my technical interview performance was good. Later, they confirmed they would start preparing my packet for the second Hiring Committee. This time, it was only Accept or Reject.

The Happy Ending: HC Approval and Team Match

In August 2023, sending my packet to HC felt different. For one, it was the last time—no more extra interviews. For another, I was satisfied with my performance in the two add-on interviews. But when I actually received the notice from the recruiter that HC had approved… I was still incredibly emotional.

One small epilogue: the original role I interviewed for was already in the final stages with another candidate. So, the recruiter said they would circulate my interview results and resume to other team managers. If there was interest, we’d do a “Team Match.” Since I had passed HC, any match would go straight to an offer, and this “HC-passed” status was valid for one year.

The next day, the recruiter notified me that three teams had a total of four openings and wanted to talk to me. I was floored. I scheduled calls with two of the managers. This stage was relaxed. No tests, no pressure. Just discussing the role to see if there was mutual interest. That afternoon, the recruiter replied that one of the teams was very interested in me. If I chose that one, the process would be faster and have less risk. I was interested in both roles, so I agreed.

After that, there were no more surprises. Just waiting for the recruiter to run the process until the official offer was in hand. A happy ending.

Final Thoughts

Overall, I believe a role at Google is worth challenging. I could feel myself growing continuously throughout the preparation process. Thank you to my study group partners, my supportive friends, and thank you to the “me” from the past who decided to take this leap.

This post is licensed under CC BY 4.0 by the author.