What Are the Strengths and Weaknesses of Angular?
Interviews are a crucial milestone in any software developer's professional journey, and thorough preparation is essential regardless of your level of experience. Over the years, I have switched employers multiple times, gone through countless interview loops, and also sat on the hiring side, assisting my teams in evaluating Angular candidates. This dual perspective has shaped how I approach technical interviews.
From that experience, I have noticed that five specific questions tend to come up repeatedly, and they happen to be the same ones I rely on when assessing candidates myself. What makes these questions so effective is their scalability — they work across all seniority levels, with the depth of the response being the main differentiator. Let’s explore them one by one.
What Are the Pros and Cons of Angular?
This opening question serves as an excellent icebreaker because it quickly reveals the breadth of a candidate's Angular knowledge and the variety of features they have hands-on experience with. The goal is to list as many positive and negative aspects as possible — the more comprehensive, the better. Here is what my typical response would look like:
Advantages of Angular
- First-Class TypeScript Support. Type definitions stay perfectly aligned with the actual implementation, eliminating the need for separate type maintenance.
- Powerful Angular CLI. This tool automates numerous daily tasks, from scaffolding components to applying build optimizations and much more.
- Dependency Injection. This built-in pattern contributes to code that is easier to maintain, more flexible, and highly testable.
- All-in-One Solution. Angular is a comprehensive framework that includes its own routing, forms, animation system, and other essential modules out of the box.
Disadvantages of Angular
- Complexity. Beyond mastering the framework core, you also need to get comfortable with RxJS, TypeScript, and Angular-specific template syntax such as the structural directives
*ngIfand*ngFor.- Bundle Size. Compared to competing frameworks, Angular typically produces larger bundles, although modern techniques like lazy loading can significantly mitigate this issue.
- Smaller Community. While the community may be smaller than that of other tools, it is by no means tiny — and it is particularly welcoming and supportive.
How Does Change Detection Work?
Grasping Angular's change detection mechanism is fundamental to building high-performance applications. Without this knowledge, you are likely to struggle with performance bottlenecks. Therefore, having at least a foundational understanding is crucial.
Change detection is Angular's core mechanism responsible for updating the view whenever the underlying data changes.
This process is triggered by any asynchronous event that has a registered handler, including user interactions like clicks or mouse movements, as well as AJAX calls,
setInterval, orsetTimeout. In essence, any asynchronous operation kicks off the change detection cycle. When triggered, Angular systematically walks through the component tree from the top down, re-rendering only those views that have changed.For a more advanced discussion, you can highlight Zone.js, which serves as Angular's underlying mechanism for detecting these async events. You should also be prepared to discuss performance optimization strategies like the
OnPushchange detection strategy, executing heavy tasks outside the Angular zone, or forking zones for specialized scenarios.

Mastering Advanced Angular Forms
If you want to go deeper into this topic, consider the comprehensive Advanced Angular Forms course, created specifically for this subject.
How Does Dependency Injection Work?
Dependency Injection (DI) is the backbone that enables building flexible and testable components in an Angular application. Without a solid grasp of this concept, advancing your Angular skills becomes significantly harder, making it an indispensable interview topic.
Dependency Injection is a core application design pattern that Angular has fully embraced. The primary principle is that a class delegates the responsibility of creating and providing its dependencies to an external injector, rather than handling them internally.
Angular operates with two distinct types of injectors. The Module Injector, configured via
@NgModule()or@Injectable()annotations, manages dependencies on a global scale. In contrast, the NodeInjector is associated with each DOM element and is configured through theprovidersproperty within@Componentor@Directiveannotations. These two injector types each maintain their own separate parent-child hierarchy.Dependency Resolution Process:
When a component requests a dependency, Angular first searches its own NodeInjector. If not found, the query moves upward to the parent NodeInjector, traversing the hierarchy until a provider is located. If resolution fails there, Angular returns to the component and performs the same upward search within the ModuleInjector hierarchy. If the token remains unresolved after this second pass, Angular finally throws a
nullInjectorexception. A more detailed walkthrough is available in this video explanation.Resolution Modifiers:
Expect follow-up questions on Resolution Modifiers:
@Optional,@Self,@SkipSelf, and@Host. These special decorators give you precise control over how Angular should navigate its hierarchy when looking up dependencies. You can find a comprehensive guide in this dedicated video.Dependency Providers:
To round out the topic, be ready to discuss the four different class provider types:
useClass,useExisting,useValue, anduseFactory. These provide granular control over how dependency instances are created. This concept is also thoroughly explained in this video resource.
RxJs — What Is It and Why Do We Use It?
Building a maintainable Angular application without a solid command of RxJs is practically an impossible task. Angular integrates this library pervasively throughout its architecture, so understanding reactive programming principles isn't just nice-to-have — it is a requirement.
RxJs is a comprehensive library that implements the reactive programming paradigm and is an integral part of the Angular ecosystem.
Observables vs. Promises:
- Observables are lazy; they do not start emitting values until you call the
subscribe()method. Promises, on the other hand, begin execution immediately upon creation.- You can cancel an Observable at any point, which is impossible with a Promise.
- Observables can operate synchronously, whereas Promises are inherently asynchronous.
- An Observable can emit a stream of multiple values, while a Promise resolves exactly once with a single value.
Core RxJs Operators:
There are countless operators to mention, such as
map,switchMap, andzip. It is crucial to only list operators you have genuinely used in production code. You may be questioned in depth about any operator you mention, and it would be quite awkward to misrepresent your experience if you cannot explain its behavior.Understanding Subjects:
A Subject is a special type of Observable that also serves as an observer, enabling you to actively push values into the stream — a capability that plain Observables lack. Different use cases call for
Subject,BehaviorSubject,ReplaySubject, orAsyncSubject. The official documentation provides a good breakdown of each variant, which you can find here.It is also essential best practice to always unsubscribe from any active streams when you destroy a component or directive to prevent memory leaks. Leveraging Angular's built-in
asyncpipe in your templates is a highly effective way to handle this automatically.
Application Optimization Strategies
This is a particularly critical question, especially for candidates targeting Senior-level positions. The expectation is to present a comprehensive toolbox of techniques for maximizing an Angular application's performance.
Your response should ideally address two separate focuses: decreasing bundle size and improving runtime performance.
Bundle Size
- Employ AOT compilation.
- Configure lazy loading for feature modules to shrink the initial load.
- Optimize graphical assets, such as replacing image files with CSS or icon font alternatives.
- Write code in a way that supports tree-shaking, eliminating unused exports.
- Implement the Lightweight Injection Token Pattern for tree-shakable tokens.
- Utilize Content Delivery Networks (CDNs) for external libraries.
Runtime Performance
- Apply the
OnPushchange detection strategy to prevent redundant checks. This forces Angular to update components only when their input references change.- Execute operations outside the Angular zone when re-renders are not necessary, even if async events are involved.
- Leverage
Service Workersto improve caching and application responsiveness.- Prefer pure pipes over function calls within templates to avoid re-evaluations.
- Use a
trackByfunction with*ngFordirective to minimize DOM mutations during list updates.
That concludes my selection of the top five questions for an Angular Developer interview. Of course, this is just a guide — interviewers may probe into a wide range of other areas. Solid preparation demands significant work outside the actual interview setting, but the payoff is substantial. Good luck with your next interview, and I hope this information proves useful.
If you would rather watch than read, check out my video on this same topic.
