I'm a soon-to-be graduated CS student. I have spent the last month trying to land my first job in the software industry. I interviewed with a couple of companies and I (you guessed it) got rejected. I'm here to talk about the interview process.
Most companies have a similar process for interviewing candidates. You first go through an online test (On Codility, HackerRank or a similar platform). If you pass it, you'll have another technical interview, where you might have to write code on a whiteboard.
The questions you're asked usually revolve around implementing data structures, Maths, and algorithms. The problem is, you almost never will have to implement a data structure from scratch in the job, and you shouldn't anyway.
You usually use data structures included in the language or a standard library. You use them, along with other tools, packages and frameworks to implement your business logic. As a software developer, you spend most of your time gluing code together from different libraries and packages to build your app. You never have to build something abstract like a heap or a binary tree from scratch on entirely your own. You never have to write code without the help of an IDE, or Google for that matter. But that's what you're evaluated on anyway.
Theoretical knowledge of low-level fundamentals is great, but you can be a great developer without it.
There is a huge gap between what you do in the job you're applying for (especially junior jobs) and the abstract questions you're asked to solve in an interview. If you run into something complex, normally you would look it up on google, or consult your team on it. You won't have to face it by yourself with no internet connection, no outside help, and no IDE.
So why do you have to go through all those steps to prove you're just a good entry-level developer?
I know it's hard to identify good candidates. I'm just saying that the current system is clearly flawed. One solution is an assignment given to the candidate based on a portion of your codebase, in which they try to understand your code and how to build on it and write code that solves the problem while not breaking the existing code, which is mostly what happens in the actual job. That way you'll have more practical knowledge about the candidate and how they integrate with the team.