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
- 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)?
- Procesamiento de texto en Linux: Dado un archivo
usuarios.logdonde 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. - 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?
- Genéricos en Java: Considerando la jerarquía de clases donde
ClaseAextiende aClaseTyClaseBextiende aClaseA, dada la declaraciónList<Class<? extends ClaseT>> lista = new ArrayList<>();, analice la viabilidad de insertar objetos de tipoClaseT,ClaseAoClaseBen dicha lista. - 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?
- 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).
- Resolución de sobrecarga (Overloading): Si existen dos métodos definidos como
procesar(String s)yprocesar(Object o), al realizar la invocaciónprocesar(null), ¿cuál de los dos métodos se ejecuta o qué error se produce? - 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.
- 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
- Shell Scripting: Identifique las formas sintácticamente correctas para declarar y llamar funciones dentro de un entorno Linux Shell.
- Protocolos de red: Al acceder a una URL como
www.ejemplo.comdesde un navegador, ¿cuáles de los siguientes protocolos intervienen en el proceso? (ARP, MAC, DNS, HTTP, TCP). - 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) yjstack(trazas de hilos). - Procesamiento con AWK: Escriba un comando utilizando
awkpara calcular la suma total de una columna de números en un archivo de texto. - 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.
- Monitoreo de memoria en Linux: ¿Qué comandos permiten inspeccionar el estado actual de la memoria RAM y el intercambio (swap)? (Ejemplos:
top,free,vmstat). - Operadores a nivel de bits: Explique el funcionamiento del operador
|y su diferencia con el operador lógico||. - Á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.