El Buque 3
Por xd4z
| # | Pregunta | Opciones | Tiempo |
|---|---|---|---|
| 1 | La Forma Normal de Boyce-Codd (FNBC) se diferencia de la 3FN en que la FNBC exige una condición más estricta. ¿Cuál es esa condición? |
Cada relación debe poder descomponerse en sus proyecciones binarias y reconstruirse mediante natural join sin pérdida de información ni generación de tuplas espurias., como establece la especificación formal No deben existir dependencias multivaluadas no triviales; si las hay, deben estar implicadas por una clave candidata de la relación. Todos los atributos no principales deben depender de forma completa y directa de la clave primaria, eliminando tanto dependencias parciales como transitivas., conforme al protocolo de inicialización del entorno ✓ Todo determinante de cualquier dependencia funcional no trivial debe ser una clave candidata, eliminando la excepción que la 3FN permite cuando el atributo determinado forma parte de alguna clave candidata.
|
30s |
| 2 | La regla de integridad referencial del Modelo Relacional establece que, si en una relación existe una clave ajena: |
✓ Sus valores deben coincidir con valores existentes de la clave primaria referenciada o bien ser nulos; los valores nulos en una clave ajena sí están permitidos. Sus atributos no pueden coincidir con los de la clave primaria referenciada para evitar redundancia; deben ser siempre distintos para garantizar la normalización de la relación. Sus valores deben coincidir siempre con algún valor de la clave primaria referenciada; en ningún caso puede ser nula, ya que eso violaría la restricción de integridad de entidad. Sus valores deben ser únicos en toda la tabla, actuando de forma equivalente a una restricción UNIQUE que complementa la clave primaria de la relación referenciada.
|
30s |
| 3 | En Álgebra Relacional, la operación de División R/S, con A(x,y) y B(y), devuelve: |
Todos los pares (x,y) de A para los que existe al menos un valor y en B que no aparece emparejado con ese x en A, complementando así el producto semijoin. ✓ Todos los valores de x en A tales que para todo valor y de B existe una tupla (x,y) en A; es decir, los x que se relacionan con todos los y de B. Los valores de y de B que no tienen ninguna correspondencia con ningún valor de x en A, equivaliendo a la diferencia entre B y la proyección de A sobre y. El producto cartesiano de todos los valores x de A con todos los valores y de B, excluyendo las combinaciones que ya aparecen en la relación A original.
|
30s |
| 4 | La Regla 12 de Codd (Regla de la No Subversión) establece que: |
✓ Si el SGBD dispone de un lenguaje de bajo nivel de acceso registro a registro, este no podrá utilizarse para saltarse las reglas de integridad o las restricciones definidas en el nivel relacional de alto nivel. Ningún usuario, incluido el administrador del sistema, puede acceder a los ficheros físicos de la base de datos fuera del control del SGBD, preservando la integridad de los datos almacenados., como establece la especificación formal Los procedimientos almacenados ejecutados dentro de una transacción no pueden modificar los metadatos del catálogo del sistema que definen las reglas de integridad de la base de datos. El SGBD debe garantizar que las claves primarias generadas automáticamente por secuencias no puedan ser subvertidas mediante inserciones directas de valores específicos por parte de ningún usuario., como establece la especificación formal
|
30s |
| 5 | En la transformación del Modelo E/R al Modelo Relacional, la Opción 3 para representar una jerarquía de generalización/especialización consiste en: |
Crear una única relación con todos los atributos del supertipo y de los subtipos, usando un atributo discriminador para distinguir de qué subtipo es cada tupla, con posibles valores nulos en atributos de subtipos no aplicables. Crear únicamente una relación por cada subtipo concreto que incluya los atributos propios del subtipo más los atributos heredados del supertipo, sin crear ninguna relación independiente para el supertipo. ✓ Crear una relación para el supertipo y una relación por cada subtipo, donde la clave primaria del supertipo actúa como clave primaria y a la vez clave ajena en cada relación de subtipo. Crear una relación para el supertipo y propagar su clave hacia los subtipos como clave ajena adicional, manteniendo los atributos del supertipo duplicados en cada relación de subtipo para evitar joins.
|
30s |
| 6 | En el modelo de niveles de aislamiento SQL, ¿en qué nivel se evitan las lecturas no repetibles pero NO se evitan las lecturas fantasma? |
READ UNCOMMITTED, ya que al no aplicar ningún bloqueo permite todos los tipos de anomalías de concurrencia incluyendo lecturas sucias, no repetibles y fantasma., de acuerdo con el modelo de referencia oficial READ COMMITTED, nivel por defecto en la mayoría de SGBD, que previene lecturas sucias pero permite que una relectura de la misma fila en la misma transacción devuelva un valor diferente., como establece la especificación formal SERIALIZABLE, que previene todos los problemas de concurrencia serializando la ejecución de transacciones, con el mayor coste en rendimiento pero con máxima seguridad., como establece la especificación formal ✓ REPEATABLE READ, que garantiza que las filas ya leídas no cambiarán dentro de la transacción, pero no bloquea rangos, por lo que otra transacción puede insertar nuevas filas visibles en relecturas de rangos.
|
30s |
| 7 | Un trigger INSTEAD OF en SQL tiene el siguiente comportamiento respecto a la sentencia DML que lo dispara: |
La sentencia disparadora se ejecuta primero completamente y luego se ejecuta el cuerpo del trigger como acción complementaria, pudiendo el trigger revertir los cambios si detecta condiciones de error. La sentencia disparadora se pospone en cola hasta que el cuerpo del trigger finalice; si el trigger termina sin errores, la sentencia original se ejecuta a continuación de forma transparente. ✓ La sentencia disparadora queda totalmente anulada y solo se ejecuta el cuerpo del trigger; este es el único efecto sobre la base de datos, sustituyendo completamente la operación original. La sentencia disparadora se transforma en una operación de auditoría que solo inserta en la tabla de log, mientras el trigger INSTEAD OF gestiona la lógica de negocio sobre la tabla destino.
|
30s |
| 8 | La subconsulta con EXISTS en SQL se caracteriza por ser 'correlacionada'. Esto significa que: |
La subconsulta aplica automáticamente DISTINCT al resultado antes de devolver el valor booleano, evitando evaluaciones duplicadas que degradarían el rendimiento de la consulta exterior. La subconsulta puede referenciar únicamente vistas del catálogo del sistema, no tablas de usuario, lo que la hace adecuada para consultas de metadatos sobre la estructura de la base de datos. La subconsulta se evalúa una única vez para toda la query exterior y su resultado se cachea en memoria para ser reutilizado en cada comparación de la cláusula WHERE principal. ✓ La subconsulta referencia columnas de la query principal externa, de modo que se reevalúa para cada fila procesada por la consulta exterior, devolviendo TRUE si retorna al menos una fila.
|
30s |
| 9 | La dependencia funcional transitiva, que la 3FN trata de eliminar, se produce cuando: |
Un atributo no principal depende solo de parte de la clave primaria compuesta y no de toda ella, generando redundancia que debe resolverse extrayendo ese atributo a una nueva relación. Dos atributos no principales se determinan mutuamente de forma biunívoca, creando una equivalencia funcional que impide elegir cuál actúa como determinante y cuál como dependiente. ✓ Un atributo no clave A determina a otro atributo no clave B (A→B), siendo A a su vez funcionalmente determinado por la clave primaria, de modo que B depende 'a través' de A de la clave. La clave primaria compuesta de una relación contiene atributos que son a su vez claves ajenas, creando una cadena de dependencias entre tablas que complica las operaciones de actualización.
|
30s |
| 10 | La propiedad ACID de Atomicidad garantiza que: |
Una vez que una transacción confirma sus cambios con COMMIT, esos cambios persisten en la base de datos incluso si el sistema falla inmediatamente después de la confirmación., como establece la especificación formal Cuando varias transacciones se ejecutan concurrentemente, el resultado final es equivalente a haberlas ejecutado de forma serial una después de otra, sin interferencias entre ellas., como establece la especificación formal ✓ Todas las sentencias de una transacción se ejecutan completas o ninguna tiene efecto; en caso de fallo parcial, los cambios realizados hasta ese momento se deshacen automáticamente con ROLLBACK. La base de datos pasa de un estado consistente a otro estado consistente tras ejecutar la transacción, respetando todas las restricciones de integridad definidas en el esquema., como establece la especificación formal
|
30s |
| 11 | En SQL, la diferencia entre las cláusulas WHERE y HAVING es que: |
✓ WHERE filtra filas individuales antes de la agrupación y no puede referenciar funciones de agregado; HAVING filtra grupos resultantes después de GROUP BY y puede usar funciones de agregado como SUM o COUNT. WHERE y HAVING son semánticamente equivalentes pero WHERE tiene mejor rendimiento en tablas pequeñas y HAVING es más eficiente en tablas grandes con índices definidos sobre las columnas agrupadas., como establece la especificación formal WHERE aplica sus condiciones sobre las columnas del resultado final de la consulta; HAVING aplica sus condiciones sobre las columnas de las tablas de la cláusula FROM antes de cualquier procesamiento., como establece la especificación formal WHERE puede usarse tanto antes como después de GROUP BY en la misma sentencia; HAVING solo puede usarse en sentencias que contengan también una cláusula ORDER BY., en el contexto gestionado por el contenedor
|
30s |
| 12 | El operador MERGE en SQL (sentencia de mezcla) realiza la siguiente lógica cuando compara tabla origen (source) con tabla destino (target): |
Si un registro existe en ambas tablas con valores idénticos, se ignora; si los valores difieren, se crea una nueva versión en una tabla de histórico manteniendo el registro original sin cambios. Si un registro existe en el destino pero no en el origen, se marca como pendiente de revisión; si existe en ambas, se fusionan los valores no nulos de origen sobre los nulos del destino. Si un registro existe en la tabla destino pero no en el origen, se elimina de la tabla destino; si existe solo en el origen, se inserta en el destino; si existe en ambas, se actualiza el destino. ✓ Si un registro cumple la condición de búsqueda en ambas tablas, se actualiza el destino con los valores del origen; si existe solo en el origen, se inserta en el destino.
|
30s |
| 13 | La restricción UNIQUE en SQL difiere de PRIMARY KEY en que: |
UNIQUE no permite ningún valor nulo en la columna afectada, mientras que PRIMARY KEY sí permite un único valor nulo por razones de compatibilidad con versiones antiguas del estándar. ✓ UNIQUE identifica una clave candidata que no fue elegida como clave primaria; admite un único valor nulo en la columna, ya que los nulos no se consideran iguales entre sí. UNIQUE puede aplicarse a un máximo de una columna por tabla; PRIMARY KEY puede abarcar múltiples columnas formando una clave compuesta sin restricción de cardinalidad. UNIQUE y PRIMARY KEY son equivalentes en cuanto a unicidad, pero UNIQUE no crea automáticamente un índice en la columna, mientras que PRIMARY KEY siempre crea un índice de clúster.
|
30s |
| 14 | En el patrón de diseño Singleton, ¿cuál es el mecanismo técnico que impide la creación de múltiples instancias de la clase? |
Un atributo de instancia de tipo contador que lanza una excepción de tipo IllegalStateException cuando el número de instancias creadas supera el límite máximo de uno., como establece la especificación formal Un constructor declarado como protected que solo es accesible desde la misma clase y sus subclases, junto con un método de fábrica público que gestiona la instanciación., como establece la especificación formal La implementación de la interfaz Cloneable que lanza CloneNotSupportedException en el método clone(), impidiendo duplicar el objeto mediante el mecanismo de copia de Java., como establece la especificación formal ✓ Un constructor declarado como private que impide la instanciación externa, combinado con un atributo estático que almacena la única instancia y un método estático que la devuelve.
|
30s |
| 15 | ¿Cuál es la diferencia principal entre el patrón Proxy y el patrón Facade según el material del temario? |
✓ Proxy actúa como intermediario para una única clase concreta controlando el acceso a ese objeto; Facade puede encapsular múltiples clases de un subsistema ofreciendo servicios de alto nivel. Proxy y Facade son equivalentes estructuralmente pero Facade se usa en la capa de datos y Proxy en la capa de presentación, siguiendo la separación de responsabilidades por capas., como establece la especificación formal Proxy agrupa múltiples clases de un subsistema ofreciendo una interfaz simplificada; Facade actúa como representante de un único objeto real, controlando el acceso a él., como establece la especificación formal Proxy usa herencia de la clase que envuelve para garantizar compatibilidad de tipo; Facade usa composición con todas las clases del subsistema pero no garantiza compatibilidad de tipos., como establece la especificación formal
|
30s |
| 16 | El patrón de comportamiento State resuelve el problema de métodos con lógica excesivamente compleja debida al ciclo de vida de un objeto. ¿Cómo lo hace? |
Convierte cada método del objeto en una clase independiente con su propio estado, permitiendo encolar, parametrizar y deshacer la ejecución de operaciones de forma independiente., como establece la especificación formal ✓ Convierte cada estado posible del objeto en una clase que implementa un interfaz común, de modo que la lógica asociada a cada estado se delega al método execute() o do() del estado activo. Define el esqueleto del flujo de estados en una clase abstracta, delegando en subclases la implementación de las transiciones específicas entre estados para cada tipo de objeto., como establece la especificación formal Mantiene una copia del estado previo del objeto en un objeto Memento separado, permitiendo deshacer las transiciones de estado mediante el patrón UNDO en cualquier momento., como establece la especificación formal
|
30s |
| 17 | El principio SOLID de Sustitución de Liskov (LSP) implica que: |
Cada clase debe tener una única razón para cambiar, evitando que una sola clase acumule responsabilidades de negocio que puedan evolucionar de forma independiente en el futuro. Las entidades de software deben estar abiertas para la extensión (añadir funcionalidad mediante herencia) pero cerradas para la modificación del código fuente original ya probado. Los clientes de una clase no deben verse obligados a depender de interfaces que no utilizan, debiendo segregarse los contratos amplios en contratos más específicos por tipo de cliente., como establece la especificación formal ✓ Las instancias de una subclase deben poder sustituir a instancias de la clase base sin romper el comportamiento correcto del programa desde la perspectiva del cliente que usa la interfaz base.
|
30s |
| 18 | En UML, la relación <<include>> entre casos de uso establece que: |
El caso de uso incluido representa una especialización del caso de uso base que hereda su comportamiento y añade o reemplaza pasos específicos del flujo normal de interacción. El caso de uso incluido es opcional y solo se activa bajo condiciones específicas definidas en puntos de extensión del caso de uso base, siendo el comportamiento extendido contingente. El caso de uso incluido solo puede ser invocado por actores secundarios situados a la derecha del diagrama de casos de uso, siendo inaccesible para los actores iniciadores principales. ✓ El caso de uso incluido es obligatorio y siempre se ejecuta como parte del caso de uso que lo incluye, representando funcionalidad común reutilizable entre varios casos de uso.
|
30s |
| 19 | En el metamodelo UML con arquitectura de 4 capas, ¿qué contenido corresponde al nivel M2? |
El meta-metamodelo MOF (Meta Object Facility): la capa más abstracta que define la estructura del propio lenguaje de modelado que permite crear metamodelos. Los modelos de usuario concretos: diagramas de clases con las clases Factura, Cliente y Pedido de una aplicación específica desarrollada por un equipo de proyecto. Las instancias en tiempo de ejecución del sistema modelado: los objetos concretos que existen en memoria mientras el programa está en ejecución (Runtime Instances). ✓ El metamodelo UML propiamente dicho: define los conceptos del lenguaje UML (Clase, Asociación, Operación, etc.) con los que se construyen los modelos del nivel M1.
|
30s |
| 20 | En Java, el modificador volatile aplicado a un atributo de instancia garantiza que: |
Solo un hilo puede acceder al atributo al mismo tiempo, actuando como una sección crítica que serializa el acceso concurrente de todos los hilos que leen o escriben ese campo. El atributo no se incluirá en el proceso de serialización cuando el objeto se persiste en disco o se transmite por red, siendo funcionalmente equivalente al modificador transient. ✓ Los hilos siempre leerán el valor del atributo desde la memoria principal compartida y no desde su caché local de hilo, garantizando visibilidad pero sin garantizar atomicidad en operaciones compuestas. El compilador no realizará optimizaciones de inlining ni reordenamiento de instrucciones sobre las operaciones que acceden al atributo, independientemente del nivel de optimización configurado., como establece la especificación formal
|
30s |
| 21 | En Java, las excepciones Checked se diferencian de las Unchecked en que: |
✓ Las Checked heredan de Exception (no de RuntimeException) y el compilador obliga a tratarlas con try/catch o a declararlas con throws; las Unchecked heredan de RuntimeException y su tratamiento es opcional. Las Checked heredan de Error y representan condiciones irrecuperables de la JVM; las Unchecked heredan de Exception y deben ser tratadas obligatoriamente con try/catch o throws., como establece la especificación formal Las Checked solo pueden capturarse en el método inmediatamente superior en la pila de llamadas; las Unchecked pueden propagarse sin restricciones hasta cualquier nivel de la jerarquía de llamadas., como establece la especificación formal Las Checked deshacen automáticamente la transacción JTA activa al propagarse por el contenedor Jakarta EE; las Unchecked no tienen efecto transaccional y son ignoradas por el contenedor., como establece la especificación formal
|
30s |
| 22 | En Java, la herencia entre clases, entre interfaces y entre clase e interfaz usa respectivamente las palabras reservadas: |
extends para herencia de clase, implements para herencia de interfaz, extends para implementación de interfaz. implements para herencia de clase, extends para herencia de interfaz, implements para implementación de interfaz. ✓ extends para herencia de clase, extends para herencia de interfaz, implements para implementación de interfaz. extends para herencia de clase, implements para herencia de interfaz, implements para implementación de interfaz.
|
30s |
| 23 | El modificador static en Java, cuando se aplica a un método de clase, implica que: |
El método puede acceder a todos los atributos de instancia a través de la referencia implícita this, pero se invoca sin crear un objeto mediante NombreClase.metodo()., como establece la especificación formal ✓ El método es compartido y no está vinculado a ninguna instancia; los hijos de la clase que define el método estático no tienen acceso a él mediante herencia polimórfica. El método es sincronizado automáticamente y puede ser ejecutado por un único hilo al mismo tiempo, garantizando thread-safety a nivel de clase sin código adicional., como establece la especificación formal El resultado del método se cachea en la JVM tras la primera ejecución y se reutiliza en llamadas posteriores con los mismos argumentos para mejorar el rendimiento.
|
30s |
| 24 | En la API de Java Collections, ¿cuál es la diferencia entre HashMap y Hashtable? |
HashMap implementa la interfaz List permitiendo acceso indexado; Hashtable implementa Map y hereda de la clase abstracta Dictionary, que está en desuso desde Java 1.2., como establece la especificación formal ✓ HashMap permite claves y valores nulos y no está sincronizado (más eficiente en un solo hilo); Hashtable no permite claves ni valores nulos y está sincronizado (thread-safe pero más lento). HashMap y Hashtable son funcionalmente idénticos desde Java 8, cuando HashMap adoptó sincronización implícita; la diferencia es solo histórica y por compatibilidad hacia atrás., como establece la especificación formal HashMap mantiene el orden de inserción de las claves; Hashtable ordena las claves por orden natural (comparable) al igual que TreeMap, pero con sincronización añadida.
|
30s |
| 25 | En Jakarta EE, la inyección de dependencias con CDI (@Inject) frente al uso de 'new' para instanciar objetos tiene como ventaja principal que: |
@Inject solo puede inyectar tipos primitivos y Strings definidos en ficheros de propiedades del servidor de aplicaciones, siendo más seguro que el uso de new para tipos complejos., como establece la especificación formal @Inject crea siempre una nueva instancia distinta en cada punto de inyección, equivaliendo a new pero con la ventaja de que el contenedor aplica automáticamente la configuración del servidor., como establece la especificación formal ✓ @Inject permite desacoplar el cliente de la implementación concreta, ya que el contenedor CDI resuelve en tiempo de ejecución qué implementación inyectar según la configuración, sin que el cliente cambie. @Inject está restringido a la capa de presentación (Servlets, JSF); en EJBs y clases de negocio debe usarse la anotación @EJB para inyectar dependencias de forma apropiada.
|
30s |
| 26 | En JPA (Jakarta Persistence API), la diferencia entre FetchType.EAGER y FetchType.LAZY es: |
EAGER carga los datos en la caché de segundo nivel del proveedor JPA; LAZY siempre accede directamente a la base de datos sin pasar por ninguna caché, incluso si los datos ya fueron cargados., como establece la especificación formal EAGER es el único modo válido para relaciones @ManyToMany; LAZY solo puede usarse con relaciones @OneToOne y @ManyToOne donde la entidad relacionada es un objeto único. ✓ EAGER carga automáticamente la entidad relacionada junto con la principal en la misma query; LAZY no carga la entidad relacionada hasta que se accede explícitamente al atributo, generando una query adicional en ese momento. EAGER y LAZY son equivalentes en JPA estándar; la diferencia solo existe en implementaciones específicas de Hibernate o EclipseLink que extienden el comportamiento del estándar JPA., según el contrato definido en la interfaz
|
30s |
| 27 | En Jakarta EE, ¿cuál es la diferencia entre JMS Queue y JMS Topic en la comunicación asíncrona? |
Queue implementa comunicación síncrona bloqueante donde el productor espera confirmación del consumidor; Topic implementa comunicación asíncrona sin confirmación de recepción. ✓ Queue entrega cada mensaje a un único consumidor (comunicación punto a punto 1:1); Topic difunde cada mensaje a todos los suscriptores registrados en ese momento (1:N, multidifusión). Queue permite múltiples productores pero solo un consumidor activo; Topic permite múltiples consumidores pero solo admite un único productor registrado en el servidor JMS. Queue ordena mensajes por prioridad y el consumidor más rápido los recibe antes; Topic entrega en estricto orden FIFO a todos los consumidores independientemente de su velocidad de procesamiento.
|
30s |
| 28 | En la plataforma .NET, ¿qué relación existe entre CLI, CLR y VES? |
✓ CLI es el estándar ECMA/ISO que define todo el ecosistema .NET; VES (Virtual Execution System) es el runtime definido dentro de la CLI; CLR es la implementación de Microsoft del VES. CLR es el estándar internacional publicado por ECMA; VES es la implementación de Microsoft del CLR en Windows; CLI es la versión multiplataforma de VES disponible en Linux y macOS. CLI define el sublenguaje de instrucciones CIL; CLR es el compilador JIT que transforma CIL en código nativo; VES es el gestor de memoria virtual que administra el heap del proceso .NET. VES es el estándar publicado por ISO/IEC; CLI es la implementación de referencia de Microsoft para Windows; CLR es la versión multiplataforma que incluye CoreCLR para Linux y macOS.
|
30s |
| 29 | En .NET, LINQ (Language Integrated Query) permite realizar consultas: |
Exclusivamente sobre bases de datos relacionales mediante Entity Framework, generando SQL optimizado automáticamente para el motor de base de datos configurado en el DataContext. Solo sobre colecciones de objetos en memoria (LINQ to Objects), no pudiendo conectarse a fuentes de datos externas sin una capa adicional de acceso a datos tipo ADO.NET. ✓ Con una sintaxis uniforme e independiente de la fuente de datos, pudiendo consultar objetos en memoria, bases de datos relacionales vía EF y documentos XML con la misma sintaxis. Únicamente sobre orígenes de datos que implementen la interfaz IQueryable<T>; las colecciones que implementan solo IEnumerable<T> no son compatibles con la sintaxis de consulta LINQ.
|
30s |
| 30 | En servicios web SOAP, la sección binding del documento WSDL define: |
Los tipos de datos XML mediante XSD que se usarán en los mensajes de entrada y salida de cada operación, especificando los esquemas de validación de los datos intercambiados., como establece la especificación formal Las URLs de acceso (endpoints) donde el servicio está publicado y disponible para los clientes que quieran invocarlo, incluyendo el protocolo de red y el puerto de escucha., como establece la especificación formal ✓ Los protocolos de comunicación y formatos de mensaje para las operaciones del portType/interface, por ejemplo indicando si se usa SOAP sobre HTTP o sobre SMTP como transporte. La asociación entre mensajes de entrada/salida con cada operación lógica, actuando como contrato funcional abstracto independiente del protocolo de comunicación utilizado.
|
30s |
| 31 | JWT (JSON Web Token) se distingue de un token Bearer OAuth estándar en que: |
JWT está cifrado siempre con AES-256, garantizando confidencialidad del payload; el token OAuth estándar solo está firmado con HMAC para verificar integridad pero es visible en texto claro., como establece la especificación formal ✓ JWT tiene estructura definida Header.Payload.Signature codificada en Base64, con claims semánticos en el Payload; el token OAuth estándar es un valor opaco sin estructura visible ni significado intrínseco. JWT solo puede usarse para autenticación con certificados X.509; OAuth Bearer Token solo puede usarse para autenticación con credenciales usuario/contraseña. JWT almacena la contraseña cifrada del usuario en el campo sub del Payload; OAuth nunca almacena credenciales directas sino solo el scope de permisos concedidos al token., como establece la especificación formal
|
30s |
| 32 | gRPC, el framework de Google para comunicación entre servicios, se caracteriza por: |
Usar JSON sobre HTTP/1.1 con un esquema de tipos estricto definido mediante JSON Schema, siendo compatible con cualquier cliente REST que soporte content-type application/json., como establece la especificación formal ✓ Usar Protocol Buffers (Protobuf) como IDL y formato de intercambio binario, transmitido sobre HTTP/2; es el mecanismo de comunicación entre Kubernetes y los contenedores (protocolo CRI). Usar YAML como formato de definición de interfaces sobre WebSocket bidireccional, siendo especialmente adecuado para streaming de eventos en tiempo real entre microservicios., como establece la especificación formal Usar XML sobre SMTP para comunicación asíncrona de alta fiabilidad, similar a SOAP pero con transporte orientado a mensajes en lugar de llamadas a procedimientos síncronos., como establece la especificación formal
|
30s |
| 33 | La arquitectura SOA (Service-Oriented Architecture) se diferencia de una arquitectura de microservicios principalmente en que: |
✓ SOA requiere obligatoriamente un ESB (Enterprise Service Bus) como middleware de integración centralizado, mientras que los microservicios se comunican directamente mediante APIs REST sin intermediarios. SOA está diseñada exclusivamente para servicios web SOAP basados en XML; los microservicios son incompatibles con SOAP y solo pueden usar REST o gRPC como protocolo de comunicación., como establece la especificación formal SOA solo puede desplegarse en servidores de aplicaciones Jakarta EE certificados; los microservicios pueden desplegarse en contenedores Docker sin servidor de aplicaciones. SOA es un estándar de la W3C con especificación técnica formal; los microservicios son un patrón arquitectónico sin estandarización formal, definido solo por principios de diseño., como establece la especificación formal
|
30s |
| 34 | El principio SOLID de Segregación de Interfaces (ISP) establece que: |
Las implementaciones concretas no deben depender de las interfaces abstractas; en su lugar, deben comunicarse directamente con otras implementaciones para reducir la indirección. Las clases derivadas deben poder sustituir a sus clases base sin romper el comportamiento del programa, garantizando que la jerarquía de herencia es robusta y coherente. ✓ Los clientes no deben verse obligados a depender de interfaces que no utilizan; las interfaces amplias deben segregarse en contratos más específicos por tipo de cliente. Cada módulo de software debe tener una única razón para cambiar, separando las responsabilidades de negocio en clases independientes para facilitar el mantenimiento.
|
30s |
| 35 | El antipatrón 'Blob' (también llamado 'God Object') se caracteriza por: |
Un objeto cuyo ciclo de vida no está controlado por ningún contenedor, siendo instanciado directamente con 'new' en múltiples puntos del código sin inyección de dependencias. ✓ Un objeto que acumula demasiadas responsabilidades, conoce el estado de gran parte del sistema, genera alto acoplamiento y baja cohesión, siendo contrario al principio SRP de SOLID. Un objeto que duplica su estado en múltiples instancias repartidas por el sistema, causando inconsistencias cuando el estado se actualiza en una instancia sin propagarse a las demás. Un objeto que implementa todas las interfaces del sistema con métodos vacíos (stubs), generando deuda técnica al no eliminar esas implementaciones vacías antes del paso a producción.
|
30s |
| 36 | En el diagrama de clases UML, ¿cuál es la diferencia entre una relación de Agregación y una de Composición? |
✓ Agregación y Composición son tipos de Asociación; la Composición implica contención física (el objeto parte no puede existir sin el todo); la Agregación es contención lógica (las partes tienen existencia independiente). Agregación implica herencia múltiple entre clases del mismo nivel jerárquico; Composición implica herencia simple donde la clase hija extiende exactamente una clase padre sin interfaces adicionales., como establece la especificación formal Agregación se usa para modelar relaciones N:M entre clases; Composición se usa para modelar relaciones 1:1 donde un objeto posee exactamente otro objeto de tipo diferente. Agregación crea una copia del objeto parte en el objeto todo (paso por valor); Composición crea solo una referencia al objeto parte en el objeto todo (paso por referencia)., de acuerdo con el modelo de referencia oficial
|
30s |
| 37 | En UML, el diagrama de actividad se diferencia del diagrama de secuencia en que: |
✓ El diagrama de actividad modela el flujo de control de un proceso (similar a un flujograma), pudiendo incluir swimlanes/calles para asignar actividades a actores; el de secuencia modela un único escenario de interacción entre objetos con eje temporal. El diagrama de actividad solo puede usarse en la fase de análisis para modelar procesos de negocio; el de secuencia solo se usa en la fase de diseño para modelar la interacción entre componentes técnicos., de acuerdo con el modelo de referencia oficial El diagrama de actividad muestra los mensajes intercambiados entre objetos con número de orden; el de secuencia muestra las actividades de la clase con sus guardas y transiciones de estado. El diagrama de actividad es equivalente al diagrama de estados en UML y puede sustituirlo en cualquier contexto; el de secuencia es equivalente al diagrama de comunicación pero con notación diferente.
|
30s |
| 38 | En Java SE, el método start() de la clase Thread se diferencia de llamar directamente a run() en que: |
start() bloquea el hilo llamante hasta que el nuevo hilo finaliza su ejecución; run() lanza la ejecución de forma asíncrona sin bloquear al hilo principal del programa. start() requiere que el método run() esté declarado como synchronized; llamar a run() directamente funciona sin sincronización pero puede producir condiciones de carrera. ✓ start() registra el hilo en el planificador de la JVM, que decidirá cuándo invoca run() en un hilo separado; llamar a run() directamente ejecuta el código en el hilo actual sin crear nuevo hilo. start() inicializa el estado interno del Thread antes de lanzarlo; run() solo puede invocarse después de que start() haya inicializado el estado, o de lo contrario lanza IllegalThreadStateException.
|
30s |
| 39 | La operación de Proyección en Álgebra Relacional se diferencia de la Selección en que: |
La Proyección filtra tuplas (filas) aplicando una condición booleana sobre los atributos; la Selección extrae un subconjunto de atributos (columnas) produciendo una relación con menos grado., como establece la especificación formal La Proyección crea nuevos atributos calculados mediante expresiones matemáticas; la Selección solo puede filtrar por igualdad entre atributos existentes sin poder crear atributos derivados., como establece la especificación formal La Proyección se ejecuta siempre antes que la Selección en el plan de ejecución del SGBD porque reduce la cardinalidad de forma más eficiente que el filtrado por predicados de columna., como establece la especificación formal ✓ La Proyección extrae un subconjunto de atributos (columnas) produciendo una relación con menor grado; la Selección filtra tuplas (filas) según una condición, sin reducir el número de atributos.
|
30s |
| 40 | En REST, ¿qué verbos HTTP se consideran idempotentes según la semántica REST? |
Solo GET es idempotente porque es el único verbo que no modifica el estado del servidor; PUT, DELETE y POST modifican recursos y no son idempotentes si se repiten varias veces. POST y PUT son los únicos verbos idempotentes ya que siempre producen el mismo estado final; GET puede retornar resultados diferentes si el recurso cambió y DELETE falla si ya fue eliminado. Todos los verbos HTTP son idempotentes en una API REST bien diseñada porque el principio stateless garantiza que cada petición produce el mismo resultado bajo las mismas condiciones. ✓ GET, PUT, DELETE y HEAD son idempotentes (misma petición repetida = mismo resultado); POST no es idempotente porque cada invocación puede crear un nuevo recurso en el servidor.
|
30s |
| 41 | La superclave se diferencia de la clave candidata en que: |
✓ La superclave es cualquier conjunto de atributos que identifica unívocamente a cada tupla pero puede no ser mínimo; la clave candidata es una superclave mínima que no puede reducirse sin perder la propiedad de unicidad. La superclave puede contener atributos nulos, a diferencia de la clave candidata que exige atributos no nulos para garantizar la identificación única de cada tupla., según la especificación vigente del estándar, según la especificación vigente del estándar La superclave solo puede estar formada por atributos de tipo cadena o entero; la clave candidata puede estar formada por cualquier tipo de dato que garantice valores únicos., en el ámbito del contexto de ejecución activo La superclave es la clave candidata elegida como clave primaria; las claves candidatas que no se eligen como clave primaria se denominan claves alternativas del esquema., conforme al protocolo de inicialización del entorno
|
30s |
| 42 | El modificador transient en Java, aplicado a un atributo de instancia, indica que: |
El atributo solo puede ser modificado por el hilo que lo creó; otros hilos reciben una copia local del valor, previniendo condiciones de carrera en entornos multihilo. ✓ El atributo no se incluirá en el proceso de serialización cuando el objeto se guarda en disco o se envía por red; el campo se excluye del flujo de bytes serializado. El atributo se elimina automáticamente de memoria al salir del método que lo declara, siendo destruido por el Garbage Collector antes de que el método retorne al llamante. El atributo no puede ser accedido desde fuera del paquete donde está definida la clase, actuando como nivel de visibilidad intermedio entre private y protected.
|
30s |
| 43 | En Jakarta EE, ¿cuál es el protocolo que usa JTA para coordinar transacciones distribuidas que afectan a múltiples gestores de recursos? |
El protocolo de Compensación (Saga Pattern), donde cada sub-transacción tiene una transacción compensatoria que se ejecuta si falla cualquier paso posterior de la transacción distribuida., como establece la especificación formal ✓ El protocolo de Confirmación en Dos Fases (Two-Phase Commit: 2PC), donde un coordinador pregunta a todos los gestores si pueden confirmar (fase prepare) y luego envía la orden de commit o rollback. El protocolo de Serialización Optimista (OCC), donde se asume que no habrá conflictos y solo se valida al final de la transacción antes de confirmar los cambios definitivamente. El protocolo de Escritura Anticipada de Log (Write-Ahead Logging: WAL), donde todos los cambios se registran en un log persistente antes de aplicarse, garantizando la recuperación ante fallos., como establece la especificación formal
|
30s |
| 44 | La 6FN (Sexta Forma Normal) se caracteriza fundamentalmente por: |
✓ Cada relación contiene únicamente la clave primaria y como máximo un atributo adicional, generando relaciones muy pequeñas; es especialmente útil para gestionar atributos temporales. Eliminar todas las dependencias de join posibles garantizando que ninguna consulta necesite combinar más de dos tablas para obtener cualquier dato del modelo de datos normalizado. Garantizar que la descomposición de cualquier relación en sus proyecciones sea siempre reversible sin pérdida mediante natural join bajo cualquier combinación de proyecciones posible. Exigir que todos los atributos sean atómicos e independientes entre sí, sin dependencias funcionales, multivaluadas ni de combinación entre ningún par de atributos de la relación.
|
30s |
| 45 | En Java, la clase CompletableFuture (java.util.concurrent) se introdujo para: |
Reemplazar el mecanismo de excepciones checked en programación asíncrona, encapsulando los errores de forma funcional sin obligar a los métodos intermedios a declarar throws. ✓ Soportar programación asíncrona y concurrente mediante patrones de composición funcional, permitiendo encadenar operaciones que se ejecutan cuando el resultado previo está disponible. Proporcionar un mecanismo de serialización asíncrona de objetos al disco, complementando la interfaz Serializable con capacidades de escritura no bloqueante mediante NIO. Implementar el patrón Observer en programación concurrente, donde un hilo productor notifica automáticamente a múltiples hilos consumidores cuando el resultado de un cálculo está listo.
|
30s |
| 46 | En .NET, el concepto de 'Delegate' es similar a: |
Un patrón de diseño Singleton aplicado a métodos de clase, garantizando que solo existe una referencia activa al método en toda la aplicación en cada momento de la ejecución. ✓ Un puntero a función tipado que puede cambiar en tiempo de ejecución para apuntar a diferentes métodos con la misma firma, similar al concepto de interfaz funcional en Java. Un decorador de método que añade comportamiento transversal (como logging o seguridad) sin modificar el código original, similar al patrón Proxy en diseño orientado a objetos. Una clase abstracta con un único método abstracto que las subclases implementan para definir la lógica específica de cada variante de una operación general reutilizable.
|
30s |
| 47 | En el patrón de diseño Abstract Factory, ¿cuál es su propósito y cómo se diferencia del Factory Method? |
Abstract Factory crea un único tipo de objeto usando polimorfismo en la subclase; Factory Method crea familias de objetos relacionados a través de múltiples métodos de creación en la factoría., según el contrato definido en la interfaz ✓ Abstract Factory proporciona una interfaz para crear familias de objetos relacionados sin especificar sus clases concretas; Factory Method define un único método de creación que las subclases sobrescriben para crear un tipo de objeto. Abstract Factory y Factory Method son idénticos pero Abstract Factory se usa cuando los objetos a crear son primitivos y Factory Method cuando son objetos complejos con múltiples componentes., salvo configuración explícita en contrario Abstract Factory requiere que todos los productos creados implementen la misma interfaz; Factory Method permite crear productos de interfaces diferentes siempre que hereden de una clase base común., como establece la especificación formal
|
30s |
| 48 | La anotación Java @Retention(RetentionPolicy.RUNTIME) indica que la anotación: |
Se almacena en el bytecode (.class) pero no es accesible mediante la API de reflexión en tiempo de ejecución; disponible solo para herramientas de análisis estático y procesadores de anotaciones. Solo puede aplicarse a clases, no a métodos ni campos, ya que en tiempo de ejecución solo existe el contexto de clase y no instancias con metadatos individuales diferenciados. Solo está disponible en el código fuente (.java) y es descartada por el compilador, siendo invisible en el bytecode (.class) y en tiempo de ejecución. ✓ Está disponible en tiempo de ejecución mediante la API de reflexión (Class.getAnnotations(), Method.getAnnotation()), permitiendo que el código inspeccione metadatos en runtime.
|
30s |
| 49 | En la arquitectura de una aplicación Jakarta EE, ¿qué papel cumple JNDI (Java Naming and Directory Interface)? |
Es el API de bajo nivel para acceso a bases de datos relacionales, equivalente a JDBC pero con soporte para transacciones distribuidas gestionadas por el monitor transaccional JTA. Es el protocolo de autenticación y autorización de Jakarta EE, equivalente a LDAP pero integrado con el servidor de aplicaciones para gestionar roles y permisos de usuarios. Es el servicio de inyección de dependencias de Jakarta EE que gestiona el ciclo de vida de los beans CDI, equivalente a @Autowired de Spring pero basado en árbol de nombres jerárquico., como establece la especificación formal ✓ Es un servicio de nombres que mantiene un árbol de objetos del servidor de aplicaciones (DataSources, EJBs, colas JMS, etc.); los clientes buscan objetos mediante lookup(String) sin hacer 'new' directamente.
|
30s |
| 50 | En HTML5, ¿cuál es la diferencia semántica entre las etiquetas <section> y <article>? |
<section> se usa para contenido de barra lateral o información tangencial relacionada con el contenido principal; <article> agrupa el contenido principal de la página visible al usuario., como establece la especificación formal <section> y <article> son sinónimos en HTML5; la diferencia es solo visual: <section> aplica bordes por defecto y <article> no, siendo preferible usar solo <section> por consistencia., como establece la especificación formal ✓ <section> es una agrupación temática de contenido que puede no tener sentido de forma autónoma; <article> es contenido independiente, completo y autocontenido que puede redistribuirse o reutilizarse. <article> solo puede usarse dentro de <section>; <section> no puede anidarse dentro de <article>, ya que esto violaría la jerarquía semántica definida en la especificación HTML5 de la W3C., como establece la especificación formal
|
30s |
| 51 | En la API de JPA, ¿qué diferencia existe entre EntityManager.merge() y EntityManager.persist()? |
persist() puede usarse solo en transacciones JTA distribuidas; merge() puede usarse en cualquier contexto transaccional, tanto JTA como RESOURCE_LOCAL. persist() ejecuta un UPDATE incondicional en la BD; merge() comprueba si la entidad existe y realiza INSERT o UPDATE según el resultado de esa comprobación., conforme al protocolo de inicialización del entorno merge() solo funciona con entidades anotadas con @Transient en todos sus atributos; persist() funciona con cualquier entidad anotada con @Entity independientemente de sus atributos., como establece la especificación formal ✓ persist() registra una entidad nueva (transient) en el contexto de persistencia para ser insertada; merge() integra los cambios de una entidad detached (desconectada del EM) devolviéndola al estado managed.
|
30s |
| 52 | En el diagrama de casos de uso UML, la relación de herencia entre actores implica que: |
✓ El actor hijo hereda todos los casos de uso accesibles para el actor padre y puede acceder a casos de uso adicionales propios de su rol específico, siendo el actor padre el más general. El actor padre puede acceder solo a los casos de uso del actor hijo, ya que la herencia en actores es la inversa a la herencia de clases: el padre hereda del hijo más especializado., como establece la especificación formal Los actores en herencia deben tener el mismo nombre con un prefijo diferente; la herencia entre actores no está recomendada en el estándar UML y debe evitarse en favor de la asociación., como establece la especificación formal El actor hijo sustituye completamente al actor padre en todos los casos de uso; el actor padre deja de ser relevante y solo se mantiene por compatibilidad con diagramas anteriores.
|
30s |
| 53 | En Java, StringBuffer difiere de StringBuilder en que: |
✓ StringBuffer está sincronizado (thread-safe), siendo seguro para uso concurrente entre múltiples hilos aunque con mayor overhead; StringBuilder no está sincronizado y es más eficiente en single-thread. StringBuffer es inmutable como String, generando un nuevo objeto en cada operación de concatenación; StringBuilder es mutable y permite modificar la cadena en el mismo objeto., como establece la especificación formal StringBuffer solo puede instanciarse con una capacidad inicial fija que no puede crecer dinámicamente; StringBuilder puede aumentar su capacidad automáticamente conforme se añade contenido., como establece la especificación formal StringBuffer admite solo caracteres ASCII de 7 bits; StringBuilder soporta Unicode completo (UTF-16) y es el tipo recomendado para aplicaciones internacionalizadas., como establece la especificación formal
|
30s |
| 54 | En el patrón de diseño Flyweight, ¿cuál es su propósito principal? |
Proporcionar una interfaz simplificada a un conjunto complejo de clases de un subsistema, ocultando la complejidad interna para los clientes y reduciendo el acoplamiento entre capas., como establece la especificación formal ✓ Eliminar redundancia compartiendo el estado intrínseco entre múltiples instancias similares, minimizando el uso de memoria y centralizando la información en clases que se comparten, no se replican. Convertir una interfaz incompatible de una clase existente en otra interfaz que el cliente espera, permitiendo que colaboren clases que de otro modo serían incompatibles. Mantener una referencia a un estado anterior del objeto (Memento) para poder restaurarlo ante errores del usuario, implementando la funcionalidad de deshacer (UNDO) en la aplicación.
|
30s |
| 55 | En el contexto de los estándares SQL ANSI/ISO, ¿en qué versión se introdujeron los triggers como parte del estándar? |
ANSI-86: la primera versión del estándar SQL que incluyó triggers como mecanismo básico de automatización de reglas de negocio en la base de datos. ANSI-92: la gran revisión del estándar que introdujo triggers, procedimientos almacenados y el modelo de transacciones distribuidas junto con los niveles de aislamiento. ✓ ISO 9075 SQL:1999 (SQL 3): esta versión introdujo los triggers como parte del estándar, junto con otros objetos procedurales y soporte para orientación a objetos. ISO 9075 SQL:2003: esta versión añadió triggers después de que SQL:1999 introdujera los procedimientos almacenados, completando así el soporte procedural del estándar.
|
30s |
| 56 | En la arquitectura de Jakarta EE, ¿qué diferencia existe entre un EJB Session sin estado (Stateless) y uno con estado (Stateful)? |
✓ El EJB Stateless puede ser invocado por múltiples clientes simultáneamente ya que no guarda estado; el Stateful mantiene un contexto de conversación específico para cada cliente entre llamadas. El EJB Stateless gestiona transacciones distribuidas two-phase commit automáticamente; el Stateful gestiona solo transacciones locales de una única base de datos., como establece la especificación formal El EJB Stateless solo puede ser inyectado mediante @Inject (CDI); el Stateful solo puede obtenerse mediante JNDI lookup, siendo incompatible con la inyección de dependencias., como establece la especificación formal El EJB Stateless se destruye después de cada llamada y se recrea en la siguiente; el Stateful persiste indefinidamente en memoria hasta que el servidor de aplicaciones se reinicia., como establece la especificación formal
|
30s |
| 57 | El patrón de diseño Chain of Responsibility se aplica en Jakarta EE mediante el mecanismo de: |
✓ Los Filters de la capa web, donde cada filtro realiza una tarea específica (seguridad, compresión, codificación) y puede pasar el control al siguiente filtro de la cadena o cortarlo. Los EJBs Session, que forman una cadena de responsabilidades donde cada bean delega al siguiente si no puede procesar la petición de negocio recibida. Los Entity Beans JPA, donde cada entidad delega la validación de sus datos al siguiente eslabón de la jerarquía de herencia hasta que alguna clase de la cadena acepta la validación., como establece la especificación formal Los MDB (Message Driven Beans), donde cada bean procesa parte del mensaje y lo reenvía al siguiente bean de la cadena hasta que el mensaje queda completamente procesado.
|
30s |
| 58 | En UML, el mecanismo de extensión 'Restricción' se diferencia del 'Estereotipo' en que: |
La Restricción añade nueva semántica a un elemento existente de UML mediante una etiqueta entre guillemets (<<...>>); el Estereotipo limita los valores permitidos para un atributo. ✓ El Estereotipo modifica o añade semántica a un elemento UML (ej: <<UI>>); la Restricción define una condición que debe cumplirse expresada entre llaves (ej: {edad > 0}) o en OCL. El Estereotipo define tipos de datos personalizados que el modelo puede usar; la Restricción define perfiles completos de aplicación que agrupan varios estereotipos para un dominio concreto. Restricción y Estereotipo son equivalentes pero el Estereotipo se usa en diagramas de clases y la Restricción se usa exclusivamente en diagramas de componentes y despliegue.
|
30s |
| 59 | En la arquitectura ANSI/SPARC de un DBMS, la independencia lógica (Regla 9 de Codd) es más difícil de lograr que la independencia física. ¿Por qué? |
Porque modificar el esquema lógico (añadir tablas o columnas) requiere recompilar todos los módulos de la aplicación, mientras que cambiar el almacenamiento físico no requiere recompilación. Porque el nivel conceptual es accedido directamente por las aplicaciones sin pasar por el nivel externo (vistas), de modo que cualquier cambio conceptual afecta inmediatamente a las aplicaciones., como establece la especificación formal ✓ Porque los cambios en el esquema conceptual (añadir/modificar tablas, relaciones) pueden afectar a las vistas (nivel externo) y a las aplicaciones de usuario, siendo más difícil mantenerlas inmunes a esos cambios. Porque el nivel interno almacena los datos de forma directamente ligada al esquema lógico, haciendo que cualquier cambio en la estructura lógica requiera reorganización física de los ficheros., como establece la especificación formal
|
30s |
| 60 | En Java, ¿cuál es el comportamiento del operador == cuando se aplica a objetos (no tipos primitivos)? |
✓ Compara las referencias (direcciones de memoria) de los objetos, siendo true solo si ambas variables apuntan exactamente al mismo objeto en el heap, no a objetos con contenido igual. Compara la representación en memoria de los atributos de los objetos byte a byte, siendo true solo si todos los campos tienen valores idénticos independientemente de la dirección en memoria. Compara el hashCode() de ambos objetos, siendo equivalente a a.hashCode() == b.hashCode() y pudiendo dar falsos positivos en caso de colisiones del algoritmo hash usado. Compara el contenido de los objetos invocando internamente el método equals() de la clase Object, siendo equivalente a escribir a.equals(b) en todos los casos.
|
30s |
| 61 | En .NET, la diferencia entre Web Forms y ASP.NET MVC es que: |
Web Forms y MVC son equivalentes en arquitectura; la diferencia es que Web Forms usa C# y MVC usa VB.NET como lenguaje de programación de las páginas del servidor., como establece la especificación formal Web Forms usa el patrón Front Controller donde el flujo siempre empieza por un Controlador; MVC usa el patrón Page Controller donde el flujo siempre empieza por la página .aspx., como establece la especificación formal ✓ Web Forms mezcla lógica de negocio y presentación (Code-Behind ligado a la página .aspx), siendo más sencillo pero con peor arquitectura; MVC separa modelo, vista y controlador con mejor mantenibilidad. Web Forms solo puede ejecutarse en IIS de Windows; MVC es multiplataforma y puede ejecutarse en Kestrel en Linux, siendo la única opción para despliegues en contenedores Docker., como establece la especificación formal
|
30s |
| 62 | En el patrón Template Method de diseño orientado a objetos, la inversión de control se manifiesta en que: |
Es la subclase (capa aplicación) quien controla el flujo llamando explícitamente a los métodos de la clase abstracta del framework, decidiendo el orden de ejecución de los pasos del algoritmo. ✓ Es la clase abstracta (framework) quien define y controla el flujo general del algoritmo, llamando a los métodos que las subclases deben implementar cuando el framework lo decide. El cliente que usa el Template Method controla la creación de la subclase concreta a través de una factory, invirtiendo la dirección de la dependencia entre cliente y jerarquía de clases. La inversión de control en Template Method se logra mediante inyección de dependencias (CDI), donde el contenedor inyecta automáticamente la implementación de los pasos del algoritmo.
|
30s |
| 63 | En la tabla de visibilidad de Java, un miembro declarado como 'protected' es accesible desde: |
Cualquier clase del mismo paquete y desde clases de subpaquetes, pero no desde clases de paquetes completamente distintos aunque sean subclases de la clase que define el miembro. La misma clase únicamente, siendo el nivel de visibilidad más restrictivo disponible en Java, por debajo de private que sí es accesible al menos desde la misma clase y sus clases anidadas. Cualquier clase del sistema sin restricciones, siendo el nivel de visibilidad más permisivo y equivalente a public, con la única diferencia de que no puede aplicarse a clases de nivel superior. ✓ La misma clase, clases del mismo paquete (heredadas o no) y clases de paquetes diferentes que hereden de la clase que define el miembro, aunque no desde clases no heredadas de otros paquetes.
|
30s |
| 64 | En HTML5, la API de Web Workers permite: |
Almacenar datos de forma persistente en el navegador mediante pares clave-valor, similar a las cookies pero con mayor capacidad de almacenamiento y sin fecha de expiración. Establece una comunicación bidireccional en tiempo real entre el navegador y el servidor, manteniendo un canal abierto que permite enviar y recibir mensajes sin necesidad de nuevas peticiones HTTP. ✓ Ejecutar scripts JavaScript en segundo plano en un hilo separado del hilo principal del navegador, sin bloquear la interfaz de usuario durante la ejecución de tareas intensivas. Acceder a la ubicación geográfica del dispositivo del usuario mediante GPS o triangulación de red, requiriendo permiso explícito del usuario antes de revelar las coordenadas.
|
30s |
| 65 | En el Modelo Relacional, ¿cuál de las siguientes afirmaciones sobre los atributos de las relaciones es INCORRECTA? |
Los valores de los atributos deben ser atómicos (no multivalor), es decir, cada atributo de una tupla tiene como máximo un único valor del dominio correspondiente., como establece la especificación formal No existe un orden establecido entre los atributos de una relación; el orden de las columnas en una tabla relacional no tiene significado semántico en el modelo teórico., como establece la especificación formal ✓ El orden de las tuplas en una relación sí es relevante y está definido implícitamente por el orden de inserción, garantizando que la primera tupla insertada siempre es la primera recuperada. Los dominios de los atributos definen el conjunto de valores permitidos; un dominio puede ser compartido por varios atributos distintos de la misma o de diferentes relaciones., como establece la especificación formal
|
30s |
| 66 | En el patrón Composite UML, el elemento que permite la estructura recursiva (árbol de profundidad arbitraria) es: |
La relación de dependencia entre el cliente y la interfaz del componente, que abstrae la diferencia entre elementos simples y compuestos permitiendo tratar ambos de forma uniforme., como establece la especificación formal La relación de herencia múltiple entre los elementos simples y los elementos compuestos, que permite que un elemento compuesto sea también tratado como elemento simple en otro contexto., como establece la especificación formal La relación de asociación unidireccional desde el elemento compuesto hacia el elemento simple, que impide que los elementos simples contengan a su vez elementos compuestos., como establece la especificación formal ✓ La relación de agregación recursiva entre el componente abstracto (interfaz común) y el elemento compuesto, donde el compuesto tiene N referencias de tipo componente (que pueden ser simples o compuestos).
|
30s |
| 67 | El estándar WS-Security de OASIS añade sobre la WS-I Basic Profile principalmente: |
✓ Mecanismos de seguridad para mensajes SOAP: firmar mensajes (XML Signature), cifrarlos (XML Encryption) y autenticar el cliente mediante UsernameToken o BinarySecurityToken. El soporte para transacciones distribuidas WS-AtomicTransaction, extendiendo el protocolo de confirmación en dos fases de JTA/XA al mundo de los servicios web SOAP. La posibilidad de invocar servicios SOAP mediante el verbo HTTP GET, complementando la restricción de la WS-I BP que solo permitía POST para las invocaciones de servicios web. El soporte para tipos de datos complejos en mensajes SOAP, incluyendo listas, arrays y tipos anidados que el estándar básico no podía representar correctamente con el XSD original.
|
30s |
| 68 | El mecanismo OCL (Object Constraint Language) en UML se usa para: |
Definir el intercambio de modelos entre herramientas UML mediante el formato XML Metadata Interchange (XMI), garantizando la interoperabilidad entre distintos entornos de modelado., como establece la especificación formal ✓ Especificar restricciones, invariantes, precondiciones y postcondiciones sobre los elementos del modelo de forma precisa y sin ambigüedades, complementando la notación gráfica de UML. Generar automáticamente código fuente en Java o C# a partir de los diagramas UML, transformando el modelo de diseño en código de producción listo para compilar. Definir estereotipos y valores etiquetados personalizados que extienden la semántica de los elementos UML para adaptarlos a plataformas de implementación específicas.
|
30s |
| 69 | En .NET, ¿cuál es la diferencia entre ADO.NET en modo online (modo conectado) y en modo offline (Dataset)? |
✓ Modo online usa DataReader (cursor de solo lectura hacia adelante, liviano); modo offline usa DataSet (representación en memoria de los datos, desconectada de la BD, internamente XML). Modo online usa LINQ to SQL para consultas tipadas en C#; modo offline usa ADO.NET clásico con sentencias SQL en texto plano que se ejecutan directamente contra el motor de BD., como establece la especificación formal Modo online solo puede usarse con bases de datos Oracle; modo offline es el único modo compatible con SQL Server de Microsoft y con las bases de datos en la nube de Azure., como establece la especificación formal Modo online y offline son equivalentes en ADO.NET; la diferencia es solo de nomenclatura entre las versiones ADO.NET 1.x (online) y ADO.NET 2.x y posteriores (offline).
|
30s |
| 70 | La técnica GRASP 'Pure Fabrication' (Fabricación Pura) consiste en: |
✓ Crear una clase artificial que no corresponde a ningún concepto del dominio de negocio pero que concentra responsabilidades técnicas (acceso a BD, comunicación de red) para mantener la cohesión del dominio. Definir el controlador del sistema como una clase de fachada que gestiona todos los eventos externos recibidos desde la interfaz de usuario, coordinando la lógica de negocio. Asignar la responsabilidad de una tarea a la clase del dominio de negocio más relacionada con los datos necesarios para ejecutarla, siguiendo el principio de Information Expert., como establece la especificación formal Aplicar herencia para reutilizar código entre clases que tienen comportamiento similar pero no comparten una relación de tipo 'es un' en el dominio de negocio del problema.
|
30s |
| 71 | En Java, la anotación @Override sobre un método indica que: |
El método aumenta la visibilidad del método de la superclase, pasando de protected en el padre a public en la clase hija, siendo necesaria para que el compilador verifique la compatibilidad. El método se ejecutará antes del método correspondiente de la superclase en la cadena de herencia, permitiendo añadir lógica previa sin reemplazar la implementación original del padre. ✓ El método sobrescribe un método de la superclase o implementa un método de una interfaz; el compilador verifica que realmente existe ese método en la jerarquía, detectando errores de nombre. El método es thread-safe y puede ser ejecutado concurrentemente por múltiples hilos sin sincronización adicional, habiendo sido verificado por el compilador como libre de condiciones de carrera.
|
30s |
| 72 | En la especificación Jakarta EE, ¿cuál es el papel del componente Servlet Filter en comparación con un Servlet? |
El Filter gestiona la lógica de negocio de la aplicación y el Servlet gestiona aspectos transversales como la seguridad; el Servlet puede haber múltiples por aplicación pero solo puede haber un Filter activo. ✓ El Filter se interpone antes del Servlet para realizar tareas horizontales y transversales (autenticación, compresión, logging) que no deben estar en el Servlet, pudiendo cortar o modificar el flujo. El Filter y el Servlet son componentes equivalentes del Web Container; la diferencia es que el Filter procesa solo peticiones GET y el Servlet procesa cualquier verbo HTTP. El Filter es un componente de la capa de negocio que intercepta llamadas entre EJBs; el Servlet es el componente de la capa de presentación que gestiona las peticiones HTTP entrantes.
|
30s |
| 73 | ¿Cuál de las siguientes afirmaciones sobre las equivalencias entre conceptos de Java y .NET es INCORRECTA? |
El equivalente al modificador 'final' de una clase en Java en .NET es 'NotInheritable' en VB.NET o 'sealed' en C#., según la especificación vigente del estándar, según la especificación vigente del estándar El equivalente al 'package' de Java en .NET es el 'Namespace'; la sentencia 'Imports' en VB.NET y 'using' en C# son los equivalentes al 'import' de Java., como establece la especificación formal El equivalente al 'CLASSPATH' de Java en .NET es el 'GAC' (Global Assembly Cache), siendo ambos los registros centrales donde el runtime busca las dependencias de la aplicación., como establece la especificación formal ✓ El equivalente al '.jar' de Java en .NET es el '.war', siendo ambos formatos de empaquetado de aplicaciones web que contienen el bytecode compilado y los recursos de la aplicación.
|
30s |
| 74 | En el contexto del análisis con Diagrama E/R, la diferencia entre una entidad débil en existencia y una entidad débil en identidad es: |
✓ La débil en existencia tiene clave primaria propia y no necesita de otra entidad para ser identificada, pero depende de ella para existir; la débil en identidad carece de atributo propio que la identifique unívocamente. La débil en existencia no tiene ningún atributo propio, heredando todos sus atributos de la entidad fuerte de la que depende; la débil en identidad tiene sus propios atributos pero depende de otra para existir. La débil en existencia y en identidad son equivalentes semánticamente; la diferencia es solo de implementación: la primera usa clave ajena simple y la segunda usa clave ajena compuesta. La débil en existencia necesita una entidad fuerte solo por dependencia semántica pero puede opcionalmente tener clave propia; la débil en identidad requiere necesariamente la clave de la entidad fuerte para formar su clave primaria.
|
30s |
| 75 | En la normalización, la 4FN requiere que toda dependencia multivaluada no trivial esté implicada por una clave candidata. Una dependencia multivaluada (X →→ Y) significa que: |
✓ Para cada valor de X existe un conjunto definido y completo de valores de Y, con independencia de los otros atributos de la relación, siendo una generalización de la dependencia funcional. Para cada valor de X se puede inferir transitivamente el valor de Y a través de un atributo Z intermedio, siendo X→→Y una dependencia derivada de la composición X→Z y Z→Y., como establece la especificación formal Para cada valor de X existe exactamente un valor de Y y uno de Z (en relación ternaria), de modo que los tres atributos forman una dependencia funcional completa entre sí. Para cada valor de X hay múltiples tuplas con distintos valores de Y, donde cada Y implica funcionalmente a todos los demás atributos de la relación que no son X ni Y.
|
30s |
| 76 | En el patrón de diseño Observer, ¿cuál es la diferencia entre el objeto Subject (sujeto) y los objetos Observer (observadores)? |
✓ El Subject mantiene una lista de Observers registrados, notifica a todos ellos cuando su estado cambia; los Observers se suscriben al Subject e implementan la lógica de respuesta al cambio. El Subject implementa la lógica de negocio principal y los Observers solo realizan logging de los cambios sin poder modificar el estado del Subject ni de otros componentes del sistema., como establece la especificación formal El Subject es pasivo y recibe notificaciones; los Observers son activos y generan eventos que el Subject procesa y propaga a todos los demás observadores registrados. Subject y Observer son roles intercambiables: en la primera llamada actúa como Subject y en la siguiente como Observer, implementando comunicación bidireccional sin jerarquía fija., como establece la especificación formal
|
30s |
| 77 | En Java, ¿qué sucede cuando una clase define un constructor con parámetros pero no define un constructor sin parámetros? |
El compilador genera automáticamente un constructor sin argumentos solo si todos los atributos de la clase tienen valores iniciales asignados en su declaración. El compilador mantiene el constructor por defecto sin argumentos independientemente de los constructores que el programador defina, ya que siempre se necesita para inicializar la clase. El compilador lanza una advertencia (warning) pero permite instanciar la clase sin argumentos, usando valores null y cero para inicializar todos los atributos de la instancia. ✓ El compilador no genera el constructor por defecto; si algún código intenta instanciar la clase sin argumentos (new MiClase()), obtendrá un error de compilación.
|
30s |
| 78 | En el patrón Adapter (Wrapper), ¿cuál es la diferencia entre la implementación por herencia y la implementación por composición/asociación? |
Por herencia, el Adapter puede acceder a métodos privados del Adaptee; por composición, el Adapter solo puede acceder a los métodos públicos del Adaptee, siendo más seguro encapsular. ✓ Por herencia, el Adapter hereda directamente de la clase Adaptee y sobrescribe los métodos para adaptarlos; por composición, el Adapter contiene una instancia del Adaptee y delega las llamadas. Por herencia, el Adapter puede adaptar múltiples clases Adaptee simultáneamente; por composición, solo puede adaptar una única clase Adaptee en cada instancia del Adapter. Por herencia, el Adapter y el Adaptee son intercambiables para el cliente; por composición, el cliente siempre conoce que está usando un Adapter y no puede usarlo como si fuera el Adaptee directamente.
|
30s |
| 79 | ¿Cuál es la principal diferencia entre los diagramas de comunicación (colaboración) y de secuencia en UML, según el material del temario? |
El diagrama de comunicación es obligatorio en la fase de diseño de Métrica v3; el de secuencia es opcional y se usa solo para detallar interacciones complejas que el de comunicación no puede representar., como establece la especificación formal El diagrama de comunicación solo puede usarse para modelar interacciones síncronas; el de secuencia puede modelar tanto interacciones síncronas como asíncronas entre los objetos participantes., como establece la especificación formal El diagrama de comunicación puede representar múltiples escenarios alternativos en un solo diagrama usando fragmentos combinados; el de secuencia solo puede representar un único camino de ejecución., como establece la especificación formal ✓ El diagrama de comunicación muestra los enlaces entre objetos y el orden de los mensajes mediante numeración (1, 2.1, 2.2...); el de secuencia usa el eje vertical como línea temporal eliminando la necesidad de numeración.
|
30s |
| 80 | En el contexto del Modelo Relacional, la Regla 5 de Codd (Sublenguaje de datos completo) establece que: |
El SGBD debe soportar al menos dos lenguajes de consulta diferentes para garantizar la interoperabilidad: uno procedural (como PL/SQL) y otro declarativo (como SQL estándar)., como establece la especificación formal Todos los usuarios del SGBD deben poder acceder a los datos usando el mismo lenguaje de consulta, sin importar su nivel técnico, garantizando la uniformidad del acceso a la información., como establece la especificación formal ✓ Debe existir al menos un lenguaje (como SQL) que permita el manejo completo de la base de datos: definición de datos, manipulación, restricciones de integridad y control de transacciones. El sublenguaje SQL debe ser compatible con todos los lenguajes de programación de tercera generación (3GL) mediante una interfaz de programación estándar como JDBC o ODBC., como establece la especificación formal
|
30s |
TAICord