Ronda 1: prueba en línea
Consistió en MCQ basados en Java: predecir la salida, subprocesos múltiples, etc.
Dos preguntas de programación:
- Implementar funciones de una interfaz: se usó HashMap donde la clave (o el valor) era una clase personalizada; también se tuvo que implementar el método hashCode() y equals().
- Dado un tronco de madera y una función que devuelve el peso del tronco en función de la distancia (por ejemplo, x) desde el lado izquierdo del tronco. El peso del tronco es desigual (es decir, el punto medio del lado izquierdo no necesariamente tiene peso = la mitad del tronco completo), por lo que la tarea es encontrar el punto del lado izquierdo del tronco donde el peso es exactamente la mitad. El enfoque fue similar a la búsqueda binaria. No se pudo resolver por falta de tiempo, pero se mencionó en las reglas que incluso si el problema no se resuelve, el algoritmo puede otorgarle puntos.
Dos preguntas de SQL: una estaba usando JOIN y otra estaba usando una consulta anidada.
Recibí una llamada para la próxima ronda después de una semana.
Ronda 2: Entrevista telefónica
- Háblame de ti.
- Tiempo de compilación frente a polimorfismo en tiempo de ejecución: el tiempo de compilación se sobrecarga y el tiempo de ejecución se anula
- Objeto inmutable: qué es, cómo hacer que el objeto sea inmutable (clase final) y cómo garantizar que la inmutabilidad esté allí si el objeto mutable se usa en la clase inmutable (clon de retorno del objeto original).
- Hashmap (cómo funciona), hashmap concurrente (cómo funciona), treemap (complejidad de la búsqueda: dije O (inicio de sesión) y expliqué que se implementó como rb tree que ofrece un rendimiento O (inicio de sesión) garantizado en el peor de los casos).
- ArrayList vs LinkedList: si no hay un mecanismo para la indexación, ¿cómo buscará un elemento (iterar a través de la lista) y cuál conducirá a una búsqueda más rápida (dije arraylist).
- Reverse a LinkedList: dio una solución básica usando dos listas, pidió más, pero no pude responder.
- Esperar vs dormir en subprocesamiento: dormir no cambia el estado del subproceso, si el subproceso se está ejecutando, permanece ejecutándose. Pidió una explicación, le expliqué usando el ejemplo de productor-consumidor. (Me equivoqué, la suspensión cambia el estado del subproceso de EN EJECUCIÓN a THREAD_WAITING. La diferencia es que la suspensión no libera el bloqueo de los recursos).
- Dada una lista de strings, cree una array 2D de modo que cada fila almacene todos los anagramas de una string. Le di una solución de fuerza bruta, pero quería algo optimizado, no pude hacerlo.
Ronda 3: Entrevista telefónica
- Háblame de ti.
- Resumen vs Interfaz. ¿Conoces el método predeterminado en la interfaz? – Dije que no. Básicamente son algunas características introducidas en Java 8.
- ¿Qué es el polimorfismo? Dé un ejemplo de polimorfismo de la vida real: para anular, retirar de la cuenta corriente y de ahorros, para sobrecargar, depositar con cheque y efectivo.
- ¿Qué es la serialización? Le dije el concepto, pero ella comenzó a preguntarme sobre los aspectos internos; traté de responder pero no pude. Ella me dijo que si solo conoces el concepto, díselo con anticipación para que no pregunte sobre las partes internas.
- Dada la clase A con un método printContent estático y la clase B que extiende A y anula el método printContent. En principal, A obj1 = new B(); obj.printContent(); A obj2 = nulo; obj2.printContent(): indica cuál será el resultado. (Ambas llamadas a printContent() imprimirán «A»).
- Palabras clave final, finalmente y finalizar: no sabría decir acerca de finalizar (finalizar es (un método) que se usa para realizar un procesamiento de limpieza justo antes de que el objeto se recolecte como basura).
- ¿Qué significa clase inmutable (no puede heredar)? Clase dada Persona con nombre y lista de materias. Hacer que la clase sea inmutable: en la función de obtención de listas, devuelve el clon de la lista.
- Excepción frente a error: me olvidé de esto porque no lo había estudiado durante mucho tiempo. (Mira esto).
- ArrayList vs LinkedList: búsqueda vs inserción.
- TreeSet frente a HashSet, ConcurrentHashMap frente a Hashtable.
- HashMap frente a TreeMap. Dado un empleado de clase con un nombre de miembro, esta clase se usa como clave tanto en HashMap como en TreeMap. Qué método necesitaremos agregar a la clase Empleado. Dije hashCode() y equals(), pero ella preguntó si se requieren hashCode y equals para TreeMap, pensé y dije que no, necesitamos implementar Comparable y anular el método compareTo para TreeMap. Explicar el funcionamiento interno de HashMap. Me confundí cuando me preguntó si el código hash se aplica tanto en el valor clave como en la clave. Más tarde dije solo la clave y continué con eso. Si se anula el código hash de modo que siempre devuelva 1, ¿cómo afectará a HashMap? Dije que solo se usará 1 cubo y que el tiempo de búsqueda será lineal en el peor de los casos.
- Consulta SQL: tablas dadas estudiante con (identificación del estudiante, nombre), curso con (identificación del curso, nombre) y estudiantecurso con (identificación principal, identificación del estudiante, identificación del curso). Dar los nombres de los estudiantes que se han matriculado en más de 3 cursos. Primero le di una solución con una consulta anidada, luego ella pidió otro método, así que intenté usar join pero me quedé atascado en el punto en el que teníamos que contar los cursos.
- Pregunta de resolución de problemas 1: dada una lista vinculada, elimine un Node de esa dada la referencia de ese Node. Debería estar en O(1). Lo intenté, pero no pude hacerlo. Solución: copie el contenido del siguiente Node en el Node actual y elimine el siguiente Node.
- Pregunta de resolución de problemas 2: ¿Qué es la pila? Implemente una cola usando stack.
Ronda 4: entrevista F2F
- Como había trabajado con C++ y sabían que C++ tenía OOPS, me pidieron que hablara sobre varios conceptos de OOPS: polimorfismo, herencia, abstracción, encapsulación, ocultación de datos.
- Muchas preguntas (confusas) sobre la clase abstracta frente a la interfaz.
- Explique el polimorfismo, el tiempo de compilación frente al polimorfismo en tiempo de ejecución, los ejemplos de sobrecarga y anulación (y muchas preguntas confusas basadas en eso, como se pueden anular los métodos estáticos, etc.).
- Excepciones y sus tipos. Dieron un fragmento de código en el que la función de clase base lanzó IOException y la función de clase derivada lanzó Exception y las funciones fueron anuladas, por lo que preguntaron cuál será el resultado.
- Clase de objeto y sus métodos. Implementación predeterminada de hashcode y equals. Importancia del código hash: di un ejemplo de HashMap, por lo que preguntaron sobre su funcionamiento.
- Consultas SQL: consulta anidada (para encontrar el segundo valor máximo en la columna) y combinación interna.
- Resolución de problemas:
dada una array, debe encontrar el valor más cercano (en su lado izquierdo) a un elemento. Deje que el elemento más cercano al primer elemento de la array (arr[0]) sea -1.
Por ejemplo, 1 3 2 3 5 4
la salida será -1 1 1 2 3 3. Sugerencia de uso de pila. - Pregunta de diseño: implementar patrón de bloqueo. Tienen una pista para usar alguna operación matemática para comparar dos patrones. Inicialmente pensé en usar la función Hash, pero luego pensé que la operación XOR sería mejor. Por lo tanto, utilicé la manipulación de bits (BitSet en Java) para indexar cada punto y configurar el bit si el punto viene en el patrón. (Más tarde, no estaba seguro de si estaba en lo correcto).
- ArrayList vs LinkedList, que es más rápido en términos de inserción, búsqueda y eliminación.
- Dados los números del 1 al 100, ¿cómo los ordenarás? Clasificación rápida (nlogn). Pero dado que el rango está dado (y es pequeño), podemos usar la ordenación por conteo.
- Dada una array, encuentre un máximo de 10 elementos (el orden no importa). Usa montones. Pidieron optimizar aún más. No pude pensar en ninguna forma, por lo que sugirieron mantener el tamaño del montón en 10. Inicialmente pensé en el montón máximo, pero luego me dieron una pista de por qué no probar el montón mínimo. Usando el montón mínimo, inserte los primeros 10 elementos, busque el mínimo, elimine el elemento mínimo, inserte el siguiente elemento, busque el mínimo, etc. Repita para len (arr) – 10 veces, el resto será un máximo de 10 elementos.
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