1. Use Docker Go SDK to implement basic docker run command dkr with a timeout option to force kill long running container. Images should be pulled if not available locally. For e.g.

    1) dkr run -k 5 alpine:latest sleep 10 # should start container and kill after 5 sec
    2) dkr run alpine:latest sleep 10 # should execute for 10 sec

  2. Implement a task scheduler, which given a list of tasks executes both serially and concurrently. For example:
  3. 1. Execute task t1, t2, t3, t4 concurrent 
    2. wait for them to complete 
    3. Then execute t5,t6,t7 concurrent
    4. wait for them to complete 
    5. Then execute t8,
    6. wait for them to complete 
    7. Then execute t9

    1. Define the tasks structure that can be used as an input.
    2. After executing all tasks, print the list of task IDs and their start/return times.
    3. Task structure would be something like 
    4. type Task struct {
      ID string

      // Run prints the Task ID, sleeps for few random milliseconds 
      // and returns the completion time
      func (t * Task) Run() time.Time

  4. Implement an HTTP service which accepts incoming requests and assigns the request to 1 of 3 buckets (A, B or C) based on the given distribution. Write a unit test to verify your solution.

    E.g. If the server is configured with a distribution of 10%, 20%, and 70%, then out of 1000 incoming requests, responses should be A (100 times), B (200 times) and C (700 times). Approximation is acceptable.