Como passar em uma entrevista de C#: principais perguntas e respostas

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Como passar em uma entrevista de C#: principais perguntas e respostas



A entrevista para a posição de desenvolvedor C# / .NET não é apenas um teste de conhecimento técnico, mas também a capacidade de pensar e explicar conceitos complexos em palavras simples. Neste artigo, analisamos as perguntas mais frequentes feitas em entrevistas, com exemplos de código e explicações. O material será útil tanto para desenvolvedores junior quanto para middle.



1. Qual é a diferença entre value types e reference types?



Esta é uma pergunta básica, mas importante. Em C#, todos os tipos são divididos em duas categorias:



  • Value types (tipos de valor) — são armazenados na stack, copiados quando atribuídos. Exemplos: int, double, struct, enum.
  • Reference types (tipos de referência) — são armazenados no heap, a variável armazena uma referência ao objeto. Exemplos: class, string, array, delegate.


Exemplo para a entrevista:



int a = 10;int b = a;b = 20;Console.WriteLine(a); // 10 — o valor não mudou

var obj1 = new MyClass { Value = 10 };var obj2 = obj1;obj2.Value = 20;Console.WriteLine(obj1.Value); // 20 — a referência é a mesma


Na entrevista, também costumam perguntar sobre boxing/unboxing — a conversão de um value type para object e vice-versa. Tente evitar isso no código, pois reduz o desempenho.



2. O que são delegates, events e lambda expressions?



Delegates são tipos que armazenam referências a métodos. Events são um wrapper sobre delegates, usado para implementar o padrão "publicador-assinante".



Exemplo de delegate:



public delegate void MyDelegate(string message);

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

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


Exemplo de event:



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


Lambda expressions são uma forma concisa de escrever métodos anônimos. Elas são amplamente usadas em LINQ:



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


Na entrevista, podem perguntar: "Por que é melhor usar events em vez de delegates?" — resposta: events protegem a lista de assinantes de alterações externas (não é possível chamar Invoke de fora).



3. Como funciona async/await e qual a diferença para multithreading?



Esta é uma das perguntas mais populares. async/await é um syntactic sugar para trabalhar com operações assíncronas. Ele não cria uma nova thread, mas usa eficientemente a thread existente (thread da UI ou thread do pool).



Pontos-chave:

  • async — modificador do método que permite o uso de await.
  • await — pausa a execução do método até que a tarefa seja concluída, sem bloquear a thread.
  • O tipo de retorno é geralmente Task ou Task<T>.


Exemplo:



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


Diferença para multithreading: multithreading (Thread, Task.Run) é a execução paralela de código em vários núcleos da CPU. Async/await é assincronia, que libera a thread para outras tarefas durante a espera (por exemplo, resposta de um servidor).



Dica: na entrevista, dê um exemplo real — carregar dados da rede ou de um arquivo. Evite async void (exceto para event handlers) — isso pode levar a exceções não tratadas e

Blogs

Book Recommendations