A quick note from the editor:
We recently got to join and moderate a live AMA call that Yihua Zhang did with our students in the Zero To Mastery virtual campus.
Students and I asked questions about the coding interview process, the different elements and stages in the hiring system, how to understand and prepare for each stage, and how to get ready for interviewing for more Senior positions.
You can check out some of Yihua’s answers to the questions from his AMA call below, but first, let me introduce him.
Yihua was the 2nd Instructor to join ZTM after Andrei himself, and his courses have become some of our most taken and highly recommended by students, thanks in part to his ability to understand what students need, and how best to present it.
He believes that learning itself is a skill that needs to be practiced and improved upon, and he is dedicated to helping others improve and master that skill.
He understands the challenges and mindset of coming into this industry from various other backgrounds, having been both a student as well as an instructor. This helps him to empathize with the difficulty of learning something new and the challenges that it brings. (Although Yihua is a self-taught developer now, he actually used to be a personal trainer and own a gym, so talk about a wild career switch!)
Yihua is the creator of multiple courses on ZTM, but today, we’re going to focus on two in particular: Master the Coding Interview for Big Tech (FAANG)
And also his latest course that just dropped recently, Master the Coding Interview: System Design + Architecture.
It was a great interview so with the intro out of the way, let’s dive into his AMA answers 😀.
Psst…
Want to watch all the recorded AMA videos, ask questions in our Discord, or join in live on our next expert AMA?
Well, these are all exclusive access bonuses for members of Zero To Mastery. You can find out more details about every course, as well as all the other benefits of being a ZTM member here.
Anyways, let’s dive into these questions…
A coding interview is a set process to be hired for a programming job.
It usually has a number of stages but can vary based on the company, and also the company size. Some companies will skip steps, while others will ask for more from you.
The basic elements can be:
This process and steps can vary but the biggest difference in this process usually comes down to where you’re applying for. A coding interview at a smaller company is almost always based around the work you will do day to day in that position, with the questions they ask being language and framework specific.
For example
If you’re applying for a Front-end role with React, they may send you a quick project and ask you to add a feature to it, or perhaps write some tests or find errors in existing code.
Whereas with FAANG and large FAANG-type companies (FAANG being Facebook, Amazon, Apple, Netflix, and Google), they will ask all this and then more of you.
What like?
Well, on top of the usual language and framework questions they will also get you to solve technical questions on specific topics that you might never cover in your daily job, primarily on the subjects of Data Structures and Algorithms, and how they affect certain problems or designs.
(Example below).
There has been some progress recently where certain FAANG companies are starting to hire for more specific roles such as a Front-end Engineer etc but for now, the majority of them want broader engineers who can adapt.
This means that even if you do apply for a specific front-end role, you’ll still get some questions about Data Structures and Algorithms, they might just be less complex, or more relevant to your role. Either way, for the time being you need to learn this if you want that FAANG job.
If we simplify it down, it’s really for 3 reasons:
They want to hire people who can move around departments as needed, and also understand larger topics.
They’re also looking for people who can write scalable code that can work with their huge customer bases. To do this, it’s not just enough to know how to build something, as there are hundreds of potential solutions to any problem or design.
Instead, they want people who understand how to build it in a way that it doesn’t break at scale and works well with distributed systems, and you can't do that without a background knowledge of Data Structures + Algorithms.
Finally, by making it well known that their hiring process is more complicated and requires specific knowledge, it helps them to filter down the candidates to the best that meet their needs.
If you’re a self-taught developer and don’t have a Computer Science degree then you probably skipped a lot of the underlying theory on these topics and might be freaking out because you want that FAANG role. Don’t worry as we have courses on this to help.
Andrei’s course covers these concepts and what they all mean, and then my FAANG interview course shows you how to solve the most common questions in each area, and gives you a process to solve new problems so you don’t have to memorize the hundreds of potential coding questions!
This way you can learn to adapt and also apply these techniques to new problems in your job.
FAANG companies represent perhaps only 5% of the hiring pool, but almost all developers want to end up working for them, simply because the pay and benefits are so large in comparison.
Editor’s note: I’m currently writing up a success story of someone who took Yihua’s FAANG interview course, and got hired at Google. They were already working as a Software Developer for a tech company, but the pay difference when they took the Google role was an increase of over 450%.
If you think that’s good, you can see the salary range below for different Software Engineer levels at Google, along with their specific benefits and stock options.
A starting rate of $144k plus bonus + stock is pretty damn good eh!?
Spoilers for further in the interview, but those who learn System Design and Architecture can get more Senior positions, and the benefits in those roles are quite simply insane.
$327k per year + stocks and $98k bonus for a whopping $1.14 Million PER YEAR!
So yeah… you can see why people find it very much worthwhile doing the extra work to get hired by these big companies 😉
Generally no. Sometimes a non-technical person may ask you broad language questions like this in an initial interview just to see if you know the language.
As for the actual 'technical' interview and problem solving, most interviews will be language agnostic, meaning that you can choose from a selection of programming languages to use and solve the technical questions asked by a member of the programming team.
In this instance, they may ask you something specific about the language and how it relates to the solution you’re using to solve the problem.
For example
It could be that the language you’re using is great at some of the features that you want to create to solve their problem, but it’s also limited in some way in other areas.
In this situation, you may have to use a method to solve the problem that’s less than ideal to get around these limitations, and so the interviewer may ask why you’re doing this.
In all likelihood, they probably already know the answer, but they want to see if you know why you're doing it. You have to understand that they’re not just assessing your abilities, they also want to see how you approach problems and how good you are at explaining the reasoning behind the solution you decide on.
Ultimately though, they want to make sure that you’re aware of these things and that you have taken scaling into consideration. It’s no good having something that works in the ideal scenario and low load but would break under normal or higher traffic.
It depends on your background. If you don’t have a Computer Science degree, then you need to learn Data Structures and Algorithms because you simply can’t pass the interview without it.
That being said, even if you did complete a CS degree, it’s worth re-covering this information as you might need to brush up and polish what you know.
It’s such a dense topic that can take anywhere from 2-3 months of studying and practice to get proficient enough to pass the interview tests.
That and the simple fact that most of the questions in a technical interview are not covered in a University degree.
Heck, some people even quit their job and spend 3-6 months full time just studying these topics, because you’re essentially trying to learn CS 101 and 102 (which are year long courses).
Sidenote: You don’t need a CS degree to be hired at FAANG companies, as they will happily hire self taught Developers. However, you do need to know the same information that would be covered in that degree, such as Data Structures and Algorithms.
Your technical interview test can feature questions on any of the following topics:
So as you can see, there's quite a lot to learn!
If you can afford it and you think you need that time, then it doesn’t hurt to focus. That being said though, there’s probably a better way of doing this.
We recommend that rather than just trying to remember all the answers and how to solve literally hundreds of questions, you instead focus on the concepts and why they work the way they do, and then learn processes for how to solve any question.
This way you can then take that knowledge and skill, and then practice applying it to any question either on Leetcode, or in our courses. This way you’ll be able to build confidence and expertise, regardless of whichever questions you get on the day, or even problems you might face in the future.
You can still get hired and be proficient enough to take your interview, with just a few months of practice in the evenings, if you take the right approach to learning this.
Also, remember that the interviewer isn’t always expecting you to finish the problem on the day. They’re looking for how you will approach and work towards it, as that’s almost as important.
So here's a simplified overview of how to prepare:
Editor’s note: We cover this information and provide a much more detailed plan to follow to prepare for your interview in this guide here.
100% because nothing beats experiencing the technical interview, like actually doing one!
Some people really struggle with nerves on the day, so getting comfortable with the conversations you might have, and being able to solve the problems in a realistic setting will help remove anxiety when sitting the actual interview.
Hmm it really depends on the person, your prior experience and what level of role you’re applying for. Some people work better under pressure, so if they’re applying for jobs and have a deadline coming up, then they’ll practice far more and take action.
Sure, they might not know enough on the day, but there’s a lot of value in actually getting in the interview and experiencing it first hand a few times.
Often people can know the topic but fail simply because they can’t handle pressure on the interview day, so getting through a few interviews (especially at companies / roles you're a bit less interested in) can help you relax more for the 'dream job' interview when that comes along.
Others will want to learn everything and possibly never apply because they don’t think they know enough. No joke, you can see people on Leetcode who have been practicing answering problems for literally years. The other side of this is that with no deadline at all, they might not even study enough.
So you really need to know what works best for you.
Here at ZTM we recommend you start applying as soon as possible and get that fire under you, and you might be surprised how well you do. We’ve had people hired at FAANG in 6-12 months with zero experience before that!
If you’re looking at applying for a more Senior role, then you’ll also need to know System Design + Architecture, so you’ll want to add in 2-3 months for learning that as well. In fact, the sooner you learn System Design, the better.
Similar to how an architect will plan the build and layout for a building, System Design is the understanding and knowledge to design distributed systems to meet your application requirements. i.e all the parts needed to make it work.
System Design is the truest measure of technical seniority because it expands across every single thing inside of a system.
This involves a deep understanding of all the modules, interfaces, components, data structure, and more to build your system, which as you can imagine, is a lot of responsibility. That's why it's a core skill for anyone applying for Senior roles at FAANG or even other companies.
With that in mind, Senior interviews will have a separate System Design interview section, where you will be assessed on your critical thinking and problem solving to plan and build large scale applications, such as Uber's ride sharing platform, Facebook's News Feed, and others.
A lot of people make the mistake of only learning System Design a few months before applying for a Senior Role. This is kind of madness as it’s such a large topic to learn.
You're far better off learning it as soon as possible, simply because understanding System Design will actually make your job easier, at any level, because you’ll start to see how elements of your system work together.
Heck, it’s worth learning this even if you’re not in a technical role but are technically adjacent! You’ll understand far more of what is going on and be able to make better decisions, while also understanding your engineers needs.
Knowing this subject can not only streamline your decision making, but it also helps you make sure that your solutions and designs compliment or improve your system and not break it.
I highly recommend that you start learning System Design, even if you’re just now applying for your first role. Understanding the larger ecosystem for your role is an absolute gamechanger, and the fast path to being promoted.
Tl;dr
Similar to the data structure interview, there are typical questions that come up in most interviews that you can practice or cover in advance.
The problem with only memorizing these answers, is that if the problem is tweaked or the system changes, you need to be able to understand how that affects the solution, as you may need to adjust to something very different.
You can’t empathize with the solution until you really know the problem inside and out, which is why it’s worth understanding the concepts more than anything else, and then practicing and tweaking questions to suit.
This is why we cover the concepts of distributed systems and more, as well as how to solve these usual problems that come up, so you can adapt.
And of course as we’ve said before. Don’t leave it to the last minute to learn this. The earlier you start practicing and understanding, the easier it will be.
Hopefully this AMA helped you to get a clearer understanding of what you need to learn to get those FAANG level positions. Like we said above, it’s not easy but the financial benefits are quite fantastic.
And good news? If you become a ZTM academy member, you get access to all these courses and more! So start learning now and make 2023 your biggest year yet. 😃