diciembre 21, 2025
10 min de lectura

Preguntas para entrevista de Desarrollador Backend (C#/.NET): Guía Completa

interview
career-advice
job-search
Preguntas para entrevista de Desarrollador Backend (C#/.NET): Guía Completa
Milad Bonakdar

Milad Bonakdar

Autor

Domina el desarrollo backend en C# y .NET con preguntas esenciales para entrevistas que cubren ASP.NET Core, Entity Framework, Inyección de Dependencias y diseño de sistemas.


Introducción

C# y .NET han evolucionado significativamente, convirtiéndose en un ecosistema potente y multiplataforma para construir sistemas backend de alto rendimiento. Con la llegada de .NET Core (y ahora simplemente .NET 5+), es una de las mejores opciones para aplicaciones nativas de la nube, microservicios y soluciones empresariales.

Esta guía cubre preguntas esenciales de entrevista para Desarrolladores Backend especializados en C# y .NET. Exploramos los fundamentos del lenguaje, la arquitectura de ASP.NET Core, las interacciones con bases de datos con Entity Framework y las mejores prácticas para ayudarte a prepararte para tu próxima entrevista.


Fundamentos del Lenguaje C#

1. ¿Cuál es la diferencia entre struct y class en C#?

Respuesta:

  • Class (Clase): Un tipo de referencia (se asigna en el heap). Cuando pasas un objeto de clase a un método, estás pasando una referencia a la ubicación de la memoria. Los cambios dentro del método afectan al objeto original. Admite la herencia.
  • Struct (Estructura): Un tipo de valor (se asigna en la pila). Cuando pasas una estructura, se pasa una copia de los datos. Los cambios dentro del método no afectan a la estructura original. No admite la herencia (pero puede implementar interfaces).
  • Uso: Utiliza struct para estructuras de datos pequeñas e inmutables que representan un único valor (como Point, Color). Utiliza class para la mayoría de los demás objetos.

Rareza: Común Dificultad: Fácil


2. Explica async y await. ¿Cómo ayuda con la escalabilidad?

Respuesta: async y await son palabras clave utilizadas para la programación asíncrona.

  • Mecanismo: Cuando se encuentra una palabra clave await, la ejecución del método se pausa y el hilo se devuelve al grupo de hilos para manejar otras solicitudes. Cuando la tarea esperada se completa, la ejecución se reanuda (potencialmente en un hilo diferente).
  • Escalabilidad: En un servidor web (como Kestrel), los hilos son un recurso limitado. Si un hilo se bloquea esperando E/S (base de datos, red), no puede manejar otras solicitudes. Async permite que el servidor maneje muchas más solicitudes concurrentes con menos hilos al no bloquearlos durante las operaciones de E/S.

Rareza: Muy Común Dificultad: Media


3. ¿Qué es la Inyección de Dependencias (DI) y cómo se implementa en .NET?

Respuesta: La Inyección de Dependencias es un patrón de diseño donde las dependencias de una clase se proporcionan desde el exterior en lugar de crearse internamente.

  • En .NET: ASP.NET Core tiene un contenedor DI integrado. Registras los servicios en Program.cs (o Startup.cs en versiones anteriores) y los inyectas a través de la inyección de constructor.
  • Ciclos de vida:
    • Transient (Transitorio): Se crean cada vez que se solicitan.
    • Scoped (Ámbito): Se crean una vez por solicitud del cliente (solicitud HTTP).
    • Singleton: Se crean la primera vez que se solicitan y se comparten por todas las solicitudes posteriores.

Rareza: Muy Común Dificultad: Media


4. ¿Cuál es la diferencia entre IEnumerable<T> e IQueryable<T>?

Respuesta:

  • IEnumerable<T>: Ejecuta la consulta en memoria. Si se utiliza con una base de datos (EF Core), obtiene todos los datos del servidor a la memoria del cliente y luego los filtra. Bueno para LINQ to Objects.
  • IQueryable<T>: Ejecuta la consulta de forma remota (por ejemplo, en el servidor SQL). Construye un árbol de expresión que se traduce en una consulta SQL. El filtrado se realiza en el lado de la base de datos, lo que es mucho más eficiente para grandes conjuntos de datos.

Rareza: Común Dificultad: Media


5. ¿Qué son los Métodos de Extensión?

Respuesta: Los métodos de extensión te permiten "agregar" métodos a los tipos existentes sin crear un nuevo tipo derivado, recompilar o modificar el tipo original de otra manera.

  • Sintaxis: Se definen como métodos estáticos en una clase estática. El primer parámetro especifica en qué tipo opera el método, precedido por la palabra clave this.
  • Ejemplo: Agregar un método WordCount() a la clase string.

Rareza: Común Dificultad: Fácil


ASP.NET Core y Arquitectura

6. ¿Qué es Middleware en ASP.NET Core?

Respuesta: Los middleware son componentes de software que se ensamblan en una canalización de aplicaciones para manejar solicitudes y respuestas.

  • Canalización (Pipeline): Cada componente elige si pasar la solicitud al siguiente componente en la canalización y puede realizar el trabajo antes y después de que se invoque el siguiente componente.
  • Ejemplos: Autenticación, Autorización, Registro, Manejo de Excepciones, Servicio de archivos estáticos.
  • El Orden Importa: El orden en que se agrega el middleware en Program.cs define el orden de ejecución.

Rareza: Muy Común Dificultad: Media


7. Explica la diferencia entre .NET Core y .NET Framework.

Respuesta:

  • .NET Framework: La implementación original, solo para Windows. Madura, pero ligada a Windows.
  • .NET Core (ahora simplemente .NET): Una implementación multiplataforma, de código abierto y modular. Se ejecuta en Windows, Linux y macOS. Está optimizada para un alto rendimiento y despliegues en la nube.
  • Diferencias Clave: Soporte multiplataforma, amigable con la arquitectura de microservicios, mayor rendimiento, versionado en paralelo.

Rareza: Común Dificultad: Fácil


8. ¿Qué es Kestrel?

Respuesta: Kestrel es un servidor web multiplataforma, de código abierto y basado en eventos que se incluye por defecto en las plantillas de ASP.NET Core.

  • Rol: Escucha las solicitudes HTTP y las pasa a la aplicación.
  • Uso: Puede ejecutarse de forma independiente (servidor perimetral) o detrás de un proxy inverso como IIS, Nginx o Apache. Se recomienda utilizar un proxy inverso para la producción para manejar la seguridad, el balanceo de carga y la terminación SSL.

Rareza: Media Dificultad: Media


9. ¿Cómo manejas el Manejo Global de Excepciones en ASP.NET Core?

Respuesta: En lugar de bloques try-catch en cada controlador, debes utilizar middleware para el manejo global de excepciones.

  • UseExceptionHandler: Middleware incorporado que captura excepciones, las registra y vuelve a ejecutar la solicitud en una canalización alternativa (generalmente apuntando a una página de error o respuesta de API).
  • Middleware Personalizado: Puedes escribir middleware personalizado para capturar excepciones y devolver una respuesta de error JSON estandarizada (por ejemplo, ProblemDetails).

Rareza: Común Dificultad: Media


Base de Datos y Entity Framework

10. ¿Qué es Entity Framework Core (EF Core)? ¿Code-First vs. Database-First?

Respuesta: EF Core es un Mapeador Objeto-Relacional (ORM) para .NET. Permite a los desarrolladores trabajar con una base de datos utilizando objetos .NET.

  • Code-First: Defines tus clases de dominio (entidades) primero, y EF Core crea/actualiza el esquema de la base de datos basándose en ellas utilizando Migraciones. Preferido para nuevos proyectos.
  • Database-First: Tienes una base de datos existente, y EF Core genera las clases .NET (scaffolding) basándose en el esquema.

Rareza: Común Dificultad: Fácil


11. ¿Qué es el problema N+1 en EF Core y cómo lo solucionas?

Respuesta: El problema N+1 ocurre cuando obtienes una lista de entidades (1 consulta) y luego accedes a una entidad relacionada para cada elemento en un bucle, causando N consultas adicionales.

  • Solución: Utiliza Carga Anticipada con el método .Include(). Esto genera un SQL JOIN para obtener los datos relacionados en una sola consulta.
  • Ejemplo: context.Orders.Include(o => o.Customer).ToList();

Rareza: Muy Común Dificultad: Media


12. Explica el Patrón de Repositorio. ¿Por qué usarlo con EF Core?

Respuesta: El Patrón de Repositorio media entre las capas de dominio y de mapeo de datos utilizando una interfaz similar a una colección para acceder a los objetos de dominio.

  • Pros: Desacopla la aplicación de la tecnología específica de acceso a datos (EF Core), facilita las pruebas unitarias (se puede simular el repositorio) y centraliza la lógica de acceso a datos.
  • Contras/Debate: El DbContext de EF Core ya es una implementación del patrón Repositorio/Unidad de Trabajo. Agregar otra capa a veces puede ser redundante ("abstracción sobre abstracción").

Rareza: Común Dificultad: Difícil


APIs REST y Servicios Web

13. ¿Cuáles son los Verbos HTTP y su uso típico?

Respuesta:

  • GET: Recuperar un recurso. Seguro e Idempotente.
  • POST: Crear un nuevo recurso. No Idempotente.
  • PUT: Actualizar/Reemplazar un recurso existente. Idempotente.
  • PATCH: Actualizar parcialmente un recurso. No necesariamente Idempotente (pero generalmente lo es).
  • DELETE: Eliminar un recurso. Idempotente.

Rareza: Común Dificultad: Fácil

14. ¿Cuál es la diferencia entre 401 No Autorizado y 403 Prohibido?

Respuesta:

  • 401 No Autorizado: El usuario no está autenticado. El cliente debe iniciar sesión e intentarlo de nuevo. "No sé quién eres".
  • 403 Prohibido: El usuario está autenticado pero no tiene permiso para acceder al recurso. "Sé quién eres, pero no puedes hacer esto".

Rareza: Común Dificultad: Fácil


Pruebas y Mejores Prácticas

15. ¿Cuál es la diferencia entre Pruebas Unitarias y Pruebas de Integración?

Respuesta:

  • Pruebas Unitarias: Prueban una pequeña unidad de código (generalmente un método) de forma aislada. Las dependencias se simulan (utilizando herramientas como Moq). Rápidas y fiables.
  • Pruebas de Integración: Prueban cómo diferentes partes de la aplicación funcionan juntas (por ejemplo, endpoint de API + Base de datos). Más lentas pero verifican el comportamiento real del sistema.

Rareza: Común Dificultad: Fácil


16. ¿Cómo simulas las dependencias en las Pruebas Unitarias?

Respuesta: Los frameworks de simulación como Moq o NSubstitute se utilizan para crear implementaciones falsas de interfaces.

  • Propósito: Aislar la clase bajo prueba. Por ejemplo, si se está probando un UserService, simulas el IUserRepository para no golpear la base de datos real.
  • Ejemplo (Moq):
var mockRepo = new Mock<IUserRepository>();
mockRepo.Setup(repo => repo.GetById(1)).Returns(new User { Id = 1, Name = "Test" });
var service = new UserService(mockRepo.Object);

Rareza: Común Dificultad: Media


17. ¿Qué son los principios SOLID? Da un ejemplo de uno.

Respuesta: SOLID es un acrónimo de 5 principios de diseño para hacer que el software sea más comprensible, flexible y mantenible.

  • Single Responsibility Principle (Principio de Responsabilidad Única) (SRP)
  • Open/Closed Principle (Principio de Abierto/Cerrado) (OCP)
  • Liskov Substitution Principle (Principio de Sustitución de Liskov) (LSP)
  • Interface Segregation Principle (Principio de Segregación de la Interfaz) (ISP)
  • Dependency Inversion Principle (Principio de Inversión de Dependencia) (DIP)
  • Ejemplo (DIP): Los módulos de alto nivel no deben depender de los módulos de bajo nivel. Ambos deben depender de abstracciones. Esta es la base de la Inyección de Dependencias.

Rareza: Común Dificultad: Difícil


18. ¿Qué es Boxing y Unboxing? ¿Por qué evitarlo?

Respuesta:

  • Boxing (Encasillamiento): Convertir un tipo de valor (como int) a un tipo de referencia (object). Asigna memoria en el heap.
  • Unboxing (Desencasillamiento): Convertir el tipo de referencia de nuevo al tipo de valor.
  • Rendimiento: Ambas son operaciones costosas (asignación de memoria, verificación de tipo). Los genéricos (List<T>) ayudan a evitar el boxing/unboxing en comparación con las colecciones más antiguas (ArrayList).

Rareza: Común Dificultad: Media


19. ¿Qué es la declaración using en C#?

Respuesta: La declaración using proporciona una sintaxis conveniente que asegura el uso correcto de los objetos IDisposable.

  • Mecanismo: Llama automáticamente al método Dispose() en el objeto cuando se sale del bloque (incluso si ocurre una excepción).
  • Sintaxis Moderna: using var file = File.OpenRead("path"); (no se necesitan llaves, se elimina al final del ámbito).

Rareza: Común Dificultad: Fácil


20. Explica el concepto de Middleware en el contexto del patrón "Cadena de Responsabilidad".

Respuesta: El Middleware de ASP.NET Core es una implementación clásica del patrón Cadena de Responsabilidad.

  • Patrón: Una solicitud se pasa a lo largo de una cadena de manejadores. Cada manejador decide si procesar la solicitud o pasarla al siguiente manejador en la cadena.
  • Aplicación: En .NET, el RequestDelegate representa el siguiente manejador. Los componentes de middleware se encadenan para formar la canalización de solicitudes.

Rareza: Poco Común Dificultad: Difícil

Newsletter subscription

Consejos de carrera semanales que realmente funcionan

Recibe las últimas ideas directamente en tu bandeja de entrada

Crea un Currículum que Te Contrate 60% Más Rápido

En minutos, crea un currículum personalizado y compatible con ATS que ha demostrado conseguir 6 veces más entrevistas.

Crea un mejor currículum

Compartir esta publicación

Duplica tus Llamadas para Entrevistas

Los candidatos que adaptan sus currículums a la descripción del trabajo obtienen 2.5 veces más entrevistas. Usa nuestra IA para personalizar tu CV automáticamente para cada solicitud al instante.