Mülakat

React Native & JavaScript Mülakat Soruları — Seviye 5 (En Zor)

MülakatArchitecturePerformanceSeviye 5

Mimari tradeoff (ödünleşme), derin performans, güvenlik ve platform sınırları üzerine 20 en zor soru-cevap.

EG

Emre Gürbüz

4 Ağustos 2026 · 4 dk okuma

Son seviye ezber cevap değil, sistem düşüncesi ister: bellek, eşzamanlılık, release güvenliği, native interop (JS–native birlikte çalışma) ve ölçeklenebilir mobil mimari. Her cevapta “neden / ne zaman / ne pahasına” sorularına yer verildi.

Seviye 5 — En Zor · Sorular 81–100 / 100

Bu serideki seviyeler

Soru 81

JS finalization / weak ref ile native kaynak nasıl yönetilir?

JS handle bırakılınca native temizlik tetiklenmeli; ama GC zamanı belirsizdir. Açık close() API + finalizer yedekli model, double-free ve thread atlama koruması gerekir.

Soru 82

Sync JSI çağrısını ne zaman asla yapmazsınız?

Disk/ağ/büyük parse, kilit bekleyen I/O, ağır buffer kopyası gibi süresi belirsiz işler. Sync JSI ucuz ve sınırlı işler içindir; uzun işi arka plana taşıyıp event/callback ile dönün.

Soru 83

Shadow tree tutarsızlığı nasıl debug edilir?

Commit sonrası native hiyerarşi ile React ağacını karşılaştırın. Özel descriptor prop diff hataları, Yoga ölçü tutarsızlığı, concurrent yarış. Deterministik prop sırası + Fabric logları yardımcı olur.

Soru 84

Çoklu JS runtime (brownfield + headless) neyi bozar?

Global singleton native modüller, EventEmitter çakışması, “tek bridge” varsayımı. Her runtime’ın kayıtları izole olmalı; static global state yasaktır.

Soru 85

Memory pressure (bellek baskısı) altında ne yapılır?

Görsel cache temizliği, liste penceresini küçültme, büyük JSON’u parça parça işleme, native bitmap recycle. iOS memory warning / Android onTrimMemory dinlenip kontrollü tepki verilir.

Soru 86

GC pause ile frame drop nasıl ayrılır?

Perfetto/Systrace’de JS runtime, UI ve GPU dilimlerine bakın. GC ise allocation profili; yerleşim ise Yoga/measure; köprü ise IPC dilimi öne çıkar.

Soru 87

Zero-copy buffer paylaşımı neden riskli/güçlü?

TypedArray/ArrayBuffer ile kopyasız pointer paylaşımı hız verir ama lifetime ve thread sahipliği net olmalıdır. Yanlış ownership use-after-free üretir; birçok SDK güvenli kopyayı tercih eder.

Soru 88

Turbo Module event aboneliği yaşam döngüsü tuzakları?

JS unmount olmadan native listener kalırsa sızıntı olur. Native event, JS runtime yokken gelirse çöküş olur. remove/invalidate ve kapanış sırası Spec’te tanımlanmalıdır.

Soru 89

Uygulama açılış critical path nasıl modellenir?

Süreç start → native init → RN runtime → bundle yükle/eval → ilk commit → etkileşim. Her aşamaya zaman işareti (mark) koyun. OTA indirme critical path’e girmemeli; önceki bundle ile açılmalı.

Soru 90

OTA + native binary matrisi ile rollback güvenliği?

Her OTA min/max native sürüm taşır. Uyumsuz OTA crash loop (sürekli çöküş) yaratabilir. Zorunlu binary update, kill switch ve kademeli yayın olmadan OTA production-ready sayılmaz.

Soru 91

React 18 batching + RN event kaynakları?

Automatic batching çoğu event’te state güncellemelerini birleştirir. Native’den gelen event kaynaklarında sürüm farkları olabilir. “Neden iki render?” sorusunda event kaynağına bakın.

Soru 92

Kullanıcı girişini (gesture) nasıl önceliklendirirsiniz?

Ağır render’ı startTransition / useDeferredValue ile düşük önceliğe alın; jest/animasyon UI thread’de kalsın. JS’te uzun işleri parçalayın (yield).

Soru 93

Ortak design system vs native look tradeoff’u?

Platforma özgü UI dönüşümü artırır ama maliyeti ikiye katlar. Ortak sistem hız verir ama “web gibi uygulama” hissi riski taşır. Ürün skoru ve ekip kapasitesiyle karar verin.

Soru 94

WebView + JS bridge saldırı yüzeyi nasıl daraltılır?

injectJavaScript, dosya erişimi, deep link parametreleri ve XSS → native çağrı zinciri risklidir. Origin allowlist, mesaj şeması doğrulama, hassas API’yi WebView’a açmama.

Soru 95

Mobil UI snapshot testleri neden zor?

Font, piksel yoğunluğu, animasyon, platform blur farkları flaky üretir. Eşik (threshold) + animasyonu sabitleme gerekir; her pikseli “bug” sanmayın.

Soru 96

Monorepo’da native build cache stratejisi?

Gradle remote cache, dikkatli DerivedData/Pods cache. Yanlış cache stale (bayat) native binary üretebilir; cache anahtarına RN/native hash girilmelidir.

Soru 97

“İş kuralı JS’te, çizim native’de” sınırı nasıl çizilir?

Domain kuralları JS’te test edilebilir kalsın; kare bütçeli işler native/worklet’te olsun. Sınır: veri yoğunluğu, gecikme SLA’sı, ekip skill’i. Her şeyi native’e taşımak RN değerini öldürür.

Soru 98

Crash loop’tan otomatik kurtarma nasıl tasarlanır?

Açılış sayacı, son OTA hash, safe mode (yedek bundle), native bayrak. İki soğuk açılış çöküşünden sonra OTA geri al + sade UI. Kullanıcıyı sonsuz splash’te bırakmayın.

Soru 99

Thread-hop maliyeti neden gizli regresyon olur?

Her JS↔native atlama kuyruk/gecikme ekler. Tek çağrı ucuz görünür; saniyede binlerce kez sistem erir. API’de batching ve event/push modeli tercih edilir.

Soru 100

Senior seviye: RN performans regresyonunu uçtan uca nasıl root-cause edersiniz?
  1. Metriği sabitleyin (FPS/TTI). 2) Release’e yakın build kullanın. 3) JS / UI / GPU ayırın. 4) Commit, flag veya OTA ile bisect yapın. 5) Hipotezi ölçümle kanıtlayın. 6) Fix + regresyon testi + alarm. “Sanırım FlatList” senior cevap değildir; kanıt zinciri senior’dır.

Önceki / sonraki seviye

Tüm mülakat seviyeleri

Diğer yazılar