Como passar em uma entrevista de C#: guia completo com exemplos de código

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

Por que a entrevista de C# não é um exame, mas um diálogo

\n\n

Imagine: você está sentado em frente a um tech lead ou desenvolvedor sênior. Ele olha para você não como um inimigo, mas como um futuro colega. Mas na sua cabeça é uma névoa, suas mãos suam, e na pergunta sobre IDisposable você de repente esquece o que é isso. Familiar?

\n\n

A entrevista de C# não é um teste escolar onde você só precisa "adivinhar a letra". É uma verificação do seu raciocínio de engenharia, capacidade de argumentar e, claro, conhecimento básico da plataforma .NET. Neste artigo, vamos abordar os principais tópicos que realmente são perguntados nas entrevistas (spoiler: 80% das perguntas se repetem repetidamente).

\n\n

Base que você precisa saber de cor

\n\n

Se você está indo para uma entrevista daqui a uma hora e não tem tempo para se preparar — leia esta seção. É o "pão" do desenvolvedor C#. Sem esse conhecimento, você não será contratado nem para júnior.

\n\n

1. Tipos de dados: Value vs Reference

\n\n

Esta é, talvez, a pergunta mais popular. O entrevistador quer ouvir não apenas "int é tipo de valor, class é tipo de referência". É importante que você entenda como isso funciona internamente.

\n\n
// Exemplo que é frequentemente dado em entrevistas\nstruct Point {\n    public int X;\n    public int Y;\n}\n\nclass PointClass {\n    public int X;\n    public int Y;\n}\n\nvoid Main() {\n    Point p1 = new Point { X = 10, Y = 20 };\n    Point p2 = p1;\n    p2.X = 999;\n    Console.WriteLine(p1.X); // 10 — cópia\n\n    PointClass pc1 = new PointClass { X = 10, Y = 20 };\n    PointClass pc2 = pc1;\n    pc2.X = 999;\n    Console.WriteLine(pc1.X); // 999 — referência\n}
\n\n

Ponto-chave: struct é copiada inteiramente, class é passada por referência. E sim, string é um tipo de referência, mas se comporta como value devido à imutabilidade. Isso também é frequentemente perguntado.

\n\n

2. Boxing e Unboxing

\n\n

Tópico simples, mas eles gostam dele. Imagine que você coloca um tipo de valor (int) em um object. Ocorre o boxing. Quando você o retira — unboxing. Isso é caro em termos de desempenho.

\n\n
int number = 42;\nobject boxed = number; // boxing\nint unboxed = (int)boxed; // unboxing
\n\n

Em projetos modernos, isso é raro, mas conhecer o mecanismo mostra que você entende como o .NET gerencia a memória.

\n\n

3. Interfaces e classes abstratas

\n\n

Pergunta clássica: "Quando usar interface e quando usar abstract class?"

\n\n
    \n
  • Interface — contrato. Se você tem classes diferentes que devem ser capazes de fazer a mesma coisa (por exemplo, voar: avião, pássaro, drone).
  • \n
  • Classe abstrata — implementação base. Se as classes têm lógica comum (por exemplo, todos os animais respiram, mas de maneiras diferentes).
  • \n
\n\n
public interface IFlyable {\n    void Fly();\n}\n\npublic abstract class Animal {\n    public abstract void MakeSound();\n    public void Breathe() => Console.WriteLine("Inspirar-expirar");\n}
\n\n

No C# 8.0+, as interfaces ganharam implementação padrão, mas na entrevista é melhor falar sobre a abordagem clássica.

\n\n

Perguntas avançadas: onde está a pegadinha

\n\n

Quando a base é dominada, o entrevistador começa a "cavar mais fundo". Aqui estão os tópicos que mais frequentemente causam travamento.

\n\n

4. Async/Await e threads

\n\n

Muitos confundem assincronia com multithreading. Lembre-se: async/await é sobre liberar a thread, não sobre criar uma nova.

\n\n
public async Task<string> GetDataAsync() {\n    using HttpClient client = new HttpClient();\n    // A thread é liberada enquanto esperamos a resposta\n    string result = await client.GetStringAsync("https://example.com");\n    return result;\n}
\n\n

Frequentemente perguntam sobre ConfigureAwait(false). Resposta: é necessário para não retornar ao contexto de sincronização original (por exemplo, na thread de UI do WPF). Em bibliotecas — sempre use, em aplicações — com cuidado.

\n\n

5. LINQ: do simples

Blogs

Book Recommendations