Java Core
Streams API y Optional
Generics y colecciones
Manejo de excepciones checked/unchecked
Buenas prácticas generales (SOLID, clean code, naming conventions)
Spring Boot 3.x
Spring Boot autoconfiguration y properties
Bean lifecycle y dependency injection
Profiles (application-{env}.yml)
Manejo de excepciones centralizadas (@RestControllerAdvice, GlobalExceptionHandler)
Spring Security
Filtros y cadena de seguridad
JWT
CORS para frontend separado
Roles y permisos
OAuth2 Resource Server y OAuth2 Client
SSO, OIDC
Persistencia
JPA / Hibernate (entidades, relaciones, ciclo de vida)
Spring Data JPA (repositories, JPQL, native queries)
Paginación y ordenamiento
MySQL (índices, transacciones, tipos de datos)
HTTP / REST
Diseño de APIs REST (verbos, status codes, versionado)
RestClient / WebClient para consumo de APIs externas
Manejo de errores y retry en llamadas externas
Spring Batch
Job, Step, Chunk-oriented processing
ItemReader, ItemProcessor, ItemWriter
JobLauncher y scheduling
Manejo de errores y reintentos
Cache
Caffeine
Spring Cache abstraction (@Cacheable, @CacheEvict)
Estrategias de invalidación
Testing
JUnit 5
Mockito
@SpringBootTest, @WebMvcTest, @DataJpaTest
Testcontainers para MySQL en tests de integración
Build y tooling
Maven o Gradle
Docker básico
Variables de entorno y configuración externalizada
AI - Claude Code
claude-code-cli / claude-code-setup — Instalación, configuración inicial, autenticación y flujo básico del CLI
CLAUDE.md / project-memory — Cómo escribir el archivo de contexto para que Claude Code entienda el stack, convenciones de naming y estructura de paquetes Java, etc...
Prompting para código
Prompt engineering básico
PDD (Prompt Driven Development)
SDD (Spec Driven Development)