Angular Mülakat Sürecine Genel Bakış
Frontend developer mülakat süreçleri günümüzde çok aşamalı bir yapıya evrilmiştir ve angular mülakat soruları bu süreçlerin en kritik bileşenlerinden birini oluşturmaktadır. İlk aşama olan İK görüşmesinde genellikle deneyim seviyeniz, kariyer hedefleriniz ve temel motivasyonunuz değerlendirilirken, ikinci aşamadaki teknik mülakatlar kodlama yeteneklerinizi ve mimari düşünce yapınızı ölçmeye yöneliktir. Son aşama olan kültür uyumu (culture fit) görüşmelerinde ise ekip dinamiklerine katkınız, iletişim becerileriniz ve problem çözme yaklaşımlarınız incelenmektedir. Bu üç aşamanın her birinde farklı değerlendirme kriterleri devreye girmekte ve adayların kapsamlı bir hazırlık yapması gerekmektedir.
Junior, Mid-level ve Senior pozisyonları arasındaki soru zorluk dereceleri belirgin farklılıklar göstermektedir. Junior seviyede temel syntax bilgisi, component oluşturma ve basit data binding mekanizmaları sorgulanırken; Mid-level mülakatlarında performans optimizasyonu, reactive programming ve modüler mimari konuları öne çıkmaktadır. Senior ve Lead pozisyonlarında ise sistem tasarımı (system design), mikro-frontend mimarileri, enterprise-scale uygulama stratejileri ve teknik liderlik kapasitesi derinlemesine test edilmektedir. Adayların başvurdukları pozisyonun seviyesine uygun olarak farklı hazırlık stratejileri geliştirmeleri büyük önem taşımaktadır.
Online Kodlama Testleri ve Canlı Kodlama Beklentileri
Modern angular teknik mülakat süreçlerinde HackerRank, Codility veya şirket özel platformları üzerinden asenkron kodlama testleri yaygın olarak kullanılmaktadır. Bu testlerde genellikle 60-90 dakika içinde belirli bir problemi çözmeniz, edge case'leri handle etmeniz ve clean code prensiplerine uymanız beklenmektedir. Canlı kodlama (live coding) seanslarında ise StackBlitz, CodeSandbox veya VS Code Live Share gibi ortamlarda mülakatçı eşliğinde gerçek zamanlı kod yazmanız istenir ve bu süreçte düşünce sürecinizi sesli olarak ifade etmeniz (think out loud) kritik öneme sahiptir. Teknik yetkinliğinizin yanı sıra stres altında problem çözme beceriniz ve iletişim tarzınız da bu aşamada değerlendirilmektedir.
Mini Vaka Senaryosu: Bir e-ticaret şirketinin mülakat sürecinde, adaydan 45 dakika içinde ürün listesi görüntüleyen, sepete ekleme özelliği olan ve RxJS kullanarak state yönetimi yapan mini bir uygulama geliştirmesi istenmiştir. Aday, lazy loading stratejilerini kullanarak modülleri ayırma ve error handling mekanizmalarını implemente etme becerisini göstermek zorunda kalmıştır.
Değerlendirme Rubriği: Kodlama aşamalarında 100 puan üzerinden değerlendirme yapılmaktadır. Fonksiyonel doğruluk (0-30 puan), kod kalitesi ve okunabilirlik (0-25 puan), Angular best practices kullanımı (0-25 puan) ve performans optimizasyonu (0-20 puan) kriterleri uygulanmaktadır. Senior pozisyonlarında ek olarak mimari kararların gerekçelendirilmesi (0-15 puan) ve test yazımı (0-15 puan) değerlendirme kapsamına dahil edilmektedir.
Temel Angular Kavramları ve Sık Sorulanlar
Angular mülakat soruları içerisinde en temel ve sık sorulan konuların başında component mimarisi ve modül yapısı gelmektedir. Component'ler uygulamanın UI bloklarını temsil ederken, Module'ler (NgModule) ilgili component'leri, pipe'ları ve servisleri mantıksal bütünlükler halinde gruplamaya yarar. Standalone Components (Angular 14+) ile birlikte gelen yeni paradigmada module kullanımı opsiyonel hale gelmiş olsa da, mevcut enterprise projelerde hâlâ modüler mimari hakimdir ve mülakatlarda her iki yaklaşımın da bilinmesi beklenmektedir. Component'ler arası iletişimde @Input() ve @Output() decorator'larının kullanımı, ViewChild ve ContentChild konseptleri mutlaka sorulan konular arasındadır.
Data Binding mekanizmaları angular interview questions listelerinin vazgeçilmezidir. One-way binding (Interpolation ve Property Binding), Two-way binding (ngModel) ve Event Binding arasındaki farkların net bir şekilde açıklanabilmesi gerekmektedir. Özellikle Two-way binding'in banana-in-a-box [( )] syntax'ının arka planda nasıl çalıştığı, ngModelChange event'inin ne zaman fırlatıldığı ve Change Detection cycle ile ilişkisi derinlemesine sorulabilmektedir. Adayların unidirectional data flow prensibini neden tercih etmeleri gerektiğini ve Two-way binding'in potansiyel performans ve debug zorluklarını açıklayabilmeleri beklenmektedir.
Dependency Injection ve Injectable Decorator
Angular'ın belkemiklerinden biri olan Dependency Injection (DI) sistemi, servislerin ve diğer bağımlılıkların nasıl yönetileceğini belirler. @Injectable() decorator'ı ile işaretlenen sınıflar, Angular Injector tarafından singleton veya farklı scope'larda (root, module, component) instance'ları oluşturularak yönetilir. Hierarchical Injector yapısı sayesinde component ağacında yukarıdan aşağıya servisler inherit edilebilir veya component seviyesinde farklı instance'lar oluşturulabilir. Mülakatlarda providedIn: 'root' vs providers array kullanımı arasındaki farklar, tree-shakeable providers konsepti ve custom injector oluşturma senaryoları sıklıkla karşılaşılan sorulardandır.
Mini Vaka Senaryosu: Bir finans uygulamasında UserService ve AuthService arasındaki bağımlılık döngüsü (circular dependency) yaşanan bir senaryoda, adaydan forwardRef kullanımı veya factory provider pattern ile bu sorunu çözmesi istenmiştir. Ayrıca farklı modüller için farklı konfigürasyonlarla aynı servisin nasıl instantiate edileceği (multi-provider pattern) hakkında sorular yöneltilmiştir.
Örnek Mülakat Sorusu: "Component seviyesinde providers array'ine eklenen bir servis ile providedIn: 'root' olarak tanımlanan servis arasındaki lifecycle ve memory management farklarını açıklayınız. Hangi senaryoda hangi yaklaşımı tercih edersiniz?"
Değerlendirme Rubriği: Temel kavramlarda teori bilgisi (0-40 puan), pratik uygulama yeteneği (0-30 puan) ve best practices bilinci (0-30 puan) üzerinden değerlendirme yapılmaktadır. Constructor injection vs Property injection tercihlerinin gerekçelendirilmesi ve singleton pattern'in Angular DI içindeki implementasyonunun bilinmesi yüksek puan getiren faktörlerdendir.
Component Lifecycle Hooks Detaylı İnceleme
Angular lifecycle hooks, component ve directive'lerin oluşturulması, güncellenmesi ve yok edilmesi süreçlerinde belirli aralıklarda çalışan callback metodlarıdır. Angular lifecycle hooks mülakat soruları genellikle ngOnInit, ngOnChanges ve ngOnDestroy üzerinde yoğunlaşmakla birlikte, ngAfterViewInit, ngAfterContentInit ve ngDoCheck gibi daha nadir kullanılan hook'lar da teknik derinliği ölçmek için sorulmaktadır. Bu hook'ların çalışma sırası (constructor -> ngOnChanges -> ngOnInit -> ngDoCheck -> ngAfterContentInit -> ngAfterContentChecked -> ngAfterViewInit -> ngAfterViewChecked -> ngOnDestroy) ezberden öte, her birinin ne zaman ve neden kullanıldığının bilinmesini gerektirmektedir.
Constructor ile ngOnInit arasındaki fark, angular mülakat soruları içinde en klasik ve kritik sorulardan biridir. Constructor, TypeScript seviyesinde sınıf instantiate edildiğinde çalışır ve bu aşamada Input değerleri henüz mevcut değildir. ngOnInit ise Angular'ın component'i ilk kez render edeceği andan hemen önce, tüm Input binding'leri tamamlandıktan sonra çalışır. Bu nedenle constructor'da servis injection'ları yapılırken, veri fetch işlemleri ve initial setup işlemleri mutlaka ngOnInit içinde gerçekleştirilmelidir. Bu ayrımı bilmemek, memory leak'lere ve race condition'lara yol açabilecek kritik hataların işaretidir.
Change Detection ve NgDoCheck Stratejileri
Change Detection mekanizması, Angular'ın component tree'yi tarayarak veri değişikliklerini tespit ettiği ve DOM'u güncellediği süreçtir. Varsayılan olarak CheckAlways stratejisi kullanılırken, OnPush stratejisi performans optimizasyonu için kritik öneme sahiptir. ngDoCheck hook'u, Angular'ın varsayıyan change detection döngüsüne müdahale ederek custom change detection mantığı uygulamaya olanak tanır, ancak dikkatsiz kullanımda ciddi performans problemlerine yol açabilir. Immutable data patterns ve Observable'ların async pipe ile kullanımı, OnPush stratejisiyle uyumlu çalışmanın anahtarıdır.
Mini Vaka Senaryosu: Büyük bir veri tablosu (data grid) component'inde, Input olarak gelen büyük dizideki sadece bir elemanın değişmesi durumunda tüm tablonun yeniden render edilmesi performans sorununa yol açmaktadır. Adaydan OnPush stratejisini uygulaması, TrackBy fonksiyonunu kullanması ve gereksiz ngDoCheck çağrılarını optimize etmesi istenmiştir. Ayrıca component yok edildiğinde açık kalan subscription'ların ngOnDestroy içinde temizlenmesi gerektiği vurgulanmıştır.
Örnek Mülakat Sorusu: "ngOnChanges hook'u SimpleChanges object'i ile birlikte çalışır. Bir Input referans olarak değişmeden içeriği değiştiğinde (örneğin array.push()) ngOnChanges neden tetiklenmez? Bu durumu nasıl handle edersiniz?"
Değerlendirme Rubriği: Lifecycle bilgisi (0-35 puan), Change Detection stratejileri anlayışı (0-35 puan) ve Memory Management bilinci (0-30 puan) kriterleri uygulanmaktadır. Async pipe kullanımı, subscription yönetimi ve immutable state prensiplerine uygun kod yazma becerisi yüksek puan alan adayları ayırt eden unsurlardır.
TypeScript Bilgisi ve Angular İlişkisi
TypeScript mülakat soruları, Angular mülakatlarının ayrılmaz bir parçasıdır çünkü Angular framework'ü TypeScript üzerine inşa edilmiştir ve framework'ün tüm avantajları static typing sisteminden beslenmektedir. Interface ile Class arasındaki farklar, compile-time vs runtime type checking konseptleri ve structural typing prensibi mutlaka sorulan konular arasındadır. Interface'ler JavaScript'e compile edilmezken (sadece development aşamasında type checking için kullanılır), Class'lar JavaScript prototype'larına dönüştürülür. Bu farkı anlamak, bundle size optimizasyonu ve runtime davranışları konusunda bilinçli kararlar almayı sağlamaktadır.
Decorators (@Component, @Injectable, @Input vb.), TypeScript'in experimental feature'ları olup Angular'ın metadata'ları tanımlamasını ve framework'ün runtime'da bu metadata'ları kullanarak dependency injection, component configuration ve change detection stratejilerini uygulamasını mümkün kılar. AOT (Ahead-of-Time) compilation sürecinde bu decorator'lar analiz edilir ve gereksiz kodlar tree-shaking ile elimine edilir. Generic Types kullanımı, HttpClient ile type-safe HTTP call'lar yapma, Repository pattern implementasyonu ve Type Guards (typeof, instanceof, in operator, custom type guards) ile runtime type narrowing konuları typescript mülakat süreçlerinde derinlemesine sorgulanmaktadır.
Advanced TypeScript Patterns in Angular
Mapped Types, Conditional Types, Utility Types (Partial, Required, Pick, Omit) ve Template Literal Types, Senior seviye angular interview questions içinde karşılaşılan ileri seviye konulardır. Özellikle RxJS ile birlikte kullanılan Higher-Order Types ve Observable'ların generic type parametreleriyle kullanımı, complex data transformation pipeline'larında type safety sağlamak için kritik öneme sahiptir. strict mode, strictNullChecks ve noImplicitAny gibi compiler option'larının projeye etkileri ve migration stratejileri hakkında bilgi sahibi olmak, enterprise projelerde çalışmış deneyimli developer'ların ayırt edici özelliğidir.
Mini Vaka Senaryosu: Bir API'dan gelen dinamik ve nested JSON response'un tip güvenliğini sağlamak için adaydan recursive interface tanımlaması veya conditional types kullanarak flatten edilmiş bir type oluşturması istenmiştir. Ayrıca strict mode aktif bir projede nullable değerlerin optional chaining ve nullish coalescing operator'leri ile güvenli bir şekilde handle edilmesi gereken senaryolar üzerinde durulmuştur.
Örnek Mülakat Sorusu: "Angular servisinde HTTP call sonucu dönen Observable'ı nasıl generic hale getirirsiniz? T extends BaseModel constraint'i kullanarak repository pattern implemente ederken generic type'ları nasıl yönetirsiniz?"
Değerlendirme Rubriği: Type Safety bilgisi (0-30 puan), Decorator mekanizmaları anlayışı (0-25 puan), Generic Programming yeteneği (0-25 puan) ve Compiler Configuration bilgisi (0-20 puan) üzerinden değerlendirme yapılmaktadır. any kullanımından kaçınıp unknown ve proper type narrowing tekniklerini uygulama becerisi yüksek puan getiren davranışlardandır.
RxJS ve Asenkron Programlama Soruları
RxJS mülakat soruları, modern Angular geliştirmede vazgeçilmez bir yer tutmaktadır çünkü Angular'ın HTTP client'ından form değişikliklerine, route event'lerinden global state management'e kadar her yerde Observable pattern'leri kullanılmaktadır. Observable vs Promise karşılaştırması, lazy evaluation, cancellable operations ve multiple subscribers konseptleri temel sorular arasındadır. Promise'ler tek bir değer dönerken ve çalıştırıldıkları anda eagerly execute edilirken; Observable'lar lazydir, birden fazla değer emit edebilirler (streams) ve subscription iptal edilene kadar memory'de kalırlar. Bu temel farkları açıklayamayan adayların ileri seviye asenkron senaryolarda zorlandıkları gözlemlenmektedir.
Subject türleri (Subject, BehaviorSubject, ReplaySubject, AsyncSubject) arasındaki farklar ve kullanım senaryoları rxjs mülakat soruları içinde sıklıkla sorulan konulardır. BehaviorSubject, initial value tutması ve son değeri yeni subscriber'lara emit etmesi nedeniyle state management için idealdir. ReplaySubject ise buffer size konfigürasyonu ile son N değeri tekrar oynatabilir. Hot vs Cold Observable kavramları, multicast mekanizmaları ve refCount operatörüyle ConnectableObservable yönetimi, reactive programming'in derinlemesine anlaşıldığının göstergesidir. Operatör zincirleme (piping) ve hata yönetimi stratejileri (catchError, retry, retryWhen) de mutlaka bilinmesi gereken konular arasındadır.
Sık Kullanılan Operatörler ve Best Practices
Transformation operatörleri (map, pluck, scan), Filtering operatörleri (filter, take, takeUntil, distinctUntilChanged), Combination operatörleri (combineLatest, forkJoin, zip, merge) ve Error Handling operatörleri (catchError, finalize) mülakatlarda pratik örneklerle sorgulanmaktadır. Özellikle switchMap (cancelling effect), mergeMap (concurrent operations), concatMap (sequential operations) ve exhaustMap (ignore subsequent until complete) arasındaki farkların autocomplete, drag-and-drop veya form submit gibi gerçek senaryolarda ne zaman kullanılacağının bilinmesi beklenmektedir. Memory leak önleme için takeUntilDestroyed (Angular 16+) veya ngOnDestroy'da manual unsubscribe pattern'lerinin bilinmesi kritik öneme sahiptir.
Mini Vaka Senaryosu: Bir arama kutusunda (search input) her karakter girişinde API call yapıldığında oluşan race condition ve gereksiz network trafiği sorununu çözmek için adaydan switchMap ve debounceTime operatörlerini kullanması istenmiştir. Ayrıca kullanıcı sayfadan ayrıldığında pending olan HTTP request'lerinin iptal edilmesi için AbortController veya RxJS subscription yönetimi stratejileri sorgulanmıştır.
Örnek Mülakat Sorusu: "Bir butona her tıklandığında API call yapmak istiyorsunuz, ancak önceki istek tamamlanmadan yeni tıklamaları ignore etmek istiyorsunuz. Hangi operatörü kullanırsınız ve neden? Peki kullanıcı sayfadan ayrıldığında açık kalan subscription'ları nasıl temizlersiniz?"
Değerlendirme Rubriği: Observable Pattern anlayışı (0-30 puan), Operatör seçimi ve kullanımı (0-30 puan), Memory Management (0-25 puan) ve Hata yönetimi stratejileri (0-15 puan) kriterleri uygulanmaktadır. Marble diagram'ları okuyabilme ve async data flow'ları görselleştirebilme yeteneği, adayın reactive programming konusundaki ustalığını gösteren önemli bir indicatordür.
Routing, Lazy Loading ve Navigation
Angular routing mekanizması, SPA (Single Page Application) mimarisinde client-side navigation'ı mümkün kılan ve browser history ile entegre çalışan karmaşık bir sistemdir. RouterModule yapılandırması, forRoot ve forChild static metodları, route konfigürasyonları ve nested route'lar (child routes) mülakatların temel konuları arasındadır. Route Guards (CanActivate, CanActivateChild, CanDeactivate, Resolve, CanLoad) ile yetkilendirme (authorization), onay mekanizmaları (confirmation dialogs) ve data pre-fetching işlemleri gerçekleştirilmektedir. Functional guards (Angular 15+) ile class-based guards arasındaki geçiş ve karşılaştırma da güncel mülakat sorularındandır.
Lazy loading, büyük ölçekli uygulamalarda initial bundle size'ını düşürmek ve performansı artırmak için kullanılan kritik bir tekniktir. loadChildren syntax'ı ile feature module'lerin gerektiğinde yüklenmesi (on-demand loading), preloading stratejileri (PreloadAllModules, CustomPreloadingStrategy) ve standalone component'lerle birlikte gelen yeni lazy loading pattern'leri (loadComponent) hakkında bilgi sahibi olmak günümüz frontend developer mülakatlarında beklenen yetkinliklerdendir. Route parametreleri (:id), query parametreleri ve fragment'lar arasındaki farklar, ActivatedRoute servisi ile bu parametrelerin nasıl alınacağı ve Observable olarak dinlenmesi gerektiği de sık sorulan konulardır.
Advanced Routing Senaryoları
Named outlets (auxiliary routes), route resolvers ile data fetching, scroll position restoration ve custom route reuse stratejileri (RouteReuseStrategy) ileri seviye mülakat konularıdır. Karmaşık authorization senaryolarında multiple guard'ların sıralı çalıştırılması, guard'ların birbirine bağımlılıkları ve dependency injection ile servislerin guard'lara enjekte edilmesi pratik sorular oluşturmaktadır. Browser event'leri (beforeunload) ile CanDeactivate guard'larının entegrasyonu ve kullanıcıya kaydedilmemiş değişiklikler konusunda uyarı gösterme mekanizmaları gerçek dünya senaryolarında karşılaşılan konulardır.
Mini Vaka Senaryosu: Bir enterprise dashboard uygulamasında, kullanıcıların yetki seviyelerine göre farklı modüllere erişimi lazy loaded feature module'ler üzerinden yönetilmektedir. Adaydan CanLoad ve CanActivate guard'larını implemente etmesi, rol bazlı erişim kontrolü yapması ve module preloading stratejisi geliştirmesi istenmiştir. Ayrıca kullanıcı form doldururken sayfadan ayrılmaya çalıştığında uyarı gösteren bir CanDeactivate guard'ı yazması talep edilmiştir.
Örnek Mülakat Sorusu: "Lazy loaded module'de bir servisi providedIn: 'root' yerine module providers array'inde tanımlarsanız bu servisin lifecycle'ı nasıl olur? Kullanıcı farklı bir modüle geçtiğinde bu servis memory'den silinir mi? Peki singleton servis behavior'unu nasıl garanti altına alırsınız?"
Değerlendirme Rubriği: Routing konfigürasyon bilgisi (0-30 puan), Guard implementasyon yeteneği (0-25 puan), Lazy loading ve performans optimizasyonu (0-25 puan) ve Navigation state yönetimi (0-20 puan) üzerinden değerlendirme yapılmaktadır. URL parsing, deep linking ve SEO friendly routing (title meta tags) konularındaki bilgi birikimi yüksek puan getiren ekstra yetkinliklerdir.
Forms ve Validasyon Stratejileri
Angular forms mimarisi, Template-driven Forms ve Reactive Forms (Model-driven) olmak üzere iki farklı yaklaşım sunmaktadır ve bu iki yaklaşım arasındaki farklar angular mülakat soruları içinde sıklıkla karşımıza çıkmaktadır. Template-driven forms, iki yönlü data binding (ngModel) kullanır ve basit senaryolar için uygunken; Reactive Forms, explicit ve immutable yaklaşımı, programatik kontrolü ve test edilebilirliği ile karmaşık form senaryoları için tercih edilmelidir. FormControl, FormGroup ve FormArray sınıfları ile form state'inin (value, valid, touched, dirty, pending) yönetimi, reactive programming prensipleriyle uyumlu bir şekilde Observable'lar üzerinden gerçekleştirilmektedir.
Validasyon stratejileri, built-in validator'lar (required, minLength, maxLength, pattern, email) ve custom validator'lar (synchronous ve asynchronous) olmak üzere katmanlı bir yapıya sahiptir. Cross-field validation (örneğin şifre ve şifre tekrarı alanlarının karşılaştırılması), form seviyesinde validasyon ve dinamik validasyon kuralları (koşullu validasyon) implementasyonu pratik mülakat konularıdır. FormBuilder servisi ile daha concise syntax kullanımı, setValue vs patchValue farkları ve valueChanges Observable'ı ile form değişikliklerini dinleme teknikleri de değerlendirme kriterleri arasındadır.
İleri Seviye Form Yönetimi
Dinamik form oluşturma (dynamic form generation), form array'lerinde dinamik alan ekleme/çıkarma, nested form group'lar ve custom form control'ler (ControlValueAccessor implementasyonu) ile UI kütüphanelerini (Material, PrimeNG) Angular form sistemine entegre etme konuları senior seviye soruları oluşturmaktadır. Async validator'lar ile server-side validasyon (örneğin kullanıcı adının unique olup olmadığının kontrolü) ve pending state yönetimi, debounce teknikleri ile gereksiz API call'ların önlenmesi gerçek dünya uygulama deneyimini gösteren senaryolardır.
Mini Vaka Senaryosu: Çok adımlı (wizard) bir kayıt formunda, kullanıcının önceki adımlara geri dönüp verileri güncelleyebilmesi ancak validasyon kurallarının adım bazlı çalışması gerekmektedir. Adaydan FormArray kullanarak adım yönetimi yapması, cross-field validasyon ile şifre güvenliğini kontrol etmesi ve async validator ile e-posta adresinin sistemde kayıtlı olup olmadığını kontrol etmesi istenmiştir.
Örnek Mülakat Sorusu: "Reactive Form'da bir FormGroup'un tüm değerlerini değiştirirken sadece bir alanın validatörünü geçici olarak devre dışı bırakmak istiyorsunuz. Bunu nasıl yaparsınız? Peki form resetlendiğinde default değerlerin gelmesini nasıl sağlarsınız?"
Değerlendirme Rubriği: Form mimarisi seçimi (0-25 puan), Validasyon implementasyonu (0-30 puan), Reactive Patterns kullanımı (0-25 puan) ve Dynamic Form yeteneği (0-20 puan) kriterleri uygulanmaktadır. Error message display stratejileri, accessibility (ARIA attributes) ve form performans optimizasyonu (ChangeDetectionStrategy.OnPush ile birlikte kullanım) konularında bilgi sahibi olmak yüksek puan getiren unsurlardır.
State Management ve Performans Optimizasyonu
Angular state management, küçük ölçekli uygulamalarda BehaviorSubject ile basit store pattern'lerinden, enterprise çapta NgRx (Redux pattern), Akita veya SignalStore (Angular 16+) gibi çözümlere kadar geniş bir yelpazede ele alınmaktadır. NgRx mülakat soruları genellikle Store, Actions, Reducers, Effects ve Selectors konseptlerini kapsamaktadır. Unidirectional data flow, immutable state updates ve pure function reducer'lar konseptlerini anlamak, reactive state management'in temelini oluşturmaktadır. Action dispatch flow, meta-reducer'lar, entity adapter pattern'leri ve normalized state yapıları ileri seviye konular arasındadır.
Performans optimizasyonu, angular senior mülakat süreçlerinde ayrı bir önem teşkil etmektedir. ChangeDetectionStrategy.OnPush kullanımı, Angular'ın varsayılan CheckAlways stratejisinden kaçınıp sadece Input değişikliklerinde veya event'lerde change detection çalıştırmasını sağlayarak DOM update maliyetini dramatik şekilde azaltır. TrackBy fonksiyonu ile ngFor directive'indeki liste render optimizasyonu, büyük listelerde virtual scrolling (CDK Scrolling) implementasyonu ve memoization teknikleri (pure pipes, memoized selectors) uygulama performansını artıran kritik tekniklerdir. Memory leak tespiti ve çözümü (detached DOM nodes, subscription yönetimi) da bu kapsamda değerlendirilmektedir.
Sinyaller ve Modern State Management
Angular 16 ile gelen Signals API, RxJS tabanlı reactivity'nin yanına fine-grained reactivity sunarak change detection mekanizmasını devrimsel şekilde değiştirmektedir. Signal'lerin computed ve effect fonksiyonları ile kullanımı, RxJS Interop (toSignal, toObservable) ve geleneksel Observable pattern'lerinden geçiş stratejileri güncel mülakatların hot topic'lerindendir. Standalone component'ler ve provideStore fonksiyonları ile modern state management yapılandırması, eski NgModule tabanlı yapıların farkları ve migration yolları da sorulabilmektedir.
Mini Vaka Senaryosu: Büyük bir finans uygulamasında, binlerce satırlık işlem geçmişinin anlık olarak filtrelenmesi ve sıralanması gerekmektedir. Adaydan NgRx Entity kullanarak normalized state yönetimi yapması, memoized selector'lar ile filtreleme performansını optimize etmesi ve OnPush stratejisi ile component tree'deki gereksiz render'ları engellemesi istenmiştir. Ayrıca SignalStore kullanarak modern bir alternatif implemente etmesi talep edilmiştir.
Örnek Mülakat Sorusu: "Bir liste component'inde binlerce satır var ve kullanıcı sürekli filtreleme yapıyor. NgRx kullanıyorsunuz ancak selector her çalıştığında tüm liste yeniden hesaplanıyor ve UI donuyor. Bu performans sorununu nasıl çözersiniz? Memoization nedir ve nasıl implemente edilir?"
Değerlendirme Rubriği: State Management mimarisi bilgisi (0-30 puan), Performans optimizasyon teknikleri (0-35 puan), Modern Angular özellikleri (Signals) (0-20 puan) ve Memory profiling yeteneği (0-15 puan) üzerinden değerlendirme yapılmaktadır. Lighthouse skorları, bundle analizi ve lazy loading stratejileri hakkında somut deneyim sunabilme yüksek puan getiren faktörlerdendir.
Unit Testing ve Kod Kalitesi
Angular unit test mülakat soruları, Jasmine ve Karma test runner'ları üzerinden component, service ve pipe'ların test edilmesini kapsamaktadır. TestBed yapılandırması, Angular testing utility'leri (ComponentFixture, DebugElement) ve async testing mekanizmaları (fakeAsync, tick, flushMicrotasks) temel konular arasındadır. Isolation testing vs integration testing yaklaşımları arasındaki farklar, mock servislerin oluşturulması (jasmine.createSpyObj) ve dependency injection'ın test ortamında sağlanması pratik bilgilerdir. Component testlerinde detectChanges() çağrısının önemi, lifecycle hook'ların test edilmesi ve DOM query'leri (By.css, By.directive) kullanımı sık sorulan konulardır.
Code coverage kavramı, statement, branch, function ve line coverage metrikleri ile birlikte değerlendirilmektedir. %80+ coverage hedeflenmesi yaygın bir standart olsa da, coverage oranının kalite garantisi olmadığı, anlamlı assertion'ların (expectations) öneminin daha kritik olduğu bilinmelidir. Test Driven Development (TDD) pratikleri, arrange-act-assert pattern'i ve given-when-then syntax'ı ile davranış odaklı test yazımı deneyimli developer'ların ayırt edici özelliklerindendir. E2E testing (Cypress, Playwright, Protractor migration) ve contract testing konuları da teknik mülakatların kapsamına girmektedir.
Test Stratejileri ve Best Practices
Shallow component testing (NO_ERRORS_SCHEMA kullanımı), HttpClientTestingModule ile HTTP interceptor testleri, RouterTestingModule ile navigation testleri ve NgRx store mock'ları ile stateful component testleri ileri seviye konuları oluşturmaktadır. Test doubles (dummy, fake, stub, spy, mock) arasındaki farkların bilinmesi ve her birinin ne zaman kullanılacağına dair karar verme yeteneği değerlendirilmektedir. Flaky test'lerin (tutarsız sonuç veren testler) nedenlerini anlama ve stabilize etme, test execution time optimizasyonu ve parallel test running konuları da senior pozisyonlarda sorulabilmektedir.
Mini Vaka Senaryosu: Bir servis içinde RxJS operatör zinciri kullanılarak yapılan karmaşık bir data transformation işleminin test edilmesi gerekmektedir. Adaydan marble testing kullanarak zaman bazlı async operasyonları test etmesi, HttpClientTestingModule ile mock HTTP response'ları ayarlaması ve error path'lerin (HTTP 500, timeout) test edilmesini sağlaması istenmiştir. Ayrıca component testinde Input değişikliklerinin Output event'lerini doğru şekilde tetikleyip tetiklemediğinin test edilmesi talep edilmiştir.
Örnek Mülakat Sorusu: "Bir component'te setTimeout kullanıyorsunuz ve bunu fakeAsync ile test etmek istiyorsunuz. Ancak component içindeki private metodu test etmek için ne yapmalısınız? Direkt erişim mi yoksa component behavior'ını mı test etmelisiniz? Peki TestBed.configureTestingModule'da declarations ve imports arasındaki fark nedir?"
Değerlendirme Rubriği: Test yazım becerisi (0-35 puan), Testing utilities bilgisi (0-25 puan), Async testing konseptleri (0-25 puan) ve Test quality awareness (0-15 puan) kriterleri uygulanmaktadır. TDD yaklaşımı, CI/CD entegrasyonu ve test maintainability (bakımı kolay testler) konularında deneyim yüksek puan getiren unsurlardır.
Mülakat Başarısı için Stratejiler ve Kariyer İpuçları
Angular mülakat sürecinde teknik bilgi kadar, bu bilgiyi nasıl ilettiğiniz ve geçmiş deneyimlerinizi nasıl yapılandırdığınız da kritik öneme sahiptir. STAR (Situation, Task, Action, Result) metodu, geçmiş projelerde karşılaşılan teknik zorlukların etkili şekilde anlatılması için altın standarttır. Örneğin, "Memory leak sorunu yaşadım" demek yerine; "E-ticaret sepetinde 10.000+ ürün listelenirken tarayıcı crash oluyordu (Situation), bu performans sorununu çözmem gerekiyordu (Task), virtual scrolling ve OnPush change detection stratejisi implemente ederek DOM node sayısını azalttım (Action), sonuçta memory kullanımı %70 düştü ve sayfa ilk yüklenme süresi 3 saniyeden 800ms'ye indi (Result)" şeklinde somut, ölçülebilir ve teknik detay içeren cevaplar verilmelidir.
Sistem tasarımı (System Design) soruları, angular senior mülakat seviyesinde karşılaşılan ve genellikle 45-60 dakika süren whiteboard veya diagram çizim seanslarıdır. Bu sorularda adaydan bir e-ticaret sitesi, sosyal medya feed'i veya real-time collaboration tool'u gibi büyük ölçekli uygulamaların mimarisini çizmesi, component yapısını, state management stratejisini, API entegrasyonunu ve ölçeklenebilirlik (scalability) konularını tartışması istenir. Requirement gathering (functional ve non-functional requirements), API design (REST vs GraphQL), caching stratejileri ve error handling mekanizmaları bu süreçte ele alınan başlıklardır. Adayın trade-off'ları tartışabilmesi (örneğin consistency vs availability) ve kararlarını gerekçelendirebilmesi beklenmektedir.
Maaş Beklentisi ve Pozisyon Pazarlığı
Teknik mülakatları başarıyla geçtikten sonra İK görüşmelerinde maaş beklentisi ve pozisyon seviyesi pazarlığı taktikleri devreye girmektedir. Piyasa araştırması yaparak (Levels.fyi, Glassdoor, local tech community anketleri) bölge ve deneyim seviyesine uygun range'ler belirlemek, total compensation (base salary + bonus + stock options) olarak düşünmek ve signing bonus, remote work imkanları, eğitim bütçesi gibi yan hakları masaya yatırmak profesyonel bir yaklaşımdır. "Beklentim piyasa standartlarındadır" demek yerine somut bir range vermek ve mevcut maaşınızı (eğer uygunsa) şeffaf bir şekilde paylaşmak pazarlık gücünüzü artırır. Ayrıca tech stack growth (Angular'ın yeni versiyonlarını öğrenme fırsatı), mentorluk programları ve kariyer yolu (IC track vs Management track) konularını da müzakere edilebilir unsurlar olarak görmeniz önerilir.
Mini Vaka Senaryosu: Bir aday, mevcut şirketinde Angular 12 kullanılırken yeni şirkette Angular 17 ve Signals kullanımı gerektiğini öğrenmiştir. Mülakat sırasında bu teknolojik farkı öğrenme hevesi olarak çerçevelendirmiş, mevcut projesindeki performans sorunlarını Signals ve Control Flow syntax ile nasıl çözebileceğini teorik olarak açıklamış ve bu sayede teknik yetkinliği ve öğrenme isteğiyle ilgili olumlu bir izlenim bırakmıştır. Maaş pazarlığında ise mevcut paketinin detaylarını vererek ve yeni roldeki sorumluluk artışını gerekçe göstererek %25 artış talep etmiş ve karşı tarafın counter-offer'ını değerlendirme süreci istemiştir.
Örnek Mülakat Sorusu: "Büyük bir Angular uygulamasını (monolith) mikro-frontend mimarisine dönüştürmek istiyoruz. Bu migration'da karşılaşabileceğiniz zorluklar nelerdir? Module Federation kullanımı hakkında ne düşünüyorsunuz? State management'ı nasıl handle ederdiniz?"
Değerlendirme Rubriği: İletişim becerileri (0-30 puan), Problem çözme yaklaşımı (0-30 puan), Sistem tasarım yeteneği (0-25 puan) ve Kültür uyumu (0-15 puan) kriterleri uygulanmaktadır. Soft skills, conflict resolution ve cross-functional takımlarla çalışma deneyimi değerlendirme sürecinin ayrılmaz parçasıdır.
Sıkça Sorulan Sorular
Angular Mülakatında En Sık Sorulan 3 Teknik Konu Nedir?
Component mimarisi ve iletişimi (Input/Output), RxJS Observable pattern'leri ve lifecycle hooks (özellikle ngOnInit ile ngOnChanges farkları) en sık sorulan konular arasındadır. Ayrıca change detection mekanizması ve performans optimizasyonu da mutlaka sorulması gereken konulardır. Adayların bu üç temel alanda hem teorik bilgiye hem de pratik uygulama deneyimine sahip olmaları büyük önem taşımaktadır.
Junior ve Senior Angular Developer Mülakatları Arasındaki Temel Farklar Nelerdir?
Junior seviyede temel syntax, component oluşturma ve temel data binding soruları ön plandayken; Senior mülakatlarında mimari kararlar (monorepo vs polyrepo), state management stratejileri, performans optimizasyon teknikleri ve design patterns (Singleton, Factory, Observer) hakkında derinlemesine sorular yöneltirilir. Senior adaylardan sistem tasarımı yapması, trade-off'ları tartışması ve mentörlük kapasitesini göstermesi beklenirken; junior adaylardan temel konuları sağlam bilmesi ve öğrenme isteği göstermesi yeterli görülmektedir.
Angular Mülakatına Ne Kadar Süre Önceden Hazırlanmalıyım?
Temel seviye bir pozisyon için günde 2-3 saat ayırarak 2-3 hafta yeterli olabilir. Ancak Senior veya Lead pozisyonları için mimari konular, ileri seviye RxJS ve performans optimizasyonu çalışmalarıyla birlikte en az 1-2 ay düzenli hazırlık önerilir. Güncel Angular versiyonlarındaki (16-17) yeni özellikleri (Signals, Standalone Components) takip etmek de kritik öneme sahiptir. Hazırlık sürecinde sadece teori okumak yerine kendi projelerinizi geliştirmeniz ve GitHub portfolyonuzu zenginleştirmeniz tavsiye edilmektedir.
Angular Mülakatında Canlı Kod Yazma (Live Coding) Yapılır Mı ve Nasıl Hazırlanmalıyım?
Evet, çoğu teknoloji şirketi StackBlitz, CodeSandbox veya şirketin kendi ortamında canlı kod yazma istemektedir. Hazırlık için: Temel CRUD operasyonları yapabilen bir uygulama hazırlayın, Observable kullanımına hakim olun, hata ayıklama (debugging) becerilerinizi geliştirin ve kodunuzu yazarken sürekli olarak düşünce sürecinizi sesli olarak ifade edin (think out loud). Ayrıca keyboard shortcut'lara hakim olmak ve refactoring tekniklerini bilmek de süreci hızlandırarak olumlu izlenim bırakmanızı sağlar.
RxJS Bilgisi Angular Mülakatında Ne Kadar Önemli ve Hangi Konuları Bilmeliyim?
RxJS, modern Angular geliştirmede vazgeçilmezdir. Mutlaka bilmeniz gerekenler: Observable oluşturma ve subscribe mekanizması, Subject türleri (BehaviorSubject özellikle önemli), hot vs cold observables, hata yönetimi (catchError, retry) ve sık kullanılan operators (map, filter, switchMap, mergeMap, concatMap, takeUntil). Asenkron veri akışlarını yönetme yeteneği aranan en kritik yetkinliklerdendir. High-order mapping operatörleri arasındaki farkları gerçek senaryolarla açıklayabilmeniz beklenmektedir.
Angular Versiyon Farkları ve Yeni Özellikler Mülakat Sorularında Sorulur Mu?
Kesinlikle evet. Özellikle Angular 14+ ile gelen Standalone Components, Angular 16'daki Signals API ve Angular 17'deki yeni control flow syntax'ı (@if, @for, @switch) hakkında bilgi sahibi olmanız beklenir. Eski projelerdeki (Angular 12 ve öncesi) farkları bilmeniz ve migration stratejileri hakkında fikir sahibi olmanız da size avantaj sağlar. Hydration, Server-Side Rendering (SSR) ve Progressive Web Apps (PWA) konularındaki güncellemeleri takip etmek de faydalıdır.
Teknik Terimleri Türkçe Mi Yoksa İngilizce Mi Kullanmalıyım?
Türkçe yürütülen mülakatlarda karışık kullanım (Türkçe+İngilizce) sektör standardıdır ve kabul edilebilirdir. Ancak 'Component', 'Service', 'Observable', 'Dependency Injection', 'Binding' gibi temel terimleri İngilizce orijinal halleriyle kullanmak daha profesyonel görünmenizi sağlar. Önemli olan tutarlılıktır; bir terimi bir kez Türkçe söylediyseniz (örneğin 'bağımlılık enjeksiyonu') sonrasında İngilizcesine geçmek yerine aynı terimi kullanmaya devam edin. Karşı taraf İngilizce terim kullanıyorsa siz de o şekilde devam edebilirsiniz.
Geçmiş Projelerimi Angular Mülakatında Nasıl Etkili Şekilde Anlatabilirim?
STAR (Situation, Task, Action, Result) metodunu kullanın. Karşılaştığınız teknik zorluğu (örneğin performans sorunu veya state management karmaşası), üstlendiğiniz görevi, kullandığınız Angular özelliklerini (Lazy loading, OnPush, NgRx vb.) ve elde ettiğiniz somut sonuçları (sayfa yüklenme süresi %50 azaldı, memory leak çözüldü) sayısal verilerle ifade edin. Kod örnekleri veya GitHub reposu göstermeye hazır olun. Ayrıca karşılaştığınız başarısızlıkları ve bu durumlardan neler öğrendiğinizi anlatmak da olgunluk göstergesidir.




