I applied online. The process took 3 months. I interviewed at Agoda (Bangkok) in Aug 2019
Interview
It was lengthy and rigorous. We took a deep dive into threading. Upto OS level. Yes you read that right.
So the process started in the month of September when I was given a hackerrank test. I cleared that and Agoda scheduled 2 tech interview rounds in a single day on bluejeans. These were moderate level rounds.
I was, after 10 days, told that the position has been closed and they will contact me back in a few months once they have a position open. But the contacted me again after 20 days. They scheduled one final round of bluejeans interview which was also of moderate difficulty.
I cleared this round and was called to Bangkok for face-to-face interviews with development managers. I faced 5 technical interview rounds from morning 10 to evening 5 with a 2 hour lunch break. The interviews were difficult. They focused on my technical knowledge and design skills.
The interview didn't have general problem solving like those at Amazon or Google. They had problem solving of their own kind which expected less code and more tech skills and design skills.
The tech discussions went as deep as how are threads created and managed by the OS. We also discussed a lot about projects on my resume. Went too much in depth of those projects too.
Finally after 4 days of the interview, I was called again on bluejeans and was extended the offer of a Senior Software Engineer at Bangkok.
Interview questions [1]
Question 1
1. How can you manage thousands of requests at the same time? All the requests cannot be processed at the same time. How are you gonna keep them waiting? Explain the architecture.
2. A global variable `x` is initialized to `0`. A function `f()` has a loop which runs from i=0 to 5 and increments value of `x` at each iteration. If `f()` is called once, when `f()` completes, the value of `x` will be 5. Now in our `main()` function, we create another loop which runs from j=0 to 5 and create a new thread in each iteration, and each thread calls `f()`, what is the maximum and minimum possible value of `x` after this loop ends?
3. I had a project on my resume in which I had implemented traffic distribution to different servers using percentages. For ex. if I have 3 servers A,B and C and I need to distribute 20,50 and 30% of traffic to each respectively, I could configure my system to do that distribution approximately. It is possible that there may be fluctuation of 3-4% at the end of the day in the distribution. So instead of A getting 20%, it gets only 18% while C gets 32% of the traffic.
So the interviewer asked me to implement a system that distributes traffic to my servers strictly as configured and not approximately. Then also added a use case that what happens if I introduce a server D and want to divert exactly 1000 requests to it per hour? Not percentage wise but request count wise this time.
4. A new user signs up and a new integer id is to be assigned to a newly created user. And this needs to happen in parallel. And needs to be replicated across 5 data centers. Design a system to do the same.
5. Design an elevator system. Draw class diagram for same. The elevator system of the office building was very high-tech. If you are at elevator labelled `G` and you press the up button, you won't necessarily get elevator `G` but you might end up getting elevator labelled `F` if `F` is nearer.
I applied online. The process took 5 weeks. I interviewed at Agoda in Jun 2019
Interview
This is for a position in Bangkok. They were posting all over LinkedIn as various US locations, but explicitly saying they would relocate you to Bangkok, which is how I found the position. I applied, and got reached out within 1 day for the first part of the screening:
It was one timed test (multiple choice + 3 coding). Then I passed this, and I scheduled a skype interview. They asked me some random knowledge questions and a few coding. The knowledge questions were honestly a bit weird, they were very theory and unrelated to most practical use cases.
After that, it was a coding challenge that you could take however long you wanted to complete, up to some number of days. This was a fun exercise, with extensions if you're interested in taking it that far, but they explicitly mention you shouldn't be spending a whole day on it (in total number of hours).
Then, it was 1 more skype interview which involved some behavioral questions + knowledge questions, as well as 2 coding.
After this, they were ready to take me to the next stage, which was the fly out. They had an engineering manager call me to provide me more info on logistics, salary, etc. to set expectations.
Finally, it got to booking the onsite fly out interview. It took them couple days to finalize all these logistics, and after some back and forth, it finally it was set in stone - they booked everything for me for approx. 4 weeks in advance and I was preparing for the trip.
Then, several days later, they decided to cancel the entire onsite because of changed project priorities, which was really disappointing, since I had already planned my schedule around it. They were very polite about it though, which I appreciate.
Overall the actual interview screens were not that technically difficult. You will have to worry about scheduling around time zones. They were fairly responsive when setting up the screens, but were less responsive when figuring out the onsite logistics.
Interview questions [1]
Question 1
Clean code architecture
Basic coding questions involving arrays and concurrency
I applied through an employee referral. The process took 1 day. I interviewed at Agoda (Bangkok) in Sep 2015
Interview
Face to Face interview with development manager at office. Having technical question only. Confirm mindset match to company culture. Coding can be practice but mindset is very hard to change.