Experiencia de entrevista de Goldman Sachs | septiembre 2019 | Experimentado

Tenía 2 años de experiencia cuando recibí una llamada de Goldman sobre la contratación de un determinado equipo. Hubo 6 rondas en total (2 online + 4 presenciales).

Ronda 1: clasificación de hackers

Había 2 preguntas que puedes intentar en casa. Como el lenguaje preferido era Java/Python, usé Java para resolverlos. No recuerdo exactamente las preguntas. Recuerdo un poco la segunda pregunta. la pregunta era:

  • Combine elementos adyacentes de una array en función de ciertas condiciones hasta que esa condición se satisfaga. Luego, el resultado fue imprimir el conjunto final de elementos en la array.

Recibí una llamada de recursos humanos después de una semana para finalizar la fecha de la ronda de coderpad. Recursos humanos me pidió que confirmara si dominaba Java/Python o no. Mencioné que conozco Core Java, pero me gustaría usar C++ para codificar, ya que es fácil de codificar usándolo. Me dijo que hablara de esto con el entrevistador. La fecha definitiva fue una semana después de la convocatoria.

Ronda 2: Coderpad

Pude ver que C++ estaba disponible para la codificación. Pero Java se finalizó como el lenguaje de codificación después de una discusión con el entrevistador.

  • Dadas dos fracciones que se representan como una array de dos elementos (numerador y denominador), la tarea de encontrar la fracción reducida que es la suma de dos fracciones.
  • Dadas dos arrays ordenadas, encuentre la mediana de ellas.

Esta primera pregunta era un problema matemático fácil que también involucrará a GCD. Discutí el enfoque y lo codifiqué en 5-10 minutos. Me perdí el caso de la esquina de los números negativos. Puse validación para lo mismo y luego pasé a la siguiente pregunta.

Este segundo es un problema estándar, pero no conocía el enfoque más rápido. Podría pensar en un enfoque en el que me asegure de que los elementos se mezclan de manera que ambos estén ordenados y el último elemento de la array de la izquierda sea menor o igual que el primer elemento de la array de la derecha. Discutí el enfoque que él entendió y luego comencé a codificar. Casi había terminado la codificación cuando se acabó el tiempo. Dijo que el código podría optimizarse, pero entendió mi enfoque.

Entonces podría pensar en el enfoque O (n) que implica la fusión de dos arrays ordenadas donde en realidad no nos fusionamos y solo tenemos que llevar la cuenta del elemento central. Hay otro enfoque que es O (logn) e implica comparar la mediana de dos arrays ordenadas. La fecha de la ronda presencial se mantuvo después de dos semanas.

Ronda 3 Presencial

Fue difícil para mí pensar en el enfoque óptimo al principio. Luego sugerí el enfoque de fuerza bruta en el que en cualquier momento podemos elegir elegir o no elegir la bomba. Podemos elegir el mejor de ellos. Luego, después de un poco de discusión, obtuve una pista después de la cual podría pensar en un enfoque que involucre montón (cola de prioridad). Me pidieron que codificara este enfoque. Luego, la pregunta se modificó nuevamente para agregar una condición de que en cualquier surtidor, no podemos recoger más de x cantidad de gasolina. Hice algunos cambios condicionales en mi enfoque, pero no pude pensar en ninguna otra optimización.

El segundo entrevistador revisó mi currículum y quería hacer algunas preguntas relacionadas con JS. Le comenté que no me sentía cómoda en lo mismo y que me podía pedir JAVA. Dijo que estaba bien y que había terminado. Pero el primer entrevistador me hizo preguntas relacionadas con HashMap, su implementación (factor de carga y otros temas), peor caso de operación de obtención, implementación de montones, etc.

Ronda 4: Presencial

  • Dado un conjunto de parejas que representan un juego entre dos equipos en un torneo y el ganador correspondiente de cada pareja, encontrar el resultado de una consulta donde damos dos equipos y tenemos que encontrar un ganador entre ellos (suponiendo que dos equipos no juegan más de una vez).
  • Abordé este problema usando un gráfico dirigido. Podemos construir un gráfico dirigido usando los datos del torneo. Si podemos encontrar un camino entre T1 y T2, T1 es el ganador. Si sucede lo mismo de T2 a T1, T2 es el ganador. Si no se encuentra ninguna ruta, los datos son inadecuados.

    El enfoque tuvo que optimizarse para la gran cantidad de consultas (10 ^ 5). Usé un hashmap para almacenar datos gráficos (array/lista de adyacencia) que sería óptimo durante la consulta.

  • Dada una string que puede contener caracteres especiales, la tarea era encontrar si la string formada usando caracteres (ignorando los especiales) es un palíndromo.
  • Escribí el código en 10 minutos. Me perdí un caso en mi código. Volví a verificar y luego lo envié de nuevo. Es importante tener en cuenta que el código debe ser de grado de producción (sin errores). Incluso si codificamos rápido, la precisión es una preocupación importante. Tómese 5 minutos adicionales pero piense en todos los casos extremos.

Ronda 5: Presencial

  • Hay un sistema en nuestra universidad donde los estudiantes pueden iniciar sesión usando la identificación del estudiante, abrir el navegador y hacer una búsqueda. Cada búsqueda se almacenará en una base de datos con datos como: identificación del estudiante, solicitud de búsqueda y marca de tiempo. Después de recopilar todas las requests de búsqueda en un día, el administrador puede consultar esta base de datos al día siguiente. Las consultas pueden ser como encontrar las requests de búsqueda más frecuentes (en general y para un estudiante) y similares.
  • Necesitamos diseñar dos métodos: almacenar y consultar. La tarea aquí es asegurarnos de pensar en un enfoque para hacer que estos métodos sean más rápidos. Podemos hacer compensaciones (en este caso, se le puede dar más importancia a la consulta que al almacenamiento; esto no se especificó explícitamente).

    Usé hashmap y heap para resolver el problema. El entrevistador quedó satisfecho con el enfoque.

  • Nos quedaban 10 minutos. El segundo entrevistador hizo una pregunta: hay un número x. Podemos hacer una consulta dos veces donde la primera consulta dará n = x ^ y (XOR) donde y es un número de 100 números elegidos al azar. En la siguiente consulta (digamos) de manera similar, elegimos 100 números al azar y luego devolvemos m = x ^ z (XOR) donde z pertenece al conjunto de números aleatorios. La tarea es encontrar x.
  • El enfoque fue tener en cuenta que XOR de un número consigo mismo es 0. Si hacemos XOR de n con el conjunto dado, obtendremos x en algún lugar (y se cancelará) en la primera lista. De manera similar, obtendremos x en la segunda lista. Buscar la similitud de un número en dos listas (suponiendo que sea único) dará x. Pude resolver este problema en 5 minutos afortunadamente y el entrevistador pareció satisfecho.

    Ronda 6: Presencial 

    Uno de los entrevistadores me apareció como gerente. Me pidieron que explicara mi trabajo actual en términos sencillos. Luego, había un problema de DS: encontrar un par que tenga la suma más cercana a un número dado X. Codifiqué y expliqué mi enfoque que involucraba dos punteros.

    La siguiente pregunta estaba relacionada con DB (uniones). Me acerqué al problema pero no pude encontrar una consulta simplificada. Le expliqué que esto sería fácil de resolver en ABAP (lenguaje utilizado en mi proyecto actual). Pero dijeron que no sería de ninguna utilidad ya que no están al tanto de lo mismo.

    La última pregunta era un rompecabezas. Dados 3 trenes que parten a la misma hora y lugar y podemos transferir combustible de un tren a otro tal que el límite no exceda dado X (para todos los trenes), encuentre la distancia máxima recorrida por cualquiera de los trenes. Pude pensar en acercarme después de una pista. Podemos transferir combustible de un tren a otro después de un intervalo de 1/3. Esto se puede generalizar a 1/n para n trenes. La distancia resultante será una progresión armónica. La entrevista terminó con una discusión general.

    Recursos Humanos me informó que mi respuesta fue positiva.

    Publicación traducida automáticamente

    Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *