Saltar a la lista de retos
NextPatch Retos

Retos de Java, sin cuenta

Lo que cambia entre versiones de Java, convertido en retos de unos dos minutos. Elige uno y resuélvelo en el navegador: sin registro y sin compilar nada.

559 retos · 11 saltos de versión

Java 11 a fondo

8 lecciones · 23 retos

Inferencia con var var: adiós a repetir el tipo 3 retos
  1. ¿Qué es realmente var en Java 11? Elige la respuesta
  2. Sustituye el tipo explícito por inferencia. Rellena el hueco
  3. ¿Qué imprime este código? ¿Qué imprime?
Inferencia con var Los límites de var 3 retos
  1. ¿Cuál de estas declaraciones COMPILA? Elige la respuesta
  2. ¿Dónde está permitido usar var? Elige la respuesta
  3. Este código no compila. Arréglalo manteniendo var donde sea legal y poniendo tipo explícito donde no lo sea. Arregla el bug
La nueva API de String isBlank, strip y repeat 3 retos
  1. ¿Qué imprime este código? ¿Qué imprime?
  2. ¿Qué diferencia hay entre trim() y strip()? Elige la respuesta
  3. Completa la validación al estilo Java 11: cadena vacía o solo espacios. Rellena el hueco
La nueva API de String lines(): procesa texto línea a línea 3 retos
  1. ¿Qué devuelve String.lines()? Elige la respuesta
  2. ¿Qué imprime este código? ¿Qué imprime?
  3. Ordena las líneas para limpiar un texto: sin líneas en blanco y sin espacios en los extremos. Ordena las líneas
HTTP Client estándar java.net.http: peticiones sin librerías 3 retos
  1. ¿Qué tres clases componen el flujo básico del HTTP Client de Java 11? Elige la respuesta
  2. Completa la petición GET síncrona que lee el cuerpo como String. Rellena el hueco
  3. Ordena las líneas para hacer una petición GET completa. Ordena las líneas
HTTP Client estándar Peticiones asíncronas con sendAsync 2 retos
  1. ¿Qué devuelve client.sendAsync(request, handler)? Elige la respuesta
  2. Completa la cadena asíncrona que imprime solo el cuerpo de la respuesta. Rellena el hueco
Colecciones y ficheros Factorías of(): colecciones inmutables 3 retos
  1. ¿Qué ocurre al ejecutar este código? ¿Qué imprime?
  2. ¿Cuál de estas llamadas FALLA al ejecutarse? Elige la respuesta
  3. Crea el mapa inmutable en una sola línea, al estilo Java 11. Rellena el hueco
Colecciones y ficheros Files.readString y writeString 3 retos
  1. Lee todo el fichero de configuración a un String, al estilo Java 11. Rellena el hueco
  2. Moderniza esta lectura de fichero usando la API de Java 11 (una sola llamada a Files). Arregla el bug
  3. ¿Qué codificación usa Files.readString(path) si no se indica ninguna? Elige la respuesta
Volver al índice

Java 17 → 21: el salto entre LTS

17 lecciones · 51 retos

switch con patrones switch deja de comparar solo constantes 3 retos
  1. ¿Qué tipos admite el selector de un switch a partir de Java 21? Elige la respuesta
  2. Completa la etiqueta case con un patrón de tipo que enlace la variable i. Rellena el hueco
  3. ¿Qué imprime este código? ¿Qué imprime?
switch con patrones case null y guardas when 3 retos
  1. El selector vale null y el switch tiene default pero no tiene case null. ¿Qué ocurre? Elige la respuesta
  2. ¿Qué imprime este código? ¿Qué imprime?
  3. Completa la guarda que restringe el caso a cadenas de más de 10 caracteres. Rellena el hueco
switch con patrones Exhaustividad y dominancia 3 retos
  1. ¿Por qué case CharSequence cs no puede ir antes de case String s? Elige la respuesta
  2. Ordena el switch siguiendo el orden recomendado por el JEP 441: constantes, luego guardas, luego patrones sin guarda. Ordena las líneas
  3. Este switch no compila: uno de los case es inalcanzable. Reordénalo sin cambiar nada más. Arregla el bug
Record patterns Deconstruir un record dentro del patrón 3 retos
  1. Completa el record pattern que extrae los dos componentes de Point (usa x e y). Rellena el hueco
  2. ¿Qué hace exactamente obj instanceof Point(int x, int y)? Elige la respuesta
  3. ¿Qué imprime este código? ¿Qué imprime?
Record patterns Patrones anidados, var y lo que no encaja 3 retos
  1. Un componente vale null al aplicar un record pattern anidado. ¿Qué ocurre? Elige la respuesta
  2. ¿Qué imprime este código? ¿Qué imprime?
  3. Moderniza este código: extrae los componentes con un record pattern en vez de llamar a los accesores. Arregla el bug
Hilos virtuales Hilos virtuales: escala, no velocidad 3 retos
  1. ¿Qué mejoran los hilos virtuales? Elige la respuesta
  2. Completa la factoría que crea un hilo virtual nuevo por cada tarea enviada. Rellena el hueco
  3. Desde el punto de vista de los tipos, ¿qué es un hilo virtual? Elige la respuesta
Hilos virtuales Crearlos está bien; agruparlos, no 3 retos
  1. Completa el uso de la API Thread.Builder para crear un hilo virtual con nombre. Rellena el hueco
  2. Quieres limitar a 20 las llamadas concurrentes a un servicio externo usando hilos virtuales. ¿Cómo lo haces? Elige la respuesta
  3. Ordena el lanzamiento de un hilo virtual que respeta el límite de un semáforo. Ordena las líneas
Hilos virtuales Pinning: cuando el hilo virtual se queda pegado 3 retos
  1. ¿Cuál de estas situaciones ancla (pinning) un hilo virtual a su portador en Java 21? Elige la respuesta
  2. ¿Qué imprime este código? ¿Qué imprime?
  3. Este método ancla el hilo virtual mientras hace E/S. Sustituye el synchronized por un ReentrantLock con try/finally. Arregla el bug
Colecciones secuenciadas getFirst, getLast y reversed 3 retos
  1. Sustituye los accesos por índice por la API secuenciada de Java 21. Rellena el hueco
  2. ¿Cómo se llama la interfaz que Java 21 introduce para las colecciones con orden de encuentro definido? Elige la respuesta
  3. ¿Qué imprime este código? ¿Qué imprime?
Colecciones secuenciadas SequencedMap y los límites de la familia 3 retos
  1. ¿Qué ocurre al llamar a addFirst(x) sobre un TreeSet? Elige la respuesta
  2. ¿Qué imprime este código? ¿Qué imprime?
  3. Sustituye el bucle por la API secuenciada de Java 21 para obtener el último elemento de nombres. Arregla el bug
UTF-8 por defecto UTF-8 deja de depender de la máquina 3 retos
  1. ¿Cuál es el charset por defecto de las APIs estándar desde Java 18? Elige la respuesta
  2. Haz explícito el charset en la decodificación, sin depender del valor por defecto. Rellena el hueco
  3. Este código escribe en ISO-8859-1 pero lo lee mal: Files.readString sin charset es siempre UTF-8, aunque cambies el… Arregla el bug
UTF-8 por defecto file.encoding=COMPAT y native.encoding 3 retos
  1. ¿Qué hace -Dfile.encoding=COMPAT? Elige la respuesta
  2. Lee la propiedad que indica qué charset habría elegido el algoritmo del JDK. Rellena el hueco
  3. Ordena los pasos que recomienda el JEP 400 para migrar sin sustos de codificación. Ordena las líneas
Lo que sigue en preview String templates: interpolación con validación (preview) 3 retos
  1. ¿Cuál es el estado de las String Templates en Java 21? Elige la respuesta
  2. Completa el procesador de plantillas estándar del JDK. Rellena el hueco
  3. Compilado y ejecutado con --enable-preview, ¿qué imprime? ¿Qué imprime?
Lo que sigue en preview Concurrencia estructurada y scoped values (preview) 3 retos
  1. ¿Qué garantiza StructuredTaskScope.ShutdownOnFailure? Elige la respuesta
  2. Ordena el uso de StructuredTaskScope con política de cancelación al primer fallo. Ordena las líneas
  3. Completa la declaración y el enlace de un ScopedValue. Rellena el hueco
Lo que sigue en preview El guion bajo y un main sin ceremonia (preview) 3 retos
  1. ¿Dónde NO se puede usar el guion bajo _ como nombre (JEP 443)? Elige la respuesta
  2. Elide los componentes que no usas con la sintaxis de patrones sin nombre. Rellena el hueco
  3. La variable de la excepción no se usa. Reescríbela con la sintaxis de variables sin nombre de Java 21 (preview). Arregla el bug
Qué más trae el salto Debajo del capó: ZGC generacional, KEM y jwebserver 3 retos
  1. ¿Cómo se activa el ZGC generacional en Java 21? Elige la respuesta
  2. Completa el comando del JDK que sirve un directorio de ficheros estáticos. Rellena el hueco
  3. ¿Qué peticiones atiende jwebserver? Elige la respuesta
Qué más trae el salto Avisos y deprecaciones que sí te afectan 3 retos
  1. ¿Cuál de estos NO tiene nada que ver con la finalización deprecada por el JEP 421? Elige la respuesta
  2. Completa la opción que desactiva la finalización para comprobar si tu app depende de ella. Rellena el hueco
  3. Ordena la migración de finalize() a AutoCloseable. Ordena las líneas
Volver al índice

Java 21 → 23: pocas finales, mucho preview

20 lecciones · 60 retos

Variables y patrones sin nombre El guion bajo para lo que no vas a usar 3 retos
  1. ¿En qué versión quedó final el guion bajo como variable sin nombre? Elige la respuesta
  2. Este recurso solo se abre para que se cierre solo: su nombre sobra. Complétalo. Rellena el hueco
  3. Este bucle no compila. Una variable sin nombre no se puede leer: arréglalo dándole nombre. Arregla el bug
Variables y patrones sin nombre El guion bajo dentro de los patrones 3 retos
  1. ¿Qué diferencia hay entre case Box(RedBall _) y case Box(_)? Elige la respuesta
  2. Solo te interesan las coordenadas: elide el componente de color por completo. Rellena el hueco
  3. ¿Qué imprime este código en Java 22 o posterior? ¿Qué imprime?
Variables y patrones sin nombre Un case, varios patrones 3 retos
  1. Un case con varios patrones separados por comas. ¿Qué prohíbe el compilador? Elige la respuesta
  2. Añade la guarda que gobierna el case entero. Rellena el hueco
  3. Reconstruye el switch compactando en una sola etiqueta los dos casos que hacen lo mismo. Ordena las líneas
Memoria y funciones nativas Memoria fuera del heap, con API estándar 3 retos
  1. ¿Dónde vive la Foreign Function & Memory API y desde cuándo es final? Elige la respuesta
  2. Abre una arena de vida determinista con try-with-resources. Rellena el hueco
  3. Ordena el bloque que reserva memoria fuera del heap, escribe un int y lo vuelve a leer. Ordena las líneas
Memoria y funciones nativas Arenas: quién decide cuándo se libera 3 retos
  1. ¿Qué arena da vida acotada, determinista y acceso desde un solo hilo? Elige la respuesta
  2. ¿Qué imprime este fragmento? ¿Qué imprime?
  3. Esta arena confinada no se cierra nunca: la memoria se queda reservada. Arréglalo. Arregla el bug
Memoria y funciones nativas Llamar a una función nativa sin escribir C 3 retos
  1. ¿Qué te devuelve linker.downcallHandle(...)? Elige la respuesta
  2. Evita el aviso de la JVM al usar operaciones restringidas desde el classpath. Rellena el hueco
  3. Ordena los cuatro pasos para llamar a una función nativa. Ordena las líneas
Ejecutar fuentes sin compilar java Prog.java deja de limitarse a un fichero 3 retos
  1. En el modo fuente de Java 22, ¿qué ficheros .java compila el lanzador? Elige la respuesta
  2. Los dos ficheros están en el mismo directorio. ¿Qué imprime java Prog.java? ¿Qué imprime?
  3. Pon en el classpath todos los JAR del directorio actual sin escribirlos uno a uno. Rellena el hueco
Ejecutar fuentes sin compilar Los límites del modo fuente 3 retos
  1. ¿Qué ocurre si dos ficheros del mismo programa declaran la clase Aux? Elige la respuesta
  2. ¿Qué imprime java Prog.java Helper.java? ¿Qué imprime?
  3. Este es Helper.java. La clase Aux ya está declarada en Prog.java, así que el programa falla por duplicado. Arregla… Arregla el bug
Javadoc en Markdown Comentarios /// en vez de HTML 3 retos
  1. ¿Cómo se marca un comentario de documentación escrito en Markdown? Elige la respuesta
  2. Convierte esta línea en un comentario de documentación Markdown. Rellena el hueco
  3. Reconstruye el comentario Markdown de balance(). Ordena las líneas
Javadoc en Markdown Enlaces, y por qué tres barras 3 retos
  1. ¿Por qué JEP 467 usa /// en vez de reutilizar / /? Elige la respuesta
  2. Enlaza a equals(Object) mostrando el texto "equals". Rellena el hueco
  3. Ordena este comentario Markdown con etiquetas de bloque. Ordena las líneas
sun.misc.Unsafe en cuenta atrás 79 de 87 métodos, deprecados para eliminación 3 retos
  1. ¿Qué depreca exactamente el JEP 471 en Java 23? Elige la respuesta
  2. Completa los dos sustitutos estándar que señala el JEP. Rellena el hueco
  3. ¿Qué es lo que el JEP 471 no hace en Java 23? Elige la respuesta
sun.misc.Unsafe en cuenta atrás Audita tus dependencias antes de que duela 3 retos
  1. ¿Qué valor trae por defecto --sun-misc-unsafe-memory-access en Java 23? Elige la respuesta
  2. Quieres que la aplicación falle en cuanto alguien use un método de acceso a memoria de Unsafe. Rellena el hueco
  3. Ordena las fases del plan de retirada que describe el JEP 471. Ordena las líneas
Preview: las reglas del juego Preview no es beta: es impermanente 3 retos
  1. Según JEP 12, ¿qué es una preview feature? Elige la respuesta
  2. Compila un fichero que usa una feature en preview de Java 23. Rellena el hueco
  3. Estás en un JDK 23. ¿Qué pasa al ejecutar esto? ¿Qué imprime?
Preview: las reglas del juego String Templates: cuando una preview se retira 3 retos
  1. ¿Qué pasó con String Templates en Java 23? Elige la respuesta
  2. Interpola sin String Templates, con API permanente. Rellena el hueco
  3. Compilas esto con un JDK 23, con o sin --enable-preview. ¿Qué ocurre? ¿Qué imprime?
Lo que sigue en preview en 23 import module: importar un módulo entero (preview) 3 retos
  1. Sustituye la lista de imports por una importación de módulo. Rellena el hueco
  2. ¿Qué trae consigo import module java.sql;? Elige la respuesta
  3. Sustituye los cuatro imports por una única importación del módulo java.base (preview de Java 23). Arregla el bug
Lo que sigue en preview en 23 Stream gatherers: operaciones intermedias a medida (preview) 3 retos
  1. ¿Qué devuelve este pipeline en Java 23 con --enable-preview? ¿Qué imprime?
  2. Aplica un gatherer de ventana deslizante dentro del pipeline. Rellena el hueco
  3. ¿A qué equivale source.gather(a).gather(b).gather(c).collect(...)? Elige la respuesta
Lo que sigue en preview en 23 El resto del catálogo inestable de Java 23 3 retos
  1. De los 12 JEPs de Java 23, ¿cuáles son los finales? Elige la respuesta
  2. Reconstruye el constructor con prólogo del JEP 482 (second preview en Java 23). Ordena las líneas
  3. ¿Cuál es el estado del Vector API en Java 23? Elige la respuesta
Qué más trae el salto La JVM: ZGC generacional y region pinning 3 retos
  1. Arranca la aplicación con ZGC en Java 23, sin opciones extra. Rellena el hueco
  2. ¿Qué pasa al arrancar así una JVM 23? ¿Qué imprime?
  3. ¿Qué resuelve el region pinning de G1 (JEP 423, Java 22)? Elige la respuesta
Qué más trae el salto Dos cambios que te pueden romper el build 3 retos
  1. Actualizas a Java 23 y tu build con Lombok deja de generar los getters. ¿Por qué? Elige la respuesta
  2. Conserva el comportamiento anterior de javac sin tocar el resto del build. Rellena el hueco
  3. Este binario se compiló con Java 21 y se ejecuta en un JDK 23. ¿Qué ocurre en la última línea? ¿Qué imprime?
Qué más trae el salto API nueva pequeña que sí puedes usar hoy 3 retos
  1. Calcula la duración transcurrida con el método que Java 23 añade a Instant. Rellena el hueco
  2. ¿Qué aporta Instant.until(Instant) frente a Duration.between(a, b)? Elige la respuesta
  3. Reescribe el cálculo con el método que Java 23 añade a Instant. Arregla el bug
Volver al índice

Java 23 → 25: la LTS que cierra el catálogo

25 lecciones · 75 retos

Streams a tu medida gather: el punto de extensión de Stream 3 retos
  1. ¿Qué añade Stream::gather a la API de streams? Elige la respuesta
  2. Completa la llamada a la nueva operación intermedia de Java 24. Rellena el hueco
  3. Ordena el pipeline que produce las dos primeras ventanas de tres elementos de un stream infinito. Ordena las líneas
Streams a tu medida El catálogo que ya viene de fábrica 3 retos
  1. ¿Qué contiene la lista resultante? ¿Qué imprime?
  2. Completa el gatherer que emite cada resultado intermedio de la acumulación. Rellena el hueco
  3. Sobre el stream [1, 2, 3, 4], ¿qué producen windowFixed(3) y windowSliding(3)? Elige la respuesta
Streams a tu medida mapConcurrent: llamadas lentas en paralelo 3 retos
  1. ¿Qué hilos usa Gatherers.mapConcurrent? Elige la respuesta
  2. Paraleliza la llamada de red sin salir del pipeline, con ocho peticiones como mucho a la vez. Rellena el hueco
  3. Este pipeline hace 50 llamadas de red en serie. Reescríbelo para que haga hasta 8 a la vez con el gatherer de Java 24. Arregla el bug
Hilos virtuales sin pinning synchronized deja de clavar el hilo virtual 3 retos
  1. En Java 24, un hilo virtual se bloquea dentro de un método synchronized. ¿Qué ocurre? Elige la respuesta
  2. Además de la entrada a un bloque synchronized, ¿qué otra operación deja de fijar el hilo virtual? Elige la respuesta
  3. En Java 21 este contador se reescribió con ReentrantLock solo para esquivar el pinning. Ahora compilas con 25… Arregla el bug
Hilos virtuales sin pinning Lo que queda por vigilar 3 retos
  1. Arrancas una aplicación en un JDK 25 con la propiedad de traza de Java 21. ¿Qué pasa? ¿Qué imprime?
  2. Tras subir a Java 25 sigues viendo eventos jdk.VirtualThreadPinned. ¿Dónde miras primero? Elige la respuesta
  3. Busca en la grabación de JFR el evento que delata el pinning que queda. Rellena el hueco
Scoped Values Del ThreadLocal al ScopedValue 3 retos
  1. ¿Cuál es la diferencia de fondo entre un ScopedValue y un ThreadLocal? Elige la respuesta
  2. Declara la clave del scoped value. Rellena el hueco
  3. Ordena el uso completo de un scoped value: declaración, vinculación y cierre del bloque. Ordena las líneas
Scoped Values where, run y call 3 retos
  1. ¿Qué devuelve ScopedValue.where(CLAVE, valor)? Elige la respuesta
  2. Ejecuta la operación con la vinculación activa y recoge el valor que devuelve. Rellena el hueco
  3. El get() de la última línea se ejecuta ya fuera del run. ¿Qué ocurre? ¿Qué imprime?
Scoped Values Rebinding: cambiar el valor un rato 3 retos
  1. Quieres que una llamada concreta vea otro valor en el mismo ScopedValue. ¿Cómo se hace? Elige la respuesta
  2. ¿Qué imprime este fragmento? ¿Qué imprime?
  3. Alguien intenta usar el scoped value como si fuera un ThreadLocal. Corrige la línea para que plugin.render() vea… Arregla el bug
Programas de un solo fichero main sin public, sin static y sin String[] 3 retos
  1. La clase declara los dos main. ¿Qué imprime java Hello.java en un JDK 25? ¿Qué imprime?
  2. Escribe el punto de entrada más corto que acepta Java 25. Rellena el hueco
  3. El lanzador elige un main de instancia. ¿Qué necesita la clase para que funcione? Elige la respuesta
Programas de un solo fichero Ficheros fuente compactos 3 retos
  1. ¿Qué es un fichero fuente compacto en Java 25? Elige la respuesta
  2. En un fichero compacto usas List.of(...) sin escribir ningún import. ¿Por qué compila? Elige la respuesta
  3. Convierte este programa en un fichero fuente compacto: fuera la clase y fuera la ceremonia del main. Arregla el bug
Programas de un solo fichero java.lang.IO: cinco métodos y ya 3 retos
  1. Imprime por consola con la clase nueva de java.lang. Rellena el hueco
  2. ¿Por qué hay que escribir IO.println(...) y no println(...) a secas? Elige la respuesta
  3. Ordena el programa interactivo más corto que se puede escribir en Java 25. Ordena las líneas
Importar un módulo entero import module: una línea, muchos paquetes 3 retos
  1. Sustituye la lista de imports por la declaración de Java 25 que trae el módulo entero. Rellena el hueco
  2. Escribes import module java.sql;. Además de java.sql., ¿qué más queda importado? Elige la respuesta
  3. El proyecto no tiene module-info.java y compila en el classpath con Java 25. ¿Qué ocurre? ¿Qué imprime?
Importar un módulo entero Cuando el nombre simple se vuelve ambiguo 3 retos
  1. ¿Qué pasa al compilar este fichero? ¿Qué imprime?
  2. Deshaz la ambigüedad para que Date sea la de JDBC. Rellena el hueco
  3. Además de importar el tipo concreto, ¿qué otra forma hay de deshacer una ambigüedad? Elige la respuesta
Constructores flexibles Validar antes de super() 3 retos
  1. ¿Qué permite exactamente el JEP 513? Elige la respuesta
  2. Ordena el constructor con prólogo, invocación explícita y epílogo. Ordena las líneas
  3. Quita el método auxiliar y valida en el prólogo, justo antes de super(...). Arregla el bug
Constructores flexibles Qué puedes y qué no en el prólogo 3 retos
  1. La línea marcada está antes de super(). ¿Qué dice el compilador? ¿Qué imprime?
  2. ¿Qué SÍ puede hacer el prólogo con la instancia que se está construyendo? Elige la respuesta
  3. ¿Dónde se permite return; dentro de un constructor de Java 25? Elige la respuesta
Bytecode sin ASM java.lang.classfile: bytecode con API estándar 3 retos
  1. ¿Qué problema resuelve estandarizar la Class-File API? Elige la respuesta
  2. Lee un fichero de clase en memoria con la API estándar. Rellena el hueco
  3. ¿En qué estado está la Class-File API en Java 25? Elige la respuesta
Bytecode sin ASM Transformar clases sin escribir el bucle 3 retos
  1. Aplica una transformación a la clase entera sin escribir el bucle. Rellena el hueco
  2. ¿Qué gana la API porque los transforms sean interfaces funcionales? Elige la respuesta
  3. Ordena la transformación mínima que copia una clase elemento a elemento. Ordena las líneas
Integridad por defecto El Security Manager ya no se puede activar 3 retos
  1. Tu script de arranque lleva años con esta línea. Lo ejecutas en un JDK 25. ¿Qué pasa? ¿Qué imprime?
  2. ¿Y si el código llama a System.setSecurityManager(new MiSecurityManager()) en tiempo de ejecución? Elige la respuesta
  3. ¿Cuál de estos arranques es válido en Java 25? Elige la respuesta
Integridad por defecto JNI y FFM: avisos hoy, excepciones mañana 3 retos
  1. Silencia el aviso de acceso nativo para el código que corre en el classpath. Rellena el hueco
  2. Ves un WARNING: A restricted method in java.lang.System has been called. ¿Qué significa? Elige la respuesta
  3. ¿Qué hace --illegal-native-access=deny y cuál es el valor por defecto en Java 24? Elige la respuesta
Integridad por defecto sun.misc.Unsafe: del aviso a la excepción 3 retos
  1. Una dependencia tuya llama cien veces a métodos de acceso a memoria de sun.misc.Unsafe. ¿Qué ves en la consola de un… ¿Qué imprime?
  2. Comprueba hoy si tu aplicación sobrevivirá a la fase en la que estos métodos lancen excepción. Rellena el hueco
  3. ¿Cuáles son los sustitutos estándar de los métodos de acceso a memoria de sun.misc.Unsafe? Elige la respuesta
Lo que sigue en preview en 25 Concurrencia estructurada: quinta preview 3 retos
  1. ¿En qué estado está StructuredTaskScope en Java 25? Elige la respuesta
  2. Abre un scope con la política por defecto en la API de Java 25. Rellena el hueco
  3. ¿Qué cambió en la API respecto de la preview de Java 24? Elige la respuesta
Lo que sigue en preview en 25 Stable values, primitivos en patrones y el resto 3 retos
  1. Crea el hueco vacío que la JVM tratará como constante en cuanto se rellene. Rellena el hueco
  2. ¿Qué aporta un StableValue frente a un campo final? Elige la respuesta
  3. ¿Cuál de estas features no es estable en Java 25? Elige la respuesta
Qué más trae el salto Arrancar antes con la caché AOT 3 retos
  1. Crea la caché AOT en un solo paso, como permite Java 25. Rellena el hueco
  2. Ordena el flujo de dos pasos del JEP 483, seguido de la ejecución de producción. Ordena las líneas
  3. ¿Qué añade el JEP 515 (AOT Method Profiling) sobre la caché del JEP 483? Elige la respuesta
Qué más trae el salto Menos memoria por objeto, y una plataforma menos 3 retos
  1. Activa las cabeceras de objeto compactas en Java 25. Rellena el hueco
  2. Arrancas así una JVM 25. ¿Qué recolector acaba usando y qué imprime? ¿Qué imprime?
  3. Este arranque viene de un JDK 24. Déjalo como debe ir en Java 25, sin opciones de más. Arregla el bug
Qué más trae el salto Criptografía lista para el futuro 3 retos
  1. ¿Para qué sirve ML-KEM (JEP 496, Java 24)? Elige la respuesta
  2. Obtén la única función de derivación de claves que incluye la KDF API de Java 25. Rellena el hueco
  3. Quieres volcar una clave a texto PEM con PEMEncoder. ¿Puedes hacerlo en producción con Java 25? Elige la respuesta
Volver al índice

Java 11 → 17: seis versiones de lenguaje

22 lecciones · 66 retos

switch como expresión Etiquetas con flecha: se acabó el break que se olvida 3 retos
  1. ¿Qué cambia una etiqueta case L -> respecto a case L :? Elige la respuesta
  2. Agrupa las tres constantes en una sola etiqueta con la forma nueva. Rellena el hueco
  3. ¿Qué imprime este código? ¿Qué imprime?
switch como expresión El switch que devuelve un valor, y yield 3 retos
  1. Completa la sentencia que produce el valor de la expresión desde un bloque. Rellena el hueco
  2. Haces una expresión switch sobre un enum y cubres todas sus constantes. ¿Puedes omitir el default? Elige la respuesta
  3. Ordena la expresión switch que calcula el número de letras del día. Ordena las líneas
Text blocks Tres comillas y una cadena de dos dimensiones 3 retos
  1. ¿Qué tiene que venir detrás del """ de apertura de un text block? Elige la respuesta
  2. ¿Qué imprime este código? ¿Qué imprime?
  3. Completa el delimitador que abre el text block. Rellena el hueco
Text blocks Quién decide el margen: el delimitador de cierre 3 retos
  1. ¿Quién decide cuánta sangría se recorta de un text block? Elige la respuesta
  2. Protege el espacio final de la línea para que sobreviva al recorte. Rellena el hueco
  3. ¿Qué imprime este código? ¿Qué imprime?
Records record: la cabecera es la API 3 retos
  1. ¿Cómo se llama el accesor del componente x de record Point(int x, int y)? Elige la respuesta
  2. ¿Qué imprime este código? ¿Qué imprime?
  3. Declara el portador de datos con la forma nueva de Java 16. Rellena el hueco
Records El constructor compacto: validar y normalizar 3 retos
  1. ¿Qué ocurre al final de un constructor canónico compacto? Elige la respuesta
  2. Este record no compila: dentro de un constructor compacto no se puede asignar a los campos. Normaliza reasignando los… Arregla el bug
  3. ¿Qué imprime este código? ¿Qué imprime?
Records Lo que un record no puede hacer 3 retos
  1. ¿Cuál de estas cosas NO puede hacer un record? Elige la respuesta
  2. ¿Cuál es la superclase de un record? Elige la respuesta
  3. Este record arrastra dos errores de compilación a la vez. Déjalo en su forma mínima: record Point(int x, int y) { }. Arregla el bug
Pattern matching con instanceof El instanceof que castea por ti 3 retos
  1. Sustituye el cast por un patrón de tipo que enlace la variable s. Rellena el hueco
  2. Tienes String s = ...; y escribes if (s instanceof CharSequence cs) { }. ¿Qué dice el compilador de Java 16? Elige la respuesta
  3. ¿Qué imprime este código? ¿Qué imprime?
Pattern matching con instanceof La variable vive donde el patrón encajó seguro 3 retos
  1. ¿Por qué if (obj instanceof String s || s.length() > 5) no compila? Elige la respuesta
  2. ¿Qué imprime este código? ¿Qué imprime?
  3. Moderniza este equals: usa un patrón de tipo y déjalo en una sola expresión. Arregla el bug
Clases sealed sealed y permits: quién puede heredar 3 retos
  1. Completa la declaración que cierra la jerarquía y lista sus herederos. Rellena el hueco
  2. ¿Dónde tiene que vivir una subclase permitida? Elige la respuesta
  3. Ordena la jerarquía sellada con sus dos únicos implementadores. Ordena las líneas
Clases sealed final, sealed o non-sealed: elige exactamente uno 3 retos
  1. ¿Qué modificador tiene que llevar una subclase permitida? Elige la respuesta
  2. Reabre esta rama de la jerarquía para que la extienda cualquiera. Rellena el hueco
  3. Esta jerarquía no compila: las subclases permitidas no dicen qué hacen con el sello. Márcalas como final. Arregla el bug
NullPointerException que ayudan El mensaje por fin dice qué variable valía null 3 retos
  1. ¿De qué dos mitades se compone el mensaje de un NullPointerException con detalle? Elige la respuesta
  2. La línea siguiente lanza un NPE porque a.b vale null. ¿Qué mensaje imprime la JVM? ¿Qué imprime?
  3. ¿Qué NullPointerException NO llevan mensaje de detalle? Elige la respuesta
NullPointerException que ayudan Apagado en 14, encendido por defecto desde 15 3 retos
  1. ¿En qué versión pasó a estar activado por defecto el mensaje de detalle del NPE? Elige la respuesta
  2. Activa a mano el mensaje de detalle en un JDK 14. Rellena el hueco
  3. Ordena las tres líneas del NullPointerException con detalle, tal como las imprime la JVM. Ordena las líneas
La API que heredas Stream.toList() y mapMulti 3 retos
  1. Cierra el pipeline con la operación terminal que añadió Java 16. Rellena el hueco
  2. ¿En qué se diferencia Stream.toList() de Collectors.toUnmodifiableList()? Elige la respuesta
  3. ¿Qué ocurre al ejecutar este código? ¿Qué imprime?
La API que heredas Los métodos pequeños que llegaron en 12 y 15 3 retos
  1. Sustituye String.format por su forma de instancia, la de Java 15. Rellena el hueco
  2. Ordena el colector que cuenta y suma en un solo recorrido. Ordena las líneas
  3. ¿Qué devuelve Files.mismatch(p1, p2) cuando los dos ficheros son idénticos? Elige la respuesta
La API que heredas HexFormat y los generadores aleatorios de Java 17 3 retos
  1. Convierte los bytes a hexadecimal con la clase que añadió Java 17. Rellena el hueco
  2. Tras el JEP 356, ¿cuál de estos NO implementa RandomGenerator? Elige la respuesta
  3. ¿Qué añade la interfaz SplittableRandomGenerator? Elige la respuesta
Los internos del JDK, cerrados illegal-access: de permit a deny y de deny a nada 3 retos
  1. ¿Cuál era el valor por defecto de --illegal-access de JDK 9 a JDK 15? Elige la respuesta
  2. ¿Qué hace --illegal-access=permit en Java 17? Elige la respuesta
  3. Completa el módulo que, tras el JEP 403, sigue exportando y abriendo sun.misc y sun.reflect. Rellena el hueco
Los internos del JDK, cerrados Cómo sobrevivir: --add-opens y --add-exports 3 retos
  1. ¿En qué se diferencian --add-exports y --add-opens? Elige la respuesta
  2. Abre java.base/java.lang para todo lo que esté en el classpath. Rellena el hueco
  3. Este arranque ya no abre nada en Java 17. Sustituye la opción obsoleta por la apertura concreta de java.base/java.lang… Arregla el bug
Lo que sigue en preview en 17 Pattern matching en switch (preview, JEP 406) 3 retos
  1. ¿Cuál es el estado del pattern matching en switch en Java 17? Elige la respuesta
  2. ¿Cómo se escribía una guarda en la preview de Java 17 y en qué acabó? Elige la respuesta
  3. Completa la etiqueta que captura el null sin lanzar excepción. Rellena el hueco
Lo que sigue en preview en 17 Dos API en incubadora: memoria foránea y vectores 3 retos
  1. ¿En qué se diferencia una API en incubadora de una feature en preview? Elige la respuesta
  2. Compila un fuente que usa la API de memoria foránea de Java 17. Rellena el hueco
  3. ¿En qué versión y en qué paquete quedó final la Foreign Function & Memory API? Elige la respuesta
Qué más trae el salto GC de producto, jpackage y sockets locales 3 retos
  1. ¿Qué cambió para ZGC y Shenandoah en Java 15? Elige la respuesta
  2. Empaqueta la aplicación en un instalador nativo con la herramienta de Java 16. Rellena el hueco
  3. ¿Qué te dan los Unix-domain socket channels del JEP 380? Elige la respuesta
Qué más trae el salto Deprecaciones y eliminaciones que rompen el build 3 retos
  1. Llamas a new ScriptEngineManager().getEngineByName("js") en Java 17. ¿Qué obtienes? Elige la respuesta
  2. ¿Cuál es el estado del Security Manager en Java 17? Elige la respuesta
  3. Este método arrastra dos avisos: un modificador redundante y un constructor deprecado para eliminación. Déjalo con un… Arregla el bug
Volver al índice

Java 21 → 25: de una LTS a la siguiente

25 lecciones · 75 retos

Menos ruido en el código Variables sin nombre: el guion bajo 3 retos
  1. ¿Dónde puedes escribir _ como variable sin nombre en Java 22? Elige la respuesta
  2. El recurso adquirido no se usa. Déjalo sin nombre. Rellena el hueco
  3. La variable del bucle no se usa nunca. Reescribe la cabecera del for mejorado para que no tenga nombre, y no cambies… Arregla el bug
Menos ruido en el código Patrones sin nombre y varios patrones por case 3 retos
  1. ¿Por qué no compila case Box(RedBall _) when x == 0, Box(BlueBall _) when x == 42 ->? Elige la respuesta
  2. Extrae solo el color. Omite el componente Point con el patrón que no vincula nada. Rellena el hueco
  3. ¿Qué devuelve este switch? ¿Qué imprime?
Menos ruido en el código Constructores flexibles 3 retos
  1. ¿Qué puede hacer el prólogo de un constructor en Java 25? Elige la respuesta
  2. Ordena el constructor para que falle rápido y asigne officeID antes de que se ejecute el constructor de la superclase. Ordena las líneas
  3. Java 25 ya no necesita el método auxiliar estático. Valida age en el prólogo, llama después a super(name, age) y borra… Arregla el bug
Streams a tu medida gather: operaciones intermedias que escribes tú 3 retos
  1. ¿Qué es Stream::gather para las operaciones intermedias? Elige la respuesta
  2. De las cuatro funciones de un Gatherer, ¿cuál es obligatoria? Elige la respuesta
  3. Completa la tubería con la operación intermedia que llegó en Java 24. Rellena el hueco
Streams a tu medida Los cinco gatherers integrados 3 retos
  1. ¿Cuántas ventanas deslizantes salen de ocho elementos? ¿Qué imprime?
  2. ¿Qué hace Gatherers.mapConcurrent(4, mapper)? Elige la respuesta
  3. Necesitas una reducción ordenada que emita un solo elemento al final. ¿Qué gatherer? Rellena el hueco
Concurrencia: hilos y contexto synchronized deja de clavar los hilos virtuales 3 retos
  1. ¿Qué cambió para synchronized y los hilos virtuales en Java 24? Elige la respuesta
  2. Tu script de arranque sigue pasando -Djdk.tracePinnedThreads=full. ¿Qué pasa en Java 24? Elige la respuesta
  3. Los marcos nativos todavía clavan el hilo virtual: un método native o la FFM API llamando de vuelta a código Java que… Rellena el hueco
Concurrencia: hilos y contexto Scoped values en vez de ThreadLocal 3 retos
  1. ¿Qué tres defectos de ThreadLocal vienen a arreglar los scoped values? Elige la respuesta
  2. Declara el scoped value que va a compartir el framework. Rellena el hueco
  3. Se llama a foo(). ¿Qué imprime el programa? ¿Qué imprime?
Concurrencia: hilos y contexto Leer, reenlazar y heredar un scoped value 3 retos
  1. ¿Qué hace CONTEXT.get() fuera de cualquier run? Elige la respuesta
  2. Monta la llamada que enlaza dos scoped values antes de ceder el control a la aplicación. Ordena las líneas
  3. get() lanza cuando el scoped value no está enlazado, así que la comprobación de null no llega a ejecutarse. Sustituye… Arregla el bug
Ejecutar Java sin ceremonia java Prog.java con más de un fichero 3 retos
  1. Prog se refiere a Helper. ¿Qué hace java Prog.java en Java 22? Elige la respuesta
  2. En el directorio hay un OldProg.java que ya no compila. ¿Qué pasa al ejecutar java Prog.java? Elige la respuesta
  3. Prog.java y Helper.java, uno al lado del otro y sin herramienta de build. Ejecuta el programa sin compilarlo antes. Rellena el hueco
Ejecutar Java sin ceremonia Ficheros fuente compactos y main de instancia 3 retos
  1. ¿Qué main elige el launcher en Java 25? Elige la respuesta
  2. ¿Qué es cierto de la clase que declara implícitamente un fichero fuente compacto? Elige la respuesta
  3. Conviértelo en un fichero fuente compacto que imprima con la nueva clase java.lang.IO. Deja solo el método main. Arregla el bug
Ejecutar Java sin ceremonia java.lang.IO y los imports automáticos 3 retos
  1. ¿Dónde puedes llamar a IO.println(...) en Java 25? Elige la respuesta
  2. ¿Por qué hay que escribir el cualificador IO.? Elige la respuesta
  3. Completa el programa interactivo con el método que imprime un prompt y lee una línea. Rellena el hueco
Importar un módulo entero import module 3 retos
  1. ¿Qué entra exactamente con import module java.sql;? Elige la respuesta
  2. ¿Puedes escribir import module en una clase que no forma parte de ningún módulo? Elige la respuesta
  3. Sustituye cinco imports bajo demanda por un único import de módulo. Rellena el hueco
Importar un módulo entero Cuando el nombre simple se vuelve ambiguo 3 retos
  1. Date es ambiguo entre import module java.base e import module java.sql. ¿Cómo lo resuelves? Elige la respuesta
  2. Agrupa los imports del menos específico al más específico, como recomienda el JEP 511. Ordena las líneas
  3. ¿Qué import oculta a cuál? Elige la respuesta
Integridad por defecto El Security Manager queda deshabilitado para siempre 3 retos
  1. ¿Qué pasa en Java 25 con java -Djava.security.manager=allow -jar app.jar? Elige la respuesta
  2. ¿Y qué hace System.setSecurityManager(sm)? Elige la respuesta
  3. Completa el único valor de la propiedad que Java 25 acepta. Rellena el hueco
Integridad por defecto El acceso nativo hay que habilitarlo 3 retos
  1. ¿Qué operaciones restringe el JEP 472? Elige la respuesta
  2. Habilita el acceso nativo para todo lo que hay en el classpath. Rellena el hueco
  3. Quieres saber hoy qué se va a romper cuando deny sea el valor por defecto. ¿Qué ejecutas? Elige la respuesta
Integridad por defecto sun.misc.Unsafe en cuenta atrás 3 retos
  1. ¿En qué estado están los métodos de acceso a memoria de sun.misc.Unsafe en Java 25? Elige la respuesta
  2. ¿Qué API estándar los sustituyen? Elige la respuesta
  3. Ensaya la versión que lanzará excepción: falla en el primer uso. Rellena el hueco
Las API que sustituyen librerías Class-File API: bytecode sin ASM 3 retos
  1. ¿Por qué trae el JDK una Class-File API estándar? Elige la respuesta
  2. Lee un fichero de clase y conviértelo en un modelo. Rellena el hueco
  3. ¿Qué te ahorran transformClass, transformMethod y transformCode? Elige la respuesta
Las API que sustituyen librerías FFM API: memoria y funciones nativas sin JNI 3 retos
  1. ¿Qué te da una Arena que un ByteBuffer directo no? Elige la respuesta
  2. Monta el method handle que llama a la función de C strlen. Ordena las líneas
  3. Migras de JNI a la FFM API en Java 25. ¿Qué tienes que seguir añadiendo al arranque? Elige la respuesta
Arrancar y calentar más rápido La caché AOT 3 retos
  1. ¿Qué guarda una caché AOT? Elige la respuesta
  2. Haz la training run y crea la caché en un solo comando. Rellena el hueco
  3. En producción falta el fichero app.aot. ¿Qué pasa? Elige la respuesta
Arrancar y calentar más rápido Perfiles de calentamiento y cabeceras compactas 3 retos
  1. ¿Qué añade el JEP 515 a la caché AOT? Elige la respuesta
  2. ¿Los perfiles cacheados dejan de perfilar en producción? Elige la respuesta
  3. Las cabeceras de objeto compactas son feature de producto en Java 25. Quita la opción que ya no hace falta. Arregla el bug
Lo retirado y lo que sigue preview Los preview que viste en Java 21, cuatro años después 3 retos
  1. ¿Qué fue de las string templates, la preview de Java 21? Elige la respuesta
  2. ¿Y la concurrencia estructurada, que estaba en preview en Java 21? Elige la respuesta
  3. Completa el tipo que llegó como preview en la 21 y pasó a final en la 25. Rellena el hueco
Lo retirado y lo que sigue preview El catálogo de preview en Java 25 3 retos
  1. ¿Cómo se activan las features en preview en Java 25? Elige la respuesta
  2. ¿En qué estado está la Vector API en Java 25? Elige la respuesta
  3. Completa el stable value para que el logger se cree la primera vez que se pide. Rellena el hueco
Qué más trae el salto Recolectores de basura y la JVM 3 retos
  1. ¿En qué estado está ZGC en Java 25? Elige la respuesta
  2. Completa el recolector cuyo modo generacional dejó de ser experimental en Java 25. Rellena el hueco
  3. Tu CI sigue construyendo para Linux x86 de 32 bits. ¿Qué pasa en Java 25? Elige la respuesta
Qué más trae el salto Herramientas y criptografía 3 retos
  1. ¿Cómo se escribe un comentario de documentación en Markdown (JEP 467)? Elige la respuesta
  2. Tu build dejó de ejecutar un procesador de anotaciones al pasar a la 25. ¿Por qué? Elige la respuesta
  3. Genera un par de claves con el algoritmo de firma post-cuántico que llegó en Java 24. Rellena el hueco
Qué más trae el salto La API que heredas 3 retos
  1. ¿Qué hace BodyHandlers.limiting(handler, capacity)? Elige la respuesta
  2. ¿Para qué sirve la propiedad stdin.encoding? Elige la respuesta
  3. En Java 25 Inflater implementa AutoCloseable. Reescríbelo con try-with-resources, dejando setInput(data) en el cuerpo. Arregla el bug
Volver al índice

Java 23 → 24: gatherers, class files y avisos de integridad

18 lecciones · 54 retos

Stream Gatherers gather: el punto de extensión que faltaba 3 retos
  1. ¿Qué es Stream::gather para la API de Stream? Elige la respuesta
  2. Completa la operación intermedia que Java 24 añade a Stream. Rellena el hueco
  3. ¿Qué imprime este código? ¿Qué imprime?
Stream Gatherers Los cinco gatherers de fábrica 3 retos
  1. ¿Cuál de los gatherers de fábrica ejecuta la función de forma concurrente sobre hilos virtuales? Elige la respuesta
  2. ¿Qué imprime este código? ¿Qué imprime?
  3. Completa el gatherer que produce ventanas solapadas de dos elementos. Rellena el hueco
Stream Gatherers Componer y escribir tu propio gatherer 3 retos
  1. De las cuatro funciones de un gatherer, ¿cuál puede cortar el stream antes de tiempo? Elige la respuesta
  2. ¿Qué pasa con un gatherer sin combiner dentro de un pipeline paralelo? Elige la respuesta
  3. Compón los dos gatherers en uno solo con andThen, y deja una única llamada a gather. Arregla el bug
synchronized y los hilos virtuales El final del pinning en synchronized 3 retos
  1. ¿Por qué un hilo virtual se quedaba clavado dentro de un método synchronized antes de Java 24? Elige la respuesta
  2. ¿Qué tienes que cambiar en tu código para beneficiarte del JEP 491? Elige la respuesta
  3. Esta propiedad de sistema del JEP 444 deja de tener ningún efecto en Java 24. Completa su nombre. Rellena el hueco
synchronized y los hilos virtuales Lo que sigue clavado y cómo verlo 3 retos
  1. ¿Cuál de estos casos sigue clavando un hilo virtual en Java 24? Elige la respuesta
  2. ¿Qué pasó con jdk.tracePinnedThreads en Java 24? Elige la respuesta
  3. Completa el nombre del evento de JFR que Java 24 mantiene y amplía para informar del pinning que queda. Rellena el hueco
Class files sin ASM Leer un class file 3 retos
  1. ¿Dónde vive la Class-File API que se cierra en Java 24? Elige la respuesta
  2. Completa la llamada que convierte un byte[] en un ClassModel. Rellena el hueco
  3. El javadoc dice que un ClassModel "se infla de forma perezosa". ¿Qué implica eso? Elige la respuesta
Class files sin ASM Transformar un class file 3 retos
  1. ¿Por qué transformar sale casi gratis con esta API? Elige la respuesta
  2. Ordena los tres pasos para elevar un CodeTransform hasta transformar la clase entera. Ordena las líneas
  3. ¿Cuál de estos renombrados llegó al cerrar la API en Java 24? Elige la respuesta
Arrancar más rápido: la caché AOT Tres pasos: grabar, crear, usar 3 retos
  1. Ordena las tres órdenes que crean y usan una caché AOT en Java 24. Ordena las líneas
  2. ¿Qué pasa si el fichero de caché no existe o no sirve? Elige la respuesta
  3. Completa la opción con la que la training run nombra el fichero de configuración que escribe. Rellena el hueco
Arrancar más rápido: la caché AOT Qué entra en la caché y qué no 3 retos
  1. ¿Qué clases no entran en la caché AOT? Elige la respuesta
  2. ¿Qué dice el JEP 483 sobre el formato del fichero de caché? Elige la respuesta
  3. Esta orden pretende ser la training run, pero usa el modo equivocado. Corrígela. Arregla el bug
Integridad por defecto: los avisos nuevos El Security Manager, desactivado para siempre 3 retos
  1. En Java 24, ¿qué hace java -Djava.security.manager=allow -jar app.jar? Elige la respuesta
  2. ¿Qué hace System.setSecurityManager(...) en Java 24? Elige la respuesta
  3. En Java 24 getSecurityManager() devuelve siempre null. Deja solo la llamada que sigue haciendo algo. Arregla el bug
Integridad por defecto: los avisos nuevos JNI y FFM: --enable-native-access 3 retos
  1. Completa la opción que aprueba el uso de JNI y de la FFM API para todo el classpath. Rellena el hueco
  2. ¿Cuál es el valor por defecto de --illegal-native-access en Java 24? Elige la respuesta
  3. Esto aprueba el acceso nativo para todo el classpath. Ajústalo para aprobárselo solo al módulo com.foo. Arregla el bug
Integridad por defecto: los avisos nuevos sun.misc.Unsafe avisa en ejecución 3 retos
  1. ¿Qué cambia para sun.misc.Unsafe en Java 24? Elige la respuesta
  2. Completa el tipo estándar que sustituye a los accesos a memoria dentro del heap. Rellena el hueco
  3. Según el JEP 498, ¿cuál es el siguiente paso del plan? Elige la respuesta
Criptografía post-cuántica ML-KEM: encapsular claves 3 retos
  1. ¿Para qué sirve ML-KEM? Elige la respuesta
  2. Completa el nombre estándar del algoritmo. El conjunto de parámetros va aparte. Rellena el hueco
  3. Ordena el lado del emisor y el del receptor en un intercambio con ML-KEM (receiver ya existe). Ordena las líneas
Criptografía post-cuántica ML-DSA: firmar sin RSA 3 retos
  1. Completa el nombre estándar del algoritmo de firma del FIPS 204. Rellena el hueco
  2. La Key Derivation Function API (JEP 478) que llega en Java 24 es… Elige la respuesta
  3. ML-DSA no es interoperable con Dilithium. Cambia el algoritmo por el nombre estándar del FIPS 204. Arregla el bug
Lo que sigue en preview en 24 Preview de lenguaje: patrones, constructores, imports y main 3 retos
  1. ¿Por qué ronda de preview van los cuerpos de constructor flexibles (JEP 492) en Java 24? Elige la respuesta
  2. Según el JEP 492, ¿qué puede hacer una sentencia colocada antes de super(..)? Elige la respuesta
  3. Completa la palabra que convierte un import normal en la importación de un módulo entero (JEP 494). Rellena el hueco
Lo que sigue en preview en 24 Preview de API y la incubadora 3 retos
  1. ¿Por qué ronda de preview van los Scoped Values (JEP 487) en Java 24? Elige la respuesta
  2. ¿Cómo se habilita la Vector API en Java 24? Elige la respuesta
  3. Compilar con --enable-preview exige decirle a javac la versión. Añade --release 24 a la orden. Arregla el bug
Qué más trae el salto Recolectores y memoria 3 retos
  1. En Java 24, ¿qué significa -XX:+UseZGC? Elige la respuesta
  2. Completa el flag experimental del JEP 450 que reduce la cabecera de objeto a 64 bits. Rellena el hueco
  3. Shenandoah generacional, en Java 24, es… Elige la respuesta
Qué más trae el salto Herramientas y ports 3 retos
  1. ¿Qué cambia el JEP 493 en jlink? Elige la respuesta
  2. Cuando desaparezca el port de 32-bit x86 quedará un único port capaz de ejecutar Java ahí. Completa su nombre. Rellena el hueco
  3. El detalle del JEP 493 que conviene saber antes de contar con él es… Elige la respuesta
Volver al índice

Java 22 → 23: tres finales y un preview que desaparece

17 lecciones · 51 retos

Javadoc en Markdown Tres barras, y el HTML se va 3 retos
  1. ¿Cómo empieza un comentario de documentación en Markdown en Java 23? Elige la respuesta
  2. Completa lo que abre cada línea de un comentario de documentación en Markdown. Rellena el hueco
  3. Ordena las líneas para que el comentario tenga resumen, un segundo párrafo y la etiqueta @return. Ordena las líneas
Javadoc en Markdown Enlaces, tablas y bloques de código 3 retos
  1. En un comentario de documentación en Markdown, ¿qué produce [List]? Elige la respuesta
  2. Completa el enlace que muestra un texto propio y apunta a java.util.Map. Rellena el hueco
  3. Ordena las tres líneas de una tabla estilo GFM dentro de un comentario ///. Ordena las líneas
Javadoc en Markdown Las etiquetas siguen ahí (con dos reglas) 3 retos
  1. Dentro de un comentario ///, ¿siguen valiendo @param y {@inheritDoc}? Elige la respuesta
  2. Una línea completamente en blanco parte el comentario. Completa lo que hay que escribir en esa línea para que los dos… Rellena el hueco
  3. ¿De qué avisa la opción -Xlint:dangling-doc-comments que estrena Java 23? Elige la respuesta
ZGC: generacional por defecto -XX:+UseZGC ya significa generacional 3 retos
  1. ¿Qué cambia el JEP 474 respecto a Java 22? Elige la respuesta
  2. Completa la opción que el JEP 474 depreca. Rellena el hueco
  3. En Java 23, -XX:+UseZGC -XX:-ZGenerational hace que… Elige la respuesta
ZGC: generacional por defecto Qué revisar antes de subir la versión 3 retos
  1. Según el JEP 474, ¿qué puede cambiar para una carga que pasa a ZGC generacional? Elige la respuesta
  2. Completa la línea que en Java 23 da la configuración recomendada, sin ningún aviso de deprecación. Rellena el hueco
  3. Te quedas en -XX:-ZGenerational para ganar tiempo. ¿Hasta cuándo te funciona? Elige la respuesta
sun.misc.Unsafe: empieza la cuenta atrás 79 de 87 métodos, y por qué justo ahora 3 retos
  1. ¿Cuántos métodos de sun.misc.Unsafe depreca para eliminación el JEP 471? Elige la respuesta
  2. ¿Qué tipo estándar sustituye al acceso dentro del heap de compareAndSwapInt? Rellena el hueco
  3. Este código reserva memoria fuera del heap con Unsafe. Reescríbelo con la API estándar de Java 22: un Arena confinado… Arregla el bug
sun.misc.Unsafe: empieza la cuenta atrás Cómo saber si te afecta 3 retos
  1. ¿Cuál es el valor por defecto de --sun-misc-unsafe-memory-access en Java 23? Elige la respuesta
  2. Completa el valor que hace que cada llamada lance UnsupportedOperationException, para ver hoy lo que se te romperá… Rellena el hueco
  3. Ordena la receta para localizar con JFR quién llama a un método deprecado para eliminación. Ordena las líneas
String Templates se retira Lo que compilaba en 22 y en 23 ya no 3 retos
  1. ¿Qué pasó con String Templates en Java 23? Elige la respuesta
  2. ¿Qué imprime este código en Java 23, compilado con --release 23 --enable-preview? ¿Qué imprime?
  3. ¿Por qué String Templates desapareció sin ningún ciclo de deprecación? Elige la respuesta
String Templates se retira Lo que cuesta un preview cuando desaparece 3 retos
  1. ¿Qué dice el JEP 12 de una feature en preview? Elige la respuesta
  2. Completa el flag que hace falta al ejecutar un programa que usa una feature en preview. Rellena el hueco
  3. Compilas con --enable-preview en el JDK 23. ¿Dónde se puede ejecutar ese class file? Elige la respuesta
El lenguaje en preview en 23 Tipos primitivos en los patrones (JEP 455) 3 retos
  1. ¿Qué permite el JEP 455 que Java 22 no permitía? Elige la respuesta
  2. Completa el patrón que convierte la rama default en un case que además enlaza el valor. Rellena el hueco
  3. Con --enable-preview en Java 23, ¿qué imprime este código? ¿Qué imprime?
El lenguaje en preview en 23 import module: un módulo entero en una línea 3 retos
  1. import module java.base; equivale a… Elige la respuesta
  2. Completa la palabra que convierte un import normal en la importación de un módulo entero (JEP 476). Rellena el hueco
  3. Este fichero quiere importar de una vez todo lo que exporta java.base, pero no compila. Arréglalo. Arregla el bug
El lenguaje en preview en 23 Programas pequeños y constructores flexibles 3 retos
  1. ¿Qué añade el tercer preview del JEP 477 a un fichero sin declaración de clase? Elige la respuesta
  2. Completa el método de java.io.IO que lee una línea mostrando antes un texto. Rellena el hueco
  3. Con el JEP 482 se puede validar antes de llamar a super(..). Reescribe el constructor para que falle rápido, sin… Arregla el bug
API en preview y en incubadora Segunda ronda: Class-File API y Stream Gatherers 3 retos
  1. Stream Gatherers repite como segundo preview en Java 23. ¿Qué cambió? Elige la respuesta
  2. ¿Cuál de estos cambios trae el segundo preview de la Class-File API? Elige la respuesta
  3. Las dos API de esta lección se cerraron en la misma versión. Complétala. Rellena el hueco
API en preview y en incubadora Loom en preview, y la incubadora al lado 3 retos
  1. De las tres API de esta lección, ¿cuál cambió en Java 23? Elige la respuesta
  2. Completa el flag que habilita un módulo en incubadora. Rellena el hueco
  3. ¿Por qué la Vector API sigue en incubadora en vez de pasar a preview? Elige la respuesta
Qué más trae el salto Los cambios que te rompen el build 3 retos
  1. Subes de 22 a 23 y de repente no se generan las clases de MapStruct, aunque el procesador sigue en el classpath. ¿Qué… Elige la respuesta
  2. Completa la opción de javac que recupera el comportamiento anterior. Rellena el hueco
  3. Tu module-info.java tiene requires jdk.random;. ¿Qué pasa en Java 23? Elige la respuesta
Qué más trae el salto API nueva que puedes usar hoy 3 retos
  1. Completa el método que Java 23 añade a Instant para obtener la Duration hasta otro instante. Rellena el hueco
  2. ¿Qué imprime este código en Java 23? ¿Qué imprime?
  3. ¿Para qué sirve el evento de JFR jdk.SerializationMisdeclaration? Elige la respuesta
Qué más trae el salto La JVM y los detalles que se mueven debajo 3 retos
  1. ¿Qué cambia en Parallel GC en Java 23? Elige la respuesta
  2. Desde Java 23 las cabeceras viajan con el cuerpo. Añade lo que falta para forzar el envío de la respuesta. Arregla el bug
  3. ¿Qué imprime este código en Java 23? ¿Qué imprime?
Volver al índice

Java 21 → 22: tres finales y un laboratorio lleno de previews

17 lecciones · 51 retos

El guion bajo que significa «no lo uso» Variables que estás obligado a declarar 3 retos
  1. ¿Cuál de estos se puede declarar con _ en Java 22? Elige la respuesta
  2. Completa el bucle que solo cuenta pedidos y no usa cada elemento. Rellena el hueco
  3. El tercer remove() tiene que ejecutarse igualmente, pero su resultado no hace falta. La declaración tal cual no… Arregla el bug
El guion bajo que significa «no lo uso» Patrones que se saltan lo que no necesitan 3 retos
  1. ¿Dónde se puede usar el patrón sin nombre, un _ a solas? Elige la respuesta
  2. ¿Qué imprime este código en Java 22? ¿Qué imprime?
  3. Ordena el switch para que la bola roja se procese, la verde detenga el proceso y el bloque se cierre. Ordena las líneas
El guion bajo que significa «no lo uso» Varios patrones, una sola etiqueta case 3 retos
  1. ¿Qué exige una etiqueta case con varios patrones? Elige la respuesta
  2. Completa la palabra clave que añade una condición que gobierna la etiqueta entera. Rellena el hueco
  3. Dos guardas en la misma etiqueta no compilan. Deja una sola guarda, al final, que gobierne los dos patrones. Arregla el bug
java.lang.foreign sale de preview Tercer preview en 21, final en 22 3 retos
  1. ¿Qué cambia en la Foreign Function & Memory API entre Java 21 y Java 22? Elige la respuesta
  2. Completa el paquete en el que vive la FFM API a partir de Java 22. Rellena el hueco
  3. Este build todavía arrastra las banderas de preview de Java 21. Deja los dos comandos como deben quedar en Java 22. Arregla el bug
java.lang.foreign sale de preview Segmentos y arenas: memoria con fecha de caducidad 3 retos
  1. ¿Qué te da Arena.ofConfined() que no te da Arena.ofAuto()? Elige la respuesta
  2. ¿Qué pasa cuando este código de Java 22 llega a la última línea? ¿Qué imprime?
  3. Ordena las cuatro líneas que reservan un segmento dentro de una arena confinada y escriben un int. Ordena las líneas
java.lang.foreign sale de preview Llamar a C, y el aviso que viene con ello 3 retos
  1. Por defecto, en Java 22, ¿qué pasa cuando llamas a un método restringido de la FFM API? Elige la respuesta
  2. Completa la opción que silencia el aviso para todo el código del class path. Rellena el hueco
  3. Este lookup carga una biblioteca y no la descarga nunca. Ata su tiempo de vida a la arena, como espera la API. Arregla el bug
Dos ficheros y todavía sin herramienta de build Cuando el programa se sale de un solo fichero 3 retos
  1. ¿Qué ficheros .java compila java Prog.java en Java 22? Elige la respuesta
  2. Completa el valor que pone en el class path todos los JAR de la carpeta actual. Rellena el hueco
  3. Ordena los dos ficheros y el comando que los ejecuta: primero el fichero con main, luego su ayudante y al final el… Ordena las líneas
Dos ficheros y todavía sin herramienta de build Dónde busca el lanzador los ficheros 3 retos
  1. Ejecutas java dir/a/b/c/Prog.java y el fichero declara package b.c;. ¿Dónde está la raíz del árbol de fuentes? Elige la respuesta
  2. ¿Qué imprime este programa en Java 22? ¿Qué imprime?
  3. Lanzado como java dir/a/b/c/Prog.java, este fichero ya no se ejecuta en Java 22. Arregla la declaración de paquete… Arregla el bug
El lenguaje que solo puedes probar con --enable-preview Sentencias antes de super(...) 3 retos
  1. ¿Qué puede hacer el prólogo de un constructor con el JEP 447? Elige la respuesta
  2. Completa la invocación explícita del constructor que ahora puede ir después de otras sentencias. Rellena el hueco
  3. Ordena el constructor para que rechace un valor no positivo antes de llamar a la superclase. Ordena las líneas
El lenguaje que solo puedes probar con --enable-preview Un fichero, sin clase, con un main de instancia 3 retos
  1. ¿Cómo elige el segundo preview qué main invocar? Elige la respuesta
  2. Ejecutado con java --enable-preview --source 22 Main.java, ¿qué imprime esto? ¿Qué imprime?
  3. El lanzador da un error y para: no puede construir una instancia de esta clase. Arregla el constructor. Arregla el bug
El lenguaje que solo puedes probar con --enable-preview String Templates, segunda vuelta 3 retos
  1. ¿En qué estado llegaron los String Templates a Java 22? Elige la respuesta
  2. Completa el procesador de plantilla de la plataforma Java que produce un String. Rellena el hueco
  3. Compilado con --enable-preview en Java 22, ¿qué imprime esto? ¿Qué imprime?
Las API que aún no están listas Gatherers: tu propia operación intermedia 3 retos
  1. ¿Qué añade gather a la API de Stream? Elige la respuesta
  2. Completa el gatherer de serie que agrupa elementos en listas de tamaño fijo. Rellena el hueco
  3. Ordena el pipeline que toma las dos primeras ventanas fijas de tres elementos de un stream infinito. Ordena las líneas
Las API que aún no están listas Class files sin biblioteca empaquetada 3 retos
  1. ¿Por qué quiere el JDK una API estándar de class files? Elige la respuesta
  2. Completa el paquete en el que vive la Class-File API. Rellena el hueco
  3. Analyzer.java usa la Class-File API en JDK 22. Añade lo que necesitan estos dos comandos para funcionar. Arregla el bug
Las API que aún no están listas Segundas rondas, y una séptima incubación 3 retos
  1. ¿Por qué ronda va la Vector API en Java 22? Elige la respuesta
  2. Completa la clase que confina una familia de subtareas a un ámbito léxico. Rellena el hueco
  3. Ordena el ámbito que lanza dos subtareas, las espera y compone la respuesta. Ordena las líneas
Qué más trae el salto El recolector deja de esperar a JNI 3 retos
  1. Antes de Java 22, ¿qué hacía G1 mientras un hilo estaba dentro de una región crítica de JNI? Elige la respuesta
  2. Este código nativo abre una región crítica y no la cierra nunca. Añade la llamada que falta. Arregla el bug
  3. En Java 22, ¿qué le pasa a una región fijada de la generación joven durante una recolección menor? Elige la respuesta
Qué más trae el salto Lo que desaparece y lo que empieza a avisar 3 retos
  1. ¿Cuál de estos ya no existe en Java 22? Elige la respuesta
  2. Completa el método estándar que sustituye a Unsafe.ensureClassInitialized. Rellena el hueco
  3. Esta barrera está deprecada para eliminación en Java 22. Usa la API estándar que la sustituyó en Java 9. Arregla el bug
Qué más trae el salto API pequeña que puedes usar hoy 3 retos
  1. ¿Por qué System.console() != null ya no sirve para detectar un terminal en Java 22? Elige la respuesta
  2. ¿Qué imprime este código de Java 22? ¿Qué imprime?
  3. Completa la constante nueva de 32 bits cuyo orden de bytes sale de una marca opcional. Rellena el hueco
Volver al índice

Java 25 → 26: el salto que acelera tus APIs y tu JVM

4 lecciones · 8 retos

Volver al índice

Java 26 → 27: previews que maduran y una JVM que cambia sola

15 lecciones · 45 retos

Concurrencia estructurada, séptima preview Un scope que no deja tareas sueltas 3 retos
  1. ¿En qué estado llega la concurrencia estructurada a Java 27? Elige la respuesta
  2. Ordena las líneas para lanzar dos subtareas y esperarlas como una unidad. Ordena las líneas
  3. Completa el bloque: lanzar la subtarea y esperar a que el scope termine. Rellena el hueco
Concurrencia estructurada, séptima preview El Joiner decide cuándo parar 3 retos
  1. ¿Qué Joiner cancela el resto de subtareas en cuanto una termina bien? Elige la respuesta
  2. ¿Qué devuelve join() en un scope abierto con Joiner.awaitAllSuccessfulOrThrow()? Elige la respuesta
  3. Completa el scope para que join() devuelva la lista con los dos precios. Rellena el hueco
Concurrencia estructurada, séptima preview Migrar desde la sexta preview de Java 26 3 retos
  1. Tu código de Java 26 llama a scope.awaitAll(). ¿Qué haces al subir a Java 27? Elige la respuesta
  2. El plazo vence antes de que la subtarea acabe. ¿Qué imprime? ¿Qué imprime?
  3. Este bloque es de Java 26 y en Java 27 ya no compila. Arréglalo sin cambiar lo que hace: esperar a que todas las… Arregla el bug
Lazy Constants, tercera preview Un final que se inicializa cuando tú quieras 3 retos
  1. ¿Cuántas veces se ejecuta el Supplier que recibe LazyConstant.of(...)? Elige la respuesta
  2. Completa la constante perezosa que carga la configuración la primera vez que se pide. Rellena el hueco
  3. Si el valor se calcula más tarde, ¿por qué el campo se sigue declarando static final? Elige la respuesta
Lazy Constants, tercera preview Colecciones perezosas y una API que adelgaza 3 retos
  1. ¿Qué método de LazyConstant desaparece en la tercera preview (Java 27)? Elige la respuesta
  2. ¿Qué imprime este código? ¿Qué imprime?
  3. Set.ofLazy(...) es la novedad de esta preview. ¿Qué calcula de forma perezosa? Elige la respuesta
Tipos primitivos en patrones, quinta preview instanceof con primitivos: la pregunta es si cabe 3 retos
  1. ¿Qué imprime este código en Java 27, compilado con --enable-preview? ¿Qué imprime?
  2. ¿Cuál de estas conversiones es incondicionalmente exacta, es decir, cabe siempre? Elige la respuesta
  3. Completa la comprobación de rango al estilo Java 27, sin escribir los límites a mano. Rellena el hueco
Tipos primitivos en patrones, quinta preview switch sobre long, float, double y boolean 3 retos
  1. ¿Qué tipos primitivos añade el JEP 532 al switch? Elige la respuesta
  2. Ordena las líneas del switch sobre un long. Ordena las líneas
  3. Este switch sobre un long no compila ni con --enable-preview. Arréglalo sin tocar los casos que ya hay. Arregla el bug
La JVM cambia de defaults sin tocar tu código G1 en todas partes 3 retos
  1. En Java 27, ¿qué recolector elige la JVM en un contenedor con 1 CPU y 512 MB? Elige la respuesta
  2. Completa el arranque que recupera el recolector que Java 26 elegía solo en máquinas pequeñas. Rellena el hueco
  3. ¿Qué dejó de ser cierto exactamente en Java 27? Elige la respuesta
La JVM cambia de defaults sin tocar tu código Cabeceras de objeto compactas por defecto 3 retos
  1. ¿Cuánto ocupa por defecto la cabecera de un objeto en Java 27, sobre una JVM de 64 bits? Elige la respuesta
  2. Tu aplicación falla con las cabeceras compactas. Completa el arranque que vuelve a la disposición de 96 bits. Rellena el hueco
  3. ¿Qué hay que cambiar en tu código para aprovechar el JEP 534? Elige la respuesta
La JVM cambia de defaults sin tocar tu código G1 deja de redimensionar el heap, e IHOP cambia de nombre 3 retos
  1. ¿Cómo se llama en Java 27 la opción que antes era -XX:InitiatingHeapOccupancyPercent? Elige la respuesta
  2. En Java 27, MinHeapFreeRatio y MaxHeapFreeRatio valen 0 y 100 por defecto. ¿Qué implica? Elige la respuesta
  3. Este arranque usa una opción deprecada en Java 27. Cámbiala por el nombre nuevo, con el mismo valor. Arregla el bug
Seguridad y diagnóstico de fábrica TLS 1.3 negocia post-cuántico sin que hagas nada 3 retos
  1. ¿Qué hay que cambiar en el código para que un cliente Java 27 negocie el intercambio de claves híbrido post-cuántico? Elige la respuesta
  2. ¿Por qué el grupo se llama híbrido? Elige la respuesta
  3. Completa el arranque que fija el orden de grupos de TLS sin tocar el código de la aplicación. Rellena el hueco
Seguridad y diagnóstico de fábrica PEM sin escribir Base64 a mano 3 retos
  1. Completa la lectura de una clave pública en formato PEM. Rellena el hueco
  2. ¿Cómo se llama en Java 27 la interfaz sellada que en Java 26 era DEREncodable? Elige la respuesta
  3. ¿Qué hace falta para compilar y ejecutar código que use PEMEncoder en Java 27? Elige la respuesta
Seguridad y diagnóstico de fábrica JFR tacha los secretos antes de escribirlos 3 retos
  1. En Java 27, si no configuras nada, ¿qué hace JFR con una propiedad llamada db.password? Elige la respuesta
  2. Completa el arranque que añade un filtro propio a los de serie, sin perderlos. Rellena el hueco
  3. Necesitas los argumentos completos, sin tachar, para reproducir un fallo. ¿Cómo se desactivan los filtros de serie… Elige la respuesta
Lo que se rompe al subir de 26 a 27 Eliminaciones que te dejan sin arrancar 3 retos
  1. Tu script de arranque lleva -Xverify:none. ¿Qué pasa en Java 27? Elige la respuesta
  2. Extiendes ThreadPoolExecutor y sobrescribes finalize(). ¿Qué cambia en Java 27? Elige la respuesta
  3. Este código usa un código ISO obsoleto y una propiedad que Java 27 ha eliminado. Arréglalo usando el código actual del… Arregla el bug
Lo que se rompe al subir de 26 a 27 Cambios que no dan error, solo resultados distintos 3 retos
  1. En Java 27, un contexto de HttpServer registrado como /foo, ¿qué rutas atiende? Elige la respuesta
  2. Capturabas IllegalArgumentException alrededor de putNextEntry para nombres con caracteres no codificables. ¿Qué pasa… Elige la respuesta
  3. Completa la lectura de la fecha de creación de un alias con la API nueva de Java 27. Rellena el hueco
Volver al índice

Que cada reto cuente

Con una cuenta gratuita, cada reto que resuelves suma XP, alarga tu racha y queda guardado en tu progreso.

Crear cuenta gratis