Elegir la colección adecuada comparando coste de acceso, inserción y recorrido en cada estructura.
Transformar datos con la API de streams usando map, filter, reduce y collect encadenados.
Escribir expresiones lambda y referencias a método sobre las interfaces funcionales del JDK.
Lanzar tareas con ExecutorService y recoger resultados mediante Future y CompletableFuture.
Detectar condiciones de carrera y proteger el estado compartido con synchronized y bloqueos explícitos.
Medir el rendimiento de una alternativa con JMH antes de dar por buena una optimización.
Contenido del curso
8 módulos · 40 clases en vídeo · práctica guiada en cada módulo
Módulo 1 · Presentación y método de medida4 clases
Qué se asume y qué se revisa
Preparar el proyecto con Maven y JMH
Cómo se mide en la máquina virtual sin engañarse
Calentamiento, JIT y resultados falsos
Módulo 2 · Framework de colecciones6 clases
List: ArrayList frente a LinkedList
Set: HashSet, LinkedHashSet y TreeSet
Map: HashMap, TreeMap y factor de carga
Deque y colas de prioridad
Colecciones inmutables y vistas
Elegir estructura con coste y memoria en la mano
Módulo 3 · Lambdas e interfaces funcionales5 clases
Sintaxis de lambda y captura de variables
Function, Predicate, Supplier y Consumer
Referencias a método
Optional y el fin del null defensivo
Componer funciones
Módulo 4 · API de streams5 clases
Fuente, operaciones intermedias y terminal
map, filter, flatMap y sorted
Reducciones y collectors
Agrupar y particionar resultados
Streams paralelos: cuándo ayudan y cuándo no
Módulo 5 · Hilos y modelo de memoria5 clases
Crear y coordinar hilos
Visibilidad, volatile y publicación segura
Condiciones de carrera reproducibles
synchronized, ReentrantLock y ReadWriteLock
Interbloqueos: cómo se producen y cómo se ven
Módulo 6 · Concurrencia de alto nivel5 clases
ExecutorService y tipos de pool
Future, CompletableFuture y composición asíncrona
Colecciones concurrentes y atómicas
CountDownLatch, Semaphore y barreras
Hilos virtuales: qué cambian
Módulo 7 · Rendimiento y memoria5 clases
Perfilado con herramientas del JDK
Asignación de objetos y presión sobre el recolector
Cadenas, buffers y copias innecesarias
Micromediciones con JMH bien planteadas
Optimizaciones que no compensan
Módulo 8 · Caso práctico: procesador de registros concurrente5 clases
Lectura por lotes de ficheros de registro
Transformación con streams y agregación
Reparto del trabajo entre hilos
Pruebas de concurrencia y detección de carreras
Entrega: informe con mediciones antes y después
Requisitos
Programación orientada a objetos en Java: clases, interfaces, herencia y genéricos básicos.
JDK 17 o superior instalado, con un entorno de desarrollo y Maven o Gradle.
Haber trabajado con pruebas automatizadas, aunque sea a nivel elemental.
Descripción
En cuanto un programa Java crece, aparecen dos frentes que deciden si funciona o no: la estructura de datos elegida y lo que ocurre cuando varios hilos tocan lo mismo. Son también las dos áreas donde más código se escribe por costumbre, con un ArrayList para todo y un synchronized puesto por si acaso, sin saber qué se está pagando.
El curso recorre el framework de colecciones comparando implementaciones con mediciones reales, introduce la API de streams como forma de expresar transformaciones sin bucles anidados y entra después en concurrencia: hilos, ejecutores, colecciones concurrentes y el modelo de memoria de Java. Cada concepto se acompaña de un programa que falla de manera reproducible y que hay que corregir.
Al terminar se sabe justificar una estructura de datos, escribir código concurrente que no dependa de la suerte y medir antes de optimizar. Es la preparación para trabajar con frameworks de servidor, procesamiento por lotes o servicios de alta carga, donde estas decisiones se toman a diario y sus errores solo se manifiestan en producción.
¿Para quién es este curso?
Desarrolladores Java con proyectos en producción que afrontan problemas de rendimiento o de concurrencia.
Backend developers que preparan servicios de alta carga y necesitan justificar sus decisiones técnicas.
Personas que revisan código Java ajeno y deben detectar accesos inseguros al estado compartido.
Bajo demanda
Curso diseñado con la ficha cerrada. Se produce al confirmarse un grupo o un contrato.
Este sitio web utiliza cookies propias y de terceros para recopilar información con finalidad técnica. No se recaban ni ceden datos de carácter personal sin tu consentimiento. Más información en la política de cookies.