Skip to content

Instantly share code, notes, and snippets.

@VadokDev
Last active March 2, 2023 21:07
Show Gist options
  • Save VadokDev/bec865f901c902b124a5414e4d0227eb to your computer and use it in GitHub Desktop.
Save VadokDev/bec865f901c902b124a5414e4d0227eb to your computer and use it in GitHub Desktop.
Post Número 1

Proceso de Postulación al STA de Walmart Chile

Walmart Chile comenzó un interesante proceso con sus colaboradores, donde les invita a participar por una estadía de 3 meses trabajando en las oficinas de Walmart Internacional en EEUU, la cual contempla pasajes, alojamiento, viáticos y una experiencia inolvidable en el extranjero.

Para obtener un cupo, se requiere pasar por 2 pruebas: inglés y técnica.

Prueba de Inglés

De la mano de un colaborador de Walmart, se determinará tu nivel de inglés mediante una conversación de unos 30 minutos, la idea aquí es que demuestres que cuentas con un inglés de al menos Nivel B1, contando cosas acerca de ti, de lo que te gusta, de por qué te gustaría tomar esta oportunidad y de cuales son las habilidades que tienes, gracias a las cuales se te debería seleccionar para participar de este STA. Si no se te ocurren muchas cosas que decir, también puedes ir respondiendo las preguntas de la persona que te evalúe, de modo tal que la conversación fluya poco a poco.

A futuro, con la retroalimentación del proceso se pueden ir añadiendo mentorías personalizadas para lograr pasar esta prueba, así como también, tests básicos con revisión automática los cuales te permitan saber en qué aspectos mejorar. Si quieres comenzar dsede ya, existen tests online que puedes probar como el de ABA English B1 Test.

Prueba Técnica

La prueba técnica se basa en determinar qué tan bien dominas Javascript mediante una sesión de código en vivo, la cual es llevada a cabo por un colaborador de Walmart Internacional y se separa en las siguientes partes:

  1. Presentaciones (tanto el colaborador como tú)
  2. Primer problema de programación
  3. Segundo problema de programación (en caso de resolver el primero)
  4. Se finaliza con un espacio donde puedes preguntar lo que quieras al coladorador de Walmart Internacional.

Esta entrevista es completamente en inglés y dura entre 30 a 45 minutos con una ronda de 1 a 3 ejercicios, todo mediante la plataforma JSFiddle.

chrome_y79ul0pjKX

Mi Experiencia

En mi caso, fue un total de 2 problemas de programación, donde el segundo se dividía en 2 partes así que técnicamente fueron 3.

Problema 1: hasSameFrequency

Me pidieron escribir una función hasSameFrequency, la cual dados 2 enteros positivos, debía determinar ambos cuentan con la misma cantidad de dígitos, por ejemplo:

hasSameFrequency(123,231) => true     // 1 uno, 1 dos y 1 tres 
hasSameFrequency(548,4851) => false   // el segundo número tiene un dígito que el primero no

La idea aquí era principalmente validar mi conocimiento básico de Javascript, así que mi primer intento fue el siguiente:

const hasSameFrequency = (n1, n2) => {
	const freqs1 = {};
  const freqs2 = {};

  const n1String = n1.toString();
  const n2String = n2.toString();

  for(let c of n1String) {
  	freqs1[c] = freqs1[c] ? freqs1[c] + 1 : 1;
  }
  
  for(let c of n2String) {
  	freqs2[c] = freqs2[c] ? freqs2[c] + 1 : 1;
  }
  
  for(let c of n2String) {
  	if(freqs2[c] != freqs1[c]) {
    	return false;
    }
  }

  return true;
};

Me preocupé principalmente de ir lento, relajado, definiendo paso a paso cada una de las variables que iba a utilizar, y manipulando adecuadamente cada tipo de dato. Situaciones como estas pueden resultar estresantes, y por lo mismo, mi recomendación es ir lo más lento posible, no importa si duplicas código, o si no se ve muy "elegante", debemos ser consientes de lo que nos están pidiendo, y dejar de lado cualquier instinto de prolijidad que pudiese surgir.

Una vez terminada esta solución funcional, la persona que entrevistaba me preguntó si se podía hacer algo más, y claro, allí me hizo notar que antes de recorrer cada uno de los dígitos de cada número, podía partir comparando el largo de cada string, de ésta manera, si algún número tiene más o menos dígitos que otro, inmediatamente la respuesta sería False.

  if(n1String.length != n2String.length) {
  	return false;
  }

Luego de un poco de discusión, llegué a una solución final que incluía tanto el código de arriba como la validación del largo de ambos números. Cuando terminas un problema, la persona que entrevistaba me pidió guardar el "fiddle" con el botón "Save", y compartirle el link. Puedes encontrar la solución final aquí

herramienta2

Problema 2: Currying

Con el fin de validar aspectos más técnicos de Javascript, el siguiente ejercicio que me tocó era sobre Currying, que es básicamente transformar una función de varios parámetros en muchas funciones de un único parámetro secuencialmente. El problema constaba de, respetando la firma de la función, implementar sumAll, según el siguiente ejemplo:

sumAll(1)(2)(3) => 6
sumAll(1)()(3) => 4
sumAll()(2)(3) => 5
sumAll()()() => 0

En un principio, se pide que sea sólo para 3 números, por lo tanto, mi solución fue bastante directa, me preocupé de definir la firma de una función de este estilo utilizando arrow functions, y validando que cada parámetro fuese definido antes de añadirlo en la suma.

const sumAll = (n1) => (n2) => (n3) => {
	if(n1 == undefined) {
  	n1 = 0;
  }
  
  if(n2 == undefined) {
  	n2 = 0;
  }
  
  if(n3 == undefined) {
  	n3 = 0;
  }
  
  return n1 + n2 + n3
}

console.log(sumAll(1)(2)(3))
console.log(sumAll(1)()(3) )
console.log(sumAll()(2)(3) )
console.log(sumAll()()())

Durante la discusión nos concentramos en ver de qué forma se podía evitar la duplicación de código, y cual sería la manera más elegante de validar no sólo que el parámetro fuese válido, si no que también, que sea un número entero, sin embargo, esta discusión no nos llevó a modificar la implementación, más bien, pasamos al siguiente ejercicio. Pero antes, puedes ver la solución final aquí

herramienta3

Problema 2.1: Currying with extra steps

Finalmente, dado que aún quedaba tiempo de entrevista, se me pidió modificar la implementación para aceptar una cantidad ilimitada de números. Aquí sufrí un problema de purismo, y es que gasté mucho tiempo de la entrevista pensando cómo implementarlo de forma púramente recursiva, sin embargo, discutiendo con el entrevistador, llegamos a la conclusión de que ninguno de los 2 tenía la menor idea de cómo lograr este nivel de implementación, así que, contra todas las clases del MIT, implementé una función recursiva, la cual se retorna como callback a sí misma, pero cuya variable acumuladora está fuera de su scope.

let res = 0;

function sumAll(n) {
	if(n == undefined) {
  	return res;
  }
  res += n;
  return sumAll;
}

console.log(sumAll(1)(2)(2)(2)(2)(2)(2)(2)(2)(2)(2)(2)())

Con esto se resuelve el problema de poder sumar una cantidad ilimitada de números, sin embargo, quedan muchas cosas por afinar... como qué ocurre cuando un parámetro de entre medio no está definido, o cómo cerrar la llamada de la función sin tener que ejecutar la función sin parámetro para terminar, etc. Como se acabó el tiempo de la entrevista, luego comenzamos a discutir acerca de cómo es trabajar en Walmart EEUU, y cerramos este episodio de postulación, pero y tú... ¿Cómo hubieses implementado esta última solución?, aquí puedes revisar la mía!

chrome_yZf00nobbN

Preparación para la Prueba Técnica

Con el fin de poder aprobar esta parte de la postulación, necesitas tener en cuenta 3 cosas sobre Javascript:

  • Manejo de objetos
  • Métodos y propiedades más comunes
  • Manejo del paradigma de programación funcional

Manejo de Objetos

Para lucirte en la entrevista, es importante practicar cómo crear objetos y cómo manipular sus propiedades y métodos. Si consideras que tienes experiencia en ello, revisa este problema de Encontrar el K-ésimo elemento con mayor cantidad de apariciones en un arreglo. En caso de que necesites prepararte más, te recomiendo repasar un poco revisando videos al respecto.

Métodos y propiedades más comunes

Si bien esto va muy de la mano con los objetos, vale la pena repasarlo. Javascript es un lenguaje orientado a prototipos, lo que significa que cada objeto de JS hereda características de otros objetos, por ejemplo, cada vez que creas un Arreglo, estás creando un objeto que hereda las propiedades del prototipo Array. Es importante dominar los métodos y propiedades más comunes, pero para esto, se requiere simplemente practicar constantemente ejercicios básiccos de JS. Recomiendo encaredicamente jugar el modo Arcade de la plataforma CodeSignal para prepararte sobre esta materia, así como también, practicar un poco de Javascript vanilla con algún proyecto simple como por ejemplo: Un Catálogo de Productos en JS.

Manejo del paradigma de programación funcional

Dada la versatilidad de JS, hoy en día podemos decir que es tanto un lenguaje orientado a prototipos como funcional, debido al azúcar sintáctica que le añade ES6. Sin embargo, es importante tener un buen dominio del Paradigma Funcional, para poder sacar el máximo provecho a los métodos que nos ofrecen los prototipos de Javascript, especialmente, funciones que retornan funciones o bien, composición de funciones. Para este caso, recomiendo revisar artículos al respecto, así como también, entender el Currying y realizar muchos ejercicios de prueba.

Por lo demás, el resto es mantenerse relajado, confiar en tus habilidades, y practicar lo más que puedas para así poder ganarte un cupo en esta oportunidad, y en el caso de no quedar entre las personas seleccionadas, siempre podrás volver a postular en el siguiente proceso, dado que será algo constante.

Éxitos!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment