16 perguntas · C# / .NET
Perguntas de entrevista para Desenvolvedor C# / .NET
Perguntas para entrevistar desenvolvedores C# e .NET. Use-as para distinguir quem só monta uma API em ASP.NET Core de quem entende o runtime por baixo dela.
Um bom desenvolvedor C# transita por uma stack ampla: a linguagem, o CLR que a executa, o pipeline de requisições do ASP.NET Core e a camada de dados sobre a qual o EF Core trabalha. O risco numa entrevista de .NET é ficar na superfície, perguntando o que é um delegate ou o que o using faz, e nunca descobrir se a pessoa já colocou e manteve um serviço real em produção.
As perguntas abaixo vão mais fundo. Elas investigam como o modelo geracional do garbage collector afeta código com muita alocação, por que async/await existe e em que difere de threads, como a execução adiada do IEnumerable pode transformar uma consulta em N sem ninguém perceber e como os tempos de vida da injeção de dependência (transient, scoped e singleton) causam bugs sutis quando misturados errado.
Para vagas full stack em .NET, combine uma pergunta de CLR, uma de async, uma de EF Core e uma de middleware ou design no ASP.NET Core. Essa distribuição mostra amplitude e a profundidade que separa um sênior de quem só seguiu tutoriais. Bons candidatos falam em trade-offs: quando usar record em vez de class, quando ConfigureAwait(false) importa, quando trocar LINQ por SQL puro. Procure quem raciocina sobre o runtime, não só sobre a sintaxe, e quem sabe contar um bug que perseguiu por stack traces assíncronos em produção.
CLR, memória e linguagem4 perguntas
Explique como funciona o modelo geracional do garbage collector do .NET e por que ele importa para a performance.
O que observar: Gerações 0, 1 e 2 e o Large Object Heap, e por que muitas alocações de vida média ou objetos grandes geram pausas caras.
Qual a diferença entre tipo por valor e tipo por referência, e o que acontece no boxing?
O que observar: Cópia do valor versus cópia da referência, e o boxing alocando um objeto no heap, com impacto em código de alto volume.
Quando você escolheria um record em vez de uma class, e o que o compilador entrega de graça?
O que observar: Igualdade por valor, imutabilidade com expressões with e ToString, ideal para DTOs e objetos de valor.
Que problema o padrão IDisposable resolve e quando o using não protege você?
O que observar: Liberação determinística de recursos não gerenciados, e casos como objetos guardados além do escopo ou o dispose esquecido em quem os possui.
Async e concorrência4 perguntas
Explique o que async/await faz de verdade. Em que difere de criar uma thread?
O que observar: Máquina de estados que libera a thread enquanto espera I/O, sem criar thread nova, versus paralelismo de CPU.
Quando e por que você usaria ConfigureAwait(false)?
O que observar: Em bibliotecas, para não capturar o contexto de sincronização, e a noção de que no ASP.NET Core isso pesa menos.
Qual o perigo do async void e em que caso ele é a única opção aceitável?
O que observar: Exceções que derrubam o processo e impossibilidade de aguardar, aceitável só em handlers de eventos.
Como você depuraria um deadlock causado por bloquear uma chamada assíncrona com .Result?
O que observar: Entender o contexto de sincronização capturado e corrigir com async de ponta a ponta, não com gambiarras.
LINQ e EF Core4 perguntas
Explique a execução adiada no LINQ e como ela pode causar um problema de N+1 sem que ninguém perceba.
O que observar: A consulta só roda quando enumerada, e enumerar várias vezes ou carregar navegações dentro de um laço multiplica as idas ao banco.
Como você identifica e corrige um N+1 no Entity Framework Core?
O que observar: Ver o SQL gerado no log ou num profiler, e corrigir com Include, projeções com Select ou consultas separadas planejadas.
Qual a diferença entre IQueryable e IEnumerable e por que ela importa para a performance?
O que observar: IQueryable traduz o filtro para SQL; IEnumerable filtra em memória depois de trazer os dados.
Quando você sairia do LINQ para escrever SQL puro ou uma stored procedure?
O que observar: Consultas complexas ou críticas de performance, operações em massa, com a manutenção e os testes considerados.
ASP.NET Core, injeção de dependência e testes4 perguntas
Explique a diferença entre os tempos de vida transient, scoped e singleton e dê um bug que cada um pode causar.
O que observar: Exemplos como um DbContext dentro de um singleton (dependência cativa) ou estado compartilhado entre requisições.
Como funciona o pipeline de middlewares do ASP.NET Core e onde você colocaria preocupações transversais como logging?
O que observar: Ordem de registro importa, cada middleware chama o próximo, e logging e tratamento de erros entram cedo no pipeline.
Como você escreve um teste unitário para um controller que depende de banco de dados sem acessar um banco real?
O que observar: Injetar uma abstração e usar dublês, ou testes de integração com banco em container, sabendo os limites do provedor em memória.
Um endpoint novo fica lento sob carga. Como você descobre se o gargalo é o banco, a serialização ou o esgotamento do pool de threads?
O que observar: Medir antes: tracing, contadores do runtime, tempo das consultas, e procurar chamadas síncronas bloqueando threads.
Dicas para a entrevista de Desenvolvedor C# / .NET
- Investigue o runtime, não a sintaxe. Pergunte por que o async existe, não como se escreve a palavra await.
- Inclua uma pergunta de EF Core. Erros na camada de dados (N+1, lazy loading) causam a maioria dos problemas reais de performance em .NET.
- Deixe o candidato raciocinar em voz alta sobre os tempos de vida da injeção de dependência. Escolher o escopo errado é um clássico que separa júnior de sênior.
- Valorize quem cita trade-offs concretos (record versus class, SQL puro versus LINQ) em vez de recitar definições.
- Pergunte sobre um bug de produção que a pessoa depurou. Deadlocks assíncronos e vazamentos por falta de dispose revelam experiência real rápido.
FAQ
Perguntas frequentes
Quantas perguntas de C# fazer numa entrevista?
De seis a oito, de duas ou três categorias, cabem numa entrevista técnica de 45 a 60 minutos e ainda deixam espaço para aprofundar.
O que separa uma resposta sênior de .NET de uma júnior?
O sênior explica como o CLR e o EF Core se comportam sob carga e cita bugs que corrigiu de verdade. O júnior descreve o que um recurso faz, mas não quando ele dá problema.
Devo testar ASP.NET Core especificamente ou só a linguagem?
Na maioria das vagas .NET, inclua pelo menos uma pergunta de ASP.NET Core e uma de EF Core. É ali que vivem os bugs do mundo real, não nas curiosidades da linguagem.
Preciso de um teste de programação ao vivo para vagas de C#?
Um desafio curto ou uma pequena refatoração com async e LINQ costuma revelar mais do que um quebra-cabeça no quadro, porque espelha o trabalho de verdade.
Como triar candidatos .NET antes da entrevista?
Use um teste de habilidades para filtrar experiência real antes de marcar entrevistas. Na Hireaan, as perguntas de triagem, os testes de habilidades e o ranking com IA ajudam a gastar as horas de entrevista só com os candidatos mais fortes.
Mais bancos de perguntas de entrevista
- GoPerguntas para Desenvolvedor GoSaiba mais
- iOSPerguntas para Desenvolvedor iOSSaiba mais
- Java júniorPerguntas para Desenvolvedor Java júniorSaiba mais
- Java sêniorPerguntas para Desenvolvedor Java sêniorSaiba mais
- JavaScriptPerguntas para Desenvolvedor JavaScriptSaiba mais
- Node.jsPerguntas para Desenvolvedor Node.jsSaiba mais
Abriu a vaga de Desenvolvedor C# / .NET? Rode o processo na Hireaan.
A IA ranqueia os candidatos, você agenda as entrevistas, aplica testes de habilidades e envia a proposta, com um preço fixo para o time inteiro.
- 14 dias grátis
- Sem cartão de crédito
- Cancele quando quiser
- Conforme a LGPD
