Preparing for technical interviews can be a daunting task. Here are some useful tips and resources to stay on track.
Coding
- Practice, a lot. There is no way around it. But rather than doing all 600 problems on Leetcode, cover all types and spend time understanding each problem thoroughly.
- Go for the hardest ones. After those the rest all become easy.
- If stuck on one problem for over two hours, check out the solutions. More time might not be worth it.
- After solving one problem, check out the solutions. I was often surprised by how smart and elegant some solutions are, especially the Python one-liners.
- Use a language that you are most familiar with and that is common enough to be easily explained to your interviewer.
System design
- Understand the requirements first, then lay out the high-level design, and finally drill down to the implementation details. Don’t jump to the details right away without figuring out what the requirements are.
- There are no perfect system designs. Make the right trade-off for what is needed.
Topics for review
- C++ Refresher
- Android Internals
- leetcode tag list
- Behavioral discussions (private link)
- Side project discussions
- System Design
- Message Queues
- Load Balancers
- SQL vs. NoSQL
- DO arithmetic on whiteboard
- long divisions
- Back of the envelope calculations
Behavioral
Dealing with difficult customer
Did you ever tell a customer they were wrong about something, and how?
Strengths and weaknesses
Software Design and Architecture
References
- How I got 5 offers
- Interview Prep Guide
- Systems Design Primer
- Interactive coding challenges
- https://developers.google.com/optimization/introduction/overview
- Computer Networking
- Udacity Computer Networking
- How to implement a search engine
- Codility lessons
- HN discussion
- Coding Interview University
- Behavioral Interview Tips
- 30 common behavior questions
- Dynamic programming videos
- git internals
- Better Explained
- SQL Full Course
- Coding interview style