P
prepair.app
Começar entrevista →
EnglishУкраїнськаРусскийDeutsch
🟣

Perguntas de entrevista .NET

As entrevistas de .NET transitam entre C# como linguagem e o runtime por trás dele — o CLR, o GC, como o async/await realmente funciona — antes de chegar ao ASP.NET Core e ao Entity Framework Core, onde vivem a maioria das perguntas práticas. Aqui estão as perguntas mais frequentes, cada uma com uma resposta modelo.

Junior · sem experiência / menos de 1 anoMiddle · 2–4 anos de experiênciaSenior · 5+ anos de experiência

O que perguntam

Tipos do C#, LINQ e nullable reference types
Async/await e o modelo Task
CLR, JIT e garbage collection
ASP.NET Core: middleware e dependency injection
Entity Framework Core e performance de consultas
Testes com xUnit/Moq, Docker e deploy em nuvem

9 perguntas reais com respostas

Cada pergunta vem com uma resposta modelo para você comparar com a sua.

1

Qual é a diferença entre value types e reference types em C#?

Resposta

Um value type (struct, int, bool, enum) guarda seus dados diretamente e é copiado na atribuição; um reference type (class, string, arrays) guarda um ponteiro para dados na heap, e na atribuição o ponteiro é copiado, não o objeto. Passar uma struct para um método que a modifica opera silenciosamente sobre uma cópia, a menos que você a passe por ref. Uma struct guardada num campo de uma classe fica na heap junto com ela, não na stack.

2

O que são boxing e unboxing, e por que importam para a performance?

Resposta

Boxing envolve um value type num objeto na heap para que possa ser tratado como object — por exemplo, passar um int onde se espera object, ou para um ArrayList não genérico. Unboxing converte de volta e copia o valor. Cada box é uma alocação na heap e um candidato ao GC, então um loop que faz boxing de milhões de ints gera pressão real de coleta que os genéricos evitam completamente.

3

Qual problema os nullable reference types resolvem?

Resposta

Antes do C# 8, string name e um valor que podia ser null pareciam idênticos, então o compilador não conseguia avisar que um método retornando null ia explodir três chamadas depois. Com nullable reference types habilitados, string significa "nunca null" e string? significa "pode ser null", e o compilador avisa quando você desreferencia um tipo ? sem checagem. Isso não impõe nada em tempo de execução, mas transforma a maioria dos bugs de referência nula em avisos de compilação em vez de uma NullReferenceException às 2 da manhã.

4

O que significa a execução de uma query LINQ ser adiada (deferred)?

Resposta

var query = users.Where(u => u.Active) não toca nos dados — constrói um pipeline que roda quando você o enumera com foreach, .ToList(), .Count(), ou similar. Por isso a mesma variável de consulta pode retornar resultados diferentes se a coleção subjacente mudar entre a construção e a enumeração, e por isso chamar .ToList() cedo demais anula filtros posteriores, enquanto chamar tarde demais num IQueryable significa voltar ao banco a cada enumeração.

5

O que acontece de fato quando você faz `await` num `Task`?

Resposta

O compilador reescreve o método como uma máquina de estados: o código até o await roda de forma síncrona, e se a tarefa aguardada ainda não terminou, o método devolve o controle para quem o chamou imediatamente, liberando a thread. Quando a tarefa termina, a continuação é retomada — por padrão no SynchronizationContext capturado em apps de UI, por isso ConfigureAwait(false) em código de biblioteca evita deadlocks. async não significa "roda em outra thread"; significa "não bloqueia a thread enquanto espera".

6

O que são as gerações do GC e por que o runtime as usa?

Resposta

O CLR agrupa objetos nas gerações 0, 1 e 2 partindo da observação de que a maioria dos objetos morre jovem — um DTO no escopo de um request vira lixo em milissegundos, um objeto de config em cache sobrevive por toda a vida da aplicação. Coletas de gen 0 são baratas e frequentes; quem sobrevive é promovido para gen 1, depois gen 2, e coletas de gen 2 varrem toda a heap viva e são caras. Objetos de 85.000 bytes ou mais vão direto para a Large Object Heap, que é coletada junto com a gen 2 e não compacta por padrão.

7

Descreva o pipeline de middleware do ASP.NET Core.

Resposta

Cada request passa pelos middlewares registrados no Program.cs na ordem em que foram adicionados — tipicamente tratamento de exceções, redirecionamento HTTPS, roteamento, autenticação, autorização, e então o endpoint. Cada middleware pode agir antes de chamar next(), depois, ou ambos, e pode interromper a cadeia não chamando next() de jeito nenhum — é assim que a autenticação rejeita um request antes de chegar ao controller. A ordem não é cosmética — colocar autorização antes do roteamento significa que ainda não há um endpoint correspondente para checar políticas, e isso lança uma exceção.

8

Quando o Entity Framework Core causa um problema N+1, e como corrigir?

Resposta

Carregar uma lista de pedidos e depois acessar order.Customer.Name dentro de um foreach sem eager loading dispara uma consulta por pedido — o mesmo padrão N+1 de qualquer ORM. Include(o => o.Customer) corrige isso com um JOIN, ou AsSplitQuery() quando um join multiplicaria linhas por causa de várias coleções incluídas. O change tracking é um custo relacionado: o EF Core mantém um snapshot de cada entidade rastreada para detectar mudanças no SaveChanges(), o que é trabalho desperdiçado para uma lista somente leitura, então caminhos de leitura devem usar AsNoTracking().

9

Qual é a diferença entre os lifetimes de DI embutidos — Transient, Scoped e Singleton?

Resposta

Transient cria uma nova instância a cada solicitação. Scoped cria uma instância por request e a reutiliza pelo resto daquele request. Singleton cria uma instância para toda a vida da aplicação. O bug clássico é injetar um serviço scoped — como um DbContext — num singleton: o singleton captura a instância scoped do primeiro request e a mantém para sempre, o que ou lança exceção no uso posterior ou compartilha estado silenciosamente entre requests não relacionados.

🦎

Só ler as respostas não basta

Numa entrevista de verdade você fala sob pressão. O Cam faz essas mesmas perguntas, avalia cada resposta e mostra exatamente o que melhorar.

Praticar entrevista de .NET Backend Developer →
Grátis · 3 entrevistas por mês

Vale a pena ler

Todos os artigos →

Outras especializações

🔍QA Manual🤖QA AutomationJava Backend🐍Python Backend🐘PHP Backend🦫Go Backend🟢Node.js Backend💎Ruby on Rails🔷C++🟨JavaScript⚛️React Frontend💚Vue Frontend🅰️Angular FrontendNext.js🍏iOS (Swift)🟩Android (Kotlin)📱React Native Developer⚙️DevOps / SRE🗄️Data Engineer🧠AI/ML Engineer📊Data Scientist📈Business Analyst🎯Product Manager📋Project Manager🎨UI/UX Designer📣Marketing🧑‍💼HR / Recruiter🤝Sales / Account Manager🎧Technical Support Engineer