Disclaimer: This is a personal blog, any views or opinions expressed in this blog are personal and belong solely to the blog author and do not represent those of people, institutions, or organizations that the author may or may not be associated with in a professional or personal capacity, unless explicitly stated. Any views or opinions are not intended to malign any religion, ethnic group, club, organization, company, or individual.
Congrats! You’re a Software Engineer and a Hiring Manager/Recruiter from one of the Big Tech company’s just reached out to you to see if you’re interested in a position. You have a brief chat to see if it would be a mutual fit and you’re onto the next steps!
So what next? Depending on which company you’re applying to…Facebook/Meta, Apple, Amazon, Netflix, or Google/Alphabet, there may be a slight change to the process, but they all follow a similar method.
Working in Big Tech is challenging and rewarding at the same time. You’ll have the opportunity to work with some of the brightest and smartest in the world. You’ll have the ability to learn new technologies, and see how services are managed at a large scale. You may even be the creator of a completely new service or technology and get your own patent. At the same time, you’ll need to manage your workload, operational tasks, and make sure you have a life outside of work!
If you’re up for it, continue on…
- Application: Apply for the role on the company’s career site.
- HR Interview: This is all about getting to know you and your background and experience. It’s more formal than a coffee chat and may involve some behavioral questions.
- Phone Screen Interview: The phone screen is usually 45-60 minutes and involves focusing on coding questions. Depending on the company and level of position that you are interviewing for, you may have one or two of these interviews and may even include system design.
- Online Assessment: In addition to the phone screen, or sometimes in lieu of, you may be sent an online assessment as your technical screen.
- OnSite Interview: This can be anywhere from 4 to 6 interviews, each lasting from 45 to 60 minutes. These are usually done in a single day with a lunch break. Each interview will focus on a particular area like coding, system design, or behavioral.
- Offer Letter & Negotiation: If you’re successful with all the other stages, you’ll get your official offer letter.
Even though the process is straightforward, making it through every round is not easy. Even if you’re great at what you do, it is common to spend weeks, or even months preparing for an interview in order to be successful and get that offer letter. The next section is going to cover what you should review before the full process.
What to Know
- Data Structures & Algorithms: You’ll be expected to know the ins and outs of common data structures and algorithms. Although you likely reviewed this in your coursework, familiarize yourself again.
- System Design: For many positions, you’ll be asked to architect a scalable application on a whiteboard or diagram application.
- Behavioral: The behavioral interviews will test your leadership abilities, time management skills, how to handle multiple projects simultaneously, ability to work in a team and independently, as well as how you handle stress. This becomes especially important in more senior roles where you will mentor other engineers.
Data Structures & Algorithms
During your interviews, you will be expected to come up with functional and efficient code in about 40 minutes. You should be able to explain time and space complexity (Big-O Notation) for your solution as well.
Review the following:
- Linked Lists
- Binary Search
- Binary Search
- Breadth First Search
- Depth First Search
- Quick Sort
- Merge Sort
- Counting Sort
- Topological Sort
The above lists are starting points, the more you are familiar with in practice, the better.
While studying is great, it is best to get hands on and solve problems. InterviewCake.com gets great reviews and their site is very easy to follow.
Another site that is comprehensive is AlgoExpert.io. AlgoExpert was co-founded by Clement Mihailescu who also has a very popular YouTube channel on coding.
I highly recommend practicing as many coding problems as you can before your interviews. LeetCode is one of the oldest and most popular platforms to practice on. LeetCode also allows you to filter questions based on various factors like difficulty, company, frequency of seeing the questions in interviews, etc.
Also, check out one of my favorites, CSDojo on YouTube. He has not posted in awhile, but his content is still very good and relevant.
The premium content on the above sites do cost money, but it can be highly worth it if you’ve been far removed from coding interviews.
I also recommend that you watch coding interviews on YouTube and also try practicing with a friend. Sitting at home working on problems can be easy, but an interview setting is completely different. You will need to come up with a plan, validate requirements and constraints, discuss pros and cons, explain your thought process to your interviewer, and can then begin coding. All of this has to happen in the time slot of your interview. If you’re stuck, start with a brute force/naive approach, and then optimize later on. Don’t forget to mention the complexity of your solution using Big-O Notation. Your goal at the end of the interview is to have functional code.
Coding Interview Process
Follow the below process to be successful in your coding interview. Most interviews will start with quick introductions and then you can move onto the following:
- Before you even write one bit of code, ask clarifying questions and write down your goal/scope. Write down any size of input, expected output, range of values, extreme cases, are their duplicates in input, etc
- Talk through your proposed solution so your interviewer knows your train of thought. Practice thinking out loud to be successful. Don’t assume your interviewer knows what you are trying to do.
- Once your interview agrees to your approach, start writing down your code. Even when coding, talk out loud. Mention what variables are, mention what your block of code is doing.
- If you get stuck, it is OK to write pseudo code and come back to it
- Finalize your solution and walk through it with your interviewer
- Discuss Big-O and how you can make your code more efficient
In the past, I’ve seen many engineers that feel confident going into System Design; therefore, they don’t study before the interview. In my opinion, this is a huge mistake. You want to show that you can work with large distributed systems, specially working for a Big Tech company. Additionally, you want to follow a process for the System Design interview and don’t just start drawing your design out. You’ll need to be able to articulate your vision of the design, talk about trade-offs, and defend why you made certain decisions. You should pay attention to your interviewer and take in feedback they are providing and adjust as necessary.
System Design is all about defining the architecture, interfaces, and data for a system according to given requirements. You’ll want to know about the following concepts:
- CAP Theorem/PACELC Theorem
- Network Protocols
- Content Delivery Networks (CDN)
- Load Balancers
- Leader Election
- Rate Limiting
- Polling, Streaming, Sockets
System Design Process
I recommend following a process like the one I outline below. Feel free to add your own touch.
- Write down the Goal of the System
- Purpose, Users, Inputs/Outputs
- Clarify the Scope of the System
- Ask your interviewer what area you should focus on. Frontend, backend, end to end design, mobile vs. web, data modeling, etc.
- Back of Envelope Calculations
- Know the scale of the system so you can estimate storage, throughput, size, scalability, bandwidth, SLA/SLOs
- High-Level Design
- Cover the end to end scope based on the goals/requirements
- Use the high level design to ask further questions to narrow down the detailed design. Let the conversation drive the design.
- Detailed Design
- Dive into the major components and make sure there is enough detail for the interviewer
- Discuss Bottlenecks/Tradeoffs and how you would resolve them
I can’t stress this enough. Practice is key with these types of interviews. Watch some videos on YouTube of System Design Interviews and then practice with a friend.
Behavioral interviews is used to evaluate your past experience in order to predict future behavior in a certain circumstance.
Understand the S.T.A.R. Method and ensure you have a number of previous experiences documented and prepped for your actual interviews.
Using the S.T.A.R. Method will help you construct an organized and thoughtful answer.
Situation – Set the stage of the story and share details around the experience or situation that you experienced.
Task – Describe your responsibility or role in the situation. Discuss the specific goal or task set out for you individually.
Action – Explain the specific action items that you took to handle or overcome the situation. Identify and discuss the most impactful items.
Results – What was the outcome of your actions in the situation. If you have hard data, this is where to bring it up.
What happens if I don’t pass a round?
It happens all the time and it’s nothing to get upset over. It means that things didn’t work out on that particular day. If you really want to get into Big Tech/FAANG, take a break, and then get back to prepping and applying again. Please note that some companies have cooldown periods, anywhere from 6 months to 1 year plus before you can be invited back to an onsite interview.
Well, there you have it. It’s a long process but well worth it. Practice, practice, practice and get those mock interviews in.