Applied in person, followed by an HR phone screen (with minimal technical questions), online collaborative coding test (via phone and collabedit), and finally an on-site interview. The process was smooth and the recruiter was really great to deal with.
The coding test over the phone was not too tricky. I was able to correctly solve all the problems, but the interviewer wanted cleaner code in some cases. He was a nice enough guy, but it was hard to understand him at times due to his (Chinese) accent.
The on-site interview ramped up the difficulty considerably. I met with 3 different engineers (one after the other) and was asked 3 different questions (all LeetCode medium & hard difficulty problems). At the beginning of the interview, they say that they are interested in your 'thought process', so if you get stuck, just talk it out. Well, this is totally not true. All 3 engineers seemed nice, but as with the phone interview, they all had accents that made them difficult to understand at times. After they write the problem on the board, they will just sit there without any feedback.
For programming interviews, I learned that it is important to have a process to solving the problems: understand the problem (work through examples), write pseudo-code and work through examples and edge-cases, write actual code, then finally step through the code with a couple examples. It is a long process, but it shows your thought process to the interviewer.
Well, for this company, it seems that they really only care about the final code, so my above 'programming interview process' is kind of useless. On top of that, you have to type it out on a laptop via collabedit. I had working solutions to all 3 problems, but my code was sloppy and I didn't have time to go back and refactor.
It's a very stressful situation when you're asked a difficult question, get ZERO feedback as to how good or bad you are progressing, and then are expected to type out a complete solution with clean code in a limited time frame.