Boost Academy
FormaciónEvaluacionesPerfil
Volver
  • En directo

Java — Avanzado

8h de clase en directo·HACK A BOSS·Español

Skills que aprenderás

  • Java

Convocatorias

Necesitas un plan activo

Para acceder a los cursos en directo necesitas un plan activo. Estamos trabajando para que los planes estén disponibles pronto — ¡mantente atento!

No hay convocatorias abiertas ahora mismo, pero no te pierdas la oportunidad: guarda este curso y te avisamos en cuanto se abra una convocatoria.

Descripción

Objetivos

Temario

Requisitos técnicos

Conocimientos previos

Detalles de la 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.

  1. Describir los principios del patrón hexagonal (Ports & Adapters) y las reglas de dependencia entre dominio, puertos e infraestructura, distinguiéndolo de otras arquitecturas en capas.
  2. Interpretar GC logs de las políticas G1GC, ZGC y Shenandoah para identificar métricas clave de pausa y throughput que orienten decisiones de ajuste de flags JVM.
  3. Analizar un fragmento de código multihilo para localizar condiciones de carrera y deadlocks, explicando los mecanismos subyacentes que los originan.
  4. Aplicar el patrón hexagonal sobre un proyecto Java real, documentando por escrito la justificación de cada decisión de separación entre dominio, puertos e infraestructura.
  5. Optimizar un componente concurrente sustituyendo bloqueos por primitivas de java.util.concurrent, validando la mejora de rendimiento con mediciones JMH antes y después del cambio.
  6. Refactorizar código multihilo problemático empleando Virtual Threads o estructuras lock-free, eliminando los riesgos de carrera o bloqueo identificados en el análisis previo.
  7. Evaluar críticamente el uso de Streams en una base de código existente, razonando con métricas o argumentos de mantenibilidad cuándo la solución imperativa resulta superior.
  8. Integrar en un ciclo completo de desarrollo las prácticas de arquitectura, optimización de JVM, concurrencia segura, análisis funcional y pipeline de calidad CI/CD, seleccionando y defendiendo las decisiones técnicas con evidencia benchmarkeada o trazabilidad de métricas.

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.

  • JDK 21 o superior (soporte de Virtual Threads — Project Loom estable).
  • IDE con soporte Java avanzado: IntelliJ IDEA (recomendado) o Eclipse.
  • Maven 3.9+ o Gradle 8+ instalado y configurado.
  • JMH configurado como dependencia del proyecto de prácticas (artefacto jmh-core + jmh-generator-annprocess).
  • Acceso a un profiler: VisualVM (gratuito, incluido en JDK) o licencia de evaluación de JProfiler / async-profiler compilado para la plataforma del participante.
  • Instancia de SonarQube (Docker aceptado: sonarqube:community) o plugin SpotBugs integrado en la build.
  • Docker Desktop o equivalente para levantar servicios auxiliares durante las prácticas.
  • Cuenta en una plataforma CI/CD con acceso a configurar pipelines (GitHub Actions, GitLab CI o Jenkins en local).
  • Manejo fluido de Java a nivel intermedio-avanzado: genéricos, lambdas, Streams básicos y el API de java.util.concurrent.
  • Experiencia práctica con Maven o Gradle y con al menos un framework de testing (JUnit 5).
  • Comprensión del modelo de memoria de Java (happens-before, volatile, synchronized) y nociones de ciclo de vida de objetos en heap.
  • Familiaridad básica con pipelines CI/CD (GitHub Actions, Jenkins o equivalente).
  • Estos conocimientos se adquieren o consolidan en JAV02 (prerrequisito obligatorio de este curso).