Experiencia de entrevista de Nvidia para ingeniero compilador

Mis antecedentes: trabajé en la interfaz del compilador (Clang) durante mi tesis desarrollando una herramienta similar a un compilador para el análisis estático del lenguaje C. Básicamente un linter para el lenguaje de programación C. Soy de la universidad de nivel 1 (IIT). Tengo 1+ años de experiencia.

Ronda de contratación de gerentes: Trabajó en el equipo de optimización del compilador de GPU en NVIDIA. Habló sobre las cosas que hace relacionadas con las optimizaciones del compilador. Hice preguntas sobre las optimizaciones del compilador, como las optimizaciones de bucle y las optimizaciones de mirilla, ya que sabía que él era del equipo de optimización, preparé esto con anticipación. Pero le dije claramente que nunca había trabajado en el campo de las optimizaciones. Nota: la optimización del compilador es un backend del compilador en el que también necesita conocimientos relacionados con la arquitectura.

Ronda 1: Codificación 

  • Imprimir todas las permutaciones de string? Le dije que cambiara la pregunta ya que no revisé el retroceso para esta entrevista.
  • Fue lo suficientemente humilde como para cambiar la pregunta.
  • ¿Combinar la ordenación en la lista vinculada con un análisis detallado del tiempo de ejecución?
  • Respondí la pregunta con éxito pero cometí un error al analizar el tiempo de ejecución. Implementé el enfoque de dividir la lista enlazada en dos mitades y fusionar las dos mitades y aplicar recursivamente la ordenación rápida. Le dije que era O (n ^ 2) lo que estaba mal. Pero incluso él no sabía que cometí un error en el análisis y siguió sugiriendo un método para reducirlo a O (N log N) que estaba mal.
  • ¿Cómo implementar hashmap? ¿Posibles enfoques para definir la función hash para las claves de mapeo?

Ronda 2: Codificación 

  • ¿Encontrar el elemento mínimo en un árbol binario?
  • Código C para extraer palabras de una oración y copiarlas en una array 2d donde cada fila contiene una palabra. El código era un poco complejo. Allí estaba copiando las strings rompiendo la oración completa y también se realizó la manipulación de la memoria para manejar el caso de memoria insuficiente si la memoria asignada es menor que la asignada anteriormente.
E.g:
I/p:  Nvidia is a cool organization.
O/p:      Nvidia
            is
            a
            cool
            organization
  • Hay una array de 3×3 para almacenar aplicaciones como
       A1 A2 A3
       A4 A5 A6
       A7 A8 A9
  • Debe mantener las 9 aplicaciones principales en esta array. ¿Como lo haras?
  • Ahora no mencionó nada aparte de esto. No le hice ninguna pregunta y seguí adelante con la solución que fue un error. Dije que lo haré usando la cola de prioridad. Luego dijo cómo funcionará la cola de prioridad, así que le expliqué la inserción y eliminación de un Node en el montón durante 20 minutos, luego dijo «ohh», pero no mantendrá el orden, ¿verdad? Yo era como qué. Dijo que ¿puedes pensar en otras estructuras de datos para esto?
  • Luego, nuevamente, después de pensar durante 10 minutos, dije que lo almacenaría usando una lista vinculada y un mapa. Básicamente, es un problema estándar de implementación de caché LRU. Lo que vi hace un día, pero no podía pensar en ello en este momento. Le dije cómo lo implementaría y no me pidió que lo codificara y se realizó esta entrevista.

Ronda 3: Habilidades de diseño 

  • ¿Cómo reduce las fallas de caché en el caso de multiplicar 2 arrays muy grandes? No pude responder porque no tenía idea de cómo funcionaría el caché en este caso.
  • Luego preguntó un largo problema relacionado con el compilador críptico. Dice así….
  • Digamos que el compilador A llama al módulo de «invocación» del compilador B 15 veces y durante eso realiza algunos pasos en los que el porcentaje de tiempo consumido se escribe junto
Initializing a compiler instance     15%
Preprocessing                        25%
Syntax analysis                      25%
Optimizations                        35%
  • ¿Cómo minimizará el tiempo consumido? Ahora, ¿qué obtienes con este problema?
  • ¿Necesito hacer del 15% al ​​10%? ¿Cuál es el significado de reducir el tiempo? Me tomó 25 minutos aclarar el problema del entrevistador. Básicamente, quería saber si necesitamos inicializar la instancia del compilador para las 15 llamadas o si necesitamos realizar el preprocesamiento una y otra vez o no.
  • Entonces, después de que finalmente entendí el problema, respondí todas sus preguntas con éxito. Le dije que podemos tener un control si el compilador ya está inicializado. Podemos pasar el argumento a la función de invocación para tomar la instancia del compilador. Podemos almacenar un mapa para almacenar los datos relacionados con el preprocesador y podemos usar banderas para saber si el análisis de sintaxis ya se realizó o no, luego preguntó seguimiento como podemos eliminar si las condiciones entonces dije como verificar el tamaño del mapa y esas cosas. Así que básicamente manejé bien sus preguntas.

Ronda 4: conocimiento de Clang 

  • Esta fue la entrevista más sensata. Me preguntó todos los detalles sobre mi proyecto y cómo enfoqué el problema y qué estructuras de datos y patrones de diseño usé para ello. 
  • Básicamente, ella estaba interesada en el trabajo y, como hice mi proyecto muy bien, sabía todas y cada una de las cosas que me preguntó al respecto.

Ronda 6: Ronda del director del compilador (ajuste cultural)

  • Hizo preguntas sobre mi proyecto y algunas cosas como por qué quieres unirte a este campo difícil y aburrido. Básicamente, después de su desmotivación, decidí que no quería unirme a este campo.
  • Después de una semana, dijeron que no estaban satisfechos con las rondas de codificación, por lo que querían una ronda más de codificación.

Ronda 7: Codificación 

Dado un árbol, ¿convertirlo en un árbol de suma?

Ej: 2 19

                         / \ / \

                       3 4 ———-> 15 4

                      / \ / \

                    5 7 5 7

  • Le di un enfoque O (n ^ 2). Quería reducirlo a O (n), lo que no pude hacer.

Veredicto : Rechazado. 

Conclusión:

Me sentí relajado. Porque me contactaron en mayo de 2021 y programaron la primera ronda para el 17 de septiembre de 2021, que reprogramaron en el momento final para la próxima semana ya que no estaban disponibles. Gracias a Dios no me despedí antes de tiempo de mi organización actual. Luego, el día de la entrevista, la primera ronda no se llevó a cabo porque el tipo no estaba disponible. La gente de codificación no dio ninguna pista. El último entrevistador fue horrible. Se quedó en silencio después de hacer la pregunta. Cuando habló, tenía demasiada arrogancia en su voz. Por favor, no se quede con esas personas que están ahí para satisfacer su ego. Gracias a dios no respondí bien.

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 *