(Contratación lateral; Experiencia: 4 años; Para la ubicación de Bangalore)
La ronda 1:
Ronda HackerRank ; 2 problemas; Tiempo : 2 Horas (lenguaje Java):
1. Dada una string que contiene paréntesis y otros caracteres y un número n , genera la posición (índice) del paréntesis de cierre correspondiente al enésimo paréntesis de apertura. En caso de que los paréntesis estén desequilibrados, genera -1 .
2. Dada una string, genera su versión comprimida. Una versión comprimida de una string es otra string con todas las apariciones consecutivas de caracteres reemplazadas por el carácter seguido del número de apariciones. Por ejemplo, si la string de entrada es: «aaabbacdddd», entonces la salida debería ser: «a3b2a1c1d4».
La ronda 2:
Ronda de codificador ; 2 problemas; Tiempo : 1 hora (Java):
1. :
Dado un documento/texto y dos palabras (que aparecen en el documento), encuentre la distancia mínima entre las apariciones de estas 2 palabras. La distancia entre 2 palabras en un texto se define como el número de caracteres que separan/entre estas 2 palabras.
La solución codiciosa a este problema ya estaba implementada pero contenía varios errores (lógicos o semánticos). Debido a estos errores, un conjunto de casos de prueba producía resultados incorrectos.
El primer objetivo para mí fue identificar y corregir todos los errores de modo que pasen todos los casos de prueba dados.
El segundo objetivo era crear más casos de prueba para descubrir otros errores (si los hubiera) presentes en el código y corregir estos errores.
2. Solo quedaron unos 20 minutos para el segundo problema en mi caso, por lo que fue relativamente más simple.
Dada una array 2D de tamaño N × 2, en la que la primera columna de cada fila contiene el nombre del estudiante y la segunda columna contiene las calificaciones de este estudiante en cierta materia, necesitamos averiguar el nombre del estudiante con el promedio máximo de calificaciones. y las notas medias máximas. Puede haber múltiples filas para que un estudiante almacene las calificaciones obtenidas en diferentes materias.
Ronda 3:
ronda telefónica ; Tiempo : 45 Minutos:
El entrevistador preguntó sobre mi historial profesional, los proyectos en los que he trabajado y las tecnologías que he utilizado. Interrogó sobre muchas respuestas que di con respecto a mis proyectos anteriores, extrapoló los problemas subyacentes para crear nuevos, me dio diferentes escenarios y me preguntó qué habría hecho de manera diferente para que la solución funcionara bien en estas nuevas situaciones. Muchos escenarios involucraron la ampliación del tamaño de entrada del problema, las limitaciones de tiempo e implicaron la introducción de subprocesos múltiples. Unix shell y AWK se mencionaron en mi habilidad, por lo que también hizo algunas preguntas sobre estos.
Rondas 4 a 8 :
Todos cara a cara; Celebrada en la oficina de Bangalore; tomó más de 5 horas (excluyendo los tiempos de descanso). No recuerdo claramente las preguntas formuladas en cada ronda, así que las enumeraré todas en orden aleatorio:
1. Muchas preguntas se basaron en el lenguaje Java. Las preguntas basadas en el conocimiento conceptual de las colecciones, el contrato hashCode() y equals(), la inmutabilidad de la clase String y Wrapper, el conjunto de strings, la interconexión de strings, los subprocesos múltiples, la sobrecarga y la anulación, el polimorfismo dinámico, la referencia débil, las excepciones, los campos estáticos y de instancia, etc. preguntó.
2. Se hicieron preguntas en el SQL relacionadas con uniones (autounión), índices (agrupados/no agrupados), escritura de consultas, etc.
3. Una pregunta de aptitud: dado un número de 4 dígitos (por ejemplo, abcd, donde a, b, c, d son los dígitos) tal que abcd × 4 = dcba (el reverso del número). Averigüe abcd.
4. Una pregunta de lógica de programación (enfoque codicioso): ingrese un número (digamos N), encuentre el número con los mismos dígitos, justo/inmediatamente mayor que N. Por ejemplo, a continuación se muestran los resultados de las entradas dadas:
123 -> 132
1368 -> 1386
253986321 -> 256123389
8631 -> Ninguno
5. Implementación de una caché LRU (Least Latest Used) en Java. (Esto se preguntó en la última ronda).
6. Problemas relacionados con patrones de diseño. Diferentes formas de implementar el patrón de diseño Singleton, la mejor manera. Patrón de diseño del adaptador, etc.
7. Problemas de diseño:
a) ¿Cómo implementaría el historial de navegación de Google Chrome (navegación hacia adelante y hacia atrás)?
b) ¿Cómo almacenaría digitalmente diferentes relaciones familiares? ¿Qué estructura de datos usarías? ¿Qué harías diferente si se tratara de relaciones de Facebook entre diferentes usuarios? ¿Cómo sugerirías nuevos amigos a los usuarios existentes?
8. Comparación de diferentes estructuras de datos (como tabla hash, lista, array) en términos de complejidades de tiempo y espacio.
9. Conceptos de programación orientada a objetos: diferencia b/n encapsulación y abstracción, etc.
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