Plataforma .NET: programación, servicios y persistencia — Cuerpo de Gestión de Sistemas e Informática de la Administración del Estado
Test de 30 preguntas con explicaciones justificadas.
Pregunta 1: ¿Qué componente de la plataforma .NET es responsable de la compilación Just-In-Time (JIT) del código intermedio (IL) a código nativo?
- A) Common Type System (CTS)
- B) Common Language Runtime (CLR)
- C) Framework Class Library (FCL)
- D) Global Assembly Cache (GAC)
El Common Language Runtime (CLR) es el entorno de ejecución de .NET que gestiona la memoria, seguridad y, entre otras funciones, la compilación JIT del código IL a código nativo específico de la plataforma.
Pregunta 2: ¿Cuál de los siguientes es un tipo de valor definido en el Common Type System (CTS) de .NET?
- A) String
- B) Array
- C) Integer
- D) Delegate
El Common Type System (CTS) define dos categorías principales de tipos: tipos de valor (value types) y tipos de referencia (reference types). Entre los tipos de valor se encuentran los tipos primitivos como Int32, estructuras y enumeraciones.
Pregunta 3: En el modelo de gestión de memoria de .NET, ¿qué generación (Generation) se asigna inicialmente a los objetos recién creados?
- A) Generación 0
- B) Generación 1
- C) Generación 2
- D) Generación 3
El recolector de basura (Garbage Collector) de .NET organiza los objetos en tres generaciones: 0, 1 y 2. Los objetos nuevos se asignan en la Generación 0, y si sobreviven a una recolección, son promovidos a la Generación 1.
Pregunta 4: ¿Qué construcción de C# permite encapsular una referencia a un método con una firma específica, facilitando la implementación de callbacks y eventos?
- A) Interface
- B) Delegate
- C) Lambda expression
- D) Event handler
Un delegado (delegate) en C# es un tipo que representa referencias a métodos con una firma particular. Los delegados son la base para los eventos y las expresiones lambda, pero la construcción fundamental es el delegado.
Pregunta 5: Al utilizar las palabras clave async y await en C#, ¿qué ocurre con el hilo de ejecución mientras se espera la finalización de una operación asíncrona?
- A) El hilo se bloquea hasta que la operación termine.
- B) Se crea un nuevo hilo para continuar la ejecución.
- C) La operación asíncrona se ejecuta de forma síncrona en el mismo hilo.
- D) El hilo se libera y la ejecución retorna al llamador, permitiendo que el hilo realice otro trabajo.
El patrón async/await en C# está diseñado para operaciones asíncronas no bloqueantes. Cuando se encuentra await, el control vuelve al llamador y el hilo se libera para otras tareas, continuando la ejecución cuando la operación asíncrona finaliza.
Pregunta 6: ¿Qué atributo de .NET se utiliza para marcar un método como obsoleto, permitiendo mostrar un mensaje de advertencia en tiempo de compilación?
- A) [Obsolete]
- B) [Serializable]
- C) [Deprecated]
- D) [NonSerialized]
El atributo [Obsolete] se utiliza para indicar que un elemento del código está obsoleto. Puede incluir un mensaje y un parámetro para indicar si debe generarse un error o advertencia.
Pregunta 7: ¿Cuál es la principal ventaja de utilizar tipos genéricos (Generics) en .NET frente a utilizar tipos Object para implementar contenedores?
- A) Permiten herencia múltiple.
- B) Mejoran el rendimiento de la recolección de basura.
- C) Proporcionan seguridad de tipos (type safety) y evitan conversiones boxing/unboxing.
- D) Simplifican la sintaxis del código.
Los genéricos introducidos en .NET 2.0 permiten definir tipos y métodos que trabajan con cualquier tipo, manteniendo la seguridad de tipos en tiempo de compilación y evitando operaciones de boxing y unboxing para tipos de valor.
Pregunta 8: ¿Qué interfaz de .NET debe implementar una colección para permitir la enumeración de sus elementos mediante un bucle foreach?
- A) IEnumerable
- B) ICollection
- C) IList
- D) IDisposable
La interfaz IEnumerable define el método GetEnumerator(), que permite recorrer una colección con un enumerador. El bucle foreach en C# utiliza esta interfaz para iterar sobre los elementos.
Pregunta 9: En Windows Communication Foundation (WCF), ¿qué elemento define las operaciones que un servicio expone?
- A) Binding
- B) Endpoint
- C) Behavior
- D) Contract
En WCF, el contrato (Contract) define las operaciones del servicio. Existen contratos de servicio (ServiceContract), operación (OperationContract), datos (DataContract) y mensaje (MessageContract).
Pregunta 10: En ASP.NET Web API, ¿qué atributo se utiliza para especificar que un método de un controlador responde a solicitudes HTTP GET?
- A) [HttpPost]
- B) [HttpGet]
- C) [HttpPut]
- D) [HttpDelete]
En ASP.NET Web API, los atributos de verbo HTTP como [HttpGet], [HttpPost], [HttpPut], etc., se utilizan para decorar métodos de controladores y asociarlos a los métodos HTTP correspondientes.
Pregunta 11: ¿Qué formato de serialización utiliza por defecto gRPC en .NET para la transmisión de mensajes?
- A) XML
- B) JSON
- C) Protocol Buffers
- D) BinaryFormatter
gRPC es un framework RPC de alto rendimiento que utiliza Protocol Buffers (protobuf) como formato de serialización de mensajes por defecto, proporcionando una serialización binaria eficiente.
Pregunta 12: ¿Qué clase de .NET Framework se utiliza como base para crear un servicio de Windows?
- A) ServiceBase
- B) ServiceProcess
- C) ServiceInstaller
- D) ServiceController
La clase ServiceBase del espacio de nombres System.ServiceProcess proporciona la base para crear un servicio de Windows. Se hereda de ella y se sobrescriben métodos como OnStart y OnStop.
Pregunta 13: En ASP.NET Core, ¿qué interfaz se utiliza para inyectar dependencias en un controlador?
- A) IContainer
- B) IServiceProvider
- C) IApplicationBuilder
- D) No se especifica una interfaz; se inyectan directamente a través del constructor.
ASP.NET Core incluye un contenedor de dependencias integrado que permite inyectar servicios en controladores, vistas, etc., a través de sus constructores, sin requerir una interfaz específica para la inyección.
Pregunta 14: ¿Qué objeto de ADO.NET se utiliza para ejecutar una consulta SQL parametrizada contra una base de datos?
- A) SqlConnection
- B) SqlDataAdapter
- C) SqlDataReader
- D) SqlCommand
En ADO.NET, la clase SqlCommand representa una consulta o comando SQL que se ejecuta en una base de datos. Permite agregar parámetros mediante la colección Parameters para evitar inyecciones SQL.
Pregunta 15: En Entity Framework Core, ¿qué enfoque (approach) permite generar un modelo de entidades a partir de una base de datos existente?
- A) Code First
- B) Database First
- C) Model First
- D) Entity First
Entity Framework Core soporta el enfoque Database First, donde se genera el modelo de entidades (clases) a partir de una base de datos existente, utilizando herramientas como Scaffold-DbContext.
Pregunta 16: ¿Qué tipo de operación de LINQ se utiliza para filtrar elementos de una secuencia basándose en una condición?
- A) Where
- B) Select
- C) OrderBy
- D) GroupBy
El método de extensión Where en LINQ permite filtrar una secuencia de elementos en base a un predicado (condición lógica).
Pregunta 17: En .NET, ¿qué espacio de nombres contiene las clases para manejar transacciones distribuidas?
- A) System.Data
- B) System.Transactions
- C) System.EnterpriseServices
- D) System.Runtime.Transactions
El espacio de nombres System.Transactions proporciona clases para realizar transacciones, incluyendo transacciones distribuidas mediante el Coordinador de Transacciones Distribuidas (DTC).
Pregunta 18: En el contexto de inyección de dependencias, ¿qué patrón de diseño se utiliza para permitir que una clase reciba sus dependencias desde el exterior en lugar de crearlas internamente?
- A) Singleton
- B) Factory
- C) Dependency Injection
- D) Inversion of Control (IoC)
La Inversión de Control (IoC) es un patrón de diseño en el que el control de las dependencias se invierte, delegando su creación y gestión a un contenedor. La inyección de dependencias es una técnica para implementar IoC.
Pregunta 19: ¿Qué patrón de diseño se implementa en .NET mediante la clase SqlConnection para gestionar conexiones a bases de datos, permitiendo reutilizar conexiones existentes?
- A) Singleton
- B) Factory Method
- C) Connection Pool
- D) Repository
El patrón Connection Pool (agrupación de conexiones) es implementado por proveedores de datos de ADO.NET como SqlClient, para reutilizar conexiones a base de datos y mejorar el rendimiento.
Pregunta 20: ¿Qué espacio de nombres de .NET proporciona clases para implementar criptografía simétrica y asimétrica?
- A) System.Security
- B) System.Security.Principal
- C) System.Security.AccessControl
- D) System.Security.Cryptography
El espacio de nombres System.Security.Cryptography contiene implementaciones de algoritmos criptográficos como AES, RSA, SHA, etc., para cifrado simétrico y asimétrico.
Pregunta 21: En C#, ¿qué bloque de código se ejecuta siempre, independientemente de que se lance o no una excepción?
- A) try
- B) catch
- C) finally
- D) throw
El bloque finally en el manejo de excepciones de C# se ejecuta siempre, tanto si se produce una excepción como si no, y se utiliza para liberar recursos.
Pregunta 22: ¿Qué atributo de .NET se utiliza para marcar una clase como serializable en formato binario?
- A) [Serializable]
- B) [DataContract]
- C) [XmlSerializable]
- D) [BinarySerializable]
El atributo [Serializable] se aplica a una clase para indicar que sus instancias pueden ser serializadas en formato binario mediante la clase BinaryFormatter.
Pregunta 23: ¿Qué espacio de nombres de .NET contiene tipos que permiten inspeccionar metadatos de ensamblados y tipos en tiempo de ejecución?
- A) System.Type
- B) System.Reflection
- C) System.Metadata
- D) System.Runtime
El espacio de nombres System.Reflection proporciona clases como Assembly, Type, MethodInfo, etc., para realizar reflexión (reflection) y examinar metadatos de tipos y ensamblados.
Pregunta 24: ¿Qué método de la clase Thread en .NET se utiliza para iniciar la ejecución de un hilo?
- A) Run()
- B) Execute()
- C) Start()
- D) Begin()
En .NET, la clase Thread tiene un método Start() que inicia la ejecución del hilo, llamando al método que se haya asignado al delegado ThreadStart.
Pregunta 25: ¿Qué espacio de nombres de .NET contiene las clases para programación paralela, como Parallel y Task?
- A) System.Threading.Tasks
- B) System.Threading
- C) System.Parallel
- D) System.Concurrent
El espacio de nombres System.Threading.Tasks incluye las clases Task, Parallel y otras para la programación paralela y asíncrona en .NET.
Pregunta 26: En ASP.NET Core, ¿qué servicio se utiliza para almacenar datos en caché en la memoria del servidor?
- A) IDistributedCache
- B) IMemoryCache
- C) ICacheService
- D) IResponseCache
En ASP.NET Core, el servicio IMemoryCache permite almacenar datos en caché en la memoria del servidor web, utilizando un diccionario en memoria.
Pregunta 27: En una aplicación .NET Core, ¿qué archivo se utiliza comúnmente para almacenar configuración en formato JSON?
- A) Web.config
- B) App.config
- C) appsettings.json
- D) configuration.json
En .NET Core y .NET 5+, el archivo appsettings.json es el archivo predeterminado para la configuración de la aplicación en formato JSON, cargado mediante el sistema de configuración.
Pregunta 28: ¿Qué interfaz de .NET Core se utiliza para registrar mensajes de log en una aplicación?
- A) ILogger
- B) ILogging
- C) ILogWriter
- D) ILogProvider
La interfaz ILogger del espacio de nombres Microsoft.Extensions.Logging es la abstracción principal para realizar logging en aplicaciones .NET Core.
Pregunta 29: ¿Qué atributo de NUnit se utiliza para marcar un método como prueba unitaria?
- A) [TestMethod]
- B) [Test]
- C) [Fact]
- D) [TestCase]
En el framework de pruebas NUnit, el atributo [Test] se utiliza para indicar que un método es una prueba unitaria.
Pregunta 30: ¿Qué comando de la CLI de .NET Core se utiliza para publicar una aplicación como autocontenida (self-contained)?
- A) dotnet build
- B) dotnet deploy
- C) dotnet run
- D) dotnet publish --self-contained
El comando dotnet publish con la opción --self-contained genera una aplicación autocontenida que incluye el runtime de .NET, evitando la necesidad de tenerlo instalado en el sistema destino.