Experiencia de entrevista de Commvault para SDE | NIT Jamshedpur

Commvault visitó nuestro campus para dos roles SDE (desarrolladores de C, C++) y SDET (desarrolladores de Python).

Criterios de elegibilidad:  CGPA 7.5 y superior. Todas las sucursales fueron elegibles.

Ronda 1: Esta fue una ronda de 1 hora y 15 minutos. Tenía 20 preguntas MCQ y 3 preguntas de codificación. Las preguntas de MCQ incluyeron preguntas de OOPS, DBMS y OS.

Había tres preguntas de codificación de dificultad moderada.

  1. Dado un valor n, para todas las posibles strings binarias de longitud n, encuentre el recuento de strings que tienen unos consecutivos en ellas.

    Ejemplo:

    for n=3.  Output = 3 ( 110 , 011 , 111)
  2. Nos dieron una string que tenía solo dos caracteres C y D. Necesitábamos imprimir los intercambios mínimos necesarios para hacer que C y D se alternaran. 

    Ejemplo:

    Input : CCCDDD  Output: 1 (CDCDCD by swapping index 1 with index 4)
  3. Encuentre el elemento máximo entre dos Nodes en un árbol binario.

Resolví 2 preguntas de codificación por completo y otra parcialmente. Alrededor de 25 fueron preseleccionados después de esta ronda.

Ronda 2 (ronda de codificación de 7 horas): esta ronda comenzó temprano a las 8 am con la explicación de la declaración del problema y la ronda de codificación real comenzó a las 9:30. Se suponía que debíamos codificar de forma remota en el sistema proporcionado por la autoridad de Commvault. Fuimos monitoreados continuamente por uno de nuestros mentores asignados. El uso compartido de pantalla y la cámara web estuvieron activados durante todo el tiempo. Se sugiere una buena conectividad a Internet, ya que mencionaron enfáticamente que la conexión no debe perderse en ningún momento.  

Declaración del problema: necesitábamos diseñar un sistema de almacenamiento basado en archivos como lo hemos hecho para cualquier otro sistema operativo. Tendría carpetas con subcarpetas y archivos, y se nos pidió que lo diseñáramos de manera eficiente. Debe realizar algunas funciones básicas como crear, eliminar, actualizar, vincular diferentes archivos, renombrar, crear vínculos suaves, etc.  

Se suponía que todo esto se haría usando OOPS (C++ o JAVA) como si tuviéramos clases definidas y necesitáramos implementar esas clases y sus funcionalidades. Primero necesitábamos discutir nuestra idea con nuestro mentor sobre cómo vamos a implementarlos antes de codificarlos. Después de pensar un poco, pensé en implementarlos usando algunos punteros y un mecanismo basado en recursiones para implementarlos realmente. Sin embargo, codificar cada uno de ellos fue una tarea enorme y tomó 7 horas completas. Constantemente despedían a la gente si no hacían ningún progreso durante bastante tiempo. 

Nos proporcionaron una plantilla como archivo CPP con nombres de clase vacíos como directorio de clase y otra clase llamada Archivo. Necesitábamos implementar estas clases y sus funciones miembro. La función principal tenía algunas operaciones básicas escritas como:

  • crear (ruta, contenido)
  • eliminar (ruta)
  • enlace (ruta1, ruta2)

Se escribieron operaciones similares dentro de main y nuestro programa debería devolver la salida correcta en consecuencia. 

  • Mi clase usó los punteros a sus subdirectorios y archivos para acceder a los elementos secundarios de una carpeta y estos punteros permitieron la implementación basada en la recursividad y, por lo tanto, cada operación podría implementarse fácilmente.

Así fue como procedí para esta ronda, pero seguramente esta no fue la única forma de implementar esta tarea. Se trata de imaginación y hasta qué punto se entendió el enunciado del problema y sus requisitos. Un amigo mío usó un enfoque basado en intentos para implementar esta tarea.

Al final de esta ronda, solo 6 fueron preseleccionados para la siguiente ronda técnica. 

Sugerencia: asegúrese de prestar atención a la explicación del problema, ya que explicaría todas y cada una de las operaciones y algunos casos de esquina que debemos considerar durante la implementación. Para esta ronda, sugeriría no sentirse abrumado por la declaración del problema porque las tareas se diseñaron de tal manera que con el pensamiento y una comprensión básica de OOPS, uno puede completar esta ronda. El uso de constructores y destructores ganaría puntos adicionales ya que se enfocan principalmente en OOPS. La paciencia fue la clave.

Ronda 3 (entrevista técnica): esta ronda se centró principalmente en verificar la comprensión básica de estructuras de datos y algoritmos, sistema operativo y DBMS. Preguntas básicas como la comparación entre C++ y Python ((ya que mis proyectos incluían Python), cómo se compila un programa C++ y Python (importante), cuál preferiría, cuándo y por qué, etc. Estas fueron algunas preguntas específicas del lenguaje que se hicieron Fue seguido por preguntas relacionadas con la última ronda de codificación explicando mis ideas y detalles de implementación.

Se me hicieron 3 preguntas de codificación. Me obligaron a codificarlas todas en el editor.

  1. Comprima dos arrays.

    Ejemplo: 

    Input:  arr1 = [1 , 2 , 3]  arr2 = [4 ,5 , 6]
    Output:  [1 , 4, 2 ,5 , 3 , 6]
  2. Comprima dos listas enlazadas

    Ejemplo:

    Input:  list1 = 1->2->3  list2 = 4->5->6
    Output:  1->4->2->5->3->6
  3. Número mínimo de plataformas requeridas para una estación de tren/autobús.

Después de la codificación, me hicieron preguntas relacionadas con subprocesos, problemas de sincronización en subprocesos, cómo resolver este problema, algoritmos de programación de CPU, la diferencia entre procesos y subprocesos, cambio de contexto en el sistema operativo. 

Sugerencia: uno debe sentirse cómodo escribiendo código sin errores a la vez. Además, se debe juzgar si el entrevistador espera la mejor solución de complejidad de inmediato o si tiene tiempo para llegar gradualmente a la mejor a partir de la fuerza bruta. Revise los temas centrales de CS y siéntase cómodo con ellos, ya que son evaluados por casi todas las empresas.

Ronda 4 (Ronda de recursos humanos): 3 de nosotros llegamos a esta ronda final de recursos humanos. Había un panel de 4 miembros, y dijeron que iba a ser una ronda rápida y que se llevaría a cabo bastante tarde en la noche. 

Mi primera pregunta fue explicar los juegos de serpientes y escaleras y qué estructura de datos usaría para implementar esto. Sugerí que usaría un mapa ya que necesitaba almacenar esos bordes dirigidos en mis estructuras de datos. Estaban satisfechos con esto. Después de eso, me preguntaron acerca de los vectores y las listas enlazadas y si puedo implementar vectores usando listas enlazadas y cómo. Después de explicar me preguntaron sobre los inconvenientes de esta implementación. 

Por último, me pidieron un rompecabezas. Dados tres frascos que estaban incorrectamente etiquetados como naranjas, mangos y mixtos. Debía corregir las etiquetas recogiendo un mínimo de frutas del frasco. Pude resolverlo después de un poco de ayuda. 

Yo estaba entre las tres personas que fueron seleccionadas para el puesto de SDE. La segunda ronda fue la más interesante y atractiva en la que uno pudo experimentar cómo aplicar nuestras habilidades de codificación en un problema cotidiano e implementarlas de manera eficiente.

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 *