NEW
Font size
Worksheets2025 Desarrollo Prueba final
Total questions: 68
Worksheet time: 34mins
El departamento de desarrollo de software del BCCR está construyendo una nueva plataforma de pagos. El equipo SCRUM encargado del desarrollo está en la mitad de un sprint cuando el Product Owner solicita que se incluyan nuevas regulaciones legales que deben cumplirse antes del lanzamiento. La implementación de estas regulaciones afecta directamente las tareas actuales del sprint. El equipo de desarrollo está dividido sobre si detener el sprint o ajustar las prioridades. ¿Qué debe hacer el Scrum Master para manejar esta situación?
Decidir por cuenta propia qué tareas deben priorizarse y comunicarlo al equipo.
Asegurar que el equipo complete el sprint sin cambios y abordar las regulaciones en el próximo sprint.
Suspender el sprint actual y planificar uno nuevo que incluya las nuevas regulaciones.
Facilitar una reunión de emergencia entre el equipo de desarrollo y el Product Owner para ajustar las prioridades del sprint actual
Un equipo Scrum está finalizando un Sprint de dos semanas para desarrollar una nueva funcionalidad en su aplicación móvil. Durante la Sprint Review, el Product Owner observa que una de las funcionalidades entregadas no cumple con los criterios de aceptación previamente establecidos. ¿Cuál es la acción más adecuada que debe tomar el equipo Scrum en esta situación?
Marcar la funcionalidad como "Terminada" y planificar su mejora en el próximo Sprint.
Considerar la funcionalidad como "No Terminada" y trabajar en ella en el próximo Sprint.
Solicitar al Product Owner que acepte la funcionalidad tal como está.
Extender la duración del Sprint actual para completar la funcionalidad según los criterios de aceptación.
Un sistema de gestión de pagos utiliza interfaces para manejar múltiples métodos de pago como TarjetaCredito y PayPal. El equipo implementó una interfaz IPago con el método ProcesarPago(). Sin embargo, al probar el sistema, algunos pagos no son procesados correctamente.
¿Qué problema tiene el código y cómo puede solucionarse?
¿Qué problema tiene el código y cómo puede solucionarse?
El método ProcesarPagos() debe ser estático para que funcione correctamente.
Se lanzará una excepción NullReferenceException al intentar procesar un elemento null en el arreglo.
a interfaz IPago necesita un método adicional para manejar errores durante el procesamiento.
Un sistema de gestión de pagos utiliza interfaces para manejar múltiples métodos de pago como TarjetaCredito y PayPal. El equipo implementó una interfaz IPago con el método ProcesarPago(). Sin embargo, al probar el sistema, algunos pagos no son procesados correctamente.
¿Qué problema tiene el código y cómo puede solucionarse?
A) El código no tiene problemas y funcionará correctamente.
B) El método ProcesarPagos() debe ser estático para que funcione correctamente.
C) Se lanzará una excepción NullReferenceException al intentar procesar un elemento null en el arreglo.
D) La interfaz IPago necesita un método adicional para manejar errores durante el procesamiento.
El departamento de desarrollo del Banco Central de Costa Rica está construyendo un sistema de autenticación en C#. Han definido las siguientes clases para representar diferentes tipos de usuarios:
¿Qué salida generará el programa cuando se ejecute?
A) Autenticando usuario...
B) El programa no compilará debido a un error en tiempo de compilación.
C) Autenticando administrador con permisos elevados...
D) Se lanzará una excepción en tiempo de ejecución.
¿Cuál de las siguientes opciones de implementación utiliza un diseño correcto y recomendado en programación orientada a objetos para este sistema?
Un sistema de recomendaciones de productos filtra un conjunto de productos basado en las preferencias de los usuarios. Cada producto pertenece a una categoría, y las categorías preferidas del usuario están representadas por un conjunto. El equipo desea implementar el filtro sin usar if o bucles explícitos. ¿Cómo se puede implementar el filtro utilizando operaciones de conjuntos y evitando el uso de if?
Refactorizar el código para realizar las comparaciones manualmente antes de construir el resultado
Reemplazar el if con un operador ternario para simplificar la lógica.
Usar LINQ con Where para filtrar los productos directamente según las preferencias.
Usar un for en lugar de un bucle foreach para iterar sobre los productos.
Considere el siguiente código que filtra una lista de enteros:
¿Cuál será el contenido de la lista evenNumbers?
[2, 4, 6, 8, 10]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
[4, 16, 36, 64, 100]
[]
Una empresa de procesamiento de pagos necesita implementar una solución para calcular el monto total después de aplicar descuentos. Existen múltiples estrategias de descuento según el tipo de cliente (VIP, Regular, Nuevo). El código actual no respeta los principios de diseño, específicamente el Principio de Responsabilidad Única (SRP), ya que el cálculo de descuentos y la lógica de negocio están en la misma clase. ¿Cuál es la mejor manera de refactorizar este código aplicando el Principio de Responsabilidad Única (SRP)?
¿Cómo refactorizarías este código para aplicar el Principio de Responsabilidad Única (SRP) y facilitar las pruebas unitarias?
public class Autenticador {
public bool ValidarCredenciales(string usuario, string contraseña) {
return usuario == "admin" && contraseña == "1234";
}
}
public class Autenticador { public bool ValidarCredenciales(string usuario, string contraseña, BaseDatos baseDatos) { var credenciales = baseDatos.ObtenerCredenciales(usuario); return credenciales.Contraseña == contraseña; } }
public class Autenticador {
public bool ValidarCredenciales(string usuario, string contraseña) {
var credenciales = new BaseDatos().ObtenerCredenciales(usuario);
return credenciales.Contraseña == contraseña;
}
}
¿Cuál sería la solución más efectiva para optimizar esta consulta?
Crear un índice en las columnas Name y Price.
Crear un índice filtrado en CategoryID con Stock > 0.
Crear un índice compuesto en CategoryID y Stock.
Desnormalizar la tabla para incluir el nombre de la categoría.
Una empresa de manufactura de ropa necesita diseñar una base de datos para gestionar sus productos, clientes y pedidos. Durante el proceso de modelado, se identifican las entidades "Producto", "Cliente" y "Pedido", y se deben establecer las relaciones entre ellas.
¿Cuál es la relación más adecuada entre las entidades "Cliente" y "Pedido" en este contexto?
Uno a uno (1:1)
Uno a muchos (1:N)
Muchos a muchos (N:M)
Muchos a uno (N:1)
Una tienda en línea almacena datos en una única tabla llamada Order con las siguientes columnas: OrderID, CustomerName, CustomerAddress, ProductName, ProductCategory, OrderDate. Este diseño resulta en redundancia, ya que la información del cliente y del producto se repite en múltiples filas. Los analistas han identificado que esta tabla viola las reglas de normalización y proponen reorganizarla para cumplir con 3FN.
¿Cuál de las siguientes opciones describe el diseño de base de datos que cumple con las reglas de la Tercera Forma Normal?
Una tabla única llamada Order que combine toda la información sin llaves foráneas.
Tres tablas: Customer (CustomerID, CustomerName, CustomerAddress) Product (ProductID, ProductName, ProductCategory) Order (OrderID, OrderDate, CustomerID, ProductID)
Dos tablas: Order (OrderID, CustomerName, ProductName, OrderDate) Product (ProductID, ProductName, ProductCategory)
Cuatro tablas: Customer (CustomerID, CustomerName, CustomerAddress, OrderID) Product (ProductID, ProductName, ProductCategory) Order (OrderID, OrderDate, CustomerID) OrderDetail (OrderID, ProductID).
Una cadena hotelera necesita un sistema de gestión de reservas para organizar información sobre clientes, habitaciones, reservas y servicios adicionales. Se desea evitar redundancias en los datos y garantizar la consistencia utilizando un modelo de base de datos relacional. Para lograr esto, es necesario definir correctamente las llaves primarias y foráneas en la base de datos, de modo que las relaciones entre tablas estén claramente establecidas.
En el contexto del sistema de gestión de reservas, ¿cuál sería la mejor práctica para establecer las claves primarias y foráneas entre las tablas "Reservas" y "Habitaciones"?
Usar el número de habitación como llave primaria en la tabla "Habitaciones" y establecerlo como llave foránea en la tabla "Reservas".
Usar un campo autoincremental como llave primaria en la tabla "Habitaciones" y relacionarlo con un campo opcional en la tabla "Reservas".
Crear una llave compuesta con los campos "Fecha de reserva" y "Número de habitación" en la tabla "Reservas" sin utilizar llaves foráneas.
Establecer como llave primaria en la tabla "Reservas" un campo único autoincremental sin relación con la tabla "Habitaciones".
Un desarrollador está trabajando en MS SqlServer 2019 con datos en formato JSON almacenados en una tabla llamada Productos con la siguiente estructura:
CREATE TABLE Productos (
ProductoID INT,
Datos JSON
);
El desarrollador necesita extraer el valor de Precio de cada producto almacenado en la columna Datos. Sabe que el JSON tiene esta estructura:
{
"Nombre": "Laptop",
"Precio": 1500,
"Stock": 10
}
Escribe la siguiente consulta:
SELECT ProductoID, JSON_VALUE (Datos, '$.Precio') AS Precio FROM Productos;
¿Qué hace esta consulta?
Devuelve todo el contenido de la columna Datos sin filtrar.
Genera un error porque JSON_VALUE no es compatible con SQL Server.
Devuelve nulos porque no se pueden extraer valores JSON de columnas en SQL Server.
Extrae el valor del campo ProductoID y Precio de cada registro en la columna Datos y lo muestra en el resultado.
A continuación, se muestra la siguiente consulta:
SELECT
CustomerId,
COUNT(*) OVER (PARTITION BY CustomerId) AS OrderCount
FROM Orders;
¿Qué hace la función COUNT(*) OVER (PARTITION BY CustomerId) en esta consulta?
Cuenta el total de pedidos en la tabla y lo muestra en cada registro de resultado.
Genera un error porque COUNT(*) no se puede usar con OVER().
Cuenta cuántos pedidos ha realizado cada cliente y lo muestra en cada registro de resultado.
Agrupa los resultados por cliente sin contar pedidos.
Escenario
Usted está trabajando en una aplicación de gestión de documentos en un sistema de base de datos SQL Server. La aplicación debe almacenar archivos binarios de diferentes tamaños, como imágenes de alta resolución y documentos en formato PDF. Estos archivos deben ser accesibles rápidamente para su procesamiento y visualización en la aplicación, pero el tamaño de los archivos puede variar considerablemente. La base de datos debe ser capaz de manejar estos datos de manera eficiente tanto en términos de almacenamiento como de acceso rápido.
Pregunta
En SQL Server, ¿cuál de los siguientes tipos de datos es el más adecuado para almacenar grandes cantidades de datos binarios, como imágenes y documentos, y garantizar un rendimiento eficiente en cuanto a almacenamiento y consultas?
TEXT
BLOB
VARBINARY(MAX)
CHAR
Escenario:
Una empresa ha implementado varias instancias de una aplicación .NET 8.0 en Windows Server y necesita distribuir el tráfico de manera uniforme entre los servidores para mejorar la disponibilidad y el rendimiento.
Pregunta:
¿Qué tecnología de Microsoft se recomienda para balancear carga entre múltiples servidores Windows?
Nginx
Windows Server Network Load Balancing (NLB)
Apache HTTP Server
Docker
Dado un escenario de base de datos relacional, seleccione la consulta SQL correcta para obtener el resultado deseado: Tenemos las tablas empleado y departamento con las siguientes estructuras:
CREATE TABLE empleado (empleado_id INT PRIMARY KEY, nombre VARCHAR(50), salario DECIMAL(10, 2), departamento_id INT); CREATE TABLE departamento (departamento_id INT PRIMARY KEY, nombre VARCHAR(50));
Se requiere obtener el nombre de los departamentos y el salario promedio de los empleados en cada departamento, pero solo para aquellos departamentos donde el salario promedio sea mayor que 50000. ¿Cuál consulta muestra el resultado correcto?
SELECT d.nombre, AVG(e.salario) AS salario_promedio
FROM departamento d
INNER JOIN empleado e ON d.departamento_id = e.departamento_id
GROUP BY d.nombre HAVING AVG(e.salario) > 50000;
SELECT d.nombre, AVG(salario) AS salario_promedio
FROM departamento d
INNER JOIN empleado e ON d.departamento_id = e.departamento_id
WHERE AVG(salario) > 50000
GROUP BY d.nombre;
SELECT d.nombre, AVG(e.salario) AS salario_promedio
FROM departamento d
LEFT JOIN empleado e ON d.departamento_id = e.departamento_id
GROUP BY d.nombre
HAVING AVG(e.salario) > 50000;
SELECT d.nombre, AVG(e.salario) AS salario_promedio
FROM departamento d
JOIN empleado e ON d.departamento_id = e.departamento_id
HAVING AVG(e.salario) > 50000
GROUP BY d.nombre;
En equipo de TI tiene un sistema donde utiliza una base de datos relacional para gestionar pagos a las instituciones del país. Durante el procesamiento de un pago, se deben realizar varias operaciones: verificar la disponibilidad de la cuenta destino esté activa, deducir el monto del pago de la cuenta origen, procesar el pago y generar una confirmación del pago. Es crucial que estas operaciones se ejecuten de manera que, si alguna falla, las anteriores no se apliquen, manteniendo la integridad de los datos. ¿Qué propiedad ACID de las transacciones asegura que, si una de las operaciones en una serie falla, todas las operaciones previas se revierten, garantizando que la base de datos no quede en un estado inconsistente?
Consistencia
Aislamiento
Atomicidad
Durabilidad
Una institución financiera procesa diariamente miles de operaciones de transferencia entre cuentas en su sistema de base de datos. Para evitar inconsistencias, el DBA implementó un procedimiento almacenado que realiza las siguientes acciones dentro de una transacción explícita:
Valida que el cliente remitente tenga fondos suficientes.
Deduce el monto de la cuenta del cliente remitente.
Acredita el monto a la cuenta del destinatario.
Si alguna de estas operaciones falla, deshace todos los cambios realizados hasta el momento.
El código del procedimiento almacenado es el siguiente:
¿Qué sucede si ocurre un error durante la operación de actualización de la cuenta de destino (por ejemplo, debido a un bloqueo en la fila)?
La transacción se compromete parcialmente, deduciendo los fondos de la cuenta de origen, pero no acreditándolos en la cuenta de destino.
La transacción se deshace completamente, dejando la base de datos en su estado inicial antes de la ejecución del procedimiento.
La transacción continúa y SQL Server intenta automáticamente resolver el error para completar la operación.
La transacción falla, pero todo lo que actualizó antes de producirse el fallo se mantiene en la base de datos.
Se tienen las tablas Customers y Orders, modeladas como sigue:
CREATE TABLE Customers (
CustomerID INT PRIMARY KEY,
Name NVARCHAR(100) NOT NULL);
CREATE TABLE Orders (
OrderID INT PRIMARY KEY,
CustomerID INT NOT NULL,
OrderDate DATETIME NOT NULL,
Amount DECIMAL(18, 2),
FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID));
El equipo necesita una consulta que devuelva todos los clientes con el monto total de sus órdenes (TotalAmount), incluso aquellos que no tienen órdenes.
Pregunta: ¿Cuál es la consulta correcta para lograrlo?
SELECT c.Name, o.Amount AS TotalAmount
FROM Customers c
LEFT JOIN Orders o ON c.CustomerID = o.CustomerID;
Una aplicación bancaria maneja múltiples transacciones simultáneas que realizan transferencias entre cuentas. Cada transferencia debe verificar el saldo de una cuenta antes de proceder. Si el nivel de aislamiento no está correctamente configurado, una transacción podría leer datos no confirmados de otra transacción en curso, lo que ocasionaría inconsistencias, como saldos negativos o transferencias duplicadas. El equipo de desarrollo necesita evitar lecturas sucias mientras mantiene un equilibrio entre consistencia y rendimiento.
¿Qué nivel de aislamiento debe configurarse para evitar lecturas sucias sin sacrificar demasiado el rendimiento?
Serializable
Repeatable Read
Read Uncommitted
Read Committed
¿Cuál de las siguientes implementaciones corrige adecuadamente el problema de la transacción mal implementada, garantizando la integridad de los datos mediante el uso de transacciones y manejo de errores?
Las historias de usuario se miden en horas.
Verdadero
Falso
Una lista de requerimientos no funcionales es parte importante del análisis.
Verdadero
Falso
La definición de CI corresponde a Despliegue Continuo y CD es Integración Continua
Verdadero
Falso
Async retorna una promesa y await espera una promesa.
Verdadero
Falso
LINQ permite hacer un select sobre una lista.
Verdadero
Falso
XSD define la estructura de un documento XML.
Verdadero
Falso
NuGet es un administrador de paquetes.
Verdadero
Falso
El modificador protected es el más restrictivo.
Verdadero
Falso
Existen dos tipos de polimorfismo: paramétrico y en tiempo de ejecución.
Verdadero
Falso
CI significa Desarrollo Continuo y CD es Integración Continua.
Verdadero
Falso
¿Cuáles son tipos de polimorfismo?
Estático y dinámico
Paramétrico y en tiempo de ejecución
Abstracto y concreto
Público y privado
¿Cuál es la diferencia entre throw y throw ex?
Ambos conservan el stack trace
throw sobreescribe el stack trace
throw ex conserva el stack trace
throw conserva el stack trace y throw ex lo sobreescribe
¿Cuáles son verbos HTTP válidos?
Delete, Patch, Create
GET, POST, DELETE
FETCH, UPDATE, MODIFY
QUERY, UPDATE, CREATE
¿Qué define un archivo XSD?
La estructura de una base de datos
La estructura de un documento XML
El estilo de una página web
El contenido de un archivo JSON
¿Qué hace el comando IISRESET en servidores Windows?
Reinicia el sistema operativo
Reinicia el servicio de IIS
Elimina el pool de aplicaciones
Actualiza el DNS
¿Qué principio SOLID se rompe si una clase tiene múltiples responsabilidades?
Principio de Inversión de Dependencias
Principio de Sustitución de Liskov
Principio de Segregación de Interfaces
Principio de Responsabilidad Única
¿Qué números se asignan automáticamente en el siguiente enum?
Martes = 1, Jueves = 8
Martes = 0, Jueves = 7
Martes = 2, Jueves = 9
Martes = 7, Jueves = 9
¿Cuál de las siguientes opciones representa correctamente dos principios SOLID?
ISP y Programación por Pares
OCP y Revisión por Pares
DIP y Desarrollo en Pares
SRP y LSP
¿Cuál es la diferencia entre int y System.Int32en C#?
int es un tipo de dato, mientras que System.Int32 es una clase personalizada
int y System.Int32 son completamente diferentes y no se pueden usar de forma intercambiable
int es un alias del tipo System.Int32 y ambos representan lo mismo
System.Int32 solo se puede usar en aplicaciones de consola, int en cualquier tipo de aplicación
Si un método de un controller es async, y el servicio que llama no lo es, ¿qué se debe hacer?
No es necesario cambiar nada, el controlador puede esperar métodos sincrónicos
Se debe cambiar el servicio a async para mantener la eficiencia y evitar bloqueos
Solo se debe usar async si hay múltiples hilos
El método del controlador debe dejar de ser async
¿Cuál consulta SQL devuelve solo los registros de la tabla de la derecha que NO tienen relación con la tabla de la izquierda?
En una base de datos con múltiples usuarios, ¿qué sucede si el Usuario 1 ejecuta un DELETE, el Usuario 2 hace un SELECT con NOLOCK, y el Usuario 3 hace un SELECT normal al mismo tiempo?
Todos los usuarios verán los datos actualizados inmediatamente
Usuario 2 podría leer datos eliminados o inconsistentes, mientras que Usuario 3 esperará a que termine el DELETE
Usuario 3 verá los datos eliminados, pero Usuario 2 no
Usuario 3 verá los datos eliminados, pero Usuario 2 no
¿Cuál es el resultado de la siguiente consulta si la fecha actual es 2025-07-02?
SELECT DATEADD(DAY, 5, EOMONTH(GETDATE(), 1))
2025-08-05
2025-08-31
2025-09-05
Suma 1 mes y luego 5 días al resultado.
En un escenario donde el Usuario 1 inicia una transacción, hace un DELETE, luego ROLLBACK, y los Usuarios 2 y 3 hacen SELECT con READ COMMITTED, ¿qué obtiene el Usuario 4 al final?
Los datos eliminados por Usuario 1.
Los datos originales antes del DELETE.
Datos inconsistentes
Ningún dato
¿Cuál de las siguientes afirmaciones sobre las relaciones include y extend en diagramas de casos de uso es correcta?
La relación extend se utiliza para incluir comportamiento obligatorio en un caso de uso.
La relación include representa una extensión opcional del comportamiento del caso de uso base.
La relación extend permite agregar comportamiento opcional que se ejecuta bajo ciertas condiciones
Ambas relaciones se usan indistintamente para dividir casos de uso grandes
¿Qué representa esta función recursiva?
int multiplicar(int a, int b) {
if (b == 0) return 0;
return a + multiplicar(a, b - 1);
}
División
Multiplicación como suma repetida
Exponenciación
Resta
¿Qué patrón de diseño proporciona una interfaz para crear objetos, pero permite a las subclases decidir qué clase instanciar?
Singleton
Factory Method
Builder
Prototype
Un mal diseño de software puede dificultar la migración a nuevas tecnologías.
Verdadero
Falso
¿Cuál es una diferencia clave entre una Web API en .NET Framework y un proyecto MVC?
Ambos usan controladores con la misma estructura.
Web API usa ApiController, MVC usa Controller.
MVC no permite rutas personalizadas.
Web API no puede devolver JSON.
¿Qué se imprime con el siguiente código?
'', 'x'
'x', 'x'
'', ''
'x', ''
¿Con LINQ se puede seleccionar y filtrar datos de dos listas diferentes en una sola sentencia?
Verdadero
Falso
¿Cuál afirmación es correcta sobre iisreset y el reciclado del Application Pool?
a) Ambos reinician el servidor completo.
b) iisreset reinicia todo IIS, el reciclado solo el pool.
c) El reciclado borra el caché del navegador.
d) iisreset no afecta las aplicaciones.
Dado el siguiente diagrama de Venn, donde todo el conjunto A está sombreado (incluyendo elementos que no están en B), ¿cuál consulta SQL representa correctamente ese subconjunto?
¿Cuál de las siguientes afirmaciones sobre las relaciones include y extend en diagramas de casos de uso es correcta?
I. La relación include se utiliza para incluir comportamiento obligatorio y reutilizable en un caso de uso.
II. La relación extend permite agregar comportamiento opcional que se ejecuta bajo ciertas condiciones.
III. Cuando existen comportamientos comunes entre casos de uso, pueden extraerse y reutilizarse mediante relaciones include o extend.
I y II
II y III
I y III
Todas son correctas
Dada la siguiente instrucción en SQL, ¿cuál es la salida?
SELECT EOMONTH(DATEADD(MONTH, -1, '2025-12-05'), 1) AS Fecha;
2025-12-31
2025-11-30
2025-12-01
2026-01-31
Dada la siguiente consulta SQL, ¿cuál sería el resultado de su ejecución?
La fecha del cliente más reciente
La fecha del cliente más antiguo
La consulta se convierte en un ciclo infinito por recursividad
Todas las fechas de ingreso de los clientes
¿Qué efecto tiene el uso de WITH TIES en la siguiente consulta SQL?
Devuelve exactamente 5 filas, sin importar si hay empates en el valor de ordenamiento
Devuelve las 5 filas más baratas, ignorando el orden
Devuelve las 5 filas más caras y cualquier otra fila adicional que tenga el mismo valor de Precio que la quinta fila
Devuelve todas las filas de la tabla ordenadas por Precio
¿Cuál de las siguientes es una ventaja principal de .NET Core frente a .NET Framework?
Solo funciona en Windows
Tiene mejor integración con aplicaciones de escritorio
Tiene mejor integración con aplicaciones de escritorio
Solo permite desarrollo web
¿Qué es un middleware en una aplicación ASP.NET Core?
Un componente que se encarga de compilar el código
Un servicio que se ejecuta en segundo plano
Un componente que maneja solicitudes HTTP dentro del pipeline de la aplicación
Un controlador que responde directamente a las vistas
¿Cuál de los siguientes es un ejemplo de middleware en ASP.NET Core?
Entity Framework
UseRouting
Razor Pages
SQL Server
¿Qué comando se utiliza para crear un nuevo proyecto en .NET Core desde la terminal?
dotnet new
dotnet build
dotnet run
dotnet install
¿Cuál es el propósito del archivo appsettings.json en una aplicación .NET Core?
Almacenar código fuente
Configurar rutas de vistas
Almacenar configuraciones como cadenas de conexión y claves de API
Definir estilos CSS
