I was asked by one of the recruiters to initially have a Skype chat. After our discussion, she sent me a Codility test in which I had to score 70%. I don't remember the two problems, though they were fairly easy if you scrap all the extra details of the problem.
I passed the coding test and moved on with a technical Skype interview in which a developer asked me different questions regarding which languages to choose when starting a new project, the differences between SQL and NoSQL, garbage collection.
Shortly I was invited for a face-to-face meeting which consisted of four rounds of interviews.
The first one was with a very cool developer who asked some whiteboard questions. One was to create a LinkedList in Java and find-a-node function in that list. After I wrote a function, he followed-up with what happens if there's a circular list and asked me to write a function finding a circular dependency in a linked list. I explained him shortly about using a slow and fast pointer and check if they ever cross. The second question was to find the missing number in an array with unique elements from 1 to 100, where the size of the array is 99.
The second interviewer gave me a puzzle with climbing increasing size of staircases, the stairs could be climbed only with one step or two. The question was how many permutations was needed to climb a n-th staircase with only one or two steps. The answer is the Fibonacci series.
The third session was the ugliest, because it was with two persons and one of them was very arrogant. He asked simple questions like the difference between C++ and Java and between heap and stack, what's "volatile" keyword, how to reverse a string. The two insisted a lot with system design questions and they wanted to know what is the solution using Java concurrent package to have different threads looking in a ConcurrentHashMap (behaving as a cache) if a payment request id was sent to an accounts server. What happened if multiple threads at almost the same time wanted to check in the map if the id is there? What solution does java.util.concurrent come up with to solve this problem? I didn't know which one it was.
The last one was with the hiring manager who asked me, among others, to solve a strange question. He wanted to have a task scheduler and they used a set_timer(int timeout, func task) function that wrote in a buffer these parameters to be used to call the task after the timeout is finished. The problem is if another call to set_timer() comes in at a later time and the task in the buffer was not executed, that one will be overwritten by the new one and the previous one is never going to be executed. The code I needed to write was another function set_timer2(int timeout, func task) that could use set_timer() and an extra data structure, but no extra threads or language specific service executors or thread pools, that creates a seamless execution of all tasks. I couldn't finish this problem and he told me I can take it home to work on it and send it back to him.
I haven't received any feedback about how the whole interview, but only the recruiter pushing me to send back the solution to the send_timer(). Eventually I did send it, incrementally, to the general manager and didn't hear anything from them anymore. Instead, I wrote to the HR person after two weeks and she replied that she was sorry for not providing any feedback by that time and the actual feedback is that I lack core Java competency and I couldn't solve the "architectural" questions.
That's why you, the future candidate, should just stay away from this company because they're simply looking at different problem solving perspectives to some of the issues they face, but they don't necessarily hire.