Como forma de transparentar nuestro proceso de selección y además poder auto cuestionar qué tanto sabemos de Ruby, es que les dejamos acá un listado de las preguntas que hacemos durante una entrevista técnica.

Dentro de estas entrevistas no se busca que el entrevistado conozca de memoria cada uno de los términos, ya que esto no asegura de ninguna forma ser un buen programador, pero una persona que dice tener 5 años de experiencia en rails debería manejar con completa soltura todos las preguntas, mientras que una persona con dos años de experiencia debería conocer la mayoría.

Otro detalle importante es no realizar todas las preguntas, si no más bien dirigir las preguntas hacia el campo de expertise (y que se busca) del entrevistado, de esta forma si la persona dice ser experta en base de datos y es lo que se busca para el cargo mejor dirigir las preguntas en ese ámbito.

Ruby

  • ¿Para qué sirven los símbolos?
  • ¿Cuál es la diferencia entre require y require_relative?
  • ¿Cuál es la diferencia entre utilizar comillas simples y dobles?
  • ¿Qué hace el siguiente código a ||= 6 ?
  • ¿Cuál es la diferencia entre utilizar and y && ?, ¿cuál se recomienda?

Ruby (lambda)

  • ¿Para qué sirven los lambda?, de un ejemplo
  • ¿Cómo se ejecuta un bloque dentro de una función?
  • ¿Qué hace arreglo.map(&:to_i)? ¿cómo funciona?

Ruby (funciones)

  • ¿Qué significa def x(a, *b)?
  • ¿Qué es una función recursiva?
  • ¿Cómo podemos saber dentro de una función quien la llamó?
  • Si una función no especifica return ¿Qué es lo que devuelve?
  • ¿Qué son los keywords arguments?

Ruby (array y hashes)

  • ¿Qué hace el método .zip?
  • ¿Para qué sirve el operador splat?
  • ¿Qué devuelve el siguiente código [1,2,3] && [1,2] ?
  • ¿Cuál es la diferencia entre .each y .map ?
  • Refactorice el siguiente código utilizando .inject
a = [1,2,3,4,5]
sum = 0
a.each{|x| sum += x }

ruby (Clases , objetos y módulos)

  • ¿Cuál es el scope de una variable local?
  • ¿Cuál es la diferencia entre una clase y un objeto?
  • ¿Cuál es la diferencia entre hacer extend e include?
  • ¿Qué tipo de variable es @@a?
  • ¿Cuál es la diferencia entre un método protected y uno privado?
  • ¿En qué consiste el duck typing y como esto aplica a ruby?
  • ¿Qué se obtiene al aplicar Class.class?
  • ¿Cómo se utiliza una constante definida dentro de un módulo?
  • ¿Qué es una variable de instancia de clase y cómo se diferencia de una variable de instancia?
  • ¿En ruby existe la herencia múltiple?
  • ¿Qué hace super?
  • ¿Qué cuidado deberíamos tener debido a que self es implícito?

Ruby (Meta programming)

  • ¿Para qué sirve el meta programming?
  • ¿Qué es la metaclase?
  • ¿Cómo podemos definir en tiempo de ejecución un método dentro de una clase?
  • ¿Cuáles son los pros y contra de hacer esto?

Rails

  • ¿Qué es Rack?
  • ¿Cuál es el rol de puma, webrick o de passenger?, cuál es su relación con rails?
  • ¿Qué funcionalidad tiene action cable?, ¿Qué problema resuelve?
  • ¿Para qué sirve Turbolinks?
  • ¿Cuál es el rol de UJS?
  • ¿Qué es una variable flash?
  • ¿Qué devuelve params?

Rails (Assets)

  • ¿Cuál es la función de sprockets?
  • ¿Cuál es la diferencia enter agregar nuestros archivos al asset path y agregarlos a la carpeta public?
  • ¿Cuál es la diferencia entre hacer @import en CSS y hacerlo en SASS ?
  • ¿Cuál es la función de stub dentro de un manifiesto?
  • ¿Cuál es el problema de registrar eventos bajo turbolinks:load en una vista?
  • ¿Qué otras precauciones tenemos que tener con Turbolinks?
  • ¿Qué problema resuelve webpack?
  • ¿Qué diferencia hay entre Yarn y NPM?

Rails (rutas)

  • ¿Cuál es la diferencia entre rutas member y collection?
  • ¿Qué son las shallow routes?
  • ¿Cuál es la diferencia entre resource y resources?
  • ¿Cómo se hace una ruta anidada?
  • ¿Cuál es la utilidad de los namespaces?

Rails (Active record)

  • ¿En qué consiste el problema de n+1 query?
  • ¿Cuál es la diferencia entre hacer un join y un includes?
  • ¿Qué ventajas tiene el patrón de lazy loading sobre el active record?, ¿Qué prueba simple podríamos hacer para confirmar esto?
  • ¿Cuál es la diferencia entre User.select(:name) y User.pluck(:name)?
  • ¿Cuál es la diferencia entre .save y .save! ¿cuál debemos ocupar normalmente?
  • ¿En qué consiste una transaction?
  • ¿En que situación convendría ocupar polimorfismo?
  • ¿Que problemas podría traer tener validaciones únicamente en el modelo?
  • ¿Qué problema podría haber en rails 4 cuando un método dentro del callback devuelve falso?
  • Hipotéticamente, un miembro del equipo modifica el archivo schema manualmente, realiza el commit y hace un push a master, ¿Qué problemas podrían haber, cual sería la estrategia ideal para resolver el problema?
  • Explique brevemente como funciona counter-cache
  • ¿Cuál es la diferencia entre agregar un scope y un método de clase?
  • ¿Cuál es la diferencia entre utilizar .group y .group_by?
  • ¿Qué precauciones deberíamos tener al agrupar datos con .group sobre una colección de datos?
  • ¿Cuál es la diferencia entre .count, .size y .length
  • ¿Para qué sirve AREL?

Rails (seguridad)

  • ¿Para qué sirven los strong params?
  • ¿Cómo funciona un ataque de CSRF?
  • ¿Cómo rails evita un ataque de SQL injection?, que precauciones tenemos que tener para no exponer una vulnerabilidad de este tipo.
  • ¿Por que no podemos cargar una página de rails dentro de un iframe por defecto?

Rails (Patrones de diseño)

  • ¿Para qué sirve el patrón decorador?, que capas del MVC están involucradas
  • ¿Para qué sirve el patrón presentador?
  • ¿Para qué sirve el patrón decorador?
  • ¿Nombre un caso donde sería útil
  • ¿En qué consiste el patrón de memoization? Ejemplo: @current_user ||= current_user
  • ¿En qué consiste el patrón STI?

Rails (caching)

  • ¿Para que sirve Redis?, ¿cuál es la diferencia con otros tipos de base de datos?
  • ¿Qué problema resuelve Redis?
  • ¿En qué consiste el fragment caching?
  • ¿En qué consiste la técnica de russian doll caching?

Bases de datos

  • ¿Cuál es la diferencia entre un full outer join y un left join?
  • En qué consiste el teorema CAP (particularmente solo pregunto esto si la persona dice trabajar con alguna base de datos NOSQL )
  • ¿Qué tipo de problemas no resolverías ocupando bases de datos NOSQL?
  • ¿Que ventajas y desventajas tiene agregar un índice?
  • ¿Cómo mides la eficiencia de una consulta?
  • De un ejemplo de desnormalización de bases de datos y para que podría ser útil
  • ¿Cuál es la diferencia entre el índice GIN y GIST?
  • ¿Cuál es el valor máximo que puede guardar un integer?
  • Bajo que motivo sería mejor ocupar un Store Procedure en lugar de un método en el modelo.
  • ¿Para qué sirve la operación VACUUM?
  • ¿Cuál es la diferencia entre hstore y jsonb? (solo PostgreSQL)?
  • ¿Cuál diría que es un buen criterio de respaldos de base de datos?

Javascript

  • ¿Qué es un prototipo?
  • ¿Cómo se diferencia la herencia de ruby con las javascript?
  • ¿En qué consiste la propagación de eventos?
  • ¿En qué consiste la delegación de eventos?
  • ¿Qué es una promesa?, ¿Qué ventaja tiene sobre un callback?
  • ¿Cuál es la diferencia entre var y let?

Capacidad autodidacta

  • ¿Qué fuentes ocupas para mantenerte actualizado?
  • ¿Cuál fue el último libro que leíste sobre programación?
  • ¿Cuanto tiempo dedicas a la semana a aprender cosas nuevas?
  • En qué consiste la iniciativa ruby 3×3

Si tienes las respuestas a todas estas preguntas, te felicitamos!!! Además de hecho te invitamos sumarte a nuestro equipo de cracks de Desafío Latam. Para postular puedes hacerlo haciendo click aquí.