The best way to prepare is to actually learn as much as you can - not as "interview preparation", but as actual knowledge. Then, as specific interview skills, you also need to learn to think under pressure, to communicate what you're thinking well, and to gracefully and smoothly say that you don't know, but you could figure it out with a bit of time and Google.
But I think you're taking my answer in a bit different direction than I meant it. I meant that the way to "prepare" for the interview is not by preparing for the interview, but rather by really learning stuff that you actually need for your career. Don't try to figure out how to game it. Instead, learn more so that you're more the candidate that they're looking for.
Now, you can still get tripped up by stupid stuff. "Oh, you didn't know the exact time complexity of that algorithm? No job for you!" But if they're playing that kind of game with you in the interview, you may not want to work there anyway...
1) learning the data structures / algorithms
2) finding enough problems with quality, step-by-step answers in a language I use
3) being able to write code on a whiteboard without the help of google
4) being able to code in front of other people without freezing up
5) getting in the practice of talking about my code before/while writing it
6) identifying which data structures/algorithms are needed to solve the problem
7) learning all the little non-algorithmic tricks to puzzles
I want more practice coding in front of strangers since I tend to lose half my IQ and critical thinking skills under pressure. Plus, despite the myriad of leetcode-like websites out there, I want a more exhaustive list of high quality practice problems with well-explained solutions.
I was recently asked some of them and made a note of them for future reference. A lot of these are open-ended type questions and not specifically techy questions. I think these can give a very good insight into how a person thinks and can fish out what they actually have experience with when they give examples.
1. Give me an example of when you have had to release code into production that you didn’t want to. give any explanations/descriptions needed.
2. How do you keep up to date with the latest tech?
3. Give me an example of how you have improved some code and why.
4. Are you a front-end or back-end guy?
5. Give me examples of how you have stress tested a website or piece of software.
6. Have you got any API experience? Give an example.
a. Explain how you would secure an API.
7. Have you got any experience with Mobile app development?
8. What are your biggest strengths?
9. What are areas you could improve on?
10. Give me an example of when you have disagreed with a decision. How did you handle it? What was the outcome?
11. Tell me about your experience using a database?
12. Tell me about your perfect day. What would you be doing.
There were a lot of specific questions after this but I think these are good to get you started.
In terms of actually answering your question "What is missing and what can be done better?", I think the best thing to do could be to simply produce something using technologies implemented by the company. If someone I was interviewing asked me ahead of time what techs we use so they can perhaps write some code to show me then I would happily give them that list and an example of a public-facing solution (e.g. a company website) for them to see.
A lot of places nowadays (in the UK at least) will just have phone interviews and a face to face interview to ask techy and personal questions. Then if you get the job you would be on a probation period for a few months to make sure you can actually do the job. I think answering the questions above can help to impress and get you through the door.
Hope this all helps!
https://www.hackerearth.com/practice/
Definitely have a look at this, if you want to improve in the field of data structures for your technical interviews.