¿Cómo apliqué?
Solicité a través de su página de carreras https://www.deshawindia.com/OpenPositions.shtml.
Me enteré de su reclutamiento a través de un amigo. Luego recibí una invitación para su prueba fuera del campus después de una semana de presentar la solicitud.
Prueba Hackerrank:
La prueba fue de 100 puntos con un límite de tiempo de 90 minutos. El formato de la prueba es el siguiente:
- Sección de Programación: Constaba de 2 preguntas de codificación de 20 y 40 puntos cada una, con un límite de tiempo de 50 minutos.
- Sección MCQ: Contó con 10 preguntas técnicas y 10 de aptitud, con un límite de tiempo de 20 minutos cada una. Cada respuesta correcta llevará 2 puntos y la respuesta incorrecta llevará 0,5 puntos negativos.
- Las preguntas técnicas cubrirán estructuras de datos y algoritmos, sistemas operativos, sistemas de bases de datos, SQL y redes.
- Las preguntas de aptitud cubrirán la aptitud cuantitativa, la resolución de problemas y el razonamiento lógico y verbal.
La primera pregunta de codificación fue fácil, algo relacionado con la manipulación e implementación de arrays. Otro era sobre encontrar la k-ésima permutación de una string (k<=1e9).
Ronda 1: CodePair Ronda 1.5 horas
Recibí una respuesta de ellos después de un mes de la prueba. En CodePair Round, el entrevistador me pidió que resolviera dos preguntas de programación. El primero fue bastante fácil y directo, decía encontrar la cantidad de formas en que un número dado se puede expresar como una suma de más de 1 número natural consecutivo. Puede encontrar el enlace https://practice.geeksforgeeks.org/problems/count-of-sum-of-consecutives3741/1 .
La segunda fue: Dada una array (n * m) y una reina posicionada en (n-1,m/2). Encuentre el número de formas en que la reina puede llegar a la celda no. (x,y) en número mínimo de movimientos. Hubo Q consultas de (x,y). La reina puede moverse en cualquiera de las ocho direcciones válidas en un solo movimiento. Preprocesamiento de O(n 2) estaba permitido y se suponía que las consultas debían responderse en O(1).
Luego hubo una pequeña discusión sobre mis proyectos y algunas preguntas sobre el polimorfismo, se preguntaron las funciones virtuales junto con otro concepto OOPS.
Ronda 2: Ronda técnica 1 hora
Esta ronda también se realizó en HackerRank CodePair. Se suponía que debía resolver una programación. La pregunta era: Premios de acciones dados por N días. Cada día puede comprar una acción o vender algunas o todas las acciones que haya comprado anteriormente. También está permitido no realizar ninguna operación durante un día.
La compra de acciones contará como una adición negativa a las ganancias y la venta contará como una adición positiva a las ganancias. Encuentre la ganancia máxima que podría lograrse dados los premios de acciones para N días.
Ejemplo: [1,5,2,100,3,2]
Comprar acciones durante los primeros tres días = -1 + -5 + -2 = -8
Vender todas las acciones el cuarto día = +100*4
No haga nada en el quinto y sexto día ya que no hay forma de que uno pueda vender las acciones compradas a un precio más alto. Por tanto, beneficio máximo = -8 + 100*4 = 392
Mi solución: encuentre el siguiente precio máximo de las acciones para cada día y compre esas acciones solo si hay algún premio más alto disponible. Por lo tanto, la ganancia será:
Por cada i-ésimo día comprando una acción (-stockPrize[i]) y vendiendo la acción en un día posterior con el precio de acción más alto (es decir, +max(stockPrize[i+1,n-1])). Este rango máximo podría calcularse fácilmente usando el sufijo máximo, dada una solución en tiempo lineal.
Además de esta pregunta de codificación, me hicieron preguntas de DBMS, OS, Projects:
- ¿Qué es un índice compuesto? ¿Como funciona?
- Algunas consultas SQL usando uniones.
- ¿Cuál es el significado de la condición en una combinación externa?
- Algunas preguntas sobre el Tech Stack de mis Proyectos.
- Preguntas sobre ReactJS, ya que tenía algunos proyectos y pasantías al respecto.
- ¿El ciclo de vida de React? ¿Por qué se usa React? ¿Qué es el DOM virtual? ¿Como funciona? etc.
Ronda 3: Ronda técnica 1.5 h
Esta ronda también se realizó en HackerRank CodePair. Diseñe e implemente una clase que se pueda usar para asignar y desasignar una cierta cantidad de bloques de memoria. La clase inicialmente tendrá un bloque fijo de memoria que solo se usará para asignar memoria. Di 1024 bloques.
- Esperaban que pensara y diseñara un prototipo que funcionara de la misma manera que funciona la gestión de memoria interna.
- Discusión sobre qué estructura de datos podría usarse para asignar bloques contiguos de memoria. ¿Qué métodos se utilizarán y cuáles serán sus firmas?
- ¿Qué estructura de datos es la más adecuada y por qué? ¿Cuál será la complejidad de las funciones de asignación y desasignación?
¿Cómo manejará la situación de una cantidad variable de bloques de memoria? - Mientras implementaba el prototipo de la clase, me pidieron que escribiera Copy Constructor y también me pidieron que sobrecargara el operador de subíndice para la clase.
- ¿El constructor de copias hace una copia superficial o profunda? Si es superficial, ¿cómo harás de esto una copia profunda? ¿Cuáles son los problemas en Shallow Copy?
No hay una respuesta correcta o incorrecta para el diseño de la clase. Solo quieren juzgarlo sobre cómo podría aplicar los fundamentos de CS para resolver el problema y si puede identificar algunas fallas en el diseño y también esperan que eventualmente las resuelva.
Dado un archivo que consta de millones de registros. Los datos están en un formato estructurado, es decir, en un formato tabular en el que cada registro consta de muchos atributos.
- ¿Cómo realizará la operación de búsqueda en el archivo dado que el archivo está almacenado en la memoria secundaria? optimizarlo.
- ¿Qué pasa si todo el archivo se puede llevar a la memoria principal?
- La clasificación no es una opción, ya que los datos deben buscarse en diferentes atributos, ¿cómo resolverá esto de manera óptima?
- Si se le permite almacenar estructuras de datos adicionales después de realizar un preprocesamiento en el archivo para realizar una operación de búsqueda optimizada. ¿Qué estructuras de datos utilizará y cuánto efecto tendrá sobre la optimización?
¿Qué es una estructura de datos Trie? ¿Explicar su estructura de Node y su funcionamiento? ¿Cuáles son sus aplicaciones?
¿Cómo optimizará el uso de la memoria en Trie?
Una simple pregunta de teoría de juegos: dados dos jugadores A y B separados por N número de fichas. En un movimiento, cada uno puede avanzar uno o dos pasos. Quién ganará si el jugador A empieza y cada uno juega de forma alterna y óptima. El jugador que no puede hacer ningún movimiento pierde el juego.
A _ _ _ _ B para n=4
Solución:
Si n=1 o 2, A gana en un movimiento. Por lo tanto, tanto n=1 como n=2 son estados ganadores
n=3, B gana ya que de n=3 podríamos ir a n=1 o n=2 y ambos son estados ganadores.
Así si f(n) = 0 si B gana y
1 si A gana
f(n) = 0 si ( f(n-1)==1 y f(n-2)==1 )
f(n) = 1 si( f(n-1)= =0 o f(n-2)==0 )
Casos base f(2)=1 yf(1)=1 Esto podría resolverse en tiempo lineal. Pero si escribe todos los valores de f() encontrará que se descompone en f(n) = 0 si n es un múltiplo de 3, de lo contrario f(n)=1.
Después de un día o dos, recibí su llamada de que estaban dispuestos a ofrecerme el puesto.
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