Dependency Injection Fundamentals
Explain what dependency injection solves and how Angular's injector resolves a class's constructor dependencies.
Dependency Injection (DI) is arguably the single most important architectural idea to understand deeply before an Angular interview, because nearly every other advanced topic — testing, hierarchical providers, interceptors, the inject() function — builds directly on top of it. At its core, DI means a class declares what it needs (via constructor parameters or inject()) rather than constructing those dependencies itself with new SomeService(), and a separate system (the injector) is responsible for supplying them.
It's like ordering room service instead of stocking a hotel mini-fridge yourself — you specify what you need at the front desk, and the hotel's systems figure out how to get it to your room, so you never have to know (or care) which supplier or kitchen it came from.