C# gives you a lot of rope. These questions check whether a candidate understands the runtime — value vs reference types, async, garbage collection, EF Core — not just the syntax.
Hiring a .NET developer is easy. Telling a real one from a convincing résumé is the hard part — and it’s most of what we do. These are grouped by level, because the same question that stretches a junior is a warm-up for a senior.
Junior .NET interview questions
0–2 years
Type system and async fundamentals.
What’s the difference between value types and reference types?
Value types (structs, int) hold their data directly and copy on assignment; reference types (classes) are on the heap and the variable holds a reference. They connect this to equality and mutation behaviour.
Thinks everything is copied, or is unaware of the distinction entirely.
What does async/await actually do?
It frees the calling thread while an I/O operation completes, improving scalability under load; it is not automatically parallelism or a new thread. They know blocking on it with .Result risks deadlocks.
Believes async spins up a thread, or blocks on async with .Result/.Wait().
What is deferred execution in LINQ?
LINQ queries over IEnumerable don’t run until enumerated, so the same query can hit the database again each time you iterate it; materialising with ToList() executes it once. They avoid accidental re-execution.
Enumerates a query repeatedly, unaware each pass re-runs it against the source.
Mid-level .NET interview questions
2–5 years
Memory, DI and async correctness.
How does garbage collection relate to IDisposable?
The GC reclaims managed memory in generations, but unmanaged resources (connections, file handles, sockets) must be released deterministically via IDisposable and using. They don’t rely on the GC for that.
Never disposes connections or streams and assumes the GC handles unmanaged resources.
Explain the service lifetimes in ASP.NET Core DI.
Transient, Scoped and Singleton, chosen by how state should be shared; the classic bug is a captive dependency — injecting a scoped service into a singleton. They register deliberately.
Registers everything as a singleton, or news up dependencies instead of injecting them.
How do you avoid async deadlocks?
Go async all the way rather than blocking on .Result/.Wait(), and use ConfigureAwait(false) in library code to avoid capturing a synchronisation context. They understand where deadlocks come from.
Mixes blocking and async calls and can’t explain the resulting deadlock.
Senior .NET interview questions
5+ years
EF Core, performance and architecture.
What EF Core pitfalls have you hit at scale?
N+1 queries, change-tracking overhead (AsNoTracking for reads), lazy-loading surprises, and projecting to DTOs instead of loading full entities. They profile the generated SQL.
Unaware of N+1, loads whole tables and loops in memory.
How do you design a high-throughput ASP.NET Core service?
Async I/O end to end, minimal allocations, caching, tuned EF queries, connection pooling, and profiling under realistic load. They know where the time actually goes.
Synchronous I/O, N+1 queries and no measurement.
How do you structure a large .NET solution?
Layered or clean architecture that separates domain from infrastructure, keeps business logic out of controllers, and defines DI boundaries for testability. Structure driven by dependencies, not folders.
Business logic living in controllers with no layering.
Browse the full series on the interview questions hub, or see how we assess engineers in our interview process.