"Elements of Programming Interviews (EPI) aims to help engineers interviewing for software development positions. The primary focus of EPI is data structures, algorithms, system design, and problem solving. The material is largely presented through questions."--Introduction.
Like you, I'd been in the industry for more than a decade. Solving interview problems is very different from professional work. So, you'll probably need to practice your interview-problem-solving skills. I know I did.
What I did was put a whiteboard on my wall and solved problems on it. I solved the problems blind, drawing them randomly from a book (Elements of Programming Interviews was my primary source). I video recorded myself and reviewed the recordings to help me refine my spoken thought stream and to learn to avoid stumbles and long stretches of silence. I then practiced in this way for a month, on and off, until I became good at it.
Best of luck!
Standard advice seems to be:
1. Leetcode: maybe not grind it, but a) check if the companies you're interviewing at have tagged questions, b) review many questions and solutions and c) solve a few yourself from scratch
2. Cracking the Coding Interview: the "classic"; I see that Gayle also has a bunch of HackerRank affiliated videos on Youtube now.
3. Elements of Programming Interviews: similar to (2) but more thorough
Outside of those, I've also:
1. Interviewing.io: "realistic" practice interviews
2. ChatGPT: practice recruiter screen/behavorial questions, e.g. generate sample questions like "tell me about a time you overcame a technical issue", help refine a "standard set" of responses
3. Project Euler: I know it's similar to Leetcode, but I always enjoyed this more and it feels like it prepares in the same way
What else would you recommend?
Working through Skiena's Algorithm Design Manual [0] would be a good start and/or watching his lecture series on Youtube [1].
Other great books include Elements of Programming Interviews [2] which comes in Java, C++, and Python flavors.
It can help to focus on a smaller subset of Leetcode problems to learn the tricks that underlie most of them. Neetcode [3] is a good collection of those problems on which you could focus your time and efforts.
I don't think it's realistic to expect to do well on Leetcode without practicing the above skills to some degree, so I wouldn't be hard on yourself if it's been years since you even looked at the material.
[0] https://www.amazon.com/Algorithm-Design-Manual-Computer-Scie...
[1] https://www.youtube.com/watch?v=dphSwq5jP1A&list=PLOtl7M3yp-...
OP claims to have done 400+ LC problems over a couple of months. Let me say it out loud here: this is simply crazy. It strikes me as an attempt to not learn how to tackle these challenges, but to actually brute-force through them. To anyone preparing for an interview: don't do this! Grab a book like Elements of Programming Interviews (EPI), maybe follow some online courses on programming puzzle patterns, and then start grinding LC. Maybe interleave grinding with learning? Your end goal should be to develop deep understanding of what you are doing, not memorise the solutions.
Also, while going through LeetCode, it is very important to realise that the problem classification there is a bit wild at times. Don't stress that you cannot solve a medium sometimes as they are mislabeled. I did mediums that could be hards, hards that could be mediums, and hards that were just impossibly hard. Typically a very hard problem is not something you should expect in an interview setting as most interviers* don't expect you to implement KMP on the spot. Doesn't hurt to know it and impress the interviewer with knowledge, but if you think memorising KMP is the way, you're mistaken.
* - there is still luck involved and you can have a crazy interviewer. It can happen, so just accept it and move on. Don't treat it as a personal defeat.
Source: I grinded and I had offers from most of FAANG letters.
I much prefer the book Elements of Programming Interviews. It has an accompanying git repo with tests that you can debug in if you really need to. The solutions usually discuss a couple possible approaches. Following their study guide, I learned about Java data structures that I don't normally use and saw a good variety of problems. Ended up getting a job I was shooting for.
Ultimately though, it's not so different from leet code, although I think it is a more effective use of time. I think it is a good idea to do some practice just so you are ready for this type of question.
I spent about a month covering the book, and then grokking the systems design.
It’s not so much the knowledge as the familiarity with the interview format and expectations (ask clarifying questions, explain your reasoning). The company I ended up joining had an opportunity for a mock phone screen interview, which I took advantage of. It was roughly a LC easy but covered the format and gave me some feedback on how I conducted myself.