Interview
Abstract
Notes on my Technical interview at Google.
Preparation material - Coding Interview (Python)¶
1. General¶
Google interviews focus very heavily on algorithms and data structures. You'll be expected to know and apply: lists, maps, stacks, priority queues, binary trees, graphs, bags, and sets. You'll need to talk about how they're implemented and why you'd choose one implementation or data structure instead of another. For algorithms you'll want to know greedy algorithms, divide and conquer, dynamic programming, recursion, and brute force search. You'll definitely want to be conversant with big-O notation, time-space complexity, and real world performance of all of this. Most importantly you'll need to be able to pick the right data structure and algorithm for a specific problem.
How to solve a Google coding interview question ->
2. Interview Questions¶
Interview topics may cover: anything on your resume, coding questions, building and developing complex algorithms and analyzing their performance characteristics, logic problems and core computer science principles (hash tables, stacks, arrays, etc.). Computer Science fundamentals are a prerequisite for all engineering roles at Google, regardless of seniority, due to the complexities and global scale of the projects you'll work on.
3. How to Succeed¶
At Google, we believe in collaboration and sharing ideas. You'll likely need more information from the interviewer to analyze and answer the question to its fullest extent.
- It's OK to question your interviewer!
- If you don't understand, ask for help or clarification.
- If you need to assume something, feel free to ask your interviewer if it's a correct assumption.
- When asked to provide a solution, first define and frame the problem as you see it.
- Describe how you would like to tackle solving each part of the question.
- Let your interviewer know what you're thinking because he/she will be just as interested in your thought process as in your solution.
- Finally, LISTEN! Engineers are always collaborating here at Google, so it's important that you can listen to your interviewer - especially in the event that he/she is trying to assist you.
4. Technical Preparation tips¶
-
Algorithm Complexity:
- Please review complex algorithms, including big O notation, binary search sorting algorithms , BFS / DFS / and Djikstra
-
Sorting:
- Know how to sort. Don't do bubble-sort.
- You should know the details of at least one n*log(n) sorting algorithm, preferably two (say, quicksort and merge sort). Merge sort can be highly useful in situations where quicksort is impractical, so take a look at it.
-
Hash Tables:
- Be prepared to explain how they work, and be able to implement one using only arrays in your favorite language, in about the space of one interview.
-
Trees and Graphs:
- Study up on trees: tree construction, traversal, and manipulation algorithms. You should be familiar with binary trees, n-ary trees, and trie-trees at the very least. You should be familiar with at least one flavor of a balanced binary tree, whether it's a red/black tree, a splay tree or an AVL tree, and you should know how it's implemented.
- More generally, there are three basic ways to represent a graph in memory (objects and pointers, matrix, and adjacency list), and you should familiarize yourself with each representation and its pros and cons.
- Tree traversal algorithms: BFS and DFS, and know the difference between inorder, postorder and preorder traversal (for trees). You should know their computational complexity, their tradeoffs, and how to implement them in real code.
- If you get a chance, study up on fancier algorithms, such as Dijkstra and A* (for graphs).
-
Other data structures:
- You should study up on as many other data structures and algorithms as possible.
Google Technical interview - L5 Senior Software Engineer, Threat Intelligence¶
It was with Oscar.
- It was about a rate limiter.
-
I'm not proud of my performance.
- I didn't recognize the pattern.
-
I've never seen or thought about rate limiters before.
- I should know this classic design.
-
I didn't follow the interviewer's hints very well.
- I listened to him, but I didn't see where he wanted to lead me.
- I must learn how to follow directions when I'm lost and don't understand where they're going.
-
I did prepare for this interview, but it wasn't enough.
- I must practice more and learn more classic patterns.
- I shouldn't discover them on the day of the interview.
I asked 2 questions at the end:
-
How could I get better at this kind of interview?
- Listen better and follow the interviewer's hints.
-
What is it like to work at Google, a software company at that scale?
- There are many people you can learn from.
- You have access to AI models that aren't available to the public.
- The internal tooling, especially CI/CD, is really good.
What if I had the chance to do the interview again in 5 days? What should I focus on to do a better job?¶
-
Obtain a list of classic designs, like Rate Limiter.
- Ask AI to give me simple, idiomatic implementations of them.
- Learn those implementations.
-
Rewire my mind to listen to and use hints from interviewers.
-
I could pick a problem I haven't solved yet and ask AI to give me one hint, the smallest one, at a time. Then I could implement or discuss that hint and ask for one more, until I finish the solution.
-
The goal here is really to learn how to follow directions from others.
- It's not to recognize the pattern before the other person does. It's really to practice the kind of case where, in an interview, I have to work through something new to me that I genuinely don't know how to solve.
-
-
-
Keep solving new problems every day.
- Keep reviewing old problems every day.