Asistí a una unidad de Microsoft Offcampus para la contratación de pasantes en 2019 y aquí está mi experiencia de la entrevista.
Ronda – 1: Ronda de codificación en línea en el sitio web de Mettl
Microsoft realizó una prueba en línea llamada TechSetGo en el sitio web de Mettl.
Se requieren 3 preguntas de codificación para resolver en 90 minutos
Cada problema es un problema funcional.
- Dado un array encuentra el elemento mayoritario en el array (un elemento cuya frecuencia en ese array es estrictamente mayor que la mitad del tamaño del array.) y si no hay mayoría devuelve -1.
- Encuentra la suma de las K mejores puntuaciones en una competición.
- Hay N colores en los que puede transformarse un camaleón. Hay una matriz de tamaño N x N donde para cada elemento i x j en la matriz si el elemento es igual a 1 entonces el camaleón puede cambiar de color i a color j de lo contrario el camaleón no puede cambiar de color i a color j. Actualmente, el camaleón está en el color X y desea cambiar al color Y. Encuentre el número mínimo de colores que necesita cambiar para estar en el color Y.
Diferentes personas obtuvieron diferentes conjuntos de problemas pero fueron fáciles de resolver.
Pude resolver los 3 problemas y fui invitado a una entrevista en Hyderabad.
Ronda – 2: Ronda de vuelo en grupo
Esta ronda es una ronda de lápiz-papel donde se supone que debes escribir el código en papel para el problema dado.
Se supone que hay que resolver 2 preguntas de codificación en 45 minutos.
- Dada una matriz de enteros no negativos. Encontrar un camino con la máxima suma, desde arriba a la izquierda (0, 0) hasta abajo a la derecha (N – 1, M – 1) y en cualquier punto dado de la matriz, se podría mover hacia la derecha(x, y + 1) o hacia abajo (x + 1, y).
- Dado un Árbol Binario encontrar el menor ancestro común entre 2 nodos N1, N2.
Pocos empleados de Microsoft estaban presentes para ayudarle si tiene alguna duda con respecto a las preguntas.
Ronda – 3: Entrevista Técnica
A partir de esta ronda, cada ronda será una ronda F2F. El entrevistador me pidió mi currículum y me pidió que me presentara.
El entrevistador fue muy amable y se centró en cómo estoy enfocando el problema y cómo fui capaz de convertir mis pensamientos en código.
¿Por qué estás interesado en CS cuando eres de ECE?
Después me hizo algunas preguntas sobre el sistema operativo.
Ahora se sumergió en las preguntas de codificación.
- Dada una cuadrícula de caracteres 2D y una palabra. Devuelve true si la palabra está presente en la cuadrícula, de lo contrario devuelve false. Una palabra puede coincidir en las 8 direcciones. Primero expliqué mi enfoque de backtracking y mientras escribía el código expliqué algunas secciones de mi código para mantenerlo en el bucle. Después de que escribí la parte de alrededor de 3 / 4 del código dijo que está bien y ahora podemos pasar al siguiente problema.
- Dado 2 árboles de búsqueda binaria fusionarlos en una sola matriz ordenada unificada. Le expliqué mi planteamiento. Crearé 2 arrays que contengan el recorrido en orden de los 2 árboles (el recorrido en orden del árbol de búsqueda binario nos da la versión ordenada de ese árbol) y crearé un 3er array donde fusionaré estos 2 arrays como la operación de fusión en la ordenación por fusión. Después de explicarlo me pidió que lo codificara y después de revisar mi código el entrevistador me preguntó si podía resolver el problema usando sólo 2 arrays en lugar de 3. Después de un par de pistas del entrevistador, fui capaz de resolverlo. El entrevistador me pidió que generara/creara algunos casos de prueba para este problema.
- Dado un árbol binario, escriba un código para el recorrido iterativo de preorden. Fui capaz de codificarlo usando pilas.
Ronda – 4: Entrevista técnica
El entrevistador primero se presentó a mí. Él es un ingeniero de software senior en Microsoft y ha estado trabajando en Microsoft durante los últimos 7 años. Después de revisar mi currículum, me preguntó sobre uno de mis proyectos. El entrevistador me hizo unas cuantas preguntas sobre conceptos OOPS y ahora me planteó una situación en la que grabó una manzana, cómo una manzana en estado fresco decae durante un período de 5 – 6 días y quería mostrar esto a la audiencia, ya que la audiencia no se sentará a ver durante 5 – 6 días, cómo voy a comprimir / acortarlo a un vídeo de 2 – 3 minutos. Le dije que muestrearía el vídeo durante 1 segundo cada 1 hora para que todo el vídeo se acortara a 2 – 3 minutos y se registraran los cambios significativos en una manzana.
Supongamos que el vídeo inicial es de 5 días de duración 5 x 24 = 120 horas. Voy a tomar instantáneas del vídeo de 1 segundo después de cada hora a las 0hrs, 1hrs, 2hrs, 3hrs, ….., 120hrs. Así que en total habrá 121 segundos de vídeo, es decir: 2 minutos y 1 segundo.
Me preguntó cuáles son los cambios significativos en la manzana durante su proceso de descomposición.
Le dije que habrá un cambio de color y un cambio en la forma de la manzana durante su descomposición. Quedó satisfecho con mi respuesta y luego pasó a una pregunta de codificación.
Sólo me hicieron una pregunta de codificación en esta ronda.
Pregunta: Given 2 numbers in LinkedList form find the sum of two numbers and return the head of the LinkedList which contains the sum of these two numbers.
- 1->2->3 + 4->5->6 = 5->7->9
I told him that we can do it either recursively or iteratively and explained him both of the approaches and he asked me to code in any one of the approaches. I choose the iterative approach
In this approach, I will create a new LinkedList called result and then I will reverse the two input Linkedlists and then move through each and every node and add both the node’s contents and the carry of the addition will be used for the next node’s addition. and finally, reverse the result LinkedList.
Here you need to check that one number might have more digits than the other
- 6->7->8 + 2->3 = 7->0->1
You also have to check out for carry-out generated.
- 9->9->9 + 1 = 1->0->0->0
I wrote the code for it and there I was using 3 while loops
- while (number1 != NULL and number2 != NULL) {
- // Some operations
- }
- while (number1 != NULL) {
- // if number1 has more digits than number2 then residual operations will take place here.
- }
- while (number2 != NULL) {
- // if number2 has more digits than number1 then residual operations will take place here.
- }
He asked if I could do it using only one loop and I made some tweaks to the code to get the result.
- while (number1 != NULL or number2 != NULL) {
- if (number1 == NULL and number2 == NULL)
- break;
- else if (number1 != NULL and number2 != NULL) {
- // some code goes here.
- }
- else if (number1 != NULL) {
- // some code goes here.
- }
- else {
- // some code goes here.
- }
- }
He was satisfied with it and asked if I can do it without calling the reverse method for the result LinkedList. Inicialmente no entendí la idea pero me dio una pista: «¿Conoces alguna estructura de datos que siga el Principio LIFO?» Entonces escribí el código para el problema utilizando la pila y quedó satisfecho con mi código.
Ronda – 5: Técnico + RRHH
Me entrevistó un Gerente (no recuerdo el nombre del equipo). Me dijo que está trabajando con Microsoft durante los últimos 18 años.
En primer lugar revisó mi currículum y se interesó por saber por qué estaba interesado en CS cuando soy de la ECE. He ganado algunos concursos de codificación locales y me preguntó sobre ellos cómo aprendí estructuras de datos y algoritmos y cómo practiqué y cuáles fueron los obstáculos que encontré mientras aprendía.
Me hizo una sola pregunta de codificación. Dado un array encuentra el subarray más largo de suma máxima si hay múltiples respuestas ve con el subarray con el menor índice inicial. Le hablé del algoritmo de Kadane y escribí el código correspondiente. Revisó mi código y me dijo que estaba impresionado con la denominación de mis variables. Quedó satisfecho con mi código y me preguntó si había alguna duda por mi parte. Le hice algunas preguntas como qué tipo de proyectos se le asignan a un becario durante sus prácticas y cuáles son los equipos que están presentes en MS-IDC Hyderabad. Finalmente le pregunté cuándo recibiría el resultado de la entrevista y me dijo que lo recibiría el lunes (las entrevistas se realizaron el sábado) y el resultado llegó el lunes, pero sólo después de 4 semanas :((.
Resultado: Seleccionado.
PS:
No estoy muy seguro de la duración de las entrevistas técnicas porque no llevé la cuenta del tiempo pero fue algo así como 45 minutos – 1hora.
Edición:
Olvidé mencionar que las Entrevistas fueron más fáciles de lo que esperaba. De todas formas estoy seguro de que las habría superado aunque fueran más difíciles.