GithubHelp home page GithubHelp logo

meli-xmen's Introduction

Test Mercadolibre

Steps to init

  1. Clone the repo
  2. Import dependencies
  3. Run main.go file go run main.go
  4. It will be running at port 8080

Steps to test endpoints in localhost

Message: POST 
Url: http://localhost:8080/mutant/
Body: {
      	"dna":[
      		"AAAAGA",
      		"CAGTGC",
      		"TTATGT",
      		"AGTAGG",
      		"CTCCTA",
      		"TTACTG"
      		]
      }
Response: 200 o 403
Message: GET 
Url: http://localhost:8080/stats
Respuesta: {
               "count_human_dna": 7,
               "count_mutant_dna": 4,
               "ratio": 0.5714286
           }

Notes

  1. The database selected for this project was bitcask, a DB built in Golang, works as KVS, has a very short response time, and is easy to implement. A relational or documental database has a lot of characteristics that we won't use here. In this case, we only need to save and read.
  2. The mutantes.conf file and databases will be generated inside project's folder to facilitate the system execution. If it were a software running on production servers that kind of files it will have to be moved to another folder.

meli-xmen's People

Contributors

alexanderarmua avatar prologic avatar

Watchers

James Cloos avatar

Forkers

prologic

meli-xmen's Issues

Implementar Base de Datos

Actualmente, se guarda todo en un mapa y se pierde la información al apagarla.

Se necesita una base del tipo "Key, Value" no es necesario guardar el ADN ya que no se vuelve a utilizar. Seria algo como "hashDelAdn , (true/false)"

Nota: De implementarlo en database.go seria transparente al resto de la aplicación

Preparar servicio /stats con un cache cada 5 segundos

Como la request /stats puede ser consultada hasta 1 millon de veces por segundo, no seria bueno que cada consulta le este pegando a la BD.

Formas propuestas para resolver el problema.

  1. Cada 5 segundos hacer una consulta a la BD, calcular los resultados, dejarlos en una variable y que el request /stats retorne esa variable (en el peor de los casos, obtienen informacion con 5 segundos de antiguedad).

  2. Al iniciar el programa, hacer el calculo de Stats y luego cada vez que se inserte un dato recalcularlo.

Test database

Implementar test en database.go

Independientemente de la base de datos que se utilice, deberia serle transparente a los tests.

Mejorar sistema de recorrido

En lugar de recorrer los mismos caracteres en un for anidado, para hacer el algoritmo de orden N. Seria bueno analizar la implementacion de un algoritmo que cree las goroutines a partir de la lectura anterior.

Cambiar validacion

Comenzar validando y ejecutando el algoritmo correspondiente de ADN. Si se encuentra mas de 1 coincidencia, dejar de ejecutar el algoritmo y seguir recorriendo para validar.

CASOS
Matriz Valida -- 2 coincidencias ==> TRUE y CACHEAR
Matriz Valida -- 0/1 coincidencias ==> FALSE y CACHEAR

Matriz invalida ==> FALSE y NO CACHEAR

Cambiar cacheo /stats

  1. Calcular los stats de la manera antigua apenas inicie la aplicacion.
  2. Cada SaveData de mutante/humano debe recalcular los stats, agregando el nuevo resultado.
  3. La request /stats devuelve lo cacheado en el punto 1.

Validar toda la matriz al empezar

Si en las primeras lineas hay ADN de STRING y al final hay un numero o un caracter invalido, no lo mira nunca. Es necesario implementar una validacion para saber si es un adn correcto antes de ejecutar

Parametrizar tamaño palabra

Actualmente se esta enviando el "4" hardcodeado en IsMutant, deberia tomar el numero de un archivo de configuracion.

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.