This is the first in the series of Atlassian grad process.
0. Motivation
Due to a popular demand and interest, I have decided to write some blurbs about what the Atlassian interview process entailed. No, I'm kidding, noone really asked me for this. However, I previously did come across a random post that detailed their interview process that gave me a real insight into what the interviews are actually like. Unfortunately, I have lost the source for that, so I decided to create a post that is hopefully at least as useful as that post.
I am writing this so that those who are preparing for the Atlassian interviews are aware of the level of expectations that the interviewers and HR have, and what I write here does not reflect the opinions of Atlassian. If you are not in the interview season, I strongly advise against reading this post. Instead, I recommend going through this previous post that deals with more actionable tips that you should apply in long term to make yourself attractive to the employers. Good experiences and skills do not grow on their own. It's never late, so commit yourself to the right routine from today.
1. CV screening with referral (3rd Feb)
This is the CV I applied with. I had a referral from my friend who is an year above, who is currently working at Atlassian as a graduate software engineer. Referral + >7 GPA + 1 or 2 internships seems to be a safe borderline to get to the next stage. Good thing about referral is that you do not have to write a cover letter. Also, it definitely helps to stand out amongst thousands of CVs. Your referer can even nudge the HR if you are not hearing from them for a long time.
I was referred on 3rd Feb of 2022, and they acted on it on 15th Feb of 2022. My friend who also applied at the time without referral had heard from Atlassian a few days earlier. My referer nudged the HR, and I got the email.
And, just a tip - they don't care too much about CV after you pass the CV screening! So if you have put some projects into cv and realize that you didn't put projects that are better for discussion, you can just discuss other projects. However, you do need to make sure that you can pick an interesting project and talk about the details with someone. I'll talk more about that when I get to the behavioural stage.
2. Hackerrank (15th Feb)
Dreadful, dreadful, dreadful. Luckily, you will get something like 1 easy & 3 medium & 2 hard leetcode questions. Plus, you can get away with solving 2 or 3 questions completely. In my case, I got 4 out of 5 questions fully - I could not solve the last question, but passed 100% of the test cases for the first 4 questions. You definitely cannot wing it, but these are doable as long as you are familiar with leetcode easy/medium questions. I'll elaborate more in the next section on how to prepare for it.
2.1 Preparation
Obviously I prepared for it. Previous year's questions I gathered online did not really help, and I expected that they won't be much of a help either. I focused on making sure that I knew how to use most of the data structures and confidently use common patterns. Here are the patterns I went through on Grokking the Coding Interview (Educative.io). Focus on BFS graph traveral, priority queue, hashmap, list and array/string manipulations.
Unfortunately, I cannot share the exact questions I have received, as it would be unfair for the others and potentially jeopardize Atlassian's recruitment process. However, here are a few reflections I wrote down after the Hackerrank stage:
- Searching up doesn’t help most of the time so better to just focus on thinking about the question and solving it.
- Debugging is hard
- Read all the questions and understand what it’s asking. If not, you will panic reading the question later because you have lesser time. Took me about 10 minutes ish to read and understand what they were asking (hackerrank wordings are tricky).
- When writing code, you have to write pseudocode that you are convinced that it works and you can implement it. If you can’t be convinced, don’t write any code.
- Grokking the coding interview works! When you practice, make sure you can draw out the problem, get intuition, translate intuition to comments, and implement it. The code they provide is very useful because they are very readable.
2.2. Question specific tips
While I cannot show you what question it was, I can still tell you what area these questions were coming from, and the necessary skills required to solve that question. I don't think Atlassian recycles questions (in the least, they randomise it from a pool), so what I am doing here shouldn't give you the biggest advantages over others.
2.2.1 Question 1
All test cases pass. Took me more than it should’ve, but main points were
- Midpoint is length/2
- Use Collection.swap()
- For reversing the string, use i+start and end-i where i ranges from 0 to length/2-1 (I did i = start, and was stuck on what was going wrong)
- Use system.out.println to just quickly confirm what’s happening with arr for each iteration
- But make sure your algorithm is solid (comment pseudocode)
- minimise complicated actions from child function (eg pass length rather than having it calculate length)
2.2.2 Question 2
Had an idea straight away, because it was just getting maximum # of intervals that can be scheduled (thank God I studied that last minute). Just sort it by earliest finishing time and keep adding to the number of counts
- I was confused on how I could exclude overlapping intervals once I take an interval into the set, but I somehow thought about the strategy on the spot
- I called Collections.sort before adding intervals, then I got so lost because the algorithm looked perfectly fine. It was only when I sysout that I found out I placed Collections.sort earlier than I should’ve
2.2.3 Question 3
Almost screwed up this one because I was thinking of weird strategy to cerate all possible substrings
- I was using that BFS strategy at the start to produce all possible strings (like if initial string is abcde, ac would be one of the string, but it shouldn’t be because substring should be contiguous!)
- Otherwise, the algorithm was straightforward and it really helped that I wrote pseudo code in comments
- I passed 4/12 cases initially, and optimised it by early pruning solution space:
Doing XXX made it pass 12/12. Oh actually, I had 3 cases where the answer should be 0 - that’s when you have nothing in the frequency map. (when there’s no substring that meets the criteria) - but I was returning Integer.MIN_VALUE. So fixing that gave me full mark.
2.2.4 Question 4
This one was way too straightforward and got it straight away. Only straightforward if you know the priority queue though, which I studied up.
2.2.5 Question 5
I had no idea how to approach this.