AD sobre temario que ha salido en examens 2026
|
|
Título del Test:
![]() AD sobre temario que ha salido en examens 2026 Descripción: AD sobre temario que ha salido en examens 2026 |



| Comentarios |
|---|
NO HAY REGISTROS |
|
Gestión de Ficheros 1. Un sistema de baja latencia requiere modificar un registro de tamaño fijo en un archivo binario de 5 GB. El desarrollador necesita posicionarse exactamente en el byte 2048 sin procesar el contenido anterior. ¿Cuál es el enfoque más eficiente?. Utilizar un BufferedReader envuelto en un InputStreamReader para aprovechar el búfer de memoria interna y saltar líneas hasta la posición deseada. Emplear la clase RandomAccessFile en modo "rw", utilizando el método seek(2048) para situar el puntero directamente en la dirección indicada. Instanciar un FileInputStream y realizar una lectura secuencial mediante el método read() hasta que un contador alcance el valor del desplazamiento requerido. Usar la interfaz Path de NIO.2 para cargar el archivo completo en un bloque de memoria temporal y realizar una búsqueda binaria del registro. 2. En el análisis de documentos XML de gran envergadura (varios gigabytes), ¿por qué se desaconseja el uso del modelo DOM frente al analizado SAX?. DOM lee el archivo de forma secuencial basada en eventos, lo que impide realizar una navegación bidireccional por la jerarquía de nodos del documento. SAX permite actualizar dinámicamente el contenido y la estructura del documento en memoria, mientras que DOM es de solo lectura por defecto. DOM carga el árbol de nodos completo en la memoria del ordenador, lo que consume recursos excesivos y ralentiza el proceso frente a la lectura línea por línea de SAX. SAX vincula directamente las etiquetas XML con objetos Java mediante Data Binding, eliminando la necesidad de gestionar una estructura de árbol. 3. ¿Qué distinción técnica fundamental entre los métodos de la clase File clásica es vital para evitar errores de lógica al automatizar la creación de recursos?. El método mkdir() se utiliza exclusivamente para crear directorios, mientras que createNewFile() genera un nuevo fichero vacío si no existía. mkdir() genera un flujo de datos (stream) de salida, mientras que createNewFile() establece un búfer de memoria temporal para la persistencia. createNewFile() permite definir el encoding del sistema, mientras que mkdir() hereda la codificación UTF-8 de la Máquina Virtual de Java. mkdir() crea toda la jerarquía de carpetas necesaria, mientras que createNewFile() requiere que la ruta absoluta sea validada previamente. 4. ¿Qué ventaja técnica aporta el uso de un BufferedReader frente a la clase Scanner al procesar flujos de texto masivos?. Scanner es más eficiente al cargar líneas completas mediante un búfer interno, evitando el acceso constante al disco físico. Scanner permite la lectura aleatoria mediante punteros de archivo, mientras que BufferedReader está limitado estrictamente al acceso secuencial. BufferedReader es una subclase de InputStream orientada al tratamiento de bytes sin procesar como imágenes o vídeo. El BufferedReader es más eficiente porque utiliza un búfer de memoria para cargar líneas completas, evitando acceder al disco por cada carácter. 5. Se requiere asegurar que ciertos archivos de log sean eliminados automáticamente solo cuando el proceso de la Máquina Virtual de Java concluya. ¿Cómo debe procederse?. Invocar al método delete() inmediatamente después de cerrar el flujo con close() dentro del bloque finally. Utilizar el método deleteOnExit(), que marca el recurso para que la JVM lo elimine solo cuando esta finalice su ejecución. Emplear la opción REPLACE_EXISTING de Files.copy() para sobrescribir los logs con un flujo vacío al final del proceso. Configurar el archivo con el modificador transient para que el recolector de basura lo elimine al detectar que no hay referencias activas. 6. ¿Cómo impacta el uso de un "Stream" (flujo) en la gestión de memoria de una aplicación Java que procesa ficheros?. Los flujos almacenan automáticamente los datos en una memoria caché interna, lo que permite recorrerlos diversas veces. Se trata de librerías para gestionar datos de forma ordenada que no guardan datos en memoria, es decir, carecen de cauce o caché. Solo permiten el acceso aleatorio a los archivos binarios, siendo ineficientes para la lectura secuencial de documentos de texto. Obligan al uso de codificaciones estáticas, impidiendo el soporte de sistemas basados en el estándar de transformación UTF-8. 7. Al realizar copias de ficheros con la API NIO.2 (java.nio.file), ¿cuál es el comportamiento por defecto si el destino ya existe físicamente?. La operación de copia fallará lanzando una excepción a menos que se especifique explícitamente la constante REPLACE_EXISTING. La API sobrescribe automáticamente el destino para garantizar que la operación de persistencia se complete con éxito. Se genera un archivo duplicado con un sufijo incremental para evitar la pérdida accidental de datos en el sistema de ficheros. El método copy() devuelve un valor booleano falso y el puntero de archivo se sitúa al inicio del flujo de origen. Bloque 2: Gestión de Conectores (JDBC) 8. En una arquitectura de software que requiere ejecutar consultas SQL con parámetros variables proporcionados por el usuario, ¿cuál es la mejor práctica?. Utilizar la interfaz Statement y concatenar las variables directamente en la cadena SQL para agilizar la ejecución. Emplear PreparedStatement, ya que permite el uso de parámetros dinámicos con el marcador ?, mejorando la seguridad y el rendimiento. Usar CallableStatement, puesto que es la única interfaz que cifra automáticamente los parámetros enviados al servidor de datos. Activar el modo setAutoCommit(true) para que el driver JDBC valide la integridad de la consulta antes de enviarla. ¿Qué sucede técnicamente cuando un desarrollador invoca el método setAutoCommit(false) sobre un objeto de conexión JDBC?. La base de datos cierra todas las sesiones activas para garantizar que la transacción actual sea la única con acceso a las tablas. Se desactiva la confirmación automática, permitiendo gestionar transacciones manualmente y deshacer cambios con rollback() ante excepciones. El driver JDBC empieza a utilizar automáticamente Savepoints tras cada instrucción INSERT o UPDATE ejecutada. Se habilita el uso de la interfaz ResultSet para recorrer los resultados de la transacción en ambos sentidos (atrás y adelante). 10. Se ejecuta una sentencia SQL para modificar registros existentes. ¿Qué método de ejecución debe utilizarse y qué tipo de dato retorna?. executeQuery(), el cual retorna un objeto ResultSet con las filas que han sido modificadas en la base de datos. execute(), que retorna siempre un valor booleano indicando si la operación ha generado o no un conjunto de resultados. executeUpdate(), utilizado para operaciones INSERT, UPDATE, DELETE y DDL, retornando el número de filas afectadas. commit(), que ejecuta la instrucción en el servidor y devuelve el identificador único generado para el registro. 11. ¿Cuál es el procedimiento estándar para cargar un driver JDBC en la memoria de la aplicación según las especificaciones técnicas?. Debe cargarse dinámicamente mediante el método Class.forName("nombre.driver") una sola vez en toda la aplicación. Se debe invocar a DriverManager.getConnection() antes de cada consulta SQL para asegurar que el driver está registrado. El driver se registra automáticamente al instanciar un objeto de la interfaz Connection, por lo que no requiere carga explícita. Se debe cargar dentro del bloque finally para garantizar que el controlador esté disponible incluso tras un error de conexión. 12. Al recuperar datos mediante una consulta SELECT, el desarrollador obtiene un objeto ResultSet. ¿Qué característica de navegación define a este objeto por defecto?. Permite el acceso aleatorio a cualquier fila mediante un índice numérico, similar a un array de objetos Java. El cursor se sitúa automáticamente en la última fila para facilitar la obtención del recuento total de registros devueltos. Solo se puede recorrer hacia adelante fila a fila utilizando el método next(), que avanza a la siguiente posición. El objeto ResultSet se cierra inmediatamente después de que el cursor lee el primer atributo del primer registro. 13. Un desarrollador necesita ejecutar un procedimiento almacenado en el motor de base de datos que requiere parámetros de entrada y salida. ¿Qué interfaz es obligatoria?. Statement, ya que permite enviar cualquier comando nativo del gestor de base de datos como una cadena plana. PreparedStatement, debido a que hereda de Statement y permite el uso de marcadores de posición para los valores del procedimiento. CallableStatement, que es la interfaz específica de JDBC diseñada para la invocación de procedimientos almacenados. EntityManager, puesto que gestiona el ciclo de vida de las funciones de negocio de forma automática mediante JPA. 14. ¿Qué ventaja principal define a una base de datos embebida como SQLite o Derby frente a los sistemas gestores tradicionales?. Requieren un servidor externo dedicado y una configuración compleja de red para permitir la conexión JDBC. Se incorporan dentro del propio software, resultando invisibles para el usuario final y careciendo de una interfaz de gestión externa. Utilizan el modelo jerárquico XML como unidad mínima y máxima de almacenamiento, eliminando el concepto de tabla. No permiten el uso de transacciones manuales, operando siempre bajo un modo de confirmación automática forzosa. Bloque 3: Herramientas de Mapeo Objeto-Relacional (ORM) 15. Un objeto Java ha sido persistido en la base de datos. Si el desarrollador cierra la sesión de Hibernate vinculada, ¿en qué estado de persistencia queda el objeto?. Transitorio (Transient), ya que al no haber sesión activa, el objeto pierde su identificador único y su representación en la base de datos. Persistente, dado que la información ya reside en las tablas físicas y el objeto mantiene su asociación con el PersistenceContext. Separado (Detached), puesto que el objeto ya ha sido persistido y posee un ID, pero la sesión con la que estaba vinculado se ha cerrado. Gestionado, indicando que el objeto entrará automáticamente en el siguiente ciclo de transacción al abrir una nueva SessionFactory. 16. ¿Cuál es la diferencia de comportamiento entre los métodos get() y load() al buscar un identificador que no existe en la base de datos?. get() retorna el objeto o null si no existe; load() retorna un "proxy" y lanza una excepción si el registro no se halla físicamente. get() lanza una excepción de tipo ObjectNotFoundException, mientras que load() devuelve simplemente un valor null. load() sincroniza inmediatamente el estado del objeto con la base de datos, mientras que get() solo busca en la memoria caché local. get() es un método de la interfaz Session, mientras que load() pertenece exclusivamente al EntityManager de JPA. 17. ¿Cuál es la relación jerárquica y de ciclo de vida recomendada para las interfaces SessionFactory y Session?. Debe existir una Session única para toda la aplicación y múltiples SessionFactory para cada operación individual del usuario. Habitualmente existe una única SessionFactory por cada base de datos, mientras que se crea una Session ligera para cada operación. Ambas deben ser instanciadas y cerradas simultáneamente en cada transacción para evitar el desfase objeto-relacional. SessionFactory gestiona las entidades en estado transitorio, mientras que Session solo se ocupa de los objetos en estado separado. 18. Un desarrollador utiliza Hibernate y desea insertar un nuevo registro. ¿Qué diferencia técnica existe entre los métodos save() y persist()?. persist() devuelve el identificador generado por la base de datos, mientras que save() solo cambia el estado del objeto a persistente. Ambos son idénticos, pero persist() es el método estándar de JPA y save() es exclusivo de la implementación nativa de Hibernate. save() retorna el identificador (ID) del objeto guardado, mientras que persist() simplemente cambia el estado de la instancia a persistente. save() permite guardar modificaciones de un objeto sin conocer la sesión, a diferencia del método persist(). 19. ¿Cómo se define el lenguaje HQL (Hibernate Query Language) y en qué se diferencia fundamentalmente del SQL tradicional?. Es un lenguaje orientado a objetos que utiliza nombres de clases y sus propiedades mapeadas en lugar de tablas y columnas físicas. HQL realiza consultas directamente sobre los nombres de las tablas y columnas físicas para aumentar el rendimiento del driver JDBC. Requiere el uso del símbolo $ para identificar las variables dentro de la sentencia, a diferencia del marcador ? de SQL. Solo permite realizar operaciones de lectura (SELECT), delegando las inserciones y borrados al objeto Connection. 20. En el contexto de Hibernate/JPA, ¿qué función cumple la anotación @Transient sobre un atributo de una clase?. Indica que el atributo debe ser tratado como un objeto nuevo (sin ID) que aún no ha sido asociado a ninguna sesión. Se utiliza para indicar que ese atributo específico no se debe persistir (guardar) en la base de datos. Marca el atributo como una clave foránea que debe ser ignorada durante la sincronización del PersistenceContext. Define que el atributo es de tipo LOB y debe ser tratado como un BLOB o CLOB según su naturaleza binaria. 21. Respecto a las estrategias de herencia en JPA, ¿qué caracteriza a la opción SINGLE_TABLE?. Crea una tabla independiente para cada clase concreta de la jerarquía, sin compartir columnas entre ellas. Utiliza una única tabla para toda la jerarquía de clases, empleando una columna discriminadora para diferenciar los tipos. Genera tablas separadas para cada clase, pero las vincula mediante la clave primaria en una relación de tipo "join". Mapea cada clase a un archivo XML independiente dentro de la colección de la base de datos nativa. Bloque 4: BBDD Objeto-Relacionales y Orientadas a Objetos 22. El estándar SQL:1999 introdujo los tipos LOB. ¿Para qué se utiliza específicamente un BLOB frente a un CLOB?. • A) El BLOB se emplea para almacenar grandes volúmenes de texto, mientras que el CLOB es exclusivo para documentos XML. • B) El CLOB se usa para cadenas de caracteres (texto) muy largas, mientras que el BLOB es para datos binarios como imágenes o vídeo. • C) BLOB es un tipo de dato para arrays y colecciones, mientras que CLOB define punteros a archivos externos de tipo BFILE. • D) Ambos son idénticos, pero BLOB es el término utilizado en bases de datos orientadas a objetos y CLOB en las relacionales. 23. En lenguajes de consulta como OQL y XQuery, ¿qué símbolo es preceptivo para la declaración e identificación de variables?. El marcador de interrogación (?), siguiendo el estándar de las consultas parametrizadas en JDBC. El símbolo del dólar ($), que se coloca delante del nombre elegido para la variable (ej. $x). El operador flecha (->), utilizado para acceder a los atributos internos de un objeto complejo. Los corchetes ([]), que envuelven el nombre de la variable para diferenciarla de las etiquetas XML. 24. ¿Cómo permite la interfaz Struct de JDBC gestionar los atributos de objetos complejos procedentes de una BDOR como Oracle?. Transforma automáticamente el objeto en un JavaBean serializable mediante procesos de introspección y reflexión. Permite recuperar los atributos mediante el método getAttributes(), devolviendo un array de objetos (Object[]) en el orden de creación. Actúa como un analizado SAX que recorre los atributos del objeto de forma secuencial basada en eventos. Mapea cada atributo a una columna discriminadora en una tabla única de tipo SINGLE_TABLE. 25. ¿Qué sucede técnicamente con un objeto declarado en PL/SQL que no ha sido inicializado?. Contiene una estructura vacía con valores por defecto (ceros o cadenas nulas) según el tipo de sus atributos. Es atómicamente nulo (null) y cualquier comparación realizada con él dará como resultado un valor nulo. Se le asigna un identificador transitorio para que Hibernate pueda gestionarlo tras la primera operación de persist(). •El sistema lanza una excepción de tipo SQLException al intentar acceder a cualquiera de sus atributos. 26. Para definir la lógica de los métodos de un objeto en Oracle mediante PL/SQL, ¿cuál de las siguientes afirmaciones es correcta?. Basta con definir el objeto mediante la sentencia CREATE TYPE incluyendo sus atributos y firmas de métodos. Es necesario utilizar CREATE TYPE para la estructura y CREATE TYPE BODY para implementar la lógica de las funciones. Se debe emplear un bloque DECLARE...BEGIN...EXCEPTION...END directamente sobre la tabla donde reside el objeto. El objeto debe heredar de la interfaz Struct para que sus métodos puedan ser invocados mediante una llamada JDBC. 27. En el ámbito de las bases de datos de objetos, ¿cómo se define el concepto de polimorfismo?. Es la capacidad de un objeto de ofrecer una respuesta diferente según los parámetros utilizados en su invocación. Es la relación jerárquica donde un tipo de objeto específico deriva de uno más general heredando sus atributos. Consiste en la ocultación de las dades para asegurar que solo se puedan modificar mediante métodos definidos. Es el proceso de cargar un documento XML completo en memoria en forma de árbol de nodos bidireccional. 28. ¿Qué ventaja fundamental ofrecen las Bases de Datos Orientadas a Objetos (BDOO) frente al modelo relacional tradicional?. Permiten el uso de claves primarias y foráneas para relacionar tablas de forma mucho más eficiente y segura. Guardan la información directamente como objetos, eliminando la necesidad de realizar mapeos complejos y operaciones de tipo join. Son compatibles con el lenguaje SQL estándar, lo que garantiza la independencia total del gestor de datos. Utilizan el documento XML como unidad mínima de almacenamiento, garantizando la preservación del orden inherente. Bloque 5: Bases de Datos XML 29. ¿Qué se considera la unidad mínima y máxima de almacenamiento en una base de datos nativa XML (NXD)?. La tabla relacional, donde cada fila corresponde a un nodo del árbol XML cargado en memoria. El documento (o recurso), que se almacena íntegramente siguiendo un modelo lógico específico para XML. La col·lecció, que actúa como el único contenedor de datos binarios y textuales de forma plana. El elemento individual, que se extrae del documento original mediante el uso de expresiones de ruta XPath. 30. En el gestor eXist-db, ¿cómo se organiza jerárquicamente la información almacenada?. Mediante tablas vinculadas por identificadores únicos que emulan la jerarquía del archivo original. Mediante un archivo manifest.mf que indica la ubicación de las bibliotecas JAR necesarias para el procesado. Utilizando una EntityManagerFactory que mapea cada nodo XML a una clase de tipo POJO. A través de col·leccions, que actúan de manera equivalente a las carpetas de un sistema de archivos para mantener el orden. 31. ¿Cuál es la estructura de consulta fundamental en XQuery para realizar filtrados y ordenaciones avanzadas?. El bloque procedimental DECLARE...BEGIN...END, que combina SQL con estructuras de control de flujo. La expresión FLWOR, que utiliza las cláusulas for, let, where, order by y return. La sintaxis de ejes de XPath, como ancestor, child o descendant, para navegar por el árbol de nodos. El uso del marcador $ para definir variables que se inyectan en una sentencia de tipo PreparedStatement. 32. ¿Qué símbolo es obligatorio en XPath para seleccionar o filtrar por un atributo de un nodo XML?. El símbolo de la arroba (@), por ejemplo en //@id, para referenciar atributos específicamente. El punto (.), que identifica el nodo actual o la raíz de la búsqueda en curso. El signo del dólar ($), que declara una variable dentro de la expresión de ruta para su posterior transformación. Los corchetes ([]), que sirven para delimitar el nombre del atributo frente al valor del nodo. 33. ¿Por qué se recomienda en eXist-db fragmentar la información en muchos documentos pequeños en lugar de uno solo de gran tamaño?. Porque las expresiones de ruta XPath son incapaces de navegar por documentos que excedan el límite de memoria. Debido a que eXist-db bloquea todo el documento durante las operaciones de lectura o escritura, afectando al rendimiento. Para permitir que el analizador SAX pueda disparar eventos de forma paralela sobre diferentes recursos. Porque los archivos de configuración de índices .xconf solo son compatibles con recursos binarios. 34. ¿Dónde deben almacenarse obligatoriamente los archivos de configuración de índices (.xconf) en el gestor eXist-db?. En la raíz de la colección que contiene los documentos que se desean indexar. En la ruta del sistema /db/system/config para que el gestor los aplique correctamente. Dentro de la carpeta META-INF del archivo JAR donde reside el driver JDBC de la base de datos. En el mismo directorio que el archivo persistence.xml, para asegurar la sincronización con el PersistenceContext. 35. ¿Qué diferencia técnica existe entre los mecanismos de validación DTD y XSD según su capacidad de definición?. DTD permite definir espacios de nombres y tipos de datos complejos, mientras que XSD es una herramienta básica limitada. •DTD define la estructura y atributos pero no soporta tipos de datos complejos; XSD es más avanzado y permite definiciones precisas. XSD es un lenguaje de consulta para transformar documentos, mientras que DTD se encarga exclusivamente de la navegación. DTD es obligatorio en las bases de datos nativas XML, mientras que XSD solo se utiliza en herramientas de mapeo ORM. Bloque 6: Programación de Componentes de Acceso a Datos 36. Para que una clase Java sea considerada técnicamente un JavaBean reutilizable, ¿qué reglas debe cumplir obligatoriamente?. Heredar de la clase EntityManager, implementar Remote y poseer métodos de acceso privados. Estar alojada en la raíz de un archivo JAR que contenga un fichero persistence.xml configurado para Hibernate. Utilizar exclusivamente el modificador transient en todos sus atributos y poseer un constructor con todos los parámetros. Tener un constructor por defecto (sin parámetros), implementar Serializable y ofrecer acceso público mediante mètodes get/set. 37. ¿Cuál es la diferencia de comportamiento entre un EJB de sesión de tipo "Stateless" y uno de tipo "Stateful"?. Indicar que un atributo específico no se debe serializar ni guardar en un archivo físico o base de datos. El bean "Stateless" mantiene el estado del cliente entre diferentes cridas, mientras que el "Stateful" lo elimina tras cada ejecución. El "Singleton" es un tipo de bean "Stateful" que comparte su instancia con todos los clientes simultáneamente. Solo los beans "Stateless" pueden ser invocados por clientes remotos mediante el uso de la anotación @Remote. 38. ¿Qué tipo de bean de la arquitectura EJB no se invoca directamente por el cliente, sino que se activa al recibir un mensaje?. Bean de sesión de tipo Singleton. Bean controlado por mensajes (Message-Driven Bean). Bean de entidad (Entity Bean) gestionado por un EntityManager. Bean de interfaz remota definido mediante la anotación @Remote. 39. ¿Cómo se distinguen los procesos de "Introspección" y "Reflexión" en el desarrollo de componentes?. La introspección permite modificar la estructura del programa en ejecución, mientras que la reflexión es solo un análisis estático. La introspección es el análisis automático para revelar propiedades; la reflexión es la capacidad de observar y modificar la propia estructura dinámicamente. La reflexión se utiliza para validar archivos XML mediante DTD, mientras que la introspección sirve para configurar la URL de una conexión JDBC. Ambos términos son sinónimos y se refieren al proceso de empaquetar un componente dentro de la carpeta META-INF de un JAR. 40. ¿Cuál es la función técnica del modificador transient en una clase que implementa la interfaz Serializable?. Asegurar que el atributo sea persistido de forma permanente en la base de datos mediante el uso de anotaciones JPA. Permitir que la introspección descubra mètodes públicos de acceso get que no siguen las reglas estándar de nombrado. Marcar la clase para que Hibernate la trate como una instancia nueva sin identificador único (estado transitorio). Indicar que un atributo específico no se debe serializar ni guardar en un archivo físico o base de datos. 41. ¿Qué información almacena el archivo manifest.mf y cuál es su ubicación reglamentaria dentro de un archivo JAR?. Almacena las sentencias SQL de creación de tablas y se ubica en la raíz del JAR para facilitar su lectura por el driver. Contiene metadatos como la versión, la clase principal y las dependencias, y se halla siempre dentro de la carpeta META-INF. Guarda el histórico de las transacciones manuales realizadas con commit() y reside en el paquete de la clase principal del bean. Define los tipos de datos personalizados creados con CREATE TYPE y se guarda en la carpeta /db/system/config. 42. En la programación de JavaBeans, ¿qué caracteriza a una propiedad de tipo "Bound" (o lligada)?. Es aquella que notifica automáticamente cualquier cambio en su valor a otros objetos interesados denominados listeners. Es una propiedad que representa un array de valores accesibles mediante un índice numérico. Permite que un listener vetee o rechace el cambio del valor si este no cumple con ciertos requisitos previos. Es una propiedad booleana cuyo método de acceso comienza obligatoriamente por el prefijo is. |





