1. Screening with recruiter
Questions about my background, some technical questions just to check if I'm familiar with basic required things. Recruiter gave a very detailed information about what to expect from tech interview, which topics may be covered and what kind of questions may be asked.
2. Technical interview.
Coding challenge. I was asked to implement simple in-memory load balancer for pool of IP addresses. Then requirements changes to add different balancing strategies. Another time I was asked to implement URL shortener service. In this interview focus must be on TDD, patterns, SOLID and clean code.
3. Technical interview. I was given a code snippet, Account class and service with transfer() method, where I need to implement transfer logic. In this interview focus is on thread-safety, concurrency, DDD. First implement with pure java locks (ReentrantLock), then option with DB lock. Implement pure procedural SQL implementation. Deep dive into transaction isolation levels, anomalies, optimistic/pessimistic locks. Also in previous interview I was asked about resilience/stability patterns, microservices, DB indexes.
Overall impression is that they are don't have high need for engineers, just looking if some genious guy, who doesn't make any mistake while coding in the interview and answers all the questions 200% correct. If you loose attention and make couple of mistakes, you'll fail the interview.
I felt like I did good in the interview, but was rejected both times. As I said, small mistakes, and you are done.