Design a rating aggregator that returns totals and averages
Company: Atlassian
Role: Software Engineer
Category: Coding & Algorithms
Difficulty: medium
Interview Round: Technical Screen
Quick Answer: This question evaluates a candidate's competency in designing and implementing data structures and algorithms for maintaining dynamic aggregates (total counts, sums, and averages) across user-item ratings while handling additions, updates, and removals.
Constraints
- Scores are 1..5
Examples
Input: ((('add', 'm', 'u1', 5), ('add', 'm', 'u2', 3), ('stats', 'm')),)
Expected Output: [{'count': 2, 'sum': 8, 'average': 4.0}]
Explanation: Two ratings.
Input: ((('add', 'm', 'u1', 5), ('update', 'm', 'u1', 1), ('stats', 'm')),)
Expected Output: [{'count': 1, 'sum': 1, 'average': 1.0}]
Explanation: Update existing rating.
Input: ((('add', 'm', 'u1', 5), ('remove', 'm', 'u1'), ('stats', 'm')),)
Expected Output: [{'count': 0, 'sum': 0, 'average': None}]
Explanation: Remove rating.