Context: - Dev with 10+ years of experience - Last 2 years in an architect role with technical leadership responsibilities - Planning to apply for senior roles at FAANMG
Question: I am fairly good at solving system design and scenario based questions, but I am confused about what resources to use to prepare for whiteboard/programming questions (not 100% sure if these are relevant at senior level?). Below is the list of resources I was suggested:
1. Cracking the Coding Interview 2. Elements of Programming Interviews 3. Online Judge - LeetCode, HackerRank etc.
I have used cracking the coding interview for my interviews right out of school, but I was told that it is not relevant anymore and I should focus on Elements of Programing Interviews.
Same with Online Judge, I was told to use an online judge (LeetCode, HackerRank) over books.
Other companies will treat you as more of a human, and less as a cog. In my current job, I asked to see production code when interviewing. I flipped over every stone I could, to know what I was getting into. I saw the good and the bad. FANGs? You must prove yourself to gatekeepers before even knowing if there are teams with personalities you will agree with. You have no guarantee there's something on the other side of the gatekeepers, that you're even remotely interested in.
Money is important, but for a small haircut you can have better WLB, less competitive peers (though still be growing in your career: you can challenge yourself, without being surrounded by hyper-competitive personality types), amazing culture, and a greater level of transparency.
What you need to differentiate yourself is to learn the undocumented dark arts for whiteboard interviews that the FAANMG are really looking for in a technical interview.
Firstly, [0] explains where these data structures are used in Computer Science and should be a start on implementing them and understanding their complexities and use-cases. The rest from [1 - 4] goes straight into the advanced details of areas like competitive-programming which will give you explanations and clever solutions which are better than the typical DS and algorithm answers that even the interviewers will suggest.
Some of these resources might even give a walkthrough of a proof of these complexities if you really need to convince the interviewer who wants to rigorously test your understanding.
[0] - https://cstheory.stackexchange.com/questions/19759/core-algo...
[1] - http://courses.csail.mit.edu/6.851/
[2] - http://jeffe.cs.illinois.edu/teaching/algorithms/
[3] - http://cp-algorithms.com/
[4] - https://concatenative.org/wiki/view/Exotic%20Data%20Structur...
If you really don't know where to start, you can search and pick a specific topic here to study it in depth: https://github.com/jwasham/coding-interview-university
Personally, If I were preparing for a FAANMG interview, I would contribute to widely known open-source projects that utilise these concepts such as compilers like LLVM, Rust or V8 and operating systems.
For example, as an interviewer I often ask computer architecture/operating system questions as that’s what someone coming in, slotted into my team, needs.
In general, a lot of coding questions tend to be pattern matching and how fast you recognize the algorithm/data structure required to solve it. Before going in as a candidate, I did 50-60 leetcode puzzles and a bit of Elements of Programming Interviews. I also interviewed at many places for FAANMG readiness.
All said and done, the biggest factor in interviews is luck - from getting a good interviewer to getting a problem that you can easily identify/enjoy solving. All the preparation stuff is just to hone your skills. More you’ve seen going in, the better.
Best of luck!
Also, "completing" one problem in the context of the above does not mean being able to solve it the first time without checking the solution. It means possibly struggling with the problem for 20 minutes, checking the answer, and making sure you can do it the next day without looking at the answer. YMMV.
If you do those and cracking the coding interview you should be good to go.
- You have built and can continue to build real software. You should know how to code fluidly in at least one language, as well as idioms and pitfalls. I don't think this is something you can cram for - you build up from experience.
- Able to describe performance or other tradeoffs. This can be in system architecture down to data structures and small optimizations. If you are rusty on algorithms, this can be studied for.
- Be able to do large-scale systems design from a fairly ambiguous problem statement. Sounds like you've had this experience.
- Potentially do a deep dive in a technical specialty of yours (ML, compilers, databases, etc.).
[Note: I haven't been at Google for over a year so this may be rusty, but did interview lots of candidates while there.]
I wonder how many people are missed in interviews who would make a big contribution to an employer but are lost in the interview process. Often skills needed for shipping quality applications are likely not visible if people only focus on raw programming ability. Maybe it's simply too hard to identify in interview form so everyone just looks at how you write code.
As to resources - as many have said earlier - leetcode.com this is basically the place to go for problems to practice and there is also really great community. When practicing problems and analyzing answers in the beginning you will find what kind of topics are important and from there you can find more details in the textbooks (it's worth doing that). There is some good content also on Youtube but not all of it is good (despite high number of views and positive comments).
Whiteboard sessions focused on algorithms and data structures will probably resemble CS20X college courses.