To implement a rolling average in a streaming data context, I would use a circular buffer and maintain a running sum. This allows updates to be done in constant time, O(1), by removing the oldest value and adding the new one to the sum.
In depth
The rolling average, or moving average, is a common technique in data streams to smooth out fluctuations and highlight trends. The key to an efficient implementation is to avoid recalculating the average from scratch whenever a new data point is introduced. By using a circular buffer, you can effectively keep track of the last 'n' values. As each new value is added, subtract the oldest value from the total sum and add the new value. This way, the average can be computed in constant time, minimizing performance overhead. However, care must be taken with the buffer's size to avoid memory issues, especially in high-frequency data streams, and to ensure that the buffer adequately captures the needed historical context.
Example scenario
In a financial application where stock prices are continually streamed, a rolling average is crucial for traders to smooth out price volatility. By implementing a circular buffer with a fixed size, each time a new price arrives, the oldest price can be efficiently removed from the sum, and the new one added. This keeps the average calculation performant, even with rapid data influx, allowing traders to make near real-time decisions based on reliable data.
Common mistakes
One common mistake is re-computing the average from all existing data points instead of maintaining a running sum, which leads to O(n) complexity. This is inefficient, especially with large data sets or high-frequency data. Another mistake is using a static array instead of a circular buffer, which can lead to memory overflow when the data volume exceeds the initial allocation, compromising performance and reliability. Failing to manage the size of the circular buffer properly can also result in losing important historical data necessary for accurate averages.
Follow-up questions
- What edge cases do you think are important to consider when implementing a rolling average?
- How would you handle a situation where the incoming data stream is interrupted?
- Can you discuss how to optimize memory usage for very large datasets?
- What would you do differently if you needed a weighted rolling average?

Want all 2,000 questions in one PDF?
- Short answers, in-depth explanations, common mistakes and follow-ups
- 89 topics, from Beginner to Architect, with a clickable contents list
- 226 extra questions that are not on this website
- Free Bonus Pack: 30-day study plan, behavioral questions, salary scripts
Includes 226 extra questions that are not on this site, plus a free Bonus Pack.
Get both books for $9.99 (save $2.99):
The material stays free to read online. This is the organised, offline, print-ready PDF edition. Secure payment by PayPal; your personal download link is emailed after payment is confirmed. Digital product, no shipping.