Evaluación Técnica de Java: Algoritmos, Sistemas y Redes

El siguiente conjunto de problemas técnicos representa una evaluación típica para ingenieros de software, centrada en fundamentos de ciencias de la computación, administración de sistemas Linux y el lenguaje Java.

1. Selección Única: Fundamentos de Sistemas y Algoritmos

  1. Gestión de recursos y Deadlocks: Si se tienen 4 procesos concurrentes y cada uno requiere un máximo de 5 recursos del mismo tipo para finalizar su ejecución, ¿cuál es el número mínimo de recursos necesarios para garantizar que nunca ocurra un interbloqueo (deadlock)?
  2. Procesamiento de texto en Linux: Dado un archivo usuarios.log donde cada línea contiene un nombre de usuario, proponga una combinación de comandos (sort, uniq, head, etc.) para identificar los 3 usuarios más frecuentes y su número de apariciones.
  3. Eficiencia de búsqueda: En una secuencia ordenada de elementos: 13, 18, 24, 35, 47, 50, 63, 83, 90, 115, 124, ¿cuántas comparaciones se requieren para localizar el valor 90 utilizando el algoritmo de búsqueda binaria?
  4. Genéricos en Java: Considerando la jerarquía de clases donde ClaseA extiende a ClaseT y ClaseB extiende a ClaseA, dada la declaración List<Class<? extends ClaseT>> lista = new ArrayList<>();, analice la viabilidad de insertar objetos de tipo ClaseT, ClaseA o ClaseB en dicha lista.
  5. Estructuras de datos (Pilas): Si el orden de entrada a una pila es 1, 2, 3, 4, 5, ¿cuántas secuencias de salida son teóricamente posibles?
  6. Ciclo de vida de procesos: En la gestión de estados de un proceso (Listo, Ejecución, Espera), ¿cuál de las siguientes transiciones es considerada inválida por el planificador del sistema operativo? (Ejemplo: Espera -> Ejecución).
  7. Resolución de sobrecarga (Overloading): Si existen dos métodos definidos como procesar(String s) y procesar(Object o), al realizar la invocación procesar(null), ¿cuál de los dos métodos se ejecuta o qué error se produce?
  8. Ciclo de inicialización: Determine el orden exacto de ejecución de bloques estáticos, constructores y bloques de instancia cuando se instancia una clase hija que hereda de una clase padre.
  9. Patrones de diseño: El patrón Adapter es una aplicación típica de conceptos como la composición y la delegación. ¿En qué escenarios de integración de interfaces es preferible su uso?

2. Selección Múltiple y Análisis de Comandos

  1. Shell Scripting: Identifique las formas sintácticamente correctas para declarar y llamar funciones dentro de un entorno Linux Shell.
  2. Protocolos de red: Al acceder a una URL como www.ejemplo.com desde un navegador, ¿cuáles de los siguientes protocolos intervienen en el proceso? (ARP, MAC, DNS, HTTP, TCP).
  3. Diagnóstico de la JVM: Analice la utilidad específica de las herramientas de línea de comandos de Java: jstat (monitoreo de estadísticas), jmap (volcado de memoria), jps (listado de procesos) y jstack (trazas de hilos).
  4. Procesamiento con AWK: Escriba un comando utilizando awk para calcular la suma total de una columna de números en un archivo de texto.
  5. Planificación de disco: Identifique cuáles de los siguientes son algoritmos válidos para la planificación de peticiones de E/S en disco: LRU, SCAN, SRT, SSTF.
  6. Monitoreo de memoria en Linux: ¿Qué comandos permiten inspeccionar el estado actual de la memoria RAM y el intercambio (swap)? (Ejemplos: top, free, vmstat).
  7. Operadores a nivel de bits: Explique el funcionamiento del operador | y su diferencia con el operador lógico ||.
  8. Árboles de búsqueda equilibrados: Tras la inserción sucesiva de elementos en un árbol AVL, determine cómo se realizan las rotaciones y cuál es la altura final de la estructura.

3. Análisis de Código y Lógica

Considere el siguiente fragmento de código sobre el uso del modificador final en parámetros de objetos:


void modificarInstancia(final Referencia obj) {
    obj.contador++;
}

Si miObjeto.contador es 0 originalmente, ¿cuál será su valor tras invocar modificarInstancia(miObjeto)? Explique por qué el uso de final no impide la modificación de los atributos internos del objeto.

A continuación, analice el comportamiento recursivo en el siguiente programa:


public class EvaluadorRecursivo {
    static int llamadas = 0;

    public static void main(String[] args) {
        new EvaluadorRecursivo().calcular(7);
        System.out.println("Total de ejecuciones: " + llamadas);
    }

    public int calcular(int n) {
        llamadas++;
        if (n <= 1) {
            return 1;
        } else {
            return calcular(n - 1) + calcular(n - 2);
        }
    }
}

¿Cuál es el valor final de la variable llamadas tras la ejecución completa del método para el parámetro 7?

4. Desafío de Programación: Identidad de Potencias

El objetivo es encontrar la cantidad total de combinaciones enteras que cumplen la igualdad a^b = c^d, donde todas las variables (a, b, c, d) se encuentran dentro del intervalo inclusivo [1, n].

Ejemplo para n = 2:
Las combinaciones válidas son:

  • 1^1 = 1^1
  • 1^1 = 1^2
  • 1^2 = 1^1
  • 1^2 = 1^2
  • 2^1 = 2^1
  • 2^2 = 2^2

Total para n=2: 6. El desafío principal radica en optimizar la solución para valores de n elevados, evitando la complejidad computacional de un enfoque de fuerza bruta de cuatro ciclos anidados (O(n^4)), el cual excedería los límites de tiempo en entornos de ejecución estándar.

Etiquetas: java algoritmos linux jvm SistemasOperativos

Publicado el 6-9 23:33