Entrevista técnica: Respondiendo las preguntas más comunes para Senior .NET (Parte 2)
Respondiendo las preguntas de entrevista para seniors .NET en la categoría Fundamentos

Hey estimados devs, aquí daré respuesta a la primera sección de preguntas planteadas en este artículo.

Categoría 1: Fundamentos de .NET y C#

1. ¿Cuál es la diferencia entre .NET Framework, .NET Core y .NET (9)?

  • .NET Framework
    • Nació en 2002.
    • Solo funciona en Windows.
    • Tiene soporte limitado para nuevas aplicaciones (El mismo Microsoft lo considera legacy).
    • Es importante mencionar que aún muchos sistemas empresariales (banca, seguros, ERP internos) aún corren sobre él.
    • Como ejemplos reales de aplicaciones hechas en esta plataforma tienes: sistemas de escritorio hechos en WinForms o WPF y servicios web ASMX/WCF.
  • .NET Core y .NET desde la versión 5 en adelante
    • Desde la versión 1.0 hasta la 3.1 se le llamó .NET Core, después se saltaron la version 4 y pasaron directamente a la 5 para evitar confusiones con las versiones de .NET Framework.
    • Nació en 2016 y desde la versión 5 es la unificación: ya no existen “Core” o “Framework” como ramas separadas.
    • Multiplataforma: corre en Windows, Linux y macOS.
    • Mucho más rápido que Framework (por ejemplo, el servidor Kestrel es mucho más veloz que IIS).
    • Pensado para la nube y arquitecturas modernas como microservicios. También tiene muchas mejoras de rendimiento y soporte para inteligencia artificial con ML.NET.
    • Ejemplos reales: Aplicaciones de eCommerce modernas con arquitecturas limpias y microservicios en Azure Kubernetes Service (AKS) o AWS ECS, hechas con ASP.NET Core Web API en entornos distribuidos.

Así que, en resumen:

  • Framework = legado en Windows cuya última versión es la 4.8.
  • Core = multiplataforma, base para modernización que luego se simplificó en .NET.
  • .NET = futuro unificado y optimizado para cloud/IA.

Si quieres profundizar, te invito a leer este artículo.

2. ¿Qué es el CLR y cómo funciona el Garbage Collector en .NET?

  • CLR (Common Language Runtime)
    • Es el motor de ejecución de .NET.
    • Convierte el código intermedio (IL/MSIL) compilado desde C#, VB.NET o F# a código máquina JIT (Just-In-Time) para el SO y CPU.
    • Se encarga de:
      • Manejo de memoria
      • Seguridad
      • Multithreading
      • Interoperabilidad con código nativo (C/C++)
  • Garbage Collector (GC)
    • Es parte del CLR y gestiona la memoria automáticamente.
    • Libera objetos que ya no tienen referencias vivas en el programa.
    • Usa generaciones (Gen 0, 1, 2, LOH) para optimizar rendimiento.
    • Evita fugas de memoria sin que el dev tenga que hacerlo manualmente.

Ejemplo real en la industria:

En un sistema de trading bursátil en tiempo real (por ejemplo, Bloomberg Terminal), el GC ayuda a manejar memoria de miles de objetos que cambian constantemente (precios, órdenes). Sin GC, los memory leaks colapsarían el sistema.

3. ¿Qué diferencia existe entre Taskasync/await y ValueTask en C#?

  • Task: representa una operación asincrónica que puede completarse en el futuro. Es una promesa de un resultado (que podría ser nada también retornando Task en lugar de void). Siempre crea un objeto en el heap.
  • async/await: no son tipos, sino palabras clave del lenguaje.
    • async marca un método que devuelve Task, Task<T> o ValueTask<T>.
    • await “espera” la finalización de una tarea sin bloquear el hilo, simplificando el código asincrónico.
  • ValueTask: una alternativa más ligera a Task<T> cuando:
    • A menudo el resultado ya está disponible de forma sincrónica.
    • Se quiere evitar la sobrecarga de asignar un Task en el heap innecesariamente.
      Pero: si se espera varias veces, o se guarda para usos posteriores, puede generar errores o pérdida de rendimiento.

Entonces aquí te lo resumo:

  • Usa Task por defecto.
  • Usa async/await para escribir código asincrónico de forma legible.
  • Usa ValueTask solo en escenarios de alto rendimiento donde evitas crear tareas innecesarias.

4. ¿Qué son los record types en C# y en qué casos los usarías?

Un record type en C# es una forma especial de crear objetos pensados para trabajar con datos inmutables (que no cambian después de ser creados) y que se comparan por valor en lugar de por referencia. Eso significa que dos objetos con las mismas propiedades son considerados iguales, aunque no sean la misma instancia en memoria.

Se usan sobre todo cuando necesitas modelar información más que comportamiento, por ejemplo, en DTOs, respuestas de APIs o mensajes entre sistemas, donde importa lo que contienen y no su identidad. También permiten crear copias fáciles con cambios mínimos usando with.

Aquí te hablo mucho más sobre los records en C#.

Te lo resumo dev: usa record cuando tu prioridad es representar datos que se comparan por su contenido, y quédate con class cuando necesites objetos mutables y con identidad propia.

Esto es todo por ahora, dev, en la siguiente entrada seguimos con la siguiente categoría.

¡Si esta entrada te ha gustado, compártela! 🐿️💪🏼

Créditos de imagen de portada: Foto de Gerald Schömbs en Unsplash

Un comentario en «Entrevista técnica: Respondiendo las preguntas más comunes para Senior .NET (Parte 2)»

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *