Hola, PFB mi experiencia de entrevista en el campus con Microsoft.
Prueba escrita: la
primera ronda fue una prueba en línea que contiene 20 MCQ en C y C++. Con base en esta prueba, preseleccionaron a algunos estudiantes y se tomó la siguiente ronda. La siguiente ronda fue una ronda de codificación que tenía dos preguntas:
Q1. Imprime las últimas 10 líneas de una string muy grande.
Q2. Recorte todos los Nodes en un BST que no estén en el rango de (minValue, maxValue).
Los códigos se verificaron en su compilador en línea con sus casos de prueba.
Actividad grupal:
La noche anterior al día de la entrevista, tuvimos una ronda de actividades grupales. Se nos dio para resolver una pregunta por nuestra cuenta, y la otra la tuvimos que resolver discutiendo con el mentor de Microsoft que se le asignó a usted.
Q1. Inserta un elemento en una lista circular ordenada con un solo enlace. El puntero a cualquier Node de la lista (puede indicarse como el encabezado) y el puntero al nuevo Node se darán como entrada. Genere casos de prueba para su código. Compruebe todos los casos de esquina.
Q2. Se da una array MxN. Si una celda contiene 0 (cero), haga que esa fila y columna sean cero. Tuvimos que discutir esta cuestión con los mentores de Microsoft. La discusión fue importante y señalaron fallas y le pidieron que optimizara algo (complejidad espacial).
Entrevista Ronda-1:
Q1. Después de una breve introducción, el entrevistador me pidió que resolviera el rompecabezas de 100 bombillas. Hay 100 bombillas (inicialmente todas apagadas). En la i-ésima iteración, todos los interruptores del múltiplo de i se invierten. Finalmente, después de 100 iteraciones de este tipo, ¿cuántas bombillas seguirán encendidas? No sabía la solución. El entrevistador me dio una pista. Luego, después de hacer algunos cálculos, finalmente le di la solución (Cuadrados perfectos). Luego me pidió que lo probara. De alguna manera, lo probé (me sentía afortunado: P).
Q2. En línea con la pregunta anterior, me pidió que escribiera una función que tomaría un número como entrada y devolvería todos sus factores. Lo resolví en O(sqroot(N)). Luego me pidió que verificara si me perdí algún caso extremo. Entonces, puse una verificación de números negativos. Estaba feliz con eso.
Q3. Luego me pidió que escribiera el código para el recorrido DFS de un árbol. Le pregunté sobre la estructura del árbol. Me dijo que escribiera para un árbol N-ario. Lo hizo, usando un vector (C++) de punteros secundarios. Esta vez, no me perdí ni un caso de esquina (porque casi no hubo :P). Estaba feliz con eso.
Entrevista Ronda 2: El
entrevistador fue muy amable y muy franco. Revisó mi CV minuciosamente y me hizo una pregunta en SQL y dos preguntas sobre algoritmos:
Q1. Me dio una tabla de empleados con las columnas Id, Name y ManagerId y luego me pidió que escribiera una declaración SQL que generaría todos los nombres de los gerentes que tienen al menos 2 subordinados debajo de ellos. Lo sé, es muy fácil :P.
Q2. Me pidió que escribiera el código para clonar una lista enlazada individualmente con el siguiente puntero aleatorio y me dijo que no me preocupara por la complejidad del espacio. Uno bastante fácil. Lo resolvió usando un hash.
Q3. En continuidad con la pregunta anterior, me pidió que reescribiera el código anterior sin usar ningún hash. Lo hizo muy rápido :P. Estaba muy feliz y conversó conmigo un rato. Incluso masqué un chicle después de pedirle permiso. Quedó muy impresionado por mi letra. Sí, me escuchaste bien, me sentía afortunado: D.
Entrevista Ronda 3: El
entrevistador fue divertido y continuamente me pedía que no gritara (aunque, realmente no estaba de humor para gritar;)).
Q1. Me pidió que escribiera una función que conectara todos los Nodes en un árbol binario al mismo nivel. Le dije, lo sabía y lo expliqué brevemente. Fue genial y me preguntó si quería tener una nueva pregunta o simplemente escribir esta. Dije: “Como quieras”. Así que siguió adelante.
Q2. Explicó un caso de uso de MS Excel: podemos seleccionar varias columnas en un archivo de Excel y arrastrarlas juntas hacia la izquierda o hacia la derecha. Luego me pidió que escribiera el código para implementar el escenario mencionado anteriormente en arrays. La entrada será una array, el índice izquierdo y derecho de una subarray (columnas múltiples) y un índice de destino (ya sea a la izquierda o a la derecha de la subarray). Después de rascarse por unos momentos, le di una solución O(n) con desplazamiento a la izquierda y a la derecha usando el método flip. Quedó muy impresionado y elogió mi letra una vez más (Dios es grande :)).
Q3. Rápidamente pasó a la última pregunta. Se proporciona un archivo con números del 0 al 9999999 (cada número en una línea). Cómo ordenar el contenido. Le di una solución con clasificación radix (ya que son posibles un máximo de 7 dígitos para cada número). Luego planteó una restricción de muy poca memoria RAM disponible. Hablé con él sobre un algoritmo similar a una combinación externa modificada. Pero luego me dijo que minimizara el enorme tiempo que toma la ordenación por fusión externa. Luego dio una pista como «Usar bits». Así que le dije que usara un vector de tamaño 10^7 (que en realidad usa un bit para un booleano). Él estaba bien con eso.
¡¡¡Finalmente fui CONTRATADO!!! 😀 😀
Estoy realmente muy agradecido con el equipo de geeksforgeeks. Cuanto digo al respecto, definitivamente será menos. Sigan con el gran trabajo 🙂
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