Disclaimer
I won't share any real interview questions, but share topics, things you should practice and some tips
My experience
Android developer (5+ years)
Never practiced leetcode questions before (solved 150+ problems to prepare)
Never developed for backend (know basics about distributed systems and scaling)
I was able to solve 3 tasks and discussed 1 follow-up
All three questions were in Easy-Medium range, follow up was closer to hard.
We started with the easy task, which can be solved by Hash map counting, but before that we discussed some edge cases and ways to solve the task (brute force -> optimal solution). I provided time/space complexities and wrote some pseudo code.
Then we had slightly modified version, still easy task
Then I was given even more modified version which can be solved by using sliding window and caching.
Hard follow-up solution were about dynamic programming.
System design
I was given question dedicated to backend design, but since I'm more of a frontend I wasn't able to come up with optimal design and just tried to tackle the problem from different sides and disscussed probable solutions.
Coding round 1
It was a hard question (even to understand) and it's not on leetcode.
We spent 20 minutes discussing problem definition, edge cases and test cases just to understand possible algorithm.
Even brute force solution. is complicated and takes O(n^3) time complexity.
After that I wrote some pseudo code just to create structure and was able to write a solution. It was using combination of Trie + dfs(backtracking).
Optimal solution requires O(n^2) time and O(n^2) space complexity
After that I was given follow-up about one of the edge cases we disscussed which requires extra hash set and filtering.
Coding round 2
Medium/Hard problem related to text formatting.
Again a lot of time was spend to correctly understand the problem and find O(n) time complexity solution.
As a follow up I was asked to write generilized solution which takes O(n^m) time complexity (where m < 1000).
Solution itself uses simple iteration + Stack, but where were a lot of tricky parts where you should handle smaller edge cases and "off by one" possible errors.
Android platform
Questions related to perfomance, profiling, libraries and tools.
I was also asked to write architecture code for a feature.
Behavior/Googliness
I was ask set of questions related to my previous experience and cases I met in my work.
There were no issues with my interviews so they desiced to move to team matching round.
Still waiting for a final extended feedback and team decision
Neetcode top 150 is your "go to" source. Go for each topic and try to solve Easy-Medium questions. Watch and try to understand explanations in videos
For coding rounds I strongly reccomend to spend time on task discussussion defore coding
Pattern: Read the question -> repeat the question out loud -> undestand given examples -> ask about input/output data (array sizes, value ranges, possible invalid inputs) -> ask about initial time/space constraints -> write your own simple example and edge cases -> propose bruteforce solution -> use extra space to find more optimal solution -> try to find even more solutions -> explain tradeoffs and time/space/code complexity -> choose one approach -> pseudo code -> code solution
Try to communicate as much as you can.
Be sure that you and interviewer are on the same page.
Think out loud.
DO NOT TRY TO SOLVE PROBLEM WITHOUT INITIAL ANALISYS (even if problem seems easy)
Use helper functions if possible (breaks down code)
Debug your solution on the way using your examples
Check your code (typos/possible bugs/compile bugs) before "submitting"
Do not panic if you are failing to find a solution, it is ok to get hints, when interviewer steps up focus on them and listen carefully