El Modelo Entidad-Relación (E/R) es el modelo conceptual usado en Métrica v3 para representar la información. Sus elementos clave:
| Concepto | Definición exacta del examen |
|---|---|
| Cardinalidad | Número de entidades con las que otra entidad puede asociarse mediante una relación binaria |
| Grado de una relación | Número de tipos de entidad que participan en un tipo de relación |
| Dominio de un atributo | Conjunto de todos los valores posibles que puede tomar el atributo |
| Entidad débil | Entidad que no puede identificarse por sí sola; depende de otra entidad (entidad fuerte) |
| Cardinalidad mínima 0 | Participación opcional: una instancia puede no participar en ninguna ocurrencia de la relación |
| Cardinalidad mínima 1 | Participación obligatoria: toda instancia debe participar en al menos una ocurrencia |
| Relación ternaria | Relación que asocia 3 entidades distintas simultáneamente |
La normalización elimina redundancias y anomalías de inserción, borrado y actualización. Cada forma normal añade restricciones sobre la anterior.
| Forma Normal | Condición | Qué elimina |
|---|---|---|
| 1FN | Todos los atributos son atómicos. No hay grupos repetitivos ni multivaluados. | Atributos compuestos, listas en celdas |
| 2FN | En 1FN + todos los atributos no clave dependen de la clave primaria COMPLETA (sin dependencias parciales). | Dependencias parciales de la clave compuesta |
| 3FN | En 2FN + no existen dependencias transitivas entre atributos no clave. | A→B→C donde B no es clave |
| FNBC | Todo determinante de una dependencia funcional es clave candidata. Más estricta que 3FN. | Casos que 3FN no elimina con claves candidatas solapadas |
| 4FN | En FNBC + no hay dependencias multivaluadas no triviales. | Dependencias multivaluadas independientes |
| 5FN | En 4FN + toda dependencia de reunión (join) está implicada por las claves candidatas. | Dependencias de reunión |
El Modelo E/R Extendido de Métrica v3 añade la jerarquía de generalización/especialización (herencia) y los tipos de relación:
| Concepto ERE | Representación / Regla |
|---|---|
| Especialización exclusiva | Triángulo invertido con E o d (disjoint): un objeto pertenece a solo un subtipo |
| Especialización solapada | Triángulo invertido con O: un objeto puede pertenecer a varios subtipos simultáneamente |
| Especialización total | Línea doble al supertipo: todo objeto del supertipo pertenece a algún subtipo |
| Especialización parcial | Línea simple: puede haber objetos que no pertenecen a ningún subtipo |
| Dominio ERE | Tipo de dato o conjunto de valores válidos para un atributo; se define como tipo independiente reutilizable |
El DFD (Diagrama de Flujo de Datos) de Métrica v3 tiene 4 elementos: Entidad externa · Proceso · Almacén de datos · Flujo de datos.
| Regla DFD | Verdadero / Falso para el examen |
|---|---|
| Un almacén puede aparecer varias veces en el diagrama | ✅ VERDADERO — se puede repetir para claridad visual |
| Un almacén requiere proceso intermediario para relacionarse con entidad externa | ✅ VERDADERO — nunca contacto directo almacén-entidad |
| Las entidades externas se descomponen en explosiones del DFD | ❌ FALSO — las entidades externas NO se descomponen; son el límite del sistema |
| Un proceso primitivo es el que no necesita descomposición | ✅ VERDADERO |
| El DFD de más alto nivel (Nivel 0 o diagrama de contexto) | Solo incluye UN proceso que representa todo el sistema |
| Todo proceso debe tener al menos una entrada y una salida | ✅ VERDADERO — regla fundamental |
| Tipos de flujo que NO existen en DFD | "De relación", "De optimización", "De control" (entre proceso y almacén) |
Las expresiones lógicas y operadores son pregunta directa de código en el examen, tanto en Java como en C y pseudocódigo.
| Operación | Resultado cuando a=0, b=0 | Regla |
|---|---|---|
| NOT(a AND b) | 1 (VERDADERO) | NOT(0 AND 0) = NOT(0) = 1 |
| a OR b | 0 | 0 OR 0 = 0 |
| NOT(a OR b) | 1 | NOT(0) = 1 |
| a AND b | 0 | 0 AND 0 = 0 |
| a XOR b | 0 | Valores iguales → XOR es 0 |
En Java, si a=4 y b=6, la expresión (a>b) && (!(a>b)) siempre es false (una condición AND su negación).
En C: int a=11; b=a--; → primero asigna (b=11) y luego decrementa (a=10). El operador postfijo usa el valor y luego modifica. ++a prefijo: modifica y luego usa.
Las funciones con parámetros en distintos lenguajes tienen detalles que el examen explota:
| Lenguaje | Paso de parámetros | Detalle clave |
|---|---|---|
| Java | Por valor siempre (primitivos) / por referencia del objeto | Los primitivos (int, boolean) se pasan por valor. Los objetos: se pasa la referencia por valor. No existe paso por referencia puro. |
| C | Por valor (defecto) / por puntero | Para modificar la variable original, pasar puntero: void f(int *x) |
| Python | Por asignación de objeto | Los inmutables (int, str) se comportan como valor; los mutables (list, dict) como referencia |
| Java módif. native | Solo con métodos | native indica que la implementación está en código nativo (C/C++). Solo aplica a métodos, no a clases ni variables. |
Bucles con trampas clásicas del examen TAI (tanto en Java como en C):
Clasificación de sentencias SQL — imprescindible saberse a qué categoría pertenece cada una:
| Categoría | Sentencias | Qué hace |
|---|---|---|
| DDL — Data Definition Language | CREATE, ALTER, DROP, TRUNCATE | Definen/modifican la estructura de la BD (esquema) |
| DML — Data Manipulation Language | SELECT, INSERT, UPDATE, DELETE | Manipulan los datos (contenido) |
| DCL — Data Control Language | GRANT, REVOKE | Controlan permisos de acceso |
| TCL — Transaction Control Language | COMMIT, ROLLBACK, SAVEPOINT | Gestionan transacciones |
Orden correcto en SELECT: SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER BY
HAVING vs WHERE: WHERE filtra filas individuales (antes de agrupar). HAVING filtra grupos (después de GROUP BY). HAVING siempre va con GROUP BY.
GRANT: el privilegio RESOURCES no es posible asignarlo con GRANT. Sí se pueden asignar: SELECT, INSERT, UPDATE, DELETE, EXECUTE. Para dar permiso de actualizar solo una columna: GRANT SELECT, UPDATE(SALARIO) ON EMPLEADOS TO USUARIO1
SELECT COUNT(DISTINCT nombre) cuenta los nombres diferentes.Diferencias entre DROP y otras sentencias de borrado — pregunta clásica del examen:
| Sentencia | Categoría | Qué hace | Reversible |
|---|---|---|---|
DROP TABLE | DDL | Elimina la tabla completamente (estructura + datos) | NO |
TRUNCATE TABLE | DDL | Vacía la tabla (borra todos los datos) pero mantiene la estructura | NO (en la mayoría) |
DELETE FROM | DML | Borra filas según WHERE (o todas si no hay WHERE). Genera log. | SÍ (con ROLLBACK) |
DROP DATABASE | DDL | Elimina toda la base de datos. MySQL: DROP DATABASE [IF EXISTS] nombre | NO |
DROP VIEW | DDL | Elimina una vista | NO |
CREATE VIEW | DDL | Crea una vista (SELECT almacenado) | — |
SAVEPOINT nombre).Los triggers (disparadores) se ejecutan automáticamente antes o después de INSERT, UPDATE o DELETE sobre una tabla.
CREATE TRIGGER … BEFORE UPDATE OF … ON tabla — sintaxis correcta de trigger ANSI SQL. Pregunta real 2018: Oracle SAVEPOINT — SAVEPOINT punto1 para establecer punto de restauración.En Java, herencia = extends (solo herencia simple de clases). Interfaces = implements (puede implementar varias). Java soporta herencia simple y polimorfismo (herencia múltiple NO en clases, solo en interfaces).
| Modificador de acceso Java | Visibilidad |
|---|---|
private | Solo dentro de la propia clase |
package-private (sin modificador) | Clases del mismo paquete |
protected | Mismo paquete + subclases (herencia) |
public | Cualquier clase desde cualquier paquete |
Clase abstracta: puede estar parcialmente implementada (métodos abstractos sin cuerpo + métodos con implementación). No se puede instanciar. abstract class Figura { abstract double area(); }
Sobrecarga: dos o más métodos con el mismo nombre pero distinto número y/o tipo de parámetros. NO es polimorfismo en tiempo de ejecución (es resolución en tiempo de compilación).
Durabilidad NO es característica del modelo OO — es una propiedad ACID de las transacciones de BBDD (Atomicidad, Consistencia, Aislamiento, Durabilidad).
UML 2.5.1 tiene dos grandes categorías de diagramas:
| Diagramas ESTRUCTURALES | Diagramas de COMPORTAMIENTO |
|---|---|
| Clases · Objetos · Componentes · Despliegue · Paquetes · Perfil | Casos de uso · Actividades · Estados · Interacción (Secuencia, Comunicación, Tiempos, Global) |
Los patrones GoF se dividen en 3 categorías. Imprescindible memorizar qué patrón hace qué:
| Patrón | Categoría | Para qué sirve — clave del examen |
|---|---|---|
| Singleton | Creacional | Una única instancia de una clase + acceso global |
| Factory Method | Creacional | Centraliza la creación de objetos en una clase constructora; las subclases determinan qué instanciar |
| Abstract Factory | Creacional | Crear familias de objetos relacionados sin especificar sus clases concretas |
| Builder | Creacional | Construir objetos complejos paso a paso |
| Prototype | Creacional | Copiar objetos existentes (clonar) |
| Adapter | Estructural | Convierte la interfaz de una clase en la que espera el cliente (clases incompatibles) |
| Bridge | Estructural | Desacopla abstracción de su implementación para que ambas puedan evolucionar independientemente |
| Composite | Estructural | Compone objetos en estructuras de árbol; trata objetos individuales y compuestos uniformemente |
| Decorator | Estructural | Añade funcionalidades a objetos envolviéndolos dinámicamente sin modificar la clase |
| Facade | Estructural | Interfaz unificada simple para un subsistema complejo |
| Proxy | Estructural | Sustituto que controla el acceso al objeto real |
| Iterator | Comportamiento | Recorrer elementos de una colección sin conocer su implementación |
| Observer | Comportamiento | Dependencia 1→N: cuando un objeto cambia, notifica a todos los dependientes |
| Strategy | Comportamiento | Permite elegir entre varios algoritmos en tiempo de ejecución |
| Mediator | Comportamiento | Coordina la comunicación entre objetos sin acoplamientos fuertes |
| Memento | Comportamiento | Guarda y restaura el estado interno de un objeto sin violar encapsulamiento |
| Command | Comportamiento | Encapsula una operación como un objeto |
.NET MAUI (Multi-platform App UI): evolución de Xamarin.Forms desde .NET 6. Framework multiplataforma para crear aplicaciones nativas de escritorio y móviles con C# y XAML. Genera apps nativas para Android, iOS, macOS y Windows desde un único proyecto.
Razor: sintaxis de plantillas usada en ASP.NET Core para crear vistas dinámicas. Usa el símbolo @ para la transición de C# a HTML. Se ejecuta en el servidor (NO en el cliente). @Model.Nombre accede a los datos del modelo.
JPA (Jakarta Persistence API): especificación Java para persistencia ORM. Una entidad representa una tabla en una BBDD relacional; cada instancia de la entidad corresponde a una fila.
| Concepto JPA | Detalle para el examen |
|---|---|
| Necesita proveedor JPA | JPA es solo una especificación. Necesita un proveedor: Hibernate (más usado), EclipseLink, OpenJPA |
| JPQL | Java Persistence Query Language — similar a SQL pero orientado a objetos (consulta entidades, no tablas) |
| @Entity | Marca una clase como entidad JPA mapeable a una tabla |
| Relaciones | @OneToOne, @OneToMany, @ManyToOne, @ManyToMany — SÍ soporta todas las relaciones |
| ORM en .NET | Entity Framework / Entity Framework Core (equivalente a JPA/Hibernate en Java) |
Los sistemas distribuidos tienen características específicas que el examen pregunta como verdadero/falso:
| Característica | Verdadero/Falso |
|---|---|
| Escalabilidad: la capacidad puede escalarse añadiendo máquinas | ✅ VERDADERO |
| Transparencia: el usuario no nota que el sistema está distribuido | ✅ VERDADERO |
| Los nodos no pueden acceder a otros nodos del sistema | ❌ FALSO — pueden comunicarse |
| Varias máquinas no pueden procesar la misma función simultáneamente | ❌ FALSO — el procesamiento paralelo es su ventaja |
| Acoplamiento de sistemas es característica del cliente/servidor | ❌ FALSO — es lo que el modelo cliente/servidor NO tiene |
| Escalabilidad vertical = añadir más recursos al mismo servidor | ✅ VERDADERO |
| Escalabilidad horizontal = añadir más servidores al conjunto | ✅ VERDADERO |
REST (REpresentational State Transfer) — las 6 restricciones de Fielding y lo que preguntan en el examen:
| Característica REST | Verdadero/Falso para el examen |
|---|---|
| Stateless: el servidor NO almacena estado entre peticiones | ✅ VERDADERO — cada petición es independiente |
| Usa especificación UDDI para publicar servicios | ❌ FALSO — UDDI es de servicios web SOAP/WS-*, no de REST |
| La interfaz puede ser HTTP o FTP | ❌ FALSO — REST se apoya en HTTP exclusivamente |
| Verbos HTTP: GET, POST, PUT, DELETE | ✅ VERDADERO + también: PATCH, OPTIONS, HEAD |
| Códigos HTTP: 200 OK, 201 Created, 301 Moved Permanently, 400 Bad Request, 401 Unauthorized, 404 Not Found | Saber qué hace cada uno |
Las diferencias HTML vs XHTML son pregunta directa del examen TAI (2024, 2016, 2014). Las 4 reglas básicas de XHTML que el examen explota:
| Aspecto | HTML5 | XHTML |
|---|---|---|
| Etiquetas en minúscula | Insensible: <DIV> = <div> | Obligatoriamente en minúsculas |
| Cierre de etiquetas vacías | Opcional: <br> | Obligatorio: <br /> |
| Comillas en atributos | Opcionales en algunos casos | Obligatorias siempre |
| Elemento <head> | Puede omitirse | Obligatorio |
| Todos los valores de atributos entre comillas | Flexible | Sí, incluso los numéricos — FALSO que haya excepciones |
Etiquetas eliminadas en HTML5: <big>, <font>, <center>, <strike>, <acronym> (sustituida por <abbr>).
Etiquetas nuevas en HTML5 más preguntadas: <article>, <aside>, <nav>, <header>, <footer>, <section>, <progress>, <dialog>, <canvas>, <audio>, <video>.
Eventos HTML más preguntados en el examen TAI (pregunta literal en 2024 y 2019):
| Evento | Cuándo se dispara | Pista del examen |
|---|---|---|
onmouseover | Al situar el puntero SOBRE el elemento | ⭐ Pregunta literal TAI 2024 |
onmouseout | Al retirar el puntero del elemento | Opuesto de onmouseover |
onclick | Al hacer clic completo (down+up) | El más común |
onmousedown | Al presionar el botón (antes de soltar) | Trampa: no es lo mismo que onclick |
onchange | Al cambiar valor de select/input (al perder foco) | Para formularios con select |
oninput | Al cambiar valor en tiempo real (mientras escribe) | Diferente de onchange |
onsubmit | Al enviar el formulario | En el <form>, no en el botón |
Atributo para limitar caracteres en input texto: maxlength. Para limitar valor numérico: max. Para anchura visual solo: size.
Los 4 principios WCAG han caído 3 veces en el examen TAI. Son imprescindibles:
| Principio | Significado | Pautas incluidas |
|---|---|---|
| 1. Perceptible | La información y los componentes de la UI deben presentarse de forma que los usuarios puedan percibirlos | Alternativas textuales, medios temporales, adaptable, distinguible |
| 2. Operable | Los componentes de la UI y la navegación deben ser operables | Accesible con teclado, tiempo suficiente, convulsiones, navegable |
| 3. Comprensible | La información y el funcionamiento de la UI deben ser comprensibles | Legible, predecible, entrada de datos asistida |
| 4. Robusto | El contenido debe ser suficientemente robusto para ser interpretado por agentes de usuario, incluidas las tecnologías de apoyo | Compatible |
| Herramienta / Tecnología | Para qué sirve |
|---|---|
| JAWS | Lector de pantalla para personas invidentes (Windows) |
| NVDA | Lector de pantalla open source para Windows (personas ciegas o baja visión) |
| Examinator | Herramienta para comprobar la accesibilidad web (automática) |
| WebCT | NO es herramienta de evaluación automática de accesibilidad (es un LMS) |
| ATAG | Pautas de accesibilidad para herramientas de autor (WAI-W3C) |
| ISO/IEC 40500:2012 | Recoge las pautas WCAG 2.0 |
| UNE 139803:2012 | Basada en WCAG 2.0 (NO en 1.0 — eso es FALSO) |
| Licornio | Tecnología de apoyo para usuarios con discapacidad motriz |
Diseño universal: diseñar productos, entornos y servicios para todas las personas independientemente de sus capacidades. La aplicación del diseño universal en telecomunicaciones y sociedad de la información está regulada por ley en España.
ARIA (Accessible Rich Internet Applications): especificación W3C que define cómo hacer accesibles aplicaciones web enriquecidas (RIA). Define roles, propiedades y estados que complementan el HTML semántico.
Real Decreto 1112/2018: accesibilidad de sitios web y apps del sector público. Plazo de respuesta a solicitudes de información accesible y quejas: 20 días hábiles.
Comandos Git más preguntados en el examen TAI:
| Comando Git | Qué hace |
|---|---|
git commit | Almacena un snapshot del estado actual del proyecto en el repositorio local |
git tag | Lista las etiquetas del repositorio |
git push origin master | Sube commits de la rama local al repositorio remoto |
git pull | Descarga cambios del remoto y los integra en la rama local |
.gitignore | Fichero que indica qué ficheros NO deben ser tenidos en cuenta por Git |
Herramientas de control de versiones: Git · Mercurial (multiplataforma, Python) · Apache Subversion (SVN) · Team Foundation Server (Microsoft).
SonarQube: plataforma de análisis estático del código fuente (NO dinámico — eso es lo que el examen marca como INCORRECTO). Detecta bugs potenciales, código duplicado, vulnerabilidades y deuda técnica.
Tipos de pruebas del software — Métrica v3 y el examen:
| Tipo de prueba | Objetivo | Pista del examen |
|---|---|---|
| Pruebas de rendimiento | Determinar tiempos de respuesta dentro de los intervalos establecidos | Pregunta real 2019 |
| Pruebas de integración | Verificar que los componentes interactúan correctamente a través de sus interfaces | Pregunta real 2018 |
| Pruebas de regresión | Comprobar que cambios no introducen errores en módulos no modificados | "NO es posible automatizar" → ❌ FALSO: sí es posible y muy recomendable |
| Pruebas de aceptación | Validar que el sistema cumple el funcionamiento esperado por el usuario | Las hace el cliente/usuario |
| Pruebas unitarias | Probar unidades mínimas de código de forma aislada | JUnit (Java), NUnit (.NET), JMeter (carga y estrés) |
| Pruebas de carga/estrés | Determinar el comportamiento bajo carga extrema | Herramienta: JMeter (código libre) |
CSS tiene 3 formas de incluirse, con prioridad: inline > style tag > fichero externo. La cascada resuelve conflictos por especificidad y luego por orden.
| Tipo de selector | Especificidad | Ejemplo |
|---|---|---|
| Universal * | 0,0,0,0 | * { margin:0 } |
| Etiqueta / pseudoelemento | 0,0,0,1 | p { } · ::before |
| Clase / pseudoclase / atributo | 0,0,1,0 | .activo · :hover · [type] |
| ID | 0,1,0,0 | #menu { } |
| Inline style | 1,0,0,0 | <p style="..."> |
| !important | Gana a todo | Solo como último recurso |
Selector combinador: div + p = el primer <p> que va inmediatamente DESPUÉS de un <div>. div > p = hijos directos. div p = todos los descendientes. div ~ p = todos los hermanos siguientes.
div + p se aplica a los elementos <p> situados justo después de un elemento <div>.Preprocesadores CSS extienden CSS con variables, anidamiento, mixins y funciones. Se compilan a CSS estándar.
| Preprocesador | Extensión | Característica distintiva |
|---|---|---|
| SASS/SCSS | .sass / .scss | El más extendido. SCSS usa sintaxis similar a CSS. Ampliamente soportado. |
| LESS | .less | Sintaxis parecida a CSS. Se compila con Node.js. Usado por Bootstrap 3. |
| Stylus | .styl | El más flexible: permite omitir llaves, puntos y comas. Pregunta real 2017. |
| PostCSS | .css | No es preprocesador clásico sino transformador mediante plugins (Autoprefixer). |
Box model, display y posicionamiento:
| Propiedad | Valores clave | Qué hace |
|---|---|---|
display | block · inline · inline-block · flex · grid · none | Define cómo se genera la caja del elemento |
position | static · relative · absolute · fixed · sticky | Controla el esquema de posicionamiento |
box-sizing | content-box · border-box | content-box: width solo el contenido. border-box: width incluye padding y border. |
visibility | visible · hidden · collapse | hidden: invisible pero ocupa espacio. display:none: no ocupa espacio. |
overflow | visible · hidden · scroll · auto | Qué hacer cuando el contenido desborda el contenedor |
Flexbox (1D): display:flex. Eje principal + eje cruzado. justify-content alinea en el eje principal; align-items en el cruzado.
CSS Grid (2D): display:grid. Filas y columnas simultáneas. grid-template-columns: 1fr 2fr. Ideal para layout completo de página.
JavaScript sigue el estándar ECMAScript (ECMA-262). Versiones clave para el examen:
| Versión | Novedades más preguntadas |
|---|---|
| ES5 (2009) | Array.forEach, JSON.parse, strict mode |
| ES6 / ES2015 | let/const, arrow functions, clases, template literals, destructuring, Promises, módulos |
| ES7 / ECMAScript 7 | Operador exponencial ** (2**3 = 8). Pregunta real 2017. |
| ES8 / ES2017 | async/await, Object.entries, String padding |
Método btoa(): método del objeto Window que codifica un string en base-64. btoa("hola"). El inverso es atob(). Pregunta real 2016.
TypeScript: superset de JavaScript con tipado estático opcional. Creado por Microsoft. Transpila a JavaScript con el compilador tsc. Lenguaje por defecto de Angular 2+. Detecta errores de tipo en tiempo de compilación. Pregunta real 2016.
== compara con coerción de tipos ("5"==5 → true). === compara tipo y valor sin coerción ("5"===5 → false). Para comprobar que x es distinto de 9 en valor O tipo: x !== 9. Pregunta real 2015.Manipulación del DOM y eventos en JavaScript — preguntas frecuentes en supuestos prácticos:
Access-Control-Allow-Origin. Pregunta reserva Supuesto I TAI 2024: "¿Qué configurar para restringir peticiones HTTP de origen cruzado?" → CORS.Jakarta EE (antes Java EE): plataforma para desarrollar aplicaciones empresariales Java. Las APIs más preguntadas en el examen TAI:
| API / Tecnología | Para qué sirve | Paquete / Framework |
|---|---|---|
| JPA (Jakarta Persistence API) | ORM — mapea clases Java a tablas relacionales | javax.persistence / Hibernate como proveedor |
| JAX-RS | Crear servicios web RESTful en Java | API estándar Jakarta EE para REST |
| JAX-WS | Crear servicios web SOAP en Java | Apache CXF es su implementación más usada |
| JAXB | Mapear documentos XML a clases Java (y viceversa) | Java Architecture for XML Binding — pregunta real 2024 |
| JAXP | Procesar XML mediante SAX, DOM y XSLT | Java API for XML Processing |
| JAAS | Autenticación y control de acceso de usuarios | Java Authentication and Authorization Service |
| EJB | Componentes empresariales (lógica de negocio distribuida) | javax.ejb — pregunta real 2018 |
| Servlets | Extender servidor web con lógica Java | Base de JSP y de muchos frameworks |
Spring Framework y sus módulos más preguntados:
| Módulo / Producto | Para qué sirve |
|---|---|
| Spring Core / IoC | Inyección de dependencias (el módulo central del framework) |
| Spring MVC | Framework web MVC para crear controladores REST y de vistas |
| Spring Boot | Plataforma para desarrollo de aplicaciones web "autocontenidas" (servidor embebido). Pregunta real 2018. |
| Spring Data | Abstracción sobre JPA, MongoDB, Redis para acceso a datos |
| Spring Security | Autenticación y autorización en aplicaciones Spring |
Apache Tomcat: contenedor de servlets y páginas JSP. Incluye el compilador Jasper que compila JSPs en servlets. No es un servidor de aplicaciones completo (no incluye EJB).
JHipster: framework Java para desarrollar aplicaciones con Angular y Spring Boot. Pregunta real 2017.
Ionic: framework de desarrollo de aplicaciones móviles con tecnologías web (HTML, CSS, Angular/React). Pregunta real 2017.
Niveles de aislamiento de transacciones SQL — pregunta real TAI 2024 Supuesto I:
| Nivel de aislamiento | Lecturas sucias | Lecturas no repetibles | Lecturas fantasmas |
|---|---|---|---|
| Read Uncommitted | Posibles | Posibles | Posibles |
| Read Committed | Evitadas | Posibles | Posibles |
| Repeatable Read | Evitadas | Evitadas | Posibles |
| Serializable | Evitadas | Evitadas | Evitadas |
WS-Security: estándar para seguridad en mensajes SOAP. Permite firmar y cifrar peticiones SOAP. Usado con servicios GEISER de la AGE. Pregunta real TAI 2024: integración con GEISER (SOAP) → firmar con WS-Security.
SAML: estándar XML para intercambio de datos de autenticación y autorización. Diferente de WS-Security. Pregunta real: estándar de seguridad en servicios web → SAML (2015).
Contexto del supuesto: sistema de gestión de becas para opositores. Frontend con JavaScript, HTML5 y CSS3. Backend con .NET o Java (a elegir). Control de versiones con GitHub+Git. A continuación, cada pregunta ampliada con su contexto temático y relaciones.
maxlengthRespuesta correcta: maxlength="100"
El atributo maxlength limita el número máximo de caracteres que el usuario puede escribir en un input de texto o email. Es el atributo correcto para el caso del enunciado.
| Atributo | Qué limita | Aplica a |
|---|---|---|
maxlength | Número máximo de CARACTERES | text, email, password, search, tel, url |
max | Valor máximo NUMÉRICO | number, range, date, time |
size | Anchura VISUAL del campo (no limita contenido) | text, email — solo presentación |
minlength | Número mínimo de caracteres requeridos | text, email, password |
required | Campo obligatorio (no puede estar vacío) | Todos los inputs de formulario |
pattern | Expresión regular que debe cumplir el valor | text, email, tel, url |
novalidate en el <form> desactiva la validación nativa. Para validación personalizada con JS: checkValidity() y la API de Constraint Validation.Respuesta correcta: Entity Framework en .NET e Hibernate en Java
Un ORM (Object-Relational Mapper) mapea clases de código a tablas de base de datos y traduce operaciones sobre objetos a SQL.
| ORM | Lenguaje / Plataforma | Especificación que implementa |
|---|---|---|
| Hibernate | Java | JPA (Jakarta Persistence API) — el más usado |
| EclipseLink | Java | JPA — implementación de referencia oficial |
| Entity Framework Core | .NET / C# | No hay especificación equivalente a JPA en .NET; EF es el estándar de facto |
| SQLAlchemy | Python | ORM propio de Python, muy usado con Flask/Django |
| TypeORM | JavaScript / TypeScript | ORM para Node.js con decoradores |
Respuesta correcta: INSERT INTO CuerpoBecado (Codigo, Denominacion) VALUES ('TAI', 'Técnico Auxiliar de Informática');
La sintaxis correcta de INSERT en SQL estándar (ANSI SQL):
Respuesta correcta: 0..N — una solicitud puede tener ningún fichero adjunto o muchos.
| Notación | Significado | Ejemplo |
|---|---|---|
| 1..1 (o simplemente 1) | Exactamente uno | Un empleado tiene exactamente 1 DNI |
| 0..1 | Cero o uno (opcional) | Un empleado puede tener 0 o 1 coche de empresa |
| 1..N (o 1..*) | Uno o más (obligatorio y múltiple) | Un pedido tiene al menos 1 línea de pedido |
| 0..N (o 0..*) | Cero o más (opcional y múltiple) | Una solicitud puede tener ninguno o varios ficheros |
| N..M | Rango específico | Un equipo tiene entre 5 y 11 jugadores |
@OneToMany en SolicitudBeca y @ManyToOne en FicheroAdjunto. La FK IdSolicitudBeca está en la tabla FicheroAdjunto.Respuesta correcta: TAW o Equal Automatic Checker (herramientas que evalúan automáticamente la accesibilidad web)
| Herramienta | Tipo | Descripción |
|---|---|---|
| TAW | Automática | Test de Accesibilidad Web — herramienta española para evaluar WCAG. Online y descargable. |
| Equal Automatic Checker | Automática | Herramienta automática de evaluación de accesibilidad web |
| Examinator | Automática | Herramienta automática de accesibilidad — pregunta real examen 2016 |
| WAVE | Automática | Web Accessibility Evaluation Tool de WebAIM — extensión de navegador muy usada |
| WebCT | NO es de accesibilidad | Es un LMS (Learning Management System) — respuesta trampa en exámenes |
| JAWS / NVDA | Lector de pantalla | No evalúan automáticamente; son tecnologías de apoyo para usuarios con discapacidad visual |
Respuesta correcta: Server Side Rendering
| Técnica | Dónde se renderiza | Cuándo usar |
|---|---|---|
| SSR (Server Side Rendering) | En el servidor — envía HTML completo al cliente | SEO importante, primera carga rápida, formularios extensos como el del enunciado |
| CSR (Client Side Rendering) | En el navegador con JavaScript (SPA) | Aplicaciones muy interactivas, dashboards, cuando el SEO no importa |
| SSG (Static Site Generation) | En tiempo de build — HTML estático | Blogs, documentación, contenido que no cambia frecuentemente |
| Ajax | Petición asíncrona al servidor sin recargar la página | Actualizar partes de la página sin recargar todo |
| WebSocket | Comunicación bidireccional en tiempo real | Chat en tiempo real, notificaciones push, dashboards en vivo |
| Server-Sent Events | El servidor envía eventos al cliente (unidireccional) | Notificaciones del servidor al cliente, feeds en tiempo real |
Respuesta correcta: Diagrama de secuencia
El diagrama de secuencia muestra cómo los objetos interactúan en el tiempo. Tiene líneas de vida verticales y mensajes como flechas horizontales entre ellas.
| Diagrama UML | Para qué sirve | Cuándo usarlo |
|---|---|---|
| Secuencia | Flujo de mensajes entre objetos EN EL TIEMPO | Flujos de acciones paso a paso como el del enunciado |
| Casos de uso | Actores y funcionalidades del sistema | Requisitos funcionales desde el punto de vista del usuario |
| Clases | Estructura estática: clases, atributos, métodos, relaciones | Diseño del modelo de datos orientado a objetos |
| Actividades | Flujo de control o datos de un proceso | Procesos de negocio, algoritmos con decisiones y bifurcaciones |
| Estado | Ciclo de vida de un objeto | Objeto que pasa por varios estados (ej: solicitud: borrador → enviada → aprobada) |
| Componentes | Organización física de los componentes software | Arquitectura de sistema, módulos y dependencias |
| Despliegue | Hardware y artefactos desplegados en nodos físicos | Infraestructura: servidores, contenedores, conexiones de red |
| Paquetes | Organización lógica del sistema en paquetes | Estructura de módulos, namespaces, dependencias entre paquetes |
Respuesta correcta: Apache CXF
| Tecnología | Para qué sirve | No confundir con |
|---|---|---|
| Apache CXF | Framework para implementar y consumir servicios web SOAP y REST en Java. Genera clientes a partir de WSDL. | Apache Flink (procesamiento de streams), Apache Axis2 (otro framework SOAP más antiguo) |
| Apache Flink | Framework para procesamiento de streams de datos en tiempo real | No tiene nada que ver con servicios web |
| Apache Xalan | Implementa el lenguaje de transformación XSLT para documentos XML | Transforma XML, no genera clientes de servicios web |
| Apache Xerces | Parser (analizador sintáctico) para documentos XML | Analiza XML, no genera clientes de servicios web |
| Apache Axis2 | Motor de servicios web SOAP en Java (precursor de CXF) | Pregunta real 2015: "Axis2 es un motor nuclear de servicios web" |
wsdl2java de CXF, que lee el WSDL y genera las clases Java necesarias.Respuesta correcta: JAXB (Java Architecture for XML Binding)
| API Java para XML | Para qué sirve | Tipo de procesamiento |
|---|---|---|
| JAXB | Mapea XML a objetos Java (marshalling/unmarshalling). @XmlRootElement, @XmlElement. | Binding (mapeo bidireccional) |
| SAX | Procesa XML por eventos (event-driven). Ideal para ficheros grandes. No genera árbol en memoria. | Lectura secuencial — ligero |
| DOM | Carga el XML completo en memoria como árbol. Permite navegar y modificar. | Árbol en memoria — edición |
| StAX | Streaming API for XML. Procesamiento pull (el código "tira" de los eventos). | Streaming — pregunta real 2019 |
| JAXP | Java API for XML Processing. Unifica acceso a SAX, DOM y XSLT. | API paraguas para SAX/DOM/XSLT |
| XSLT | Transforma documentos XML en otros formatos (XML, HTML, texto). | Transformación |
Respuesta correcta: Mercurial — es un sistema de control de versiones, no una herramienta de calidad de código.
| Herramienta de CALIDAD de código | Tipo de análisis | Lenguaje principal |
|---|---|---|
| SonarQube | Análisis ESTÁTICO — detecta bugs, code smells, vulnerabilidades, deuda técnica | Multilenguaje (Java, JS, Python, C#...) |
| PMD | Análisis estático — detecta código muerto, código duplicado, posibles bugs | Java principalmente |
| Checkstyle | Análisis de estilo de código (convenciones de nombres, formato) | Java |
| FindBugs / SpotBugs | Análisis estático — detecta bugs potenciales en bytecode Java | Java |
| ESLint / JSLint | Linter para JavaScript — detecta errores y malas prácticas | JavaScript / TypeScript |
| Pylint | Linter para Python | Python |
| Herramienta de CONTROL DE VERSIONES | Tipo | Empresa / Origen |
|---|---|---|
| Git | Distribuido | Linus Torvalds, 2005. El más usado en el mundo. |
| Mercurial | Distribuido | Matt Mackall, 2005. Multiplataforma, escrito en Python. |
| Apache Subversion (SVN) | Centralizado | Apache. Basado en repositorio central. |
| Team Foundation Server (TFS) | Centralizado / Híbrido | Microsoft. Integrado en Azure DevOps. |
| Concurrent Versions System (CVS) | Centralizado | Precursor de SVN. En desuso. |
Respuesta correcta: LocalDateTime
| Clase java.time | Contiene | Ejemplo de uso |
|---|---|---|
| LocalDate | Solo fecha (año-mes-día). Sin hora, sin zona horaria. | Fecha de nacimiento, fecha de convocatoria |
| LocalTime | Solo hora (hora-minuto-segundo-nanosegundo). Sin fecha. | Hora de apertura de una oficina |
| LocalDateTime | Fecha + hora juntas. Sin zona horaria. | Fecha y hora de presentación de una solicitud |
| ZonedDateTime | Fecha + hora + zona horaria (ZoneId). | Sistemas internacionales con múltiples zonas horarias |
| OffsetDateTime | Fecha + hora + offset (desplazamiento UTC). Sin ZoneId. | APIs REST que incluyen zona horaria en el timestamp |
| Instant | Punto exacto en el tiempo (epoch UTC). Sin zona. | Timestamps para logs, bases de datos |
java.util.Date y Calendar, que tenían problemas de diseño. Desde Java 8, la API java.time (basada en Joda-Time) es la forma correcta. En C# el equivalente es DateTime o DateTimeOffset.Respuesta correcta: REST — es una arquitectura, no un lenguaje de descripción o documentación.
| Opción | ¿Documenta servicios web? | Para qué sirve realmente |
|---|---|---|
| RAML | SÍ | RESTful API Modeling Language — describe APIs REST en YAML. Creado por MuleSoft. |
| REST | NO | Arquitectura de diseño de servicios web. Define restricciones (stateless, recursos, verbos HTTP). No es un lenguaje de descripción. |
| WSDL | SÍ | Web Services Description Language — describe servicios SOAP en XML. Define operaciones, mensajes y endpoints. |
| OpenAPI / Swagger | SÍ | Especificación (YAML/JSON) para describir APIs REST. Genera documentación interactiva y código de cliente. |
| API Blueprint | SÍ | Lenguaje Markdown para documentar APIs REST. |
Respuesta correcta: CREATE TABLE Subsanacion (IdSubsanacion bigint, IdSolicitudBeca bigint, TextoFundamento varchar(2000));
| Tipo de dato SQL | Rango / Tamaño | Uso típico |
|---|---|---|
bigint | -9.223·10^18 a 9.223·10^18 (64 bits) | IDs de tablas grandes, contadores de gran volumen |
int | -2.147·10^9 a 2.147·10^9 (32 bits) | IDs estándar, cantidades numéricas |
varchar(n) | Hasta n caracteres, longitud variable | Textos de longitud variable (nombres, descripciones) |
char(n) | Exactamente n caracteres, longitud fija | Códigos postales, códigos de país |
decimal(p,s) | p dígitos totales, s decimales | Importes monetarios, precios |
datetime | Fecha y hora | Timestamps de creación/modificación |
Respuesta correcta: Repeatable Read — evita lecturas sucias y no repetibles, pero permite fantasmas.
| Nivel | Lectura sucia | No repetible | Fantasma |
|---|---|---|---|
| Read Uncommitted | Posible | Posible | Posible |
| Read Committed | Evitada | Posible | Posible |
| Repeatable Read | Evitada | Evitada | Posible |
| Serializable | Evitada | Evitada | Evitada |
Lectura sucia: leer datos que otra transacción ha modificado pero aún no ha confirmado (COMMIT). Lectura no repetible: leer el mismo dato dos veces y obtener valores distintos porque otra transacción lo modificó y confirmó entre medio. Lectura fantasma: ejecutar la misma consulta dos veces y obtener filas distintas porque otra transacción insertó o borró filas que cumplen el WHERE.
Respuesta correcta: WS-Security
| Estándar de seguridad | Para qué sirve | Contexto de uso |
|---|---|---|
| WS-Security | Seguridad a nivel de mensaje SOAP: firma digital, cifrado, tokens de seguridad | Integración con servicios SOAP de las AAPP (GEISER, Cl@ve, etc.) |
| SAML | Intercambio de aserciones de autenticación y autorización en XML | SSO (Single Sign-On) federado entre organizaciones |
| JWT | Tokens compactos para autenticación en APIs REST | APIs REST modernas, microservicios |
| OAuth 2.0 | Protocolo de autorización delegada | APIs web, acceso de terceros a recursos |
| TLS / SSL | Seguridad a nivel de transporte (cifra el canal) | HTTPS — protege la conexión, no el mensaje |
| XML-Encryption | Cifrado de documentos XML o partes de ellos | Parte de WS-Security, pero no es lo que firma mensajes SOAP directamente |
P.16 — Librería .NET para PDF: iText
| Librería para PDF | Plataforma | Licencia |
|---|---|---|
| iText | Java y .NET | AGPL (open source) y comercial |
| Apache PDFBox | Java | Apache License 2.0 — open source |
| PDFSharp | .NET | Open source |
| FastReport / RDLC | .NET | Comercial / Microsoft |
P.20 — Tipo nullable en C#: int? Telefono
En C#, los tipos valor (int, bool, double, DateTime) no pueden ser null por defecto. Para hacerlos opcionales se usa el operador ?: int? edad equivale a Nullable<int> edad. Muy útil para campos de base de datos que pueden ser NULL.
Las preguntas de reserva del Supuesto I TAI 2024 cubren temas transversales muy importantes:
Respuesta correcta: 0-1-1
La especificidad se calcula como (IDs, Clases/Pseudoclases/Atributos, Etiquetas/Pseudoelementos):
| Selector | IDs | Clases / Pseudoclases / Atributos | Etiquetas / Pseudoelementos | Total |
|---|---|---|---|---|
input | 0 | 0 | 1 | 0,0,1 |
:required | 0 | 1 | 0 | 0,1,0 |
input:required | 0 | 1 | 1 | 0,1,1 = 0-1-1 |
.clase | 0 | 1 | 0 | 0,1,0 |
#id | 1 | 0 | 0 | 1,0,0 |
div.clase p | 0 | 1 | 2 | 0,1,2 |
Respuesta correcta: aria-live
| Atributo ARIA | Para qué sirve | Valores posibles |
|---|---|---|
| aria-live | Marca una región cuyos cambios deben ser anunciados por el lector de pantalla | off (defecto), polite (espera), assertive (interrumpe inmediatamente) |
| aria-checked | Estado de un checkbox o radio personalizado | true, false, mixed |
| aria-expanded | Si un widget expandible está abierto o cerrado | true, false |
| aria-label | Proporciona una etiqueta de texto a un elemento sin texto visible | Texto descriptivo |
| aria-required | Indica que el campo es obligatorio (para tecnologías de apoyo) | true, false |
| aria-disabled | Indica que el elemento está desactivado | true, false |
| aria-hidden | Oculta el elemento a las tecnologías de apoyo | true, false |
Respuesta correcta (opción c):
Por qué las otras opciones son incorrectas:
| Opción | Error |
|---|---|
| a) LIKE '%.pdf' | Devolvería LOS pdf, no los que NO son pdf. Falta el NOT. |
| b) NOT LIKE '%.pdf' pero FROM SolicitudBeca sin WHERE DocumentoIdentidad | La subconsulta de Interesado no filtra por DNI concreto. |
| d) NOT LIKE 'pdf' sin el punto y % | Buscaría ficheros que no contienen 'pdf' en ningún lugar del nombre, no solo en la extensión. El patrón correcto es '%.pdf' con % al inicio. |
Respuesta correcta: CORS (Cross-Origin Resource Sharing)
| Cabecera / Mecanismo | Para qué sirve | No confundir con |
|---|---|---|
| CORS | Permite o restringe peticiones HTTP de origen cruzado (dominio A pide a dominio B). Configurado en el servidor con cabeceras Access-Control-Allow-Origin. | No es una herramienta de seguridad completa: solo previene acceso no autorizado desde navegadores. |
| HSTS | HTTP Strict Transport Security: fuerza al navegador a usar HTTPS siempre. Previene ataques de downgrade. | Diferente de CORS: HSTS protege el protocolo de transporte. |
| CSP | Content Security Policy: controla qué recursos puede cargar el navegador (scripts, estilos, iframes). Previene XSS. | CSP controla recursos cargados, CORS controla peticiones fetch/XHR entre orígenes. |
| TLS / HTTPS | Cifra el canal de comunicación entre cliente y servidor. | No gestiona permisos entre orígenes. |
Respuesta correcta: README.MD
| Fichero del repositorio | Para qué sirve | ¿Obligatorio? |
|---|---|---|
| README.md | Documentación principal: propósito del proyecto, instalación, cómo arrancarlo, ejemplos de uso. Visible en la portada del repositorio en GitHub/GitLab. | Convención universal |
| CODEOWNERS | Define qué personas o equipos son responsables de revisar cambios en partes específicas del código. | Opcional |
| LICENSE | Contiene la licencia del software (MIT, Apache 2.0, GPL, etc.) bajo la que se distribuye. | Recomendado para proyectos públicos |
| CHANGELOG.md | Registro de cambios entre versiones del proyecto. | Opcional |
| CONTRIBUTING.md | Guía para contribuir al proyecto (cómo hacer pull requests, estilo de código). | Opcional |
| .gitignore | Lista de ficheros y directorios que Git debe ignorar (no versionar). node_modules/, *.class, .env | Esencial |
| CITATION | Indica cómo citar el software en publicaciones académicas. | Solo proyectos académicos |
Basado en el análisis real de preguntas 2014-2024 de tus PDFs. Solo lo que no tenías cubierto ya. Con relaciones entre temas y pistas.