Experiencia de entrevista de Microsoft (pasantía 2018)

El proceso completo involucró una ronda en línea, un vuelo grupal, algunas entrevistas técnicas, una entrevista cara a cara con el gerente senior.

Ronda de codificación en línea: 

Esta ronda contó con 3 preguntas y se realizó en la plataforma de los cocubos. Las preguntas que me surgieron fueron:

  1. Dada una lista de números de automóviles y fechas, devuelva la multa total recaudada de los automóviles. Si la fecha es impar, cada automóvil con número par recibe una multa de 250 rupias y viceversa. (2 puntos)
  2. Evaluación de la expresión infija.  (3 puntos)
  3. Quitar k dígitos de un número de n dígitos de modo que el número formado sea el más pequeño. Similar a esto.  (5 puntos)

Las personas que tenían un buen CGPA (9+) o habían respondido al menos 2 preguntas pasaban a la siguiente ronda.

Vuelo en grupo:

Hubo alrededor de 22 personas que dieron la vuelta al grupo, 15 de las cuales fueron seleccionadas para la entrevista. Nos dieron dos preguntas en esta ronda, teníamos que discutir el enfoque con nuestros mentores y escribir un código compilable en una página. Las preguntas fueron:

  1. Compruebe si los dos árboles binarios dados son espejos entre sí. La solución se puede encontrar aquí .
  2. Dado un texto y un diccionario, verifique si el texto se puede dividir en palabras que pertenecen al diccionario. Puntos de bonificación si también puede decir de cuántas maneras se puede hacer esto. Esto se puede hacer mediante un enfoque recursivo (sin DP), pero eso llevaría un tiempo exponencial. Se esperaba que optimizáramos el enfoque tanto en espacio como en tiempo. La solución se puede encontrar aquí .

Intente escribir limpio encontrado con muchos comentarios y nombres de variables adecuados. También consideraron si ha proporcionado un enfoque iterativo o recursivo (se prefirió más iterativo ya que es más rápido, pero al final no hizo mucha diferencia).

Entrevistas Técnicas:

Tuve 3 entrevistas técnicas, trata de interactuar con el entrevistador tanto como puedas. Si les está dando un enfoque de fuerza bruta, asegúrese de decirles cuál es el problema antes de pasar a una solución optimizada.

Ronda 1 : todas las preguntas de esta ronda se basaron en arrays.

La primera pregunta que recibí fue contar la cantidad de números distintos en una ventana de tamaño k. La solución se puede encontrar aquí.  Di 2-3 enfoques con su complejidad de tiempo y espacio antes de llegar a la solución O(n).

A continuación, me pidió que imprimiera el número más grande en la ventana de tamaño k. La solución se puede encontrar aquí . Tuve que escribir un código compilable para este problema, lo resolví usando dequeue. También me pidió que creara casos de prueba y ejecutara en seco mi código. Se me juzgó si podía pensar en los casos de esquina en mi enfoque.

Ronda 2 : Esta ronda tenía una mezcla de preguntas.

La primera pregunta se basó en la búsqueda binaria, solo para calentar las cosas. Me hizo algunas preguntas sobre strings (como la substring más grande con caracteres únicos y LCS), pero le dije que ya las había visto antes, así que pasamos a las preguntas de programación dinámica.

En la siguiente pregunta, me dieron una array booleana con A[i]=1 que indica que el i-ésimo lugar es seguro y A[i]=0 significa que el i-ésimo lugar contiene una bomba. Dada una velocidad inicial k, después de llegar a un punto seguro, podría aumentar o disminuir mi velocidad en 1, o mantenerla igual. Puede mover exactamente k número de pasos en la array donde k es su velocidad actual. Si llega al final de la array o su velocidad se vuelve 0 en cualquier punto seguro, gana. Si pisas una bomba o vas más allá del tamaño de la array, mueres. ¿De cuántas maneras podrías ganar el juego? Primero le di una solución recursiva y luego probé un enfoque de programación dinámica para resolver el problema. A excepción de algunos casos de esquina, podría hacer este problema.

El último problema de esta ronda se basó en un árbol, me dieron un árbol binario con Nodes que contenían un número en el rango de 0 a 9, por lo tanto, cada camino desde la raíz hasta la hoja puede pensarse como un número de n dígitos donde n es la longitud del camino. . Tenía que encontrar la suma de todos los caminos. Como la suma puede desbordarse, tuve que usar aritmética modular. Más tarde me pidió que escribiera un código compilable para el mismo.

Mientras resolvía estas preguntas, me hicieron algunas preguntas sobre mis proyectos. Las preguntas estaban relacionadas con la autenticación (sesión y token) y la base de datos en general.

Ronda 3: Esta ronda fue bastante fácil, me hicieron preguntas básicas.

Primero me pidieron que escribiera un código que imprimiera un patrón piramidal usando asteriscos (*). Posteriormente los asteriscos fueron reemplazados por el triángulo de Pascal.

Finalmente, me pidieron que escribiera un código que devolviera la altura de un árbol genérico.

Entrevista final:

Esto fue más una interacción que una entrevista, el gerente senior y yo discutimos los diversos proyectos que están sucediendo en Microsoft, me mostró el proyecto en el que estaba trabajando. Era amistoso.

Finalmente, después de dedicar más de 15 horas a las entrevistas, ¡me seleccionaron junto con otras 5 personas de mi universidad!

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 *