Skills que aprenderás
Convocatorias
No hay convocatorias abiertas ahora mismo, pero no te pierdas la oportunidad: guarda este curso y te avisamos en cuanto se abra una convocatoria.
Recursos
No hay recursos disponibles todavía para esta convocatoria
Dirigido a desarrolladores Java con experiencia sólida en el lenguaje que buscan dominar los aspectos más exigentes del ecosistema: diseño arquitectónico, rendimiento y calidad continua. A lo largo de 8 horas el participante explorará el patrón hexagonal como estrategia de separación de responsabilidades, profundizará en el comportamiento interno de la JVM analizando políticas de Garbage Collection y perfiles de memoria, y trabajará la concurrencia avanzada identificando condiciones de carrera y aplicando primitivas lock-free o Virtual Threads. El curso también aborda el uso crítico de Streams y la programación funcional frente al modelo imperativo, y cierra con la integración de herramientas de calidad en pipelines CI/CD. Al finalizar, el participante será capaz de tomar decisiones de diseño y optimización fundamentadas en evidencia medible y de defenderlas ante su equipo.
java.util.concurrent, validando la mejora de rendimiento con mediciones JMH antes y después del cambio.Arquitectura hexagonal en Java. El bloque abre con los fundamentos del patrón Ports & Adapters: qué es el dominio, cómo se definen los puertos de entrada y salida, y qué reglas de dependencia impiden que la lógica de negocio conozca los detalles de infraestructura. Se trabaja la comparación con arquitecturas en capas tradicionales y se implementa un módulo completo sobre un proyecto real, acompañado de la justificación escrita de cada decisión de diseño.
Internals de la JVM: Garbage Collection y memoria. Se estudian las tres políticas de GC más relevantes en la JVM moderna —G1GC, ZGC y Shenandoah— prestando atención a sus modelos de pausa, regiones de heap y concurrencia de marcado. El participante aprende a leer GC logs, interpretar métricas de pause time y throughput, y proponer ajustes de flags argumentados. El bloque continúa con la detección de memory leaks mediante profilers (JProfiler, async-profiler o VisualVM), localizando la raíz del problema y aplicando correcciones respaldadas por una prueba de regresión.
Concurrencia avanzada: diagnóstico y optimización. Este bloque trata la identificación de condiciones de carrera y deadlocks en código multihilo, describiendo los mecanismos de visibilidad y ordenación que los causan. A partir del diagnóstico, se aplican refactorizaciones con primitivas de java.util.concurrent —ReentrantLock, ConcurrentHashMap, Semaphore— y con Virtual Threads o estructuras lock-free según el contexto. Las mejoras se miden con JMH para cuantificar el impacto real de cada cambio.
Programación funcional y Streams: uso crítico. Se revisa una base de código que hace uso intensivo de Streams y operaciones funcionales, evaluando legibilidad, composición y rendimiento frente a la alternativa imperativa. El participante identifica al menos dos escenarios donde el enfoque imperativo resulta superior y los justifica con métricas o razonamientos de mantenibilidad, desarrollando criterio para decidir entre ambos paradigmas en situaciones reales.
Calidad continua y toma de decisiones técnicas en contexto. El curso cierra automatizando un pipeline CI/CD que incorpora análisis estático con SonarQube o SpotBugs, umbrales de cobertura configurables y fallo de build ante incumplimientos. Este bloque integrador exige además comparar programación reactiva (Project Reactor / RxJava) con el modelo imperativo basado en Virtual Threads para casos I/O-bound, seleccionando la solución más adecuada y defendiéndola con un prototipo benchmarkeado, poniendo en juego todas las competencias trabajadas durante el curso.
jmh-core + jmh-generator-annprocess).sonarqube:community) o plugin SpotBugs integrado en la build.java.util.concurrent.volatile, synchronized) y nociones de ciclo de vida de objetos en heap.