This is the fourth chapter of our The Complete Guide to Google Interview Preparation series.
Our readers have completely different backgrounds. Some have been in the industry for a while, some are international students and some are looking for Google internship.
The preparation process may differ a lot depending on your background and target. That’s why in this chapter, I’d like to provide more specific tips for each type of interviewees.
Basically, I put interviewees into three categories: experienced engineers, new grads, and interns. If you are looking for a management position, this post is not for you. Also, if you haven’t read previous chapters, I highly recommend you take a look at them.
Similarities & Differences
It’s worth nothing that no matter what your background is, the interview process is more or less the same in terms of content and format. For instance, you will always be expected to write solid code no matter how experienced or inexperienced you are.
Basically, interviews from companies like Google, Facebook, Uber are mostly focused on data structures, algorithms, system design and testing (I don’t cover non-technical part like communication here). Let me break them down here.
- Data structure. Candidates are expected to be super familiar with all basic data structures like tree, hashmap, stack/queue and so on. A good example is that if you are implementing a BFS, you should be clear which data structure to use.
- Algorithm. If the interviewer asks you to traverse a tree by level, do you know which algorithm to use? Also, what many people tend to ignore is time and space complexity. I would say if the candidate is having trouble analyze complexity, I can hardly give him/her a good score.
- Testing. It’s important to make sure your code works expectedly. Some folks are even big fans of TDD. When practicing coding questions, always ask yourself how would you test your solution? What test cases would you provide? As an interviewer, I usually look for candidates who can cover those corner cases and are able to modularize the code to be easier to test.
- System design. This is a big differentiator between senior and junior engineers. It’s not an easy thing to design a system that is scalable and robust. We’re going to cover this topic in a whole chapter soon.
System design is usually optional for interns. But data structure, algorithm, and testing are required for everyone.
In addition, even if same questions are asked, companies usually have lower expectation and bar for students, which makes sense as they don’t have much work experience.
As an interviewer, I usually ask similar questions regardless of the background. For interns, I might choose relatively easier problems, but I would definitely ask everyone to write code.
New Grads and Interns
In fact, I don’t see too much difference between new grads and interns in terms of interview preparation. Although interns might have a lower bar, the interview process is exactly the same.
focus on data structure/algorithm
If you are proficient in basic data structures/algorithms, you are at least 80% done. I’m not exaggerating. This is because no one expects a student to have much work experience, as a result, companies can only test the basic knowledge. Also, having a solid foundation is usually the No.1 thing interviewers are looking for.
In my opinion, if a student is super familiar the basic knowledge, it means that he knows about his own code and he knows what he is doing.
Therefore, put as much time and effort as you can in this area. Review your textbook and practice with enough coding questions. If there was any shortcut, it must be focusing on the foundation.
Projects & internship
Although interviewers have low expectations, if you have done some cool projects, it can really make a big difference. It doesn’t matter if it’s a course project, side project or internship.
In the beginning of an interview, you usually have a chance to introduce yourself and briefly explain some of your prior “experience”. Having an internship before would be great as it shows that you have worked on real projects before.
If you are still far from your interview (more than half a year), it’s really worth to work on some projects as opposed to just doing coding questions. Another benefit is that it’s really helpful to prepare system design interviews and we’ll get to this in a later chapter soon.
Another action item is spending time preparing your introduction. Figure out what project you want to highlight and make your language clear and easy to understand. Don’t assume interviewers have all the context.
After conducting tons of interviews, I got the conclusion that new grads generally outperforms experienced engineers in coding questions.
Everyone knows that if you’ve been in industry for a while, you might find some coding questions tricky and hard to solve. And it really needs some time to pick up all those things you’ve done in the past.
What’s more, once you have written a lot of production code, you have the illusion that you can easily crack all those coding questions. However, it’s not true because we have to admit the fact that coding questions are still quite different from real projects.
From this perspective, it’s extremely dangerous to overestimate your coding interview skills as an experienced engineer. You should really prepare as a fresher and be down to earth.
One of the biggest advantages of experienced engineers is having prior work experience. However, not everyone knows how to best use it.
In the beginning of each interview, candidates usually have the chance to talk about what they have worked on in the past. A lot of people pay no attention to this, which is one of the biggest mistakes.
As an interviewer, I would be impressed if the candidate has done something amazing or very relevant to the new job. In other words, if some projects that are neither relevant nor amazing, don’t bother to illustrate it. I’ve seen so many people who kept talking about all his past work and most of them are just boring.
The bottom line is that you should at least spend some time preparing for the introduction. The rule of thumb is to have different stories for different companies and different teams. Showing something relevant you’ve done in the past is really a plus point.
I would also briefly talk about time management in this chapter as a lot of people are complaining they don’t have time to prepare because of homework or the current job.
It’s hard to say whether students have more time to prepare in general. But the truth is that short timeline is always preferable. Let me explain this in detail.
Some people like to make a year long plan and they may only spend half an hour or no time everyday. An alternative approach is to squeeze your plan to something like three months but put a lot of time on each day. The latter usually works much better.
For students, I know there are always course projects or final exams that suck almost all your time. Try to allocate 3-4 hours block each day. It could be 2 hours in the morning and 2 hours in the evening. Or you can adjust the schedule based on your classes. But the core is being consistent. It won’t work if once in a while, you just stop preparing for a week due to reason XYZ. To be honest, interviewers don’t really care about your GPA as long as it’s not extremely low. You should prioritize everything well.
For people who have their full-time jobs, you’d better make use of your morning and evening time. Very few people can wake up early and do some work, which is what differentiate you from other candidates. Also, for the last few days before the interview, take some days off if possible.
Being consistent is the most important advice I would give here.
Sometimes, the difference between experienced engineers and students are all about mindset.
New grads/interns are way too afraid of the interview as they think they know nothing about building software. However, due to the low expectation, they just need to have a solid computer science foundation.
Similarly, experienced engineers tend to overestimate their interview skills as they are writing code everyday. The truth is that they are more likely to fail in coding questions than students.
Whatever your background is, focus on things you can change like practicing coding questions and preparing your introduction.
By the way, if you want to have more guidance from experienced interviewers, you can check Gainlo that allows you to have mock interviews with engineers from Google, Facebook etc..