0% found this document useful (0 votes)
4 views12 pages

DotNet Study Guide

This document is a comprehensive study guide for preparing for .NET Developer roles, targeting interviews with salaries of 10-16 LPA from March 2026 to January 2027. It covers essential topics such as C# fundamentals, ASP.NET Core, Entity Framework, architecture patterns, and Azure services, along with interview strategies. Each chapter includes critical concepts, best practices, and common interview questions to help candidates excel in their job applications.
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
4 views12 pages

DotNet Study Guide

This document is a comprehensive study guide for preparing for .NET Developer roles, targeting interviews with salaries of 10-16 LPA from March 2026 to January 2027. It covers essential topics such as C# fundamentals, ASP.NET Core, Entity Framework, architecture patterns, and Azure services, along with interview strategies. Each chapter includes critical concepts, best practices, and common interview questions to help candidates excel in their job applications.
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

.

NET FULL STACK


COMPLETE STUDY GUIDE
Crack 10+ LPA Interviews in 2026–2027

Prepared for: Srinithi Arulanandam


Target: Accenture / MNC .NET Developer Roles | 10–16 LPA
Timeline: March 2026 – January 2027

WHAT'S INSIDE

Chapter 1 → C# & OOP Fundamentals


Chapter 2 → [Link] Core & Web API
Chapter 3 → Entity Framework Core & SQL
Chapter 4 → Architecture & Design Patterns
Chapter 5 → Azure & Cloud
Chapter 6 → System Design Basics
Chapter 7 → Frontend: React Essentials
Chapter 8 → Interview Strategy & Study Plan

CHAPTER 1
C# & Object Oriented Programming
The foundation of every .NET interview — non-negotiable

Core C# Concepts You Must Know


Data Types & Variables
• Value types: int, float, double, bool, char, struct, enum — stored on stack
• Reference types: string, class, array, object — stored on heap
• Nullable types: int? x = null — allows null for value types
• var keyword: implicit typing, type inferred at compile time
• const vs readonly: const is compile-time, readonly is runtime

OOP Pillars — Must explain with examples


Pillar One-Line Definition

Encapsulation Hiding internal state, exposing only through


properties/methods

Inheritance Child class inherits fields and methods from parent class

Polymorphism Same method behaves differently — overloading &


overriding
Abstraction Hiding complexity, showing only essential features via
abstract/interface

Abstract Class vs Interface — Most asked interview question


Abstract Class Interface

Can have implementation Only method signatures (C# 8+ allows default impl)

Single inheritance only Multiple interfaces allowed

Can have constructors Cannot have constructors

Use when: shared base logic Use when: defining a contract

Q: What is the difference between abstract class and interface?


A: Abstract class can have both implemented and abstract methods, supports single inheritance, and is used
when classes share common logic. Interface defines a contract with no implementation (pre C#8), supports
multiple implementation, and is used when unrelated classes need the same behavior. Example: IDisposable is
an interface because any class — FileStream, SqlConnection — needs to implement it regardless of hierarchy.

Collections — Critical for interviews


Collection Key Feature When to Use

List<T> Dynamic array, index access General purpose ordered list

Dictionary<K,V> Key-value, O(1) lookup Fast lookups by key

HashSet<T> Unique elements, no duplicates Distinct value checks

Queue<T> FIFO — First In First Out Task queues, BFS

Stack<T> LIFO — Last In First Out Undo operations, DFS

IEnumerable<T> Read-only iteration Deferred execution, LINQ

LINQ — Very commonly tested


LINQ (Language Integrated Query) lets you query collections using SQL-like syntax in C#.

// Method syntax (preferred in interviews)


var seniors = employees
.Where(e => [Link] > 30)
.OrderBy(e => [Link])
.Select(e => new { [Link], [Link] })
.ToList();

// Deferred execution — query runs only when iterated


var query = [Link](x => x > 5); // not executed yet
var result = [Link](); // executed here

Q: What is deferred execution in LINQ?


A: LINQ queries are not executed when defined — they execute only when iterated (ToList, foreach, First etc.).
This is deferred execution. It improves performance by not processing data until needed. Immediate execution
methods: ToList(), ToArray(), Count(), First().

Exception Handling
try {
// risky code
} catch (SqlException ex) {
// specific exception first
[Link](ex, "DB error");
} catch (Exception ex) {
// generic last
throw; // re-throw preserves stack trace
} finally {
// always runs — close connections here
}

async / await — Essential for .NET APIs


async/await enables non-blocking I/O operations. Every database call, HTTP call, and file operation should be async in modern
.NET.

// Always use async all the way down


public async Task<User> GetUserAsync(int id) {
return await _dbContext.[Link](id);
}

//
❌✅
// Common mistakes to avoid:
// .Result or .Wait() — causes deadlocks
await all the way

Q: What is the difference between Task and Thread?


A: Thread is a low-level OS thread. Task is a higher-level abstraction over ThreadPool — lighter, supports
async/await, cancellation, and continuations. In .NET, always prefer Task over Thread for async operations.

CHAPTER 2
[Link] Core & Web API
The heart of every .NET Full Stack role — deepest interview focus

[Link] Core Request Pipeline


Understanding the middleware pipeline is critical — this is asked in almost every senior .NET interview.

// [Link] — Middleware order matters


var app = [Link]();

[Link](); // 1. Global error handling


[Link](); // 2. Force HTTPS
[Link](); // 3. Serve static files
[Link](); // 4. Match routes
[Link](); // 5. Who are you?
[Link](); // 6. What can you do?
[Link](); // 7. Execute controller

Q: What is middleware in [Link] Core?


A: Middleware is software assembled into a pipeline to handle HTTP requests and responses. Each component
can pass to the next or short-circuit. Order matters — authentication must come before authorization. Custom
middleware is created using IMiddleware or Use/Run/Map extension methods.

Dependency Injection — Most Important Topic


DI is built into [Link] Core. You MUST understand the three lifetime scopes — this is asked in every interview.
Lifetime How Long It Lives Use For

Transient New instance every injection Lightweight, stateless services


Scoped One per HTTP request DbContext, business services

Singleton One for app lifetime Config, caching, logging

// Registering services in [Link]


[Link]<IEmailService, EmailService>();
[Link]<IUserService, UserService>();
[Link]<ICacheService, CacheService>();

// Constructor injection in controller


public class UserController : ControllerBase {
private readonly IUserService _userService;
public UserController(IUserService userService) {
_userService = userService;
}
}

Q: What happens if you inject a Scoped service into a Singleton?


A: This is called a captive dependency problem. The Scoped service gets captured by the Singleton and lives as
long as the Singleton (app lifetime), not per-request. This causes data leaks between requests. [Link] Core
throws an InvalidOperationException at runtime if you do this with scope validation enabled.

REST API Best Practices


HTTP Method Action Example URL

GET Read resource GET /api/users/1

POST Create resource POST /api/users

PUT Replace resource PUT /api/users/1

PATCH Partial update PATCH /api/users/1

DELETE Delete resource DELETE /api/users/1

[ApiController]
[Route("api/[controller]")]
public class UsersController : ControllerBase {

[HttpGet("{id}")]
public async Task<ActionResult<UserDto>> GetUser(int id) {
var user = await _userService.GetByIdAsync(id);
if (user == null) return NotFound();
return Ok(user);
}

[HttpPost]
public async Task<ActionResult<UserDto>> CreateUser(CreateUserDto dto) {
if (![Link]) return BadRequest(ModelState);
var user = await _userService.CreateAsync(dto);
return CreatedAtAction(nameof(GetUser), new { id = [Link] }, user);
}
}

JWT Authentication — Always Asked


JWT (JSON Web Token) is the standard authentication mechanism for REST APIs. Three parts: [Link]

// [Link] setup
[Link]([Link])
.AddJwtBearer(options => {
[Link] = new TokenValidationParameters {
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = config["Jwt:Issuer"],
IssuerSigningKey = new SymmetricSecurityKey(
[Link](config["Jwt:Key"]))
};
});

// Protecting endpoints
[Authorize]
[HttpGet("profile")]
public IActionResult GetProfile() => Ok([Link]);

[Authorize(Roles = "Admin")]
[HttpDelete("{id}")]
public IActionResult DeleteUser(int id) { ... }

CHAPTER 3
Entity Framework Core & SQL Server
Data layer expertise — critical for enterprise roles

Entity Framework Core Essentials


DbContext & DbSet
public class AppDbContext : DbContext {
public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { }

public DbSet<User> Users { get; set; }


public DbSet<Order> Orders { get; set; }

protected override void OnModelCreating(ModelBuilder modelBuilder) {


[Link]<User>()
.HasMany(u => [Link])
.WithOne(o => [Link])
.HasForeignKey(o => [Link]);
}
}

Code First Migrations — Must know commands


# Create migration
dotnet ef migrations add InitialCreate

# Apply to database
dotnet ef database update

# Rollback
dotnet ef database update PreviousMigrationName

# Remove last migration


dotnet ef migrations remove

Q: What is the difference between Code First and Database First?


A: Code First: you write C# classes (entities), EF generates database schema from them via migrations. Database
First: database already exists, EF scaffolds C# classes from it. In modern projects, Code First is preferred as it
keeps schema in source control and is version-controlled.
Tracking vs No-Tracking
Tracked Query (default) No-Tracking Query (AsNoTracking)

EF watches for changes EF ignores changes

Use for UPDATE/DELETE operations Use for READ-ONLY queries

Slightly slower Faster, less memory

var user = await [Link](id) var user = await [Link]().FirstAsync()

SQL Server — Interview Questions


Stored Procedures vs Functions
Stored Procedure Function

Can have side effects (INSERT/UPDATE) Cannot modify data (read-only)

Called with EXEC Used inside SELECT

Can return multiple result sets Returns single value or table

Supports transactions Cannot use transactions

-- Stored Procedure
CREATE PROCEDURE GetUserOrders @UserId INT AS
BEGIN
SELECT o.* FROM Orders o WHERE [Link] = @UserId
END

-- Call it
EXEC GetUserOrders @UserId = 5

-- Index for performance


CREATE INDEX IX_Orders_UserId ON Orders(UserId)
CREATE CLUSTERED INDEX IX_Users_Id ON Users(Id)

Q: What is the difference between clustered and non-clustered index?


A: Clustered index determines physical order of data in table — only one per table, usually primary key. Non-
clustered index is a separate structure pointing to data rows — multiple allowed per table. Clustered is faster for
range queries, non-clustered is faster for specific column lookups.

CHAPTER 4
Architecture & Design Patterns
What separates 6 LPA from 12 LPA candidates

Repository Pattern
Repository pattern abstracts data access logic, making code testable and decoupled from the database.

// Interface
public interface IUserRepository {
Task<User> GetByIdAsync(int id);
Task<IEnumerable<User>> GetAllAsync();
Task AddAsync(User user);
Task UpdateAsync(User user);
Task DeleteAsync(int id);
}
// Implementation
public class UserRepository : IUserRepository {
private readonly AppDbContext _ctx;
public UserRepository(AppDbContext ctx) => _ctx = ctx;

public async Task<User> GetByIdAsync(int id) =>


await _ctx.[Link]().FirstOrDefaultAsync(u => [Link] == id);

public async Task AddAsync(User user) {


await _ctx.[Link](user);
await _ctx.SaveChangesAsync();
}
}

Unit of Work Pattern


Unit of Work coordinates multiple repository operations in a single transaction — either all succeed or all fail.

public interface IUnitOfWork : IDisposable {


IUserRepository Users { get; }
IOrderRepository Orders { get; }
Task<int> SaveChangesAsync();
}

// Usage in service
public async Task CreateOrderAsync(CreateOrderDto dto) {
var order = new Order { ... };
await _uow.[Link](order);

var user = await _uow.[Link]([Link]);


[Link]++;
await _uow.[Link](user);

await _uow.SaveChangesAsync(); // Single transaction


}

SOLID Principles — Define + Example Each


Principle One-Line Rule Violation Example

S — Single Responsibility One class, one reason to change UserService that also sends emails

O — Open/Closed Open for extension, closed for Adding if/else for each new payment
modification type

L — Liskov Substitution Subtypes must be substitutable for base Square extending Rectangle breaking
area calc

I — Interface Segregation Don't force classes to implement unused IWorker with Eat() forced on Robot class
methods

D — Dependency Inversion Depend on abstractions, not concretions new EmailService() inside a controller

Microservices — Awareness Level


You don't need to build microservices, but you must be able to explain the concept confidently in interviews.
• Microservices: application split into small, independently deployable services
• Each service owns its own database — no shared DB
• Services communicate via REST APIs or message queues (RabbitMQ, Azure Service Bus)
• Advantages: independent scaling, independent deployment, technology flexibility
• Disadvantages: network latency, distributed system complexity, harder debugging
Q: When would you use microservices over monolith?
A: Monolith is better for small teams and early-stage products — simpler to develop and deploy. Microservices
make sense when different parts of the system have very different scaling needs, when teams are large and
need to work independently, or when parts need different technology stacks. Most enterprise projects start
monolithic and extract services as needed.

CHAPTER 5
Azure & Cloud
AZ-900 done — now go deeper for interviews

Azure Services You Must Know


Service What It Does When You Use It

Azure App Service Host web apps and APIs Deploy your [Link] Core API

Azure SQL Managed SQL Server in cloud Production database hosting

Azure Key Vault Store secrets, keys, certificates Connection strings, API keys

Application Insights Monitor app performance & errors Logging, alerts, telemetry

Azure Functions Serverless event-driven functions Background jobs, triggers

Azure Service Bus Message queue for async Microservices messaging


communication

Azure DevOps CI/CD pipelines, repos, boards Automated deployment

Azure Storage Blob, Queue, Table storage Files, images, logs

CI/CD with GitHub Actions


Know this — Accenture JD explicitly mentions it. Being able to explain your pipeline setup is a strong differentiator.

# .github/workflows/[Link]
name: Deploy to Azure

on:
push:
branches: [ main ]

jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup .NET
uses: actions/setup-dotnet@v3
with:
dotnet-version: '6.0.x'
- name: Build
run: dotnet build --configuration Release
- name: Test
run: dotnet test
- name: Deploy to Azure
uses: azure/webapps-deploy@v2
with:
app-name: 'your-app-name'
CHAPTER 6
System Design Basics
For senior roles — know enough to not fail this round

Key Concepts to Know


Caching
• In-memory cache: IMemoryCache in [Link] Core — fast, single server
• Distributed cache: Redis — shared across multiple servers
• Cache-aside pattern: app checks cache, fetches from DB on miss, stores in cache
// In-memory cache
public async Task<User> GetUserAsync(int id) {
if (!_cache.TryGetValue($"user_{id}", out User user)) {
user = await _repo.GetByIdAsync(id);
_cache.Set($"user_{id}", user, [Link](10));
}
return user;
}

Load Balancing & Scaling


• Horizontal scaling: add more servers — stateless apps scale this way
• Vertical scaling: add more CPU/RAM to existing server — has limits
• Load balancer: distributes traffic across servers (Azure Load Balancer, Nginx)
• Stateless API: no server-side session — JWT tokens enable this

Database Optimization
• Indexing: add indexes on frequently queried columns — biggest performance win
• Pagination: never return all records — use Skip/Take in EF Core
• Connection pooling: reuse DB connections — EF Core does this by default
• N+1 problem: loading related data in a loop — fix with Include() in EF Core
// N+1 Problem — BAD
var users = await _ctx.[Link]();
foreach (var user in users) {
var orders = await _ctx.Orders // N extra queries!
.Where(o => [Link] == [Link]).ToListAsync();
}

// Fixed with Include — GOOD


var users = await _ctx.Users
.Include(u => [Link]) // Single JOIN query
.ToListAsync();

CHAPTER 7
React Essentials
Frontend layer — you already have this, just refresh

Core React Concepts for Interviews


Hooks — Most Asked
Hook Purpose Example Use

useState Local component state Form inputs, toggles


useEffect Side effects (API calls, subscriptions) Fetch data on mount

useContext Share state without prop drilling User auth, theme

useRef Access DOM or persist value Focus input, store timer

useMemo Memoize expensive computation Filtered/sorted lists

useCallback Memoize function reference Prevent child re-renders

// Typical API call pattern


const [users, setUsers] = useState([]);
const [loading, setLoading] = useState(true);

useEffect(() => {
const fetchUsers = async () => {
try {
const res = await fetch('/api/users');
const data = await [Link]();
setUsers(data);
} catch (err) {
[Link](err);
} finally {
setLoading(false);
}
};
fetchUsers();
}, []); // empty array = run once on mount

Q: What is the difference between useMemo and useCallback?


A: useMemo memoizes a computed value — use when a calculation is expensive and inputs haven't changed.
useCallback memoizes a function reference — use when passing callbacks to child components to prevent
unnecessary re-renders. Both take a dependency array and only recalculate when dependencies change.

CHAPTER 8
Interview Strategy & Study Plan
How to actually get shortlisted and clear rounds

Accenture Interview Process


1. Round 1: Online Assessment — Coding + MCQ (C#, SQL, .NET concepts)
2. Round 2: Technical Interview 1 — Deep dive on C#, OOP, [Link] Core, EF Core, design patterns
3. Round 3: Technical Interview 2 — System design, Azure, project discussions, code walkthrough
4. Round 4: HR + Manager Round — Communication, team fit, salary discussion

Top 20 Interview Questions — .NET Full Stack


Q: What is Dependency Injection and why is it used?
A: DI is a design pattern where dependencies are provided to a class rather than created inside it. It promotes
loose coupling, testability, and follows the Dependency Inversion principle. [Link] Core has built-in DI
container. Instead of new EmailService() inside a class, you inject IEmailService through the constructor.

Q: Explain the Repository Pattern.


A: Repository pattern provides an abstraction layer between business logic and data access. It exposes data
operations (CRUD) through an interface, hiding EF Core details. Benefits: easier unit testing (mock the
repository), swap database without changing business logic, single place to manage queries.
Q: What is the difference between IEnumerable and IQueryable?
A: IEnumerable executes query in memory — all data is fetched from DB first, then filtered in C#. IQueryable
executes query on the database — filters are translated to SQL. Always use IQueryable for database queries to
avoid loading unnecessary data.

Q: How does JWT authentication work?


A: Client sends credentials to /api/auth/login. Server validates and returns a signed JWT token. Client stores
token and sends it in every request header: Authorization: Bearer <token>. Server validates signature and expiry
on each request without hitting the database — stateless authentication.

Q: What is CORS and how do you enable it in [Link] Core?


A: CORS (Cross-Origin Resource Sharing) is a browser security feature blocking requests from different origins. In
[Link] Core, enable with [Link]() and [Link]() in [Link], specifying allowed
origins, methods, and headers. Required when React frontend runs on different port than API.

Q: What is the N+1 problem in EF Core?


A: N+1 occurs when you load N entities, then make 1 extra database query per entity to load related data. Fix
with .Include() to eager load related entities in a single JOIN query. Can also use explicit loading or projection
(Select) to load only required fields.

Q: What are action filters in [Link] Core?


A: Action filters run code before and after a controller action. Used for cross-cutting concerns: logging,
validation, exception handling, caching. Implement IActionFilter or IAsyncActionFilter. Can be applied at action,
controller, or global level.

Month-by-Month Study Plan


Period Focus Area Deliverable

March–April 2026 C# deep dive, OOP, Collections, LINQ, Solid answers to Chapter 1 questions
async/await

May–June 2026 [Link] Core, DI, JWT, REST API best GitHub Project 1: E-Commerce API
practices complete

July–Aug 2026 EF Core, SQL, Repository Pattern, Unit of GitHub Project 2: EMS with full patterns
Work

Sept–Oct 2026 Azure PaaS, CI/CD, System Design basics AZ-204 cleared, projects deployed on
Azure

Nov 2026 Full revision, mock interviews, LeetCode Interview-ready


easy-medium

Dec 2026–Jan 2027 Apply: Accenture, Capgemini, Wipro Target: 10–16 LPA offer
Digital, LTI

Resources Summary
Topic Resource Format

C# & .NET Core Kudvenkat YouTube Video — passive

[Link] Core deep [Link] Text — reference

Coding practice C# Academy Hands-on projects


System Design Gaurav Sen YouTube Video — passive

Backend concepts Hussein Nasser YouTube Video — passive

Azure Microsoft Learn (free) Text + labs

Interview prep InterviewBit .NET track Q&A format

Quick revisions Nick Chapsas YouTube Video — focused

💡 YOUR SECRET WEAPON


Your biggest advantage is the Deloitte brand. Every interview starts with 'tell me about your Deloitte project.' Prepare
a crisp 3-minute walkthrough of your multilingual notice platform — mention 5M+ notices, 30+ languages, SQL
pipelines, and OpenText. This shows real enterprise experience that freshers cannot compete with.

You don't need to know everything. You need to know these chapters well enough to speak confidently. That's the
difference between getting filtered and getting the offer.

You might also like