Code Monkey home page Code Monkey logo

sdechallenge's Introduction

PaytmLabs SDE Challenge

Coding Question

Write an interface for a data structure that can provide the moving average of the last N elements added, add elements to the structure and get access to the elements. Provide an efficient implementation of the interface for the data structure.

Minimum Requirements

  1. Provide a separate interface (IE interface/trait) with documentation for the data structure
  2. Provide an implementation for the interface
  3. Provide any additional explanation about the interface and implementation in a README file.

Design Question

Design A Google Analytic like Backend System. We need to provide Google Analytic like services to our customers. Please provide a high level solution design for the backend system. Feel free to choose any open source tools as you want.

Requirements

  1. Handle large write volume: Billions of write events per day.
  2. Handle large read/query volume: Millions of merchants wish to gain insight into their business. Read/Query patterns are time-series related metrics.
  3. Provide metrics to customers with at most one hour delay.
  4. Run with minimum downtime.
  5. Have the ability to reprocess historical data in case of bugs in the processing logic.

Coding Question Documentation

Interface IMovingAverage

It represents the moving average. It has 5 methods addValue, getAverage, reset, getAllElements and getElement. Generic type allows you to decide the data type while implementing.

class MovingAverageImpl

It implements the interface IMovingAverage and provides main logic. I am using ArrayList for storing the elements and I am not removing elements even after reaching the window size. It maybe useful later. However, it may cause to out of memory exception but I am assuming we have less data set for now. I use a sum variable to store the total of last N elements. I can reset list and sum by using reset method. I have a getElements method for retrieving all elements and a getElement method for retrieving an element by using index.

Average logic: If elements size is less than window size, I will use list size for dividing the sum. If elements size is greater than window size, I will use window size for dividing the sum.

It is not thread safe.

class SynchronizedMovingAverageImpl

It works like MovingAverageImpl but all methods are synchronized.

It is thread safe

Design document

Please have a look at DESIGN.md for the analytics design.

sdechallenge's People

Contributors

rvgurijala avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.