mutants:突变体对Meli的考验

  • G3_845459
    了解作者
  • 1.2MB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-06-09 09:17
    上传日期
MELI考试磁铁 英格莱索考生 素露 解决方案编程的基础知识,实用的缓存和使用前的结果。 Siempremente se intentan endotra dos基因raros(secuencia de 4 base iguales)preguntando si podes moverte 4 veces para la misma direccion。 最优化 Debido a la naturalidad del issuea,没有因事而异的先例,El algoritmo son dos for anidados,还是由la matriz de derecha a izquierda y de arriba para bajo保留。 即时消息,我的个人资料由8个维度组成,从第2个维度到第4个维度分别是: 4个直接还原糖,一个还原糖的50%还原糖。 在普罗旺斯地区的任何地方,普罗旺斯地
mutants-main.zip
  • mutants-main
  • .gitignore
    1.8KB
  • requirements.txt
    298B
  • src
  • data_access.py
    912B
  • main_test.py
    3.3KB
  • client.py
    1KB
  • mutant.py
    3.2KB
  • main.py
    1.4KB
  • data_base_init.py
    540B
  • .github
  • workflows
  • python-app.yml
    1.2KB
  • init.sh
    242B
  • README.md
    4.9KB
  • adn.db
    4.3MB
  • docker
  • docker-compose.yml
    340B
内容介绍
# MELI examen Magneto Examen de ingreso a MELI ## Solucion La solucion se bada en los funamentos de la programacion dinamica, el cual cachea y utiliza resultados procesados anteriormente. Siempremente se intentan encontrar dos genes raros (secuencia de 4 bases iguales) preguntando si podes moverte 4 veces para la misma direccion. ### Optimizaciones - Debido a la naturalidad del problema, no fue preciso cachear resultados anteriores, el algoritmo son dos for anidados, que recorren la matriz de derecha a izquierda y de arriba para bajo. Dado un momento K en el algoritmo, me puedo mover para las distintas 8 direcciones, pero dado a que las direcciones arriba, arribaIzquierda, arribaDerecha, e izquierda ya fueron procesadas en un paso anterior (por como recorremos la matriz), me quedo con las 4 direcciones restantes, reduciendo asi un 50% de los casos a procesar. - Se pregtunto en un mail si se podrian repetir las bases para formar un "gen raro", siendo la respuesta negativa, no se pueden cruzar bases, por lo que de haber encontrado un gen raro, en las proximas iteraciones no se pregunta por la base ya encontrada. - Al encontrarse un gen raro, no se empieza la busqueda de nuevo en el array, sino que se comienza a buscar una posicion despues del que ya se encontro - Como son solo necesarios dos genes raros para determinar si la persona es mutante, no es necesario recorrer toda la matriz en caso de haber encontrado dos genes extraños ## Arquitectura de la solucion Debido a que la API puede presentar fluctuaciones agresivas de trafico, se diseño una arquitectura acorde para poder responder adecuadamente. ### /mutant Asumiendo que las matrices de ADN no son excesivamente grandes, se puede hacer este calculo y responder a las peticiones inmediatamente, lo que es costoso es ingresar los datos a la base de datos, por lo que en cada request aparte de hacer el calculo, se guarda el resultado en una cola, la cual consumidores en threads aparte van agarrando estos mendajes (resultados) y los van guardando en la base de datos. Lo ideal seria implementar una cola para los request, por ejemplo usando RabbieMQ, el cual cada vez que se recibe una request, retorna un 201 con un codigo de task. En este caso se tienen dos opciones, dejar que el cliente haga pool preguntando por el task, o que se devuelva el task al cliente una vez este este completo. Esto le saca la carga al webserver de esperar a calcular el ADN para despues retornar la respuesta. No se implemento esta solucion pero se deja la idea de la misma. ### /stats Para los stats, como se tiene que buscar la cantidad de humanos y mutantes en la base de datos para hacer el calculo, se implemento un cache, el cual un worker va actualizando cada 5 segundos, entonces cada vez que se consume el endpoint, en vez de ir a base de datos para hacer los calculo, se retorna la respuesta cacheada, no afectando asi la performance de las respuestas. ## Prerequisitos Se necesita tener instalado en el entorno - Python 3.8+ - pip3 ### Instalacion Se proporciona un script init.sh el cual inicializa la base de datos e instala las dependencias. Para correrlo, primero se necesitan permisos de ejecusion ``` sudo chmod +x ./init.sh ``` Luego se corre el script ``` ./init.sh ``` Si por acaso el script no llegase a funcionar, se pueden instalar las dependencias manualmente e inicializar la base de datos desde el archivo data_base_init.py ``` sudo pip3 -r requirements.txt sudo python3 data_base_init.py ``` Nota: puede que solo tenga la version de Python3.8+ instalada (y no tenga la 2), por lo que el comando podria ser python en vez de python3. Por ultimo, para correr el servidor simplemente inicia el archivo main.py ``` python3 ./src/main.py ``` ## Probando cliente Se proporciona un archivo client.py el cual proporcina ejemplos de ejecicion, peticiones al servidor, para esto eliga el contexto en cual lo quiere ejecutar asignando a la variable ENVIRONMENT el valor de PROD o DEV dento del mismo archivo. Tambien podra elegir a que endpoit consumir comentando o descomentando funciones en la funcion main. Por ultimo corra al archivo ``` python3 ./src/client.py ``` ## Unit testing Se emplea la libreria pytest y pytest-cov para realizar el unit testing y cooverage del codigo. Para ejecutarlo se para en la raiz del protecto y ejecuta ``` pytest -v --cov=mutant --cov-report=html ``` El mismo comando generara un reporte .html que podra encontratlo en la carpeta ./htmlcov/index.html Nota: Se expluyen de los test las funciones calculate_adn_ratio(ya que depende de la data actual en la base de datos) y ratio_worker (ya que no tiene sentido testear un worker). ## CI Se implemento continous integration con la herramienta de GitHub Actions. El cual se encarga de correr los testing unitarios cada vez que se hace un push de la solucion. ## Deployment Se utilizo una instancia EC2 de AWS para publicar esta solucion. Los endpoints para probar la solucion son: ``` 18.188.95.255/mutant (POST con JSON) 18.188.95.255/stats (GET) ```
评论
    相关推荐
    • DOS命令大全
      DOS命令大全 一些常用的和不常用的命令 都在里面了 参数说明 显示使用帮助 http://groups.google.com/group/mise5
    • DOS命令全集
      DOS命令全集 DOS命令全集
    • GHOST DOS
      DOS版的GHOST 本人亲测OK 希望对大家有所帮助
    • irods_resource_plugin_rados:用于 iRODS 的无缓存 Cephrados 资源插件
      irods_resource_plugin_rados 用于 iRODS 的无缓存、直接 Ceph/rados 资源插件。 此版本不再维护。 该插件已移至官方 iRODS 帐户:
    • Atlantis:大文件缓存
      可实现的高速缓存:1-高速缓存dos registros que foram索取价单和高价迪斯科舞厅2-高速缓存dos bolcos de字节libos do迪斯科舞厅 产地:速配或速递律师事务所,重要的法属和本地化律师,以及司法部官员。 一个自发...
    • SMARTDRV 磁盘缓存
      DOS下磁盘缓存程序!SMARTDRV.exe 用于硬装XP等!
    • DOS格盘工具
      DOS下格盘工具:是一款DOS下格盘装系统要用的程序
    • DOS大全
      DOS大全,记录了常用的和实用的DOS命令
    • smartdrv(dos下硬装系统必备)
      dos下硬装装系统必备文件,开启磁盘缓存,不加载它DOS下装系统异常慢
    • 可在DOS下使用的虚拟光驱 只有10KB
      使用DOS启动盘最好是最原始的"98启动盘"或"梦幻中文启动盘",启动后选择2--即WITHOUT CDROM SUPPORT(不启动光盘驱动模式), 回车.输入SMARTDRV启动高级缓存,这一步必须,如果主分区需要格式化,一定要运行FORMAT命令. ...