Experiencia de entrevista de pasantía de verano de DE Shaw 2021 | Presencial VIT Vellore

DE Shaw visitó VIT, Vellore el 21 de agosto de 2020 para el puesto de pasante de ingeniería de calidad y pruebas. El puesto fue por dos meses en el verano de 2021, para estudiantes del lote de 2022 (3er año). Seleccionaron 2 pasantes del campus. Me seleccionaron para este puesto, así que pensé que podría ayudar a otras personas que tenían curiosidad sobre el proceso como yo. 

Los criterios de elegibilidad:

  1. 70% o 7.0 CGPA en X y XII
  2. 7.0 GPA en la obtención de un título (ramas relacionadas con CS / IT)
  3. 8.0 CGPA (Sucursales relacionadas con ECE/EEE)
  4. Sin atrasos permanentes

El proceso de selección constó de tres rondas.

Ronda 1 (aparecieron más de 1500 personas): esta ronda se llevó a cabo en hackerrank. Esta fue una prueba de programación y MCQ de 138 puntos con un límite de tiempo de 95 minutos. Cada respuesta incorrecta llevará una calificación negativa del 33% de las calificaciones de esa pregunta. El formato de la prueba fue el siguiente:

  • Sección de aptitud : 14 preguntas durante 28 minutos (también incluye 2 conjuntos con 3 preguntas)
    Pude resolver todas las preguntas menos una, las preguntas eran una combinación de razonamiento cuantitativo y aptitud general. 
     
  • Sección técnica : 12 preguntas durante 17 minutos
    Esta sección consta de preguntas de pseudocódigo, conceptos generales de programación, preguntas de SQL y algunas basadas en estructuras de datos y algoritmos. Pude intentar 10 de 12 de estos con confianza. No intenté los otros dos en lugar de marcar negativamente
     
  • Codificación Sección 1 : 1 pregunta durante 20 minutos
    P. Dada una array de números enteros positivos, averigüe la cantidad de sub-arrays que consisten solo en números primos. 
    Ej. – [2,3,1,7,2] –> Los subarreglos serían [2],[3],[2,3],[7],[2],[7,2]. Entonces la respuesta sería 6.
     
  • Sección de codificación 2 : 1 pregunta durante 30 minutos
    P. La pregunta era larga y tenía muchas cosas innecesarias como que Thanos quiere destruir los planetas, pero la esencia era:
    se dan dos arrays, una array binaria A (que contiene solo 0 y 1s) y la otra array de costos B de la misma longitud. Tienes que convertir la array binaria a todos los 1 a un costo mínimo. Para cada i -ésimo Elemento en la array A, la conversión de 0 a 1 requiere un costo B[i]. y si A[i-1] y A[i+1] son ​​1, entonces A[i] se puede convertir con un costo de 0. Encuentre el costo mínimo posible para convertir todos los 0 en 1. 

    Pasé algunos casos de prueba de la pregunta 1 pero no pude pasar ninguno de la pregunta 2. 
    Pero, afortunadamente, debido a mi desempeño en las otras dos secciones, fui seleccionado para la siguiente ronda. 
     

Ronda 2 (17 preseleccionados): La ronda estaba programada para los días 21 y 22 de agosto (el mismo día y el día siguiente). Para mí, fue el 22 programado para 1 hora pero duró 1 hora y 30 minutos. Hubo dos entrevistadores, super amables y solidarios.

Esta ronda se llevó a cabo en la plataforma CodePair de hackerrank, donde puede compartir simultáneamente su IDE y chat de video con los reclutadores. Los reclutadores pueden ver su IDE y editar el código también.

Comenzó con preguntas generales de la entrevista como preséntese. Luego me preguntaron si tenía alguna experiencia previa en pasantías, tenía 2 pasantías en mi perfil que describí. Luego me preguntaron sobre mis proyectos. El reclutador se interesó mucho en un proyecto que era complicado, pasé 10-15 minutos explicando ese proyecto en sí. 

Luego me dieron una pequeña pregunta abierta para resolver:

  • Dada una expresión regular que consta de ‘\d’,’\w’,’$’,^’,’+’,’*’ (donde los símbolos de expresión regular tienen su significado habitual). Me pidieron que generara tantos tipos de strings como fuera posible para cualquier entrada de expresión regular dada.

Dado que esta pregunta era un poco vaga, pregunté cuál debería ser exactamente la salida, me dijeron que imprimiera 50 strings que coincidieran con la expresión regular al principio, pero finalmente me pidieron que imprimiera tantos tipos de strings como fuera posible. Antes de comenzar a escribir el código, se le pide que explique cómo abordará este problema, por lo que lo dividí en dos partes.

Primero fue tokenizar diferentes símbolos y almacenarlos en un vector de vectores que contenía el [[símbolo, modificador], [símbolo, modificador]…] donde los símbolos eran 1,2,3,4 representando ‘\d’, ‘\w’, ‘$’,^’ y los modificadores eran 1,2,-1 que representan ‘+’,’*’, ausencia de cualquier modificador que significa exactamente un carácter. 

Me dijeron que primero codificara solo la parte de tokenización, lo cual hice, y mientras lo hacía, los reclutadores me apoyaron mucho brindándome comentarios constantes y llegando a corregir algunos de mis errores tipográficos.  

Elegí arbitrariamente hacer las strings con ‘1’ y ‘a’ para simplificar la pregunta.

Además, creé un vector de string que lo inicialicé con una string vacía. Si el primer símbolo no era ‘^’, agregué 4 strings ‘a’, ‘1’, ‘a1’, ‘1a’ al vector. Recorrí el vector de tokens (vector 2d que contiene símbolos, modificadores) y configuré appendVal igual a ‘a’ para \w y ‘1’ para \d. Luego, para cada string s en res -> si * fue el modificador, luego agregó dos strings más s+appendVal y s+(appendVal*2), para ‘+’ -> modificó s=s+appendVal y agregó s+(appendVal*2) , si no había modificador, simplemente establecí s=s+appendVal. Después de recorrer todos los tokens, busqué ‘$’ en el último elemento si no existía y luego agregué s+’1a’,s+’a’,s+’1′,s+’a1′ al vector res. 

Los entrevistadores quedaron satisfechos. Luego me preguntaron sobre los inconvenientes de mi enfoque y qué casos de prueba no cubrí como otros alfabetos y strings más largas. La entrevista terminó con una pequeña charla general y luego me preguntaron si tenía alguna pregunta.

Me informaron que fui preseleccionado dentro de las 5 horas para la próxima ronda.

Ronda 3 Ronda Final (7 preseleccionados): Se llevó a cabo el mismo día que la ronda 2 (22 de agosto). El formato era el mismo que en la ronda 2. Pero las preguntas eran más complicadas. Los entrevistadores de esta vez no fueron tan amigables como en la ronda 1 (tal vez porque la mía fue la última entrevista del día), pero aun así corrigieron los errores tipográficos y me dieron sugerencias mientras codificaba. También estaba programado para 1 hora pero duró un poco más.
 

Esta vez no perdieron mucho tiempo en la introducción y comenzaron directamente con las preguntas. Me hicieron 3 preguntas ->

Q1. La esencia era: dada una array de strings A, encontrar la string con la longitud máxima para la que existía cada string de prefijos en la array. Por ejemplo, para [‘a’,’ab’,’abc’,abcd’,’aaaaa’,’aabsd’] la respuesta sería ‘abcd’ ya que ‘a’,’ab’,’abc’ existen en la array. 

Este me tomó apenas 10 minutos. Usé hashmap para almacenar todas las strings primero. Luego, para cada string, verifiqué si las substrings de prefijo existían usando hashmaps y devolví la que tenía la longitud máxima.

Q2. Estrategia óptima para un juego
Primero di la solución recursiva básica y antes de que pudiera corregir algunos errores y optimizar la solución, quedaron satisfechos porque solo les importaba si entendía el enfoque y me dieron la siguiente pregunta.

Q3. Era un problema de taxi, la esencia era -> Dados los puntos de recogida, los puntos de entrega y la array de propinas, cada elemento i th  representa un viaje desde la recogida [i] hasta la entrega [i], lo que le permitiría al conductor dejar [i]-recoger [i]+consejo[i]. Y para cada viaje, el siguiente punto de recogida debe ser mayor o igual que el último punto de entrega.

Discutí las diversas posibilidades y expliqué los diferentes enfoques que se pueden tomar, el entrevistador dio algunas sugerencias, algunas buenas, algunas engañosas para verificar cómo respondo. Pero después de algunas discusiones, llegué a la conclusión de que la programación dinámica sería el camino a seguir. Los entrevistadores dieron una expresión como si quisieran terminar la entrevista porque ya había pasado el límite de tiempo, así que apresuré el código, expliqué lo que estaba haciendo mientras lo escribía y expliqué el enfoque de DP. Mi código estaba bien estructurado pero dio error de segmento y antes de que pudiera arreglarlo me dijeron que esto era suficiente para la entrevista y me preguntaron si tenía alguna pregunta. Solo pedí comentarios generales sobre mi desempeño y cómo podría mejorar aún más.

Recibí un correo el 23 (el día siguiente) por la mañana de la celda de colocación de mi universidad que decía que se seleccionaron 2 personas, y yo era una de ellas. 🙂

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 *