I was applying for a middle/senior position, they had the following stages:
1) A screening interview with some light technical questions.
2) A coding challenge: writing a URL shortening service. They ask to put the focus on TDD and OOP, with some simple concurrency questions on top.
3) A java backend focused interview with a bunch of questions about Java, Concurrency, SQL databases, Microservice patterns, deployment strategies.
4) A system design interview. They asked to design a system that issues new cards in a banking app. No back of the envelope calculation, but we had to take user experience considerations and think about stuff like logging, metrics, etc on top of the more theoretical blueprints. Probably was the hardest and least predictable part for me.