1. Path to production
Describe how work moves through development, developer review, QA, pre-production or stakeholder approval, and production. Explain what each stage verifies.
Prepare for a .NET developer interview with C# questions and answers, ASP.NET Core fundamentals, and system design interview practice. Start with the readiness checklist to identify gaps, then choose a preparation session or practice question. Use real examples, not a script to memorize.
New to .NET? Start with C# fundamentals; production experience is not a prerequisite for learning. For experienced roles, use the checklist to prepare examples from your own work. This free guide covers modern .NET; .NET Core is the older name used before .NET 5.
Prepare to discuss how you deliver, design, test, and support software. These pointers are a checklist of areas to be aware of, not a script to memorize. Focus on examples from your own work and explain why your team made its choices.
Describe how work moves through development, developer review, QA, pre-production or stakeholder approval, and production. Explain what each stage verifies.
Know how infrastructure is provisioned and releases are deployed. Examples include Terraform, AWS CloudFormation, Azure Bicep or ARM, and Kubernetes. Describe your team's actual approach.
Be ready to walk through checkout, dependency installation and restore, build, security scanning, tests, coverage checks, and artifact or image publishing, followed by release gates. Pipeline examples include GitHub Actions, Azure DevOps, Jenkins, and Bamboo. For on-premises hosting, know options such as IIS on Windows and Apache or Nginx on Linux.
Explain how logs, metrics, and anomalies are monitored and how alerts reach the team. Tools may include Application Insights, CloudWatch, Datadog, or Splunk.
Understand the purpose of unit, integration (including Testcontainers), architecture fitness, mutation, and end-to-end tests. Distinguish pipeline automation from QA activities such as smoke, regression, and exploratory testing.
Identify the compute, storage, database, messaging, networking, monitoring, and secret-management services your application uses. AWS examples include Lambda, ECS or EKS, S3, DynamoDB, RDS, Route 53, SNS, SQS, CloudWatch, and Secrets Manager. Azure examples include Functions, Container Apps or AKS, Blob Storage, Cosmos DB, Azure SQL, Azure DNS, Service Bus, Storage Queues, Application Insights, and Key Vault. Explain what the services in your own system do.
Be prepared to describe a monolith, modular monolith, or microservices, along with module boundaries and communication. Know patterns such as Clean Architecture, Vertical Slice Architecture, contracts, event-driven design, and event storming, and explain why the chosen approach fits.
Have examples of TDD, DDD, SOLID, and design patterns. Also discuss cross-cutting concerns such as security, validation, error handling, resilience, caching, auditing, logging, and performance monitoring.
Know the UI framework, such as Angular, React, Vue, Blazor, ASP.NET MVC, or Razor Pages, and whether the app is a monolith or uses micro-frontends. Be familiar with lazy loading, state management, identity-provider integration, and analytics where relevant.
Know the major runtime and framework versions used in your project, plus how upgrades are managed. Check current support status; version examples become outdated.
Explain how schema changes are authored, reviewed, and applied, whether through scripts, application migrations, or a migration bundle, and how the change fits the release and recovery plan.
Understand how feature or release flags enable controlled rollouts and A/B testing, who owns them, and how stale toggles are removed.
Be able to explain the consistency and availability trade-off a distributed system faces when a network partition occurs, and relate it to the needs of a real system.
Prepare specific examples of contributions such as open-source work, mentoring, helping with interviews, or building a technical community. You can also discuss how you show technology leadership within your organization: delivering internal tech talks, contributing to engineering guilds, sharing standards or practices, and helping teams adopt useful improvements. Explain your role, the impact, and what you learned.
You do not need to have used every tool or architecture listed here. Show how you think, make trade-offs, learn, and contribute; use real examples and be clear about what you personally did.
Use one session per day or spread the work over several weeks. Move on when you can explain and demonstrate the concept, not just recognize its name.
Explain the four OOP concepts, polymorphism, abstract classes, interfaces, and static classes; write an example of each.
Demonstrate when a LINQ query executes, and implement two design patterns you could discuss from your own code.
Build a small controller and API endpoint; explain routing, model binding, validation, and HTTP status codes.
Inspect the SQL generated by an EF Core query, justify an index, and fix an N+1 query.
Choose a system design exercise below; sketch the APIs, data model, capacity assumptions, and failure handling.
Work through the 14-point checklist and prepare examples of a release, an incident, and a technical decision.
Explain your design aloud, accept a changed requirement, and identify the answers that need more practice.
Continue with the .NET tutorial learning paths or testing tutorials. For broader job-search preparation, visit the developer career guide.
For each answer, write a small example and explain an edge case. Interviewers can then assess your reasoning, not just your recall. Expand a question to review its answer.
Encapsulation protects state and invariants behind an API. Abstraction exposes the essential behavior while hiding implementation details. Inheritance derives a type from a base type to reuse and specialize behavior. Polymorphism lets code use a common contract while dispatching to different implementations. For an order, keep state transitions inside methods such as Confirm rather than exposing unrestricted setters; use an interface when payment providers need interchangeable behavior.
Polymorphism lets one contract have many implementations. Compile-time polymorphism is method overloading: methods share a name but have different parameter lists, and the compiler chooses one. Run-time polymorphism uses a virtual or abstract member that a derived class overrides, or an interface member that each class implements; the object's actual type decides which implementation runs. The new modifier hides a base member instead of overriding it, so a call through a base-type reference still runs the base implementation.
An abstract class cannot be instantiated; it can hold instance state, constructors, implemented members, and abstract members that derived classes must implement. An interface defines a contract that unrelated types can implement; modern C# also supports default interface implementations. A class can inherit from only one class but implement multiple interfaces. Use an abstract class for a family of types that share state and behavior, and an interface for a capability that different types provide.
A static class cannot be instantiated or inherited and can contain only static members. Use it for stateless helpers and extension methods, such as a set of string utilities. Static members are shared across the application, so mutable static state needs thread-safety and is hard to isolate in tests. When behavior has dependencies or needs substitution in tests, prefer an injected service over a static class.
IEnumerable<T> exposes enumeration; LINQ-to-Objects operators execute .NET delegates as values are enumerated. IQueryable<T> exposes an expression tree that a provider, such as EF Core, can translate into a query. Many operators defer work until enumeration. ToList materializes results; repeated enumeration can repeat work or database queries. Filter and project before materializing when the provider can translate the operation.
Know a few patterns well enough to explain the problem each solves and its trade-offs. Common examples are Singleton, Factory, and Builder for object creation; Adapter, Decorator, and Facade for structure; Strategy, Observer, and State for behavior; and Repository and Unit of Work for data access. Use a pattern from your own code: describe the problem, why the pattern fitted it, and what it cost. Avoid applying patterns where a simpler design would work.
Practice with encapsulation in C#, abstraction in C#, LINQ deferred and immediate execution examples, and design patterns in C#.
These dotnet interview questions cover the platform, ASP.NET Core and MVC, Web API, and Entity Framework Core. For experienced roles, extend each answer with a failure you diagnosed or a trade-off you measured.
.NET is a development platform with a runtime, libraries, and tooling. C# is one of the languages used to build applications on it. The runtime provides services such as garbage collection and exception handling; ASP.NET Core provides web application and API frameworks. You write C# code, the compiler produces intermediate language, and the .NET runtime executes it.
.NET Framework is the original Windows-only implementation and is maintained for existing applications. .NET Core was the cross-platform, open-source rewrite. From .NET 5 onward, the product dropped "Core" from its name and is simply .NET; it is the recommended choice for new applications. Follow the job description: an employer maintaining legacy Windows applications may use .NET Framework, so know which runtime they use and do not assume the APIs and hosting models are identical.
ASP.NET is the web framework for .NET Framework, which runs on Windows and is typically hosted in IIS. ASP.NET Core is its cross-platform successor for modern .NET: it can be hosted in Kestrel behind a reverse proxy or in IIS, has built-in dependency injection and configuration, and handles requests through a middleware pipeline. Application models such as MVC, Razor Pages, minimal APIs, and Blazor are built on ASP.NET Core.
Model-View-Controller separates responsibilities. Routing maps a request to a controller action. The action uses model binding and validation to read input, calls services that contain the business logic, and returns a result: a view for HTML pages, or data for an API. The view renders the model with Razor. Keep controllers thin, check ModelState or rely on [ApiController] validation, and keep business rules out of views.
Use HTTP semantics consistently: 400 commonly represents invalid input, 401 means the request lacks valid authentication, and 403 means access is refused, typically because an authenticated caller lacks permission. Use 404 when a resource is not found and 409 for a conflict with current resource state. Return a consistent Problem Details response where appropriate, without leaking stack traces or secrets. Validate input and enforce authorization on the server.
EF Core is an object-relational mapper: it maps classes to tables and translates LINQ queries into SQL. When a query is slow, measure it and inspect the generated SQL and the database execution plan. Look for missing or unsuitable indexes, excess rows or columns, N+1 queries, and unnecessary round trips. Project only needed fields, paginate large results, and use no-tracking queries for suitable read-only work. Verify each change against representative data.
Explore ASP.NET Core Web API tutorials, Web API status codes, and EF Core tutorials to turn short answers into working examples.
A system design interview evaluates how you turn uncertain requirements into an architecture and explain its trade-offs. Start with users, workloads, and reliability goals before choosing services. The process applies beyond .NET; ASP.NET Core is one possible implementation, not the design itself.
System design is the process of defining a system's components, interfaces, data, and infrastructure to meet functional requirements and qualities such as scalability, availability, latency, security, and cost. In an interview, it means turning a vague problem, such as designing a URL shortener, into an architecture and explaining the trade-offs behind each decision.
Learn the building blocks: load balancing, caching, databases and indexing, replication and partitioning, queues, consistency trade-offs, and failure handling. Then practice complete exercises against a timer, such as the ones below. Say your reasoning aloud, state your assumptions, and ask a colleague to change a requirement partway through. Review real architectures you have worked on, because interviewers often ask how your current system works.
Interview formats vary by company, role, and level, and they change over time, so check the company's own interview guidance and ask the recruiter. Large-scale employers commonly assess whether you clarify requirements, estimate scale, propose a working design, find bottlenecks and failure modes, and justify trade-offs. Senior roles usually involve more ambiguity and depth. A clear, reasoned design matters more than naming many technologies.
Define create and redirect APIs, unique short-code generation, expiry, abuse prevention, and read-heavy caching.
Decisions to defend: Explain collision handling and the effect of stale cached redirects.
Model order state, inventory reservations, payment idempotency, and asynchronous notifications.
Decisions to defend: Explain how an outbox and idempotent consumers handle failures without claiming exactly-once delivery across services.
Separate request acceptance from delivery with a queue and workers.
Decisions to defend: Define deduplication keys, retry limits, a dead-letter queue, provider rate limits, and delivery-status tracking.
Build depth with caching fundamentals in .NET, cache stampede prevention, domain-driven design, and SOLID principles.
Study C# and OOP concepts, LINQ, design patterns, ASP.NET Core and MVC, Web API, SQL, and Entity Framework Core. Then practice explaining how your application is deployed and monitored. Use the role description to decide which areas need the most depth.
Basic questions check definitions, such as OOP concepts, abstract classes, interfaces, and static classes. Advanced questions ask you to apply them: choose between IEnumerable and IQueryable for a query, justify a design pattern, or explain why a polymorphic call runs a particular implementation. Prepare a short code example for each answer.
Experienced developers, including those with 5 or 10 years of experience, should be ready to go beyond definitions: diagnose a slow query, explain a production incident, compare architecture options, and defend a release or recovery strategy. Describe the constraints, your personal contribution, the outcome, and what you would improve. Expectations vary by employer and role.