Summary
I underwent a technical phone screen with Atlassian, where I was tasked with an optimization problem involving grocery shopping to minimize department visits. I presented a logical approach to determine the time saved.
Full Experience
I recently participated in a technical phone screen for Atlassian. The interviewer presented a rather intriguing problem: optimizing a grocery shopping trip. The objective was to calculate the number of department visits saved by grouping items from the same department together, rather than visiting departments in the order they appeared on the shopping list. I was given a list of products with their departments and several shopping lists. I focused on clearly understanding the problem, especially how 'department visits' were counted in both the original and optimized scenarios. I believe I effectively communicated my thought process and outlined a viable strategy to solve the problem, walking through the provided examples.
Interview Questions (1)
You are going on a camping trip, but before you leave you need to buy groceries. To optimize your time spent in the store, instead of buying the items from your shopping list in order, you plan to buy everything you need from one department before moving to the next.
Given an unsorted list of products with their departments and a shopping list, return the time saved in terms of the number of department visits eliminated.
Example:
products = [
["Cheese", "Dairy"],
["Carrots", "Produce"],
["Potatoes", "Produce"],
["Canned Tuna", "Pantry"],
["Romaine Lettuce", "Produce"],
["Chocolate Milk", "Dairy"],
["Flour", "Pantry"],
["Iceberg Lettuce", "Produce"],
["Coffee", "Pantry"],
["Pasta", "Pantry"],
["Milk", "Dairy"],
["Blueberries", "Produce"],
["Pasta Sauce", "Pantry"]
]
list1 = ["Blueberries", "Milk", "Coffee", "Flour", "Cheese", "Carrots"]
For example, buying the items from list1 in order would take 5 department visits, whereas your method would lead to only visiting 3 departments, a difference of 2 departments.
Old:
Produce(Blueberries)->Dairy(Milk)->Pantry(Coffee/Flour)->Dairy(Cheese)->Produce(Carrots) = 5 department visits
New:
Produce(Blueberries/Carrots)->Pantry(Coffee/Flour)->Dairy(Milk/Cheese) = 3 department visits
list2 = ["Blueberries", "Carrots", "Coffee", "Milk", "Flour", "Cheese"] => 2
list3 = ["Blueberries", "Carrots", "Romaine Lettuce", "Iceberg Lettuce"] => 0
list4 = ["Milk", "Flour", "Chocolate Milk", "Pasta Sauce"] => 2
list5 = ["Cheese", "Potatoes", "Blueberries", "Canned Tuna"] => 0
All Test Cases:
shopping(products, list1) => 2
shopping(products, list2) => 2
shopping(products, list3) => 0
shopping(products, list4) => 2
shopping(products, list5) => 0
Summary
I recently interviewed for a Principal Engineer (P60) position at Atlassian, enduring a comprehensive 6-round process that included technical screenings, system design, code design, and behavioral evaluations. Despite progressing through all rounds, I was ultimately down-leveled to a P50 offer due to my performance in the final coding round, which I subsequently rejected.
Full Experience
My interview journey at Atlassian for a Principal Engineer position (P60) comprised six distinct rounds.
Round 1 (30 mins, Telephonic Screening)
This initial round involved a discussion about my prior experience and the scope of my current role. I was asked to discuss the approach for implementing an LRU cache, with no actual coding required. Following this, there was a design problem where I had to outline the approach for a collaborative editing system like Google Docs, focusing on conflict handling and WebSockets. Another design challenge involved a file storage and searching system that could query by file name or keywords, where I suggested using object storage and Elasticsearch. The round concluded with standard behavioral questions about my motivation for changing jobs and joining Atlassian.Round 2 (45 mins, Values)
This round consisted of situation-based questions designed to assess my alignment with Atlassian's values. I don't recall the exact questions asked.Round 3 (1 hour, Leadership Craft)
Similar to the previous round, this one focused on behavioral questions based on my past leadership experiences. Again, I cannot recall the precise questions.Round 4 (1 hour, System Design)
I was tasked with designing a web scraping system capable of extracting image URLs from a given list of URLs. The problem specified certain API endpoints for initiating jobs, checking status, and retrieving results.Round 5 (1 hour, Code Design)
This round presented a scenario where I was a cinema hall manager. The challenge was to design a functionboolean canSchedule(Movie movie, MovieSchedule schedule); to determine if a new movie could be added to a single day's schedule (10 AM to 11 PM), given existing screenings. Movie times were represented as minutes from midnight.Round 6 (1 hour, Data Structure)
The final technical round involved designing an employee directory system. The core problem was to find the closest parent group for a given set of employees within a hierarchical structure of groups and departments. I recognized this as a Lowest Common Ancestor (LCA) problem, but I struggled to articulate my solution to the interviewer and couldn't reach the expected depth of the problem due to time constraints.Unfortunately, my performance in the last coding round led to me being down-leveled to a P50 offer. Ultimately, I decided to reject the down-leveled offer.Interview Questions (6)
Discuss the approach for implementing an LRU (Least Recently Used) cache. Coding was not required, only an architectural discussion.
Design a collaborative editing system similar to Google Docs. The discussion should focus on conflict handling mechanisms and the use of WebSockets for real-time updates.
Design a file storage and searching system. Files should be searchable by file name or by keywords within their content. The proposed solution should leverage object storage for files and Elasticsearch for content-based keyword searching.
Design a web scraping system capable of scraping a given list of URLs and extracting all image URLs from them. The system should expose the following APIs:
1. POST /jobs -> {urls: ["abc.com", "amazon.com"]} -> response ({job_id: 1234})
2. GET /jobs/{job_id}/status -> {"completed": "1", "inprogress": "1"}
3. GET /jobs/{job_id}/results -> {"https://abc.com": ["abc.com/img1.jpg"],"https://amazon.com": ["amazon.com/img1.jpg"]}
You are the manager of a cinema hall. Design a system to determine if a new movie can be added to an existing schedule without removing any current movies. The cinema operates from 10 AM to 11 PM on a single day. Movie start and end times are represented as minutes from midnight. Implement a function boolean canSchedule(Movie movie, MovieSchedule schedule); that takes a Movie (with its duration) and the current MovieSchedule as input, and determines if the movie can be scheduled. Example data provided:
{
"movies": [
{
"title": "Lord Of The Rings",
"durationInMinutes": 120
},
{
"title": "Back To The Future",
"durationInMinutes": 90
}
],
"screenings": [
{
"title": "Lord Of The Rings",
"startTime": 660
},
{
"title": "Lord Of The Rings",
"startTime": 840
},
{
"title": "Back To The Future",
"startTime": 1020
},
{
"title": "Lord Of The Rings",
"startTime": 1200
}
]
}
Given an employee directory structure composed of groups and departments, find the closest common parent group for a target set of employees. The problem is analogous to finding the Lowest Common Ancestor (LCA) in a tree structure. For example, in a given diagram (implicitly a hierarchy), the closest group for employees Alice and Lisa would be 'Engg'.
Summary
I received an offer for a P40 role at Atlassian in Bangalore after completing six rounds of interviews covering Low-Level Design, Data Structures & Algorithms, High-Level Design, company values, and managerial discussion. My interview experience was thorough, leading to a successful outcome.
Full Experience
My interview journey with Atlassian began after receiving a referral. The process kicked off with an initial call from the recruiter, where they outlined the interview structure, what they look for in candidates, and provided some helpful prep guides. They scheduled the subsequent rounds two weeks later, giving me ample time to prepare.
1. LLD Round
I was tasked with implementing a Snake Game, but with a slight twist: the snake wouldn't grow after every food item eaten, but rather after every nth food item (where n was a given parameter). The primary focus was on code organization, creating appropriate objects, functions, and abstractions to ensure the implementation was modular, extensible, and clean. The expected output was a snakeGame object exposing a nextMove(dirn) function, requiring me to manage the board, snake, and food state internally. Despite practicing this problem beforehand, I slightly overshot the allocated time by 5-10 minutes.
2. DSA Round
This round involved an n-ary tree structure. For any given pair of leaf nodes, I needed to find their lowest common ancestor (LCA). The interviewer heavily emphasized explaining the time complexity and maintaining continuous communication of my thought process throughout the problem-solving.
After these two rounds, it took another two weeks for them to schedule the next set of interviews, which were set for one week later.
3. HLD Round
The challenge was to design a YouTube-like homepage for a software similar to Confluence. The goal was to display the most "engaged with" documents across the organization, with the additional requirement of not showing documents I had authored or already read. This was essentially a standard leaderboard design problem. I proposed using Cassandra to store user view information for documents. One area of discussion and critical feedback revolved around the database schema design, specifically how to accurately determine the ranking of pages for a particular user and effectively filter out documents they had already viewed.
4. Values Round
This round deeply explored Atlassian's guiding principles. I had to articulate how my past experiences aligned with their values. For instance, for the value "be the change you seek," I needed to recount a time I initiated a significant change within my previous company.
5. Manager Round
Similar to the values round, this interview focused more intensely on my previous work experience. The manager thoroughly questioned my past projects, looking for specific examples of how I embodied Atlassian's values within those projects. It was crucial to demonstrate a comprehensive understanding of all the work I had done.
Finally, after a couple more weeks for internal discussions and hiring committee reviews, I received the offer.
Interview Questions (5)
I was asked to implement a Snake Game with a slight variation. Instead of increasing in size every time it eats food, the snake only increases its size after eating every 'n'th food item. The focus was on code organization, creating appropriate objects, functions, and abstractions to ensure a modular, extensible, and clean implementation. The expected return object was a snakeGame object which exposes a nextMove(dirn) function, where the user inputs the next direction for the snake to move. I needed to internally manage the state of the board, the snake, and food items.
Given an n-ary tree structure, I needed to find the Lowest Common Ancestor (LCA) for any given pair of leaf nodes. The interviewer emphasized time complexity, clear explanations, and continuous communication of my thought process.
I was asked to design a YouTube-like homepage for a software like Confluence. The goal was to display the most "engaged with" documents across the organization. Additionally, the system should not show documents that I, as the user, have already written or read, similar to YouTube's recommendation system. It was mostly a standard leaderboard question.
This round revolved around Atlassian's principles. I was expected to provide examples showcasing how I embody their guiding values, such as 'be the change you seek' by describing a time I initiated change in my company.
This round was similar to the values round but with a much stronger focus on my previous experience. The interviewer delved deeply into my past projects, questioning how I demonstrated Atlassian values within those projects. It was important to show thoroughness regarding my past work.
Preparation Tips
For Low-Level Design (LLD), I focused on previous years' interview questions, practicing problems like the snake game, rate limiter, and parking lot design. I found ChatGPT to be a useful resource for gathering past interview questions from various platforms like Glassdoor, LeetCode, Blind, and GFG.
For Data Structures & Algorithms (DSA), I systematically tackled LeetCode questions asked in the last six months, prioritizing them by frequency.
My High-Level Design (HLD) preparation involved practicing previously asked system design questions such as Jira, tagging systems, and leaderboard designs.