Cómo aprobar una entrevista de C#: preguntas y respuestas principales

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Cómo pasar una entrevista de C#: principales preguntas y respuestas



Una entrevista para un puesto de desarrollador C# / .NET no solo es una prueba de conocimientos técnicos, sino también de la capacidad de pensar y explicar conceptos complejos en palabras sencillas. En este artículo, analizamos las preguntas más frecuentes que se hacen en las entrevistas, con ejemplos de código y explicaciones. El material será útil tanto para desarrolladores junior como middle.



1. ¿Cuál es la diferencia entre value types y reference types?



Esta es una pregunta básica pero importante. En C#, todos los tipos se dividen en dos categorías:



  • Value types (tipos de valor) — se almacenan en la pila (stack), se copian al asignarse. Ejemplos: int, double, struct, enum.
  • Reference types (tipos de referencia) — se almacenan en el heap, la variable almacena una referencia al objeto. Ejemplos: class, string, array, delegate.


Ejemplo para la entrevista:



int a = 10;int b = a;b = 20;Console.WriteLine(a); // 10 — el valor no cambió

var obj1 = new MyClass { Value = 10 };var obj2 = obj1;obj2.Value = 20;Console.WriteLine(obj1.Value); // 20 — la referencia es la misma


En la entrevista también suelen preguntar sobre boxing/unboxing — la conversión de un value type a object y viceversa. Trate de evitar esto en el código, ya que reduce el rendimiento.



2. ¿Qué son los delegados, eventos y expresiones lambda?



Los delegados son tipos que almacenan referencias a métodos. Los eventos son una envoltura sobre los delegados, utilizada para implementar el patrón "publicador-suscriptor".



Ejemplo de delegado:



public delegate void MyDelegate(string message);

public static void ShowMessage(string msg) => Console.WriteLine(msg);

MyDelegate del = ShowMessage;del("Hello from delegate");


Ejemplo de evento:



public class Button{    public event EventHandler Click;    public void Press() => Click?.Invoke(this, EventArgs.Empty);}


Las expresiones lambda son una forma abreviada de escribir métodos anónimos. Se utilizan activamente en LINQ:



var numbers = new List<int> { 1, 2, 3, 4, 5 };var even = numbers.Where(x => x % 2 == 0).ToList();


En la entrevista pueden preguntar: "¿Por qué es mejor usar eventos en lugar de delegados?" — respuesta: los eventos protegen la lista de suscriptores de modificaciones externas (no se puede llamar a Invoke desde fuera).



3. ¿Cómo funciona async/await y cuál es la diferencia con el multithreading?



Esta es una de las preguntas más populares. async/await es azúcar sintáctico para trabajar con operaciones asíncronas. No crea un nuevo hilo, sino que utiliza eficientemente el existente (hilo de UI o hilo del pool).



Puntos clave:

  • async — modificador del método que permite el uso de await.
  • await — suspende la ejecución del método hasta que la tarea se complete, sin bloquear el hilo.
  • El tipo de retorno — generalmente Task o Task<T>.


Ejemplo:



public async Task<string> GetDataAsync(){    using var client = new HttpClient();    string result = await client.GetStringAsync("https://api.example.com");    return result;}


Diferencia con el multithreading: el multithreading (Thread, Task.Run) es la ejecución paralela de código en varios núcleos de CPU. Async/await es asincronía que libera el hilo para otras tareas mientras se espera (por ejemplo, la respuesta de un servidor).



Consejo: en la entrevista, ponga un ejemplo real — carga de datos desde la red o un archivo. Evite async void (excepto en manejadores de eventos) — esto puede provocar excepciones no controladas.

Blogs

Book Recommendations