Applied via referral. Got the call from recruiter 2 days later regarding the interview. Recruiter explained that the first round will be a 1 hour round focussed on data structures and algortihms and will be taken by Karat. After finalizing the interview date and time, I received a confrmation email from Karat explaining the interview process and zoom link.
First round
The interviewer introduced himself and told me that the first 10 minutes will be spent on 2 small system design questions. He asked me 2 system design questions one of the them was related to scalability and the other one I don't remember. He did not give me more that 10 minutes to think about it and then we proceeded to data structures and algorithms. However he was satisfied with my appproaches for both the design problems.
Q1. https://leetcode.com/problems/basic-calculator-ii/ Actually it was an easier version of this as only '+' and '-' operators were allowed in the input expression. Quickly came up with the approach and explained it to the interviewer. Interviewer was fine with it and asked me to code it. I coded the solution quickly. Followed all good code practices like modularizing, self explanatory variable and function names etc. The interviewer tested my solution on some test cases and they all passed. Discussed time (O(n) for my solution) and space complexity (O(1) for my solution).
Q2. https://leetcode.com/problems/basic-calculator/ Came up with the solution using recursion in 5 minutes and explained it clearly to the interviewer. He asked me to code it. Since I had already written the code for first question so I quickly modified it a bit for this question. Passed all test cases and discussed about time (O(N)) and space complexity (O(N)).
Still 5-10 minutes were remaining so the interviewer game a very hard problem which was a variation of above questions only. Came up with the approach and told it to the interviewer. He told me that my algorithm is correct and was quite impressed with it. Asked me if I have any questions and we ended the interview.
Got the call from recruiter the next working day that I have cleared the first round. He explained me that there will be 2 more rounds focused on data structures and algorithms and low level design. Asked for 1 week time for preparation but the recruiter only allowed for 2 days time.
Second Round
This was a low level design round and lasted 1 hour. Allowed to use any IDE of your choice. I was asked to code the LLD for API rate limiter. I think this round was the reason of my rejection. I am not sure if was able to explain him my approach very well and the interviewer did not help much if I was going in the right or wrong direction. I tried to engage him as much as possible by thinking out loud. Nevertheless I will really appreciate if some one could provide the LLD for api rate limiter. I still don't have any clue about how should I have designed my classes and interaction between them.
Third round
This was a data structures and algorithms round and lasted 1 hour. Allowed to use any IDE of your choice. I was asked 3 variations of https://leetcode.com/problems/rank-teams-by-votes/. The key in this question is to ask from the interviewer about tie breaking rules and handle them correctly in your algorithm. The question given by the interviewer did not mention anything about ties so you have to think about it yourself. Thankfully this was my first question from him that how do we break ties and he applauded me for asking this question.
The first variation was of easy-medium difficulty. Gave the correct algorithm and coded the same. Passed all test cases. Discussed time and space complexity, both were O(n). I was doing 2 O(n) iterations in my code so the interviewer gave some hint regarding how to do it in one O(n) iteration only. Thought about it for a minute discussed the solution, modified my code and passed all test cases.
The second variation was of medium difficulty. Gave the correct algorithm and coded the same. Passed all test cases. Discussed time and space complexity, both were O(n). The interviewer was fine with it. He asked me what additional things I would have done if I was implementing the same in production. I discused about unit testing, modularization, thread safety.
Only 10 minutes were remaining so the interviewer gave me the third variation which was quite hard. I quicky gave him one solution and he pointed out a mistake in it. I thought about it for a couple of minutes and then gave him a solution which was correct. He was also fine with it. He finally asked if I have any questions.
In my second and third round of interview, both the interviewers had expained me that these rounds are to judge how the candidate approaches a problem and writes software and how does it align with the way they write software at Atlassian. They told me that I might not be able to complete the question in the given duration of 1 hour but there is no need to worry about that because compeleteness of the solution is not one of the judging criterias. They did not explain exactly what were their judging criterias.
Judgement Day
Received the email from recruiter one day later stating "we've decided not to move forward with your application. It was a very tough decision, but we feel some of the other candidates are a stronger fit for this particular position."
The email did not mention anything about my areas of improvement or where I was lagging or what I could have done better. My deduction is that my LLD round was not good. Please if someone could provide the LLD (not HLD :) ) of API rate limiter then that would be really great.