Como passar em uma entrevista de C#: principais perguntas de A a Z

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

Introdução

A entrevista para a posição de desenvolvedor C# não é apenas uma verificação de sintaxe. Os empregadores querem ver compreensão da plataforma .NET, princípios de funcionamento do CLR, capacidade de escrever código performático e conhecimento de abordagens modernas (async, LINQ, DI).

Neste artigo, analisaremos as principais perguntas sobre C# de A a Z — desde tipos de dados básicos até tópicos complexos como coleta de lixo e programação assíncrona. Cada pergunta é acompanhada por uma breve resposta e um exemplo de código, para que você se sinta confiante na entrevista.



1. Perguntas básicas: tipos, classes e memória



1.1. Qual a diferença entre Value Type e Reference Type?

Value Type (int, struct, enum) são armazenados na pilha e copiados por valor. Reference Type (class, string, array) são armazenados no heap, a variável contém uma referência ao objeto.

int a = 10;int b = a; // b é uma cópia, a e b são independentes

class MyClass { public int X; }MyClass obj1 = new MyClass { X = 5 };MyClass obj2 = obj1; // obj2 referencia o mesmo objetoobj2.X = 10; // obj1.X também se tornará 10


1.2. O que é Boxing e Unboxing?

Boxing é o empacotamento de um tipo de valor em um objeto (no heap). Unboxing é o processo inverso. O uso frequente reduz a performance.

int number = 42;object boxed = number;    // Boxingint unboxed = (int)boxed; // Unboxing


1.3. Fale sobre o Garbage Collector (Coletor de Lixo).

O GC no .NET libera automaticamente a memória de objetos que não têm mais referências. Funciona por gerações (Gen 0, 1, 2). Objetos de grande tamanho (>85 KB) vão para o Large Object Heap (LOH).

Dica: Não chame GC.Collect() manualmente — isso interfere nas otimizações do GC.



2. POO e princípios de design



2.1. Explique os princípios SOLID.

  • S — Single Responsibility: uma classe deve ter apenas um motivo para mudar.
  • O — Open/Closed: aberta para extensão, fechada para modificação.
  • L — Liskov Substitution: subclasses devem substituir corretamente a classe base.
  • I — Interface Segregation: muitas interfaces pequenas são melhores que uma grande.
  • D — Dependency Inversion: dependências devem ser de abstrações, não de classes concretas.


2.2. O que é Dependency Injection (DI)?

DI é um padrão onde as dependências são passadas para a classe externamente (via construtor, método ou propriedade). No .NET Core há um contêiner DI embutido.

public interface ILogger{    void Log(string message);}

public class ConsoleLogger : ILogger{ public void Log(string message) => Console.WriteLine(message);}

public class OrderService{ private readonly ILogger _logger; public OrderService(ILogger logger) // DI via construtor { _logger = logger; }}


3. LINQ, exceções e strings



3.1. Como funciona o LINQ? O que é execução adiada?

LINQ (Language Integrated Query) permite escrever consultas para coleções, bancos de dados (EF Core) e XML. Execução adiada significa que a consulta só é executada quando o resultado é iterado (por exemplo, via foreach ou .ToList()).

var numbers = new List<int> { 1, 2, 3, 4, 5 };var query = numbers.Where(n => n > 2); // consulta não executadanumbers.Add(6); // adiciona após criar a consultaforeach (var n in query) // execução aqui    Console.WriteLine(n); // 3, 4, 5, 6


3.2. Qual a diferença entre String e StringBuilder?

String é um tipo imutável. Cada operação de concatenação cria um novo objeto. StringBuilder usa um buffer mutável e é eficiente para múltiplas alterações em strings.

// Ruim (muitas alocações)string s = "";for (int i = 0; i &                

Blogs

Book Recommendations