Mülakat Sorularında Donup Kalmaya Son!
Kod yazabiliyor ama teorik terminolojide zorlanıyor musun? Günlük hayat analojileri, nokta atışı mülakat cevapları ve topluluktan gelen gerçek mülakat sorularıyla kendini hazırla.
Tüm Teknolojiler Kavramları
9 TerimService Lifetimes: Transient, Scoped, Singleton
.NET IoC konteynerine bir nesneyi ne sıklıkla üretip ne zaman çöpe atacağını söyleme kuralı.
Transient = Tek kullanımlık kağıt bardak (her su içişinde yeni bardak). Scoped = Masandaki servis tabağı (o restoranda oturduğun sürece tek tabak, kalktığında çöpe gider). Singleton = Restoran girişindeki duvar saati (herkes tek bir saate bakar).
Transient her enjeksiyonda yeni nesne üretir. Scoped gelen her HTTP request boyunca tek bir nesne üretir ve request bitince dispose eder (örn: DbContext). Singleton uygulama açılışında bir kez üretilir ve tüm kullanıcılar tarafından ortak kullanılır (örn: Cache, Memory Logger).
Async / Await & Thread vs Task
Uzun süren veritabanı veya HTTP isteklerinde işlemci çekirdeğini (thread) kilitlemeden serbest bırakmaktır.
Restoranda garsonun yemeğin fırında pişmesini beklerken fırının önünde dikilmeyip diğer masaların siparişini almasıdır. Fırından zil sesi gelince gidip yemeği masaya götürür.
Async/Await yeni bir thread açmak demek değildir; I/O bekleme süresinde thread'i serbest bırakarak ThreadPool'un tükenmesini (thread starvation) önlemektir. Asenkron metotların sonucunu .Result veya .Wait() ile senkrona çevirmek kilitlenmeye (Deadlock) sebep olur.
Entity Framework Core: AsNoTracking & Eager Loading
Sadece okuma yapacağın sorgularda EF Core'un hafıza takip mekanizmasını kapatıp performansı 3 katına çıkarmaktır.
Müzedeki tarihi esere sadece gözünle bakmaktır. Eline kalem alıp üstünü çizmene gerek olmadığı için güvenlik görevlisinin seni adım adım takip etmesine gerek kalmaz.
AsNoTracking(), veritabanından sadece okuma yapılacak (güncelleme yapılmayacak) sorgularda Change Tracker yükünü ortadan kaldırarak RAM ve CPU tasarrufu sağlar. İlişkili verilerde ise Lazy Loading yerine .Include() kullanarak N+1 sorgu problemini engelleriz.
Laravel Service Container & Service Providers
Tüm sınıfların bağımlılıklarını tek merkezden yöneten ve otomatik enjekte eden sihirli kutudur.
Bir oto tamir atölyesindeki alet panosudur. Tamirci "13 numara anahtar" istediğinde çırak (Container) panodan uygun anahtarı alır ve tamirciye uzatır.
Service Container, Laravel'de sınıfların bağımlılıklarını otomatik olarak çözümleyen (Dependency Injection) yapıdır. Service Provider'lar ise bu container'a servis bağlama (bind, singleton, scoped) ve boot etme işlemlerinin yapıldığı merkezi giriş kapılarıdır.
Eloquent N+1 Sorgu Problemi & with() Eager Loading
Döngü içinde her satır için veritabanına ayrı ayrı koşup MySQL sunucusunu boğma hatasıdır.
Markete gidip 20 paket makarna alacakken, her paket için tek tek eve gidip geri dönmektir. Eager loading hepsini tek alışveriş arabasına yüklemektir.
N+1 problemi, ilişkili model verilerinin döngü içinde her seferinde ekstra bir SQL sorgusu tetiklemesiyle oluşur. Laravel Eloquent'te with(['relation']) eager loading kullanılarak toplam sorgu sayısı 2'ye (ana tablo + WHERE IN) düşürülür.
Spring IoC Container & Bean Yaşam Döngüsü
Java nesnelerinin (Bean) doğumundan ölümüne kadar tüm hayatını Spring'in yönetmesidir.
Apartmanın merkezi yönetim sistemidir. Her daire sahibi kendi kalorifer kazanını kurmaz; apartman yöneticisi (Spring IoC) merkezi ısıtmayı herkese bağlar.
Spring IoC Container, uygulamanın nesnelerini (Bean) oluşturan, yapılandıran ve bağımlılıklarını (@Autowired ile) yöneten mekanizmadır. Varsayılan scope Singleton'dır. @PostConstruct ile başlatma, @PreDestroy ile kaynak temizleme adımları yönetilir.
Spring @Transactional Proxy Mekanizması & Rollback
Metot içindeki bir veritabanı işlemi patlarsa yapılan her şeyi sessizce geri sarmaktır.
ATM'den para çekerken parayı vermeden önce sistemin elektriklerinin kesilmesi halinde hesabından düşen paranın anında hesaba iade edilmesidir.
@Transactional, veritabanı işlemlerini atomik bir birim haline getirir. Spring arka planda Dynamic Proxy oluşturarak metodu sarar. Aynı sınıf içindeki bir metodun diğerini çağırmasında (self-invocation) proxy atlandığı için @Transactional çalışmaz!
Node.js Event Loop & Libuv Çalışma Evreleri
Tek bir iş parçacığının (Single Thread) binlerce isteği hiç tıkanmadan koordine etme sırrıdır.
Döner kapıdan sürekli geçen insanları yönlendiren tek bir resepsiyon görevlisidir. Pasaport bekleyenleri bekleme odasına (Libuv Threadpool) yollar, hazır olanın evrakını anında teslim eder.
Node.js tek iş parçacıklı bir Event Loop modeli üzerine kuruludur. Non-blocking I/O operasyonlarını işletim sistemi kernel'ına veya Libuv iş parçacığı havuzuna devreder. Ağır CPU işlemleri (örneğin döngüde hash hesaplama) Event Loop'u bloke eder ve tüm istekleri dondurur.
Cluster Module vs Worker Threads
Cluster: Fabrikanın aynısından yan yana 4 tane kurmak. Worker Threads: Tek fabrikanın içine 4 işçi almak.
Cluster: Bilgisayardaki her CPU çekirdeği için bağımsız bir Node.js kopyası açmaktır (hafıza paylaşmazlar). Worker Thread: Tek bir Node.js kopyası içinde paylaşımlı hafıza (SharedArrayBuffer) ile çalışan işçilerdir.
Cluster modülü çok çekirdekli sunucularda HTTP isteklerini process düzeyinde yük dengelemek (Load Balancing) için kullanılır. Worker Threads ise tek bir process içinde CPU-yoğun matematiksel hesaplamaları Event Loop'u kilitlemeden paralel yürütmek için kullanılır.
Mülakat Akışı
Tümü →Adayların dün girdikleri mülakatlarda karşılaştıkları gerçek sorular: