POO_UT3_UT4
|
|
Título del Test:
![]() POO_UT3_UT4 Descripción: Tema 6-Gestión manejo Ficheros Conectar y gestionar bases de datos |



| Comentarios |
|---|
NO HAY REGISTROS |
|
Al trabajar con archivos en Python, ¿cuál es la principal ventaja técnica de utilizar un 'Context Manager' mediante la sentencia `with`?. Permite que varios hilos de ejecución escriban en el mismo archivo de forma concurrente sin bloqueos. Elimina la necesidad de especificar la codificación de caracteres del archivo. Garantiza el cierre automático de los recursos incluso si ocurre una excepción durante el procesamiento. Aumenta la velocidad de lectura del disco al habilitar automáticamente el mapeo de memoria virtual. Si necesitas leer los últimos 20 bytes de un archivo de registro de 10 GB de forma eficiente, ¿qué combinación de métodos es la más adecuada?. Abrir en modo texto `'r'` y utilizar un bucle `for` para saltar todas las líneas excepto las últimas. Utilizar `f.tell()`para posicionarse al final y luego leer hacia atrás con `f.readline()`. Abrir en modo binario `'rb'` y utilizar `f.seek(-20,os.SEEK_END)`. Cargar el archivo completo con `f.read()` y luego aplicar un `slice` de Python `[-20:]`. ¿En qué escenario es preferible utilizar la biblioteca `orjson` en lugar del módulo estándar `json` de Python?. Cuando la prioridad absoluta es minimizar el número de dependencias externas del proyecto. En backends de alta concurrencia donde se requiere serializar tipos complejos como `dataclasses` o `datetime` nativamente. Para aplicaciones simples de escritorio que solo guardan diccionarios básicos de configuración. Si se necesita generar archivos JSON con comentarios y metadatos no estándar. ¿Cuál es el riesgo de seguridad conocido como 'Billion Laughs Attack' al procesar archivos XML con librerías estándar?. La interceptación de datos sensibles durante la transmisión de archivos SOAP. La ejecución de código arbitrario de Python embebido en las etiquetas del XML. El acceso no autorizado a archivos locales del servidor mediante el uso de entidades externas (XXE). Una denegación de servicio (DoS) causada por la expansión exponencial de entidades definidas en el archivo. En el contexto de Big Data, ¿por qué el formato Parquet se considera superior al CSV para realizar consultas selectivas?. Porque es el único formato que soporta la compresión de datos mediante algoritmos como Gzip o Snappy. Porque permite la edición manual de los datos con cualquier editor de texto plano. Porque no requiere de esquemas definidos y permite mezclar tipos de datos en la misma columna. Porque utiliza un almacenamiento columnar que permite leer solo los datos de las columnas necesarias del disco. ¿Cuál es la función principal de la capa de 'Interfaz' (Contrato) dentro del Patrón Repository?. Validar que los datos de entrada cumplan con los tipos de datos requeridos por la base de datos física. Establecer la conexión física y gestionar el pool de conexiones con servidores de base de datos. Transformar automáticamente los objetos de dominio en cadenas de texto JSON. Definir las operaciones permitidas de persistencia de forma abstracta sin implementar la lógica técnica. En una arquitectura profesional que utiliza Inyección de Dependencias, ¿dónde se decide qué tipo de persistencia (CSV, Parquet o SQL) usará la aplicación?. En el archivo de definición de la Entidad de Dominio (`dataclass`). En el bloque de entrada de la aplicación (comúnmente el bloque `if __name__=='__main__':`). Directamente en el sistema operativo mediante variables de entorno obligatorias. Dentro de la propia clase de 'Servicio de Negocio' para asegurar que los datos se guarden correctamente. ¿Cuál es la característica distintiva de Redis en comparación con bases de datos como MySQL o PostgreSQL?. No permite establecer tiempos de expiración para los registros guardados. Es un almacén de datos en memoria diseñado para alta velocidad, caché y mensajería. Utiliza un esquema rígido de tablas y relaciones para garantizar la integridad referencial. Es la mejor opción para almacenar archivos masivos de Big Data de forma permanente. ¿Cuál es la principal ventaja de utilizar una iteración 'lazy' (línea por línea) al leer un archivo de texto en Python?. Elimina la necesidad de utilizar un Context Manager. Aumenta la velocidad de escritura en archivos binarios. Minimiza el uso de memoria RAM al no cargar el archivo completo. Permite el acceso aleatorio a cualquier posición del archivo de forma instantánea. Al trabajar con acceso aleatorio de precisión, ¿qué función se utiliza para mover el puntero de lectura a una posición específica en bytes?. open(). decode(). tell(). seek(). ¿Cuál es el propósito fundamental del módulo `mmap` en el manejo de archivos gigantes?. Mapear el archivo a la memoria virtual para tratarlo como una cadena gigante sin cargar la RAM real. Convertir automáticamente archivos CSV en formato binario de alta velocidad. Cifrar el contenido del archivo para evitar el acceso no autorizado mediante memoria virtual. Comprimir archivos de varios Gigabytes para ahorrar espacio en disco. En el contexto de procesamiento de CSV a escala, ¿qué ventaja ofrece `pandas` sobre el módulo nativo `csv`?. Posee un motor de C (Cython) ultra rápido y capacidad de procesamiento por bloques (chunksize). No requiere la instalación de ninguna dependencia externa. Es ideal únicamente para scripts ligeros y tareas automatizadas simples. Mapea automáticamente las filas a diccionarios de forma más ligera que el módulo nativo. ¿Por qué se recomienda el uso de `orjson` en lugar del módulo `json` estándar para APIs de alta concurrencia?. Porque `orjson`devuelve objetos de tipo `str` directamente, facilitando la impresión por consola. Porque garantiza que los datos siempre utilicen codificación ASCII por defecto para mayor compatibilidad. Debido a que serializa de forma nativa tipos como `dataclasses` y `datetime` con un rendimiento superior. Porque es la única librería que soporta el formato YAML además de JSON. ¿Cuál es la 'Regla de Oro' mencionada para procesar archivos XML de fuentes no confiables en entornos de producción?. Utilizar siempre el parser estándar `xml.etree.ElementTree` por su robustez. Convertir primero el XML a JSON para eliminar cualquier riesgo de inyección de código. Sustituir la librería estándar por `defusedxml` para deshabilitar características peligrosas. Validar manualmente que el archivo no contenga la cadena 'Billion Laughs' antes de procesarlo. ¿Qué 'superpoder' distingue al formato Apache Parquet de formatos tradicionales como CSV o JSON?. Es un formato orientado a filas que facilita la lectura de registros individuales completos. Permite la ejecución de código arbitrario embebido para realizar cálculos automáticos. Es el estándar de facto para archivos de configuración en Kubernetes. Su formato columnar permite lecturas selectivas, minimizando el I/O del disco al leer solo las columnas necesarias. En el patrón de diseño Strategy/Factory, ¿cuál es el papel del 'Contrato' o Interfaz?. Definir los métodos obligatorios (como `read()` y `write()`) que todas las estrategias deben implementar. Almacenar la lógica de negocio pura para que sea independiente de la persistencia. Implementar la lógica específica para leer archivos comprimidos en formato Parquet. Decidir dinámicamente qué formato de archivos se debe utilizar basándose en la extensión. Según el material, ¿cuál es el inconveniente de usar solo el patrón Strategy/Factory sin evolucionar al patrón Repository?. No permite el uso de la inyección de Dependencias. Obliga a utilizar bases de datos SQL en lugar de archivos planos. El código se vuelve imposible de testear mediante pruebas unitarias. La lógica de negocio todavía tiene que lidiar con estructuras de datos específicas como DataFrames o diccionarios. Dentro del Patrón Repository, ¿qué caracteriza a una 'Entidad de Dominio'?. Es una clase que contiene toda la lógica de lectura y escritura de archivos CSV. Un objeto puro de Python (ej. `@dataclass`) que representa un concepto de negocio y es ignorante de la persistencia. Un script que conecta la base de datos con el sistema operativo mediante `mmap`. Una interfaz abstracta que define las operaciones de guardado y búsqueda. ¿Cómo ayuda la 'Inyección de Dependencias' a la mantenibilidad del código al cambiar de formato de archivo (ej. de CSV a Parquet)?. Solo requiere cambiar la línea de código donde se instancia el repositorio concreto, sin tocar la lógica del servicio. Optimiza automáticamente las llamadas a `seek()` para que funcionen igual en todos los formatos. Permite que el servicio de negocio cree automáticamente el archivo adecuado al detectar la extensión. Elimina la necesidad de escribir interfaces abstractas para la persistencia. Al trabajar con archivos YAML, ¿qué medida de seguridad es primordial para evitar la ejecución de código arbitrario?. Emplear únicamente la función `yaml.safe_load()` para procesar los datos. Asegurarse de que el archivo tenga la extensión `.yaml` y no `.yml`. Utilizar siempre la función `yaml.load()` con la configuración por defecto. Mapear el archivo YAML a memoria virtual usando `mmap` antes de leerlo. Al usar el método `seek(offset, whence)`, ¿qué constante se debe utilizar para mover el puntero relativo a la posición actual del archivo?. os.SEEK_END. os.SEEK_CUR. os.SEEK_ABS. os.SEEK_SET. Para realizar búsquedas de texto en archivos de varios Gigabytes sin carga de I/O bloqueante, ¿qué herramienta de alto rendimiento se recomienda?. El uso de `readlines()` para cargar todo el contenido en una lista. El módulo `mmap` para mapear el archivo a memoria virtual. El método `DictReader` del módulo nativo `csv`. La serialización del archivo a formato JSON con `orjson`. ¿Por qué es preferible usar `pandas` con el parámetro `chunksize` al procesar archivos CSV extremadamente grandes?. Porque aplica una compresión `snappy` automática a los datos leídos. Porque evita que el sistema se quede sin memoria RAM al procesar el archivo en fragmentos más pequeños. Porque desactiva el motor de C (Cython) para asegurar una mayor compatibilidad. Porque permite que el archivo se guarde automáticamente en formato Parquet mientras se lee. En el contexto de APIs y sistemas de alta concurrencia, ¿qué ventaja ofrece la librería `orjson` sobre el módulo `json` estándar de Python?. Utiliza un formato XML intermedio para asegurar la integridad de los datos. Devuelve cadenas de texto (strings) en lugar de bytes, facilitando la impresión directa. Es capaz de serializar objetos `datetime` y `numpy` arrays de forma nativa y extremadamente rápida. Genera archivos de texto con una indentación más legible por humanos. Al trabajar con archivos XML en producción, ¿por qué se recomienda el uso de `defusedxml` en lugar de `xml.etree.ElementTree`?. Porque el módulo estándar no permite realizar búsquedas mediante XPath. Porque aumenta la velocidad de parseo en un 500% mediante el uso de hilos. Porque protege contra ataques de denegación de servicio como 'Billion Laughs' e inyección de entidades externas. Porque `defusedxml` es compatible con el formato Parquet y el estándar de Python no. En el patrón 'Strategy Factory' para archivos, ¿qué principio de diseño se respeta al permitir agregar soporte para nuevos formatos sin modificar el código existente?. Principio de Inversión de dependencias. Principio de Responsabilidad Única. Encapsulamiento de Atributos Privados. Principio Open/Closed (Abierto/Cerrado). Dentro del Patrón Repository, ¿cuál es la función de una 'Entidad de Dominio' (como un objeto `Producto` definido con `dataclasses`)?. Representar el dato puro de forma agnóstica al formato, sin lógica de infraestructura. Definir las consultas SQL o los delimitadores de los archivos CSV. Gestionar la conexión directa con el sistema de archivos o la base de datos. Implementar el método `save()` para escribir bytes directamente en el disco. ¿Cuál es la principal ventaja de utilizar la Inyección de Dependencias al pasar un Repositorio a un Servicio de Negocio?. Mejora significativamente la velocidad de ejecución del script de Python. Facilita las pruebas unitarias permitiendo sustituir el acceso a archivos reales por `Mocks` en memoria. Obliga al programador a usar exclusivamente archivos de texto plano. Permite que el código funcione sin necesidad de instalar librerías externas como `pandas`. ¿Cuál es la principal ventaja de utilizar SQLite en etapas de prototipado y pruebas locales?. Requiere la instalación obligatoria de drivers externos mediante gestores de paquetes. Es una base de datos embebida que reside en un único archivo sin necesidad de servidor. Permite el escalado horizontal automático mediante fragmentación de datos. Ofrece la mayor capacidad de concurrencia para aplicaciones web de alto tráfico. En el contexto de MySQL, ¿por qué se considera crucial la implementación de un 'Connection Pool'?. Para convertir automáticamente tablas relacionales en documentos JSON. Para asegurar que la base de datos funcione sin necesidad de drivers oficiales. Para optimizar el rendimiento mediante el reciclaje y préstamo eficiente de conexiones activas. Para permitir el almacenamiento de archivos binarios de más de 10 GB. ¿Qué característica técnica convierte a PostgreSQL en una base de datos de 'Potencia Híbrida'?. La integración nativa de Redis dentro de sus tablas para caché instantánea. Su capacidad para manejar tipos de datos avanzados como JSONB y Arrays nativos con índices GIN. El uso exclusivo de almacenamiento en memoria RAM para todas sus operaciones. La eliminación total de la necesidad de esquemas o definiciones de tablas. Al trabajar con MongoDB en Python, ¿cuál es la principal diferencia conceptual respecto al modelo SQL tradicional?. se requiere el uso de sentencias SQL puras para realizar cualquier inserción. Se pasa de un modelo de tablas rígidas a una estructura de documentos flexibles en formato BSON. Es obligatorio el uso de transacciones ACID en todas las operaciones de lectura. Los datos solo se pueden almacenar en forma de listas planas sin anidación. ¿Cuál es la función del parámetro TTL (Time To Live) en Redis?. Medir el tiempo total de respuesta des servidor desde que se inicia el proceso. Configurar el intervalo de copias de seguridad en el disco duro. Definir la cantidad máxima de bytes que puede ocupar una lista en memoria. Establecer un tiempo de expiración automática para una clave, esencial para estrategias de caché. ¿Qué problema resuelve el uso de drivers asíncronos como 'asyncpg' o 'Motor' en aplicaciones de alto rendimiento?. Evitan el bloqueo del 'event loop' de Python mientras se espera la respuesta de la base de datos. Aumentan la velocidad de procesamiento de cálculos matemáticos pesados en la CPU. Garantizan que las consultas se ejecuten una por una de forma estrictamente secuencial. Permiten ejecutar código SQL en bases de datos que no soportan el lenguaje SQL. ¿Cuál es la propuesta de valor fundamental de SQLModel en el ecosistema moderno de Python?. Optimizar exclusivamente bases de datos NoSQL para aplicaciones de escritorio. Proveer una interfaz gráfica para diseñar tablas sin escribir código. Sustituir por completo la necesidad de instalar motores de base de datos como MySQL. Combinar la potencia de SQLAlchemy con la validación de datos basada en tipos Pydantic. ¿Cómo contribuye el 'Repository Pattern' a la arquitectura de una aplicación profesional?. Elimina la necesidad de usar interfaces o clases abstractas en el código. Acelera las consultas mediante el uso de índices automáticos en todas las columnas. Crea una capa de abstracción que desacopla la lógica de negocio de la tecnología de persistencia. Garantiza que toda la lógica de la aplicación se escriba dentro de procedimientos almacenados. Según el flujo de decisión ('Guía de Selección'), ¿cuál es la combinación recomendada para un proyecto de 'Web CRUD Estándar'?. SQLite + SQLAlchemy. Async Postgres puro. Redis + Motor. Postgres + SQLModel. ¿En qué orden se deben organizar las capas de una aplicación bien diseñada?. ORM -> Lógica de Negocio -> Driver. Repository Pattern -> Base de datos ->Lógica de Negocio. Base de datos -> Driver -> Lógica de Negocio -> ORM ->Interfaz. Lógica de Negocio -> Repository Pattern -> ORM/ODM -> Driver ->Base de datos. ¿Cuál es la principal característica que distingue a SQLite de motores como MySQL o PostgreSQL según el ecosistema de Python?. Requiere la instalación obligatoria de un servidor independiente mediante contenedores o servicios del sistema. Utiliza un esquema de documentos JSON en lugar de tablas relacionales para almacenar la información. Es una base de datos embebida que funciona mediante un archivo local sin necesidad de un servidor externo. Está diseñada específicamente para entornos de alta concurrencia y escalabilidad empresarial masiva. En la clase `ConexionSQLite`, ¿cuál es la función de utilizar el carácter ? en sentencias como `SELECT * FROM productos WHERE id = ?`?. Funciona como un marcador de posición que previene ataques de SQL Injection al separar el código de los datos. Es un operador de búsqueda comodín similar a LIKE para encontrar coincidencias parciales. Indica al motor de base de datos que el campo filtrado es opcional. Se utiliza para realizar una conversión automática de tipos de datos de Python a JSON. ¿Cuál es la ventaja técnica de implementar un Connection Pool (como `MySQLPooled`) en una aplicación con múltiples usuarios?. Permite que la base de datos MySQL funcione sin necesidad de instalar un driver en Python. Cifra automáticamente los datos en repodo dentro del disco duro del servidor de base de datos. Transforma automáticamente todas las consultas síncronas en corrutinas asíncronas de asyncio. Mantiene un conjunto de conexiones abiertas para reutilizarlas, evitando el costo de abrir y cerrar sockets físicos constantemente. ¿Qué tipos de datos avanzados ofrece PostgreSQL que suelen ser limitados o inexistentes en otros motores SQL básicos?. Arrays de texto (TEXT) y documentos indexables JSONB. Almacenamiento directo de hojas de cálculo de Excel como tipos nativos de columna. Campos de tipo clave-valor volátiles que se borran automáticamente al reiniciar. Únicamente tipos de datos primitivos como INTEGER y VARCHAR para mantener la compatibilidad. En el contexto de MongoDB, ¿qué representa el operador `$addToSet` durante una operación de actualización?. Crea una nueva colección en la base de datos si esta no ha sido definida todavía. Suma un valor numérico al campo específico, similar a una operación de incremento. Elimina todos los elementos de un conjunto que coincidan con un criterio de búsqueda. Agrega un elemento a un array solo si dicho valor no existe previamente, evitando duplicados. ¿Cuál es el propósito principal de usar Redis en una arquitectura de microservicios moderna con Python?. Reemplaza la necesidad de un ORM al mapear objetos de Python directamente a tablas de disco. Almacenar grandes volúmenes de datos históricos que requieren auditorías complejas y relaciones externas. Ejecutar consultas de búsqueda full-text sobre documentos PDF almacenados localemente. Funcionar como una capa caché y almacén de sesiones en memoria para un acceso de ultra-alta velocidad. ¿Qué beneficio ofrece el uso de `SQLModel` sobre el uso tradicional de `SQLAlchemy` por separado?. Permite usar la misma clase para la validación de datos (Pydantic) y para la persistencia en la base de datos. Elimina por completo la necesidad de configurar una URL de conexión o un motor de base de datos. Es el único ORM capaz de conectarse simultáneamente a base de datos SQL y NoSQL como MongoDB. Aumenta la velocidad de ejecución de las consultas al omitir la capa de traducción a SQL. En el patrón Repository, ¿cuál es la responsabilidad de la interfaz genérica (como `IRepository`)?. Garantizar que solo se puede utilizar un motor de base de datos a la vez en todo el sistema. Mapear automáticamente los campos de una tabla de SQL a un docuemento de Redis. Definir un contrato común de métodos que cualquier implementación de base datos debe cumplir. Escribir el código específico de conexión para MongoDB o PostgreSQL. ¿Para qué se utiliza el método `fetch()` en la librería `asyncpg` al trabajar con PostgreSQL de forma asíncrona?. Para crear una nueva tabla en la base de datos utilizando tipos de datos serializados. Para sincronizar los datos locales de un archivo .db con un servidor remoto. Para cerrar la conexión activa y devolverla inmediatamente al pool de conexiones. Para ejecutar una consulta y recuperar los resultados como una lista de objetos similares a diccionarios. ¿Cuál es la recomendación del ecosistema para una aplicación web que requiere alta concurrencia y alto rendimiento?. Implementar MongoDB sin índices para acelerar las escrituras masivas. Depender exclusivamente de Redis como base de datos principal persistente para todos los datos. Utilizar PostgreSQL combinado con el driver asíncrono `asyncpg`. Usar SQLite con el driver estándar para evitar la latencia de red del servidor. Al utilizar el driver `mysql-connector-python`, ¿qué marcador de posición se debe emplear para realizar consultas parametrizadas seguras?. :nombre_variable. $1,$2,... ?. %s. ¿Qué característica de PostgreSQL lo hace especialmente adecuado para manejar datos semi-estructurados dentro de un esquema relacional?. La ausencia total de esquemas fijos en todas sus tablas. El soporte para el tipo de datos JSONB con capacidad de indexación. El uso obligatorio de archivos .db locales para el almacenamiento. Su motor de almacenamiento basado exclusivamente en memoria volátil. En MongoDB, ¿qué operador se utiliza en una consulta para encontrar documentos donde un valor numérico es mayor o igual (≥) que un límite dado?. $in. $gte. $lte. gt. Se desea implementar un sistema de almacenamiento temporal para sesiones de usuario que requiera una velocidad de acceso extrema. ¿Qué herramienta es la más recomendada?. SQLite. Redis. SQLAlchemy. MongoDB. ¿Qué ventaja principal ofrece el uso de `asyncpg` sobre `psycopg2` al trabajar con PostgreSQL en aplicaciones web modernas?. Permite manejar un gran número de conexiones concurrentes sin bloquear el bucle de eventos. Es el único driver que soporta la creación de índices GIN. Proporciona una interfaz gráfica para administrar las tablas de la base de datos. Elimina la necesidad de escribir sentencias SQL en el código. Dentro del ecosistema de SQLAlchemy, ¿para qué se utiliza la clase `declarative_base()`?. Para establecer la cadena de conexión con el motor de base de datos elegido. Para ejecutar migraciones de datos entre deferentes motores SQL. Para convertir documentos de MongoDB en objetos de Python. Para crear una clase base de la cual heredan todos los modelos de tablas de la base de datos. ¿Cuál es el propósito del Patrón Repository (Repository Pattern) en el diseño de software?. Reemplazar completamente el uso de ORMs en aplicaciones Python. Garantizar que solo se utilice una única base de datos en todo el proyecto. Aumentar la velocidad de las consultas mediante la duplicación de datos. Desacoplar la lógica de negocio de los detalles técnicos de la persistencia de datos. En el contexto de Redis, ¿qué función cumple el comando `setex`?. Ejecuta una consulta SQL compleja sobre un conjunto de claves. Guarda una clave con un valor y define un tiempo de expiración (TTL) en segundos. Verifica si una clave existe antes de intentar eliminarla. Sustituye todos los valores de una lista por un único elemento. ¿Cuál es la función del objeto `cursor` obtenido a partir de una conexión a una base de datos SQL?. Sirve para cifrar las contraseñas de los usuarios antes de guradarlas. Es el objeto encargado de ejecutar sentencias SQL y recuperar los resultados. Representa el archivo físico donde se guardan los datos en el disco duro. Es una herramienta visual para ver las tablas en el navegador web. |




