De hecho, vino al campus para contratar pasantes de desarrollo de software de IIT Mandi.
Ronda 1: Prueba de codificación en línea:
Esta fue una prueba de codificación de 60 minutos de duración. La plataforma era Hackerrank. Hubo un total de 2 preguntas.
- Beneficio máximo en la programación de trabajos https://leetcode.com/problems/maximum-profit-in-job-scheduling/
- Lo resolví usando map + DP. Tomó alrededor de 35 minutos codificar este (más de lo esperado).
- La entrada se proporcionó como un vector 2D (bordes ponderados de un gráfico), Node inicial y Node final. Necesitaba devolver un vector donde el tamaño del vector es la cantidad de bordes y cada valor indica si este borde pertenece a alguna de las rutas más cortas desde el Node inicial hasta el Node final.
- La pregunta no fue enmarcada tan sencilla. Pero la idea general era muy similar. La solución fue fácil: solo calcule la ruta más corta desde el Node inicial hasta cada Node y desde el Node final hasta cada Node usando Dijkstra. Pero no estaba seguro de poder implementarlo sin errores en el tiempo restante. Así que opté por una solución parcial e implementé Floyd Warshall, que es solo un bucle en la implementación y la complejidad era cúbica. Pasó 7/14 pruebas.
- Los resultados llegaron al día siguiente y 5 candidatos fueron preseleccionados para las rondas 2 y 3. Yo era uno de ellos.
Ronda 2: Ronda de entrevistas F2F (Zoom) 60 min
- Comenzó presentándose y luego me presenté.
- Solo se hizo una pregunta. El entrevistador me mostró una imagen de un árbol ponderado dirigido. Me pidió que devolviera el Node hoja que tiene el camino más corto entre todas las hojas a la raíz. Era solo un simple DFS. Primero le di un enfoque de fuerza bruta muy malo. Después de esto, expliqué mi enfoque principal y lo codifiqué. Hizo algunas preguntas sobre el código que escribí. Encontró un error y luego lo arreglé.
- Después de esto, agregó algunos bordes en el árbol y se convirtió en un gráfico dirigido. Preguntó si el código actual hará el trabajo, cómo cambiarán las complejidades. ¿Cuál será el nuevo enfoque? Primero le dije la solución de Dijkstra y luego le expliqué el algoritmo de Dijkstra.
Pasó una hora y la entrevista había terminado. El nivel de la entrevista fue fácil. Pero el enfoque principal fue la conversación, cómo pensé y llegué a la solución.
Ronda 3: Ronda de entrevistas F2F (Zoom) 70 min
- Similar a la ronda anterior, esta ronda también solo tenía una pregunta. Me dieron una array de títulos de trabajo como esta: [‘Ingeniero de software’, ‘Profesor de natación’, ‘Instructor de yoga’, ‘Gerente sénior’, etc.]
- La longitud de esta array fue de alrededor de 1 millón (10 ^ 6). Ahora me harán millones de consultas. En cada consulta, se me dará una oración como una string y debo devolver qué trabajo indica o necesita esta array. Por ejemplo: «Necesitamos un desarrollador de software talentoso». Ahora, de los trabajos dados, necesito devolver un trabajo que haya llegado un número máximo de veces en esta oración dada. La respuesta a esta es: «Ingeniero de software». El número de palabras en cada consulta se limitó a 10.
- Primero le dije que para cada consulta iteraría la array del título del trabajo y mantendría el conteo y devolvería el máximo. La complejidad de este será de alrededor de 10^13. Eso no fue eficiente, así que pasé a mi segundo enfoque.
- En este enfoque, preprocesaré la array de títulos de trabajo. El preprocesamiento es así: extraeré cada palabra de una string de trabajo y para esas palabras almacenaré un vector en el mapa. Este vector almacenará índices de todos los trabajos que tengan esta palabra en su título.
- Ahora, en la sección de consulta, extraeré todas las palabras de una oración determinada. Encuentre esas palabras en un mapa preprocesado, itere el vector almacenado para esa palabra y aumente el conteo de títulos de trabajo en otro mapa y mantenga el conteo máximo y el título de trabajo correspondiente. Y finalmente, la pregunta estaba hecha y la codifiqué.
- Cuando estaba implementando, no pude escuchar al entrevistador debido a la mala conexión. Pero pudo escucharme y ver mi código. Así que mantuve variables muy profesionales en la implementación e hice todo lo posible para explicar cada pequeño detalle porque no podía comunicarme. También estaba comentando el código, la mayoría de las líneas fueron comentadas.
- El código recorrió más de 120 líneas y parecía muy satisfecho con la solución. Al final, me hizo una pregunta abierta sobre colisiones. Le expliqué mi enfoque para el mismo.
Después de 2 rondas de entrevistas, 3 candidatos pasan a la 4.ª ronda.
Ronda 4: Ronda de entrevistas F2F (Zoom) 70 min
Presentó una imagen. Discutió el gráfico. Inicialmente, no entendía el papel del gráfico, pero luego el gráfico demostró ser muy útil.
- El enunciado del problema era así. Una empresa tiene trabajos y los trabajos se agregan y caducan a intervalos regulares. Hay un total de 2^64 puestos de trabajo. Cada trabajo está representado por una identificación de trabajo y el estado actual de una identificación de trabajo puede ser activo o caducado. El gráfico anterior explica la probabilidad de que un trabajo caduque según el año en que comenzó. Cuanto más antiguo sea el trabajo, menor será la identificación del trabajo y mayor será la probabilidad de que el trabajo caduque. Ahora necesito implementar dos métodos. Se me dará una identificación de trabajo como parámetro en ambos métodos. En un método, necesito devolver si este trabajo ha caducado o no y se usará otro método para caducar la identificación del trabajo dada. Y la empresa solo tiene 2 GB de memoria para usar. Solo podemos almacenar alrededor de 2^24 enteros largos en esta memoria.
- Discutí muchos enfoques con él, incluido LRU. Nada funcionaba hasta que entendí el gráfico. Me dio una pista sobre cómo escribir trabajos en símbolos como este: E – Trabajo caducado, A-Trabajo activo. Ej – “AAEEEAEEEEAAAAEE…….. hasta 2^64. Y obtuve la solución. Puedo almacenar los trabajos haciendo grupos de trabajos activos consecutivos y viceversa. 2A 3E 1A 4E 3A 2E …..El peor de los casos puede ser 1A 1E 1A 1E pero este caso nunca ocurrirá porque en el gráfico se indica que es más probable que los trabajos recién agregados estén activos y que los trabajos más antiguos tengan más probabilidades de caducar . Por lo tanto, la situación de ID de trabajo menor será como 1000E 3A 250E 10A……. y en las identificaciones de trabajo más grandes, la situación será como 1000A 3E 250A 10E….
- Discutimos dos enfoques: uno a través de listas vinculadas y otro a través de un árbol de búsqueda binaria equilibrada. En la lista vinculada, tengo que atravesar una y otra vez para cambiar los Nodes, por lo que el enfoque se descartó. Ahora para BBST llegaron 3 tipos de casos donde se eliminaron y agregaron Nodes.
- Posteriormente, se discutieron los siguientes temas: cuáles son todos los casos que pueden ocurrir, qué datos se almacenarán en un Node y complejidades.
- Ahora, para la implementación, quedó muy poco tiempo porque la discusión fue muy larga. Asumí que tenía una clase BBST y solo necesitaba implementar la estructura de Nodes y usar métodos de inserción, búsqueda y eliminación según mi deseo. Implementé una de las funciones y se acabó el tiempo. Le expliqué rápidamente la implementación restante, pero no pude codificarla.
Después de 70 minutos, esta emocionante ronda había terminado. Realmente disfruté esta ronda y la lluvia de ideas sobre este problema. La discusión fue realmente increíble.
Después de media hora, 2 de nosotros calificamos para la ronda de HR.
Ronda 5: Ronda de entrevistas de recursos humanos (Plataforma Indeed)
- Afortunadamente, esta entrevista no fue en zoom y no ocurrió ningún problema de red. Estaba muy tranquilo y relajado.
- Él se presentó y luego yo me presenté. Le dije 2 hobbies, uno relacionado con la programación y otro no relacionado con lo académico. Le dije cuánto me gusta resolver problemas y cómo disfruté la ronda 4. Me hizo algunas preguntas sobre la ronda anterior, cuál era la dificultad, cualquier cosa que me gustaría cambiar si tuviera la oportunidad. Luego me contó sobre la empresa, qué tan grande es la empresa en los EE. UU., cuál es la cultura laboral de la empresa, etc.
- Después de esto, me preguntó sobre mis proyectos técnicos en B. Tech. Hablamos sobre los motivos detrás del proyecto, cómo elegí la tecnología. Uno de los proyectos fue en el grupo, entonces discutimos cómo funcionan los equipos, qué tipo de compañero de equipo me gusta.
- Luego me preguntó sobre la empresa de mis sueños. Para ello, le expliqué cómo debería funcionar una empresa ideal y sus objetivos, etcétera.
- Al final, estuvo abierto a preguntas, le hice muchas preguntas sobre pasantías, pandemias, mentores y muchas más. Investigué Indeed y su oficina en Hyderabad.
Después de 30 minutos, esta ronda había terminado.
Finalmente, 2 candidatos fueron seleccionados para una pasantía de verano de 2 meses.
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