iOS Geliştirici Mülakat Soruları ve Cevapları: Teknik ve Teorik Hazırlık Rehberi
IOS Mülakat Süreçleri ve Teknik Beklentiler
Apple ekosisteminde uygulama geliştirmek, sadece kod yazmayı değil, aynı zamanda Apple'ın katı tasarım kılavuzlarına (Human Interface Guidelines) ve performans standartlarına hakim olmayı gerektirir. Bir iOS geliştirici mülakatı ekseriyetle üç ana aşamadan oluşur: Teorik bilgi sorgulama, canlı kodlama (live coding) ve sistem tasarımı.
İşe alım uzmanları ve teknik liderler, adayın sadece dili (Swift) bilip bilmediğine değil, aynı zamanda bellek yönetimini nasıl optimize ettiğine, hangi mimari desenleri neden tercih ettiğine ve hata ayıklama (debugging) yeteneklerine odaklanır. Mülakat öncesinde hazırladığınız Cv belgesinin, teknik yetkinliklerinizi ve tamamladığınız projeleri net bir şekilde yansıtması, teknik mülakata geçiş aşamasında kritik rol oynar.
İŞ ARAMAK ZOR, BİZ KOLAYLAŞTIRIYORUZ
Tanıdık geldi mi? Hepsini çözdük.
- İşe alım sistemleri CV'ni okuyamıyor
- Hangi anahtar kelimelerin eksik olduğunu bilmiyorsun
- Mülakatta ne sorulacağını tahmin edemiyorsun
- Başvurularını takip edecek bir sistemin yok
- 1-100 canlı ATS skoru — işveren kriterlerine göre
- JD eşleştirme ile eksik anahtar kelimeleri anında gör
- CV'ne özel mülakat sorularıyla prova yap
- Kanban panosu ile tüm başvurularını takip et
Swift Temelleri: Mülakatlarda En Çok Sorulan Sorular
Swift, modern ve güvenli bir dil olduğu için mülakatların ilk bölümü genellikle dilin temel yapı taşları üzerine kuruludur. İşte en sık karşılaşılan sorular ve detaylı yanıtları:
Swift'te 'Optional' Kavramı Nedir ve Nasıl Yönetilir?
Optional'lar, bir değişkenin bir değere sahip olabileceğini veya 'nil' (boş) olabileceğini belirten bir yapıdır. Swift'in tip güvenliğini artırmak için getirdiği bu özellik, çalışma zamanı çökmelerini (runtime crashes) önlemeyi amaçlar.
CV'ni saniyeler içinde ATS-uyumlu yap.
Özellikleri keşfetOptional değerleri güvenli bir şekilde açmak (unwrap) için şu yöntemler kullanılır:
- Optional Binding:
If letveyaGuard letyapıları ile değerin varlığı kontrol edilir. - Nil Coalescing:
??operatörü ile değer nil ise varsayılan bir değer atanır. - Force Unwrapping:
!operatörü ile değerin kesinlikle var olduğu varsayılır (riskli bir yöntemdir).
Struct ve Class Arasındaki Farklar Nelerdir?
Bu soru, iOS mülakatlarının klasiklerinden biridir. Temel fark, bellek yönetimi ve veri aktarım yöntemidir:
- Struct (Value Type): Değer tipidir. Bir struct'ı başka bir değişkene atadığınızda verinin bir kopyası oluşturulur. Stack bellekte tutulurlar ve daha performanslıdırlar.
- Class (Reference Type): Referans tipidir. Bir class örneğini başka bir değişkene atadığınızda, her iki değişken de bellekteki aynı nesneye işaret eder. Heap bellekte tutulurlar ve kalıtımı (inheritance) desteklerler.
Closure Nedir ve 'escaping' Ne Anlama Gelir?
Closure'lar, fonksiyon benzeri bloklardır ve değişken olarak atanabilir veya başka fonksiyonlara parametre olarak gönderilebilirler. @escaping belirteci, bir closure'ın fonksiyonun gövdesi tamamlandıktan sonra da çalışmaya devam edeceği durumlarda kullanılır. Örneğin, bir API isteği yapıldığında, cevap geldiğinde çalışacak olan completion handler'lar çoğunlukla escaping'dir.
Bellek Yönetimi ve ARC (Automatic Reference Counting)
IOS geliştirmede performansın anahtarı bellek yönetimidir. Mülakatçıların en çok üzerinde durduğu konu, bellek sızıntılarını (memory leaks) nasıl önlediğinizdir.
ARC Nasıl Çalışır?
ARC, Swift'in referans tipli nesnelerin ömrünü yönetmek için kullandığı mekanizmadır. Bir nesneye yapılan referans sayısı arttıkça referans sayacı yükselir; referanslar kaldırıldığında ise sayaç düşer. Sayaç sıfıra ulaştığında, nesne bellekten otomatik olarak silinir.
Strong, Weak ve Unowned Referanslar
Bellek döngülerini (retain cycles) önlemek için farklı referans türleri kullanılır:
- Strong: Varsayılan referans tipidir. Nesnenin bellekten silinmesini engeller.
- Weak: Nesneye referans verir ancak referans sayacını artırmaz. Nesne silindiğinde otomatik olarak nil olur. Genellikle delegasyon (delegation) deseninde kullanılır.
- Unowned: Weak'e benzer ancak değerin asla nil olmayacağı garanti edildiğinde kullanılır. Eğer unowned bir referans nil olursa uygulama çöker.
Modern UI Frameworkleri: SwiftUI ve UIKit
Günümüzde birçok şirket hibrit bir yapı kullanmakta veya tamamen SwiftUI'a geçmektedir. Her iki framework'ün de çalışma prensiplerini bilmek sizi öne çıkarır.
SwiftUI ve UIKit Arasındaki Temel Farklar
UIKit, "Imperative" (Emredici) bir yaklaşıma sahiptir. Yani, UI elemanlarını nasıl değiştireceğinizi adım adım söylersiniz (Örn: Butona tıklandığında label'ın rengini kırmızı yap).
SwiftUI ise "Declarative" (Bildirimsel) bir yaklaşımdır. UI'ın nasıl görünmesi gerektiğini tanımlarsınız ve durum (state) değiştiğinde SwiftUI arayüzü otomatik olarak günceller.
State Management (Durum Yönetimi) Teknikleri
SwiftUI'da veri akışını yönetmek için kullanılan temel property wrapper'lar şunlardır:
- @State: Basit, yerel durum yönetimi için kullanılır.
- @Binding: Bir üst görünümden gelen veriyi değiştirmek için kullanılır.
- @ObservedObject: Class tabanlı modelleri izlemek için kullanılır.
- @StateObject: Nesnenin yaşam döngüsünü görünümle eşitlemek için kullanılır.
- @EnvironmentObject: Uygulama genelinde paylaşılan verilere erişmek için kullanılır.
IOS Mimari Desenleri (Architecture Patterns)
Sadece kod yazmak yetmez; kodun sürdürülebilir, test edilebilir ve modüler olması gerekir. Mülakatlarda hangi mimariyi kullandığınız ve nedenini açıklamanız beklenir.
MVC (Model-View-Controller)
Apple'ın geleneksel mimarisidir. Ancak projeler büyüdükçe Controller sınıfı çok şiştiği için "Massive View Controller" problemi ortaya çıkar. Bu durum, iş mantığının (business logic) View katmanına kaymasına neden olur.
MVVM (Model-View-ViewModel)
Modern iOS geliştirmenin standartlarından biridir. ViewModel, View ile Model arasındaki köprüdür. İş mantığını Controller'dan ayırarak View'ın sadece görselleştirme ile ilgilenmesini sağlar. SwiftUI ile mükemmel bir uyum içerisindedir.
Clean Architecture ve VIPER
Çok büyük ölçekli projelerde kullanılan, sorumlulukların tamamen ayrıldığı mimarilerdir. VIPER (View, Interactor, Presenter, Entity, Router), her parçanın tek bir görevi olduğu, test edilebilirliğin en üst düzeye çıktığı bir yapıdır.
İleri Seviye Teknik Konular ve Optimizasyon
Kıdemli pozisyonlar için mülakatlar daha derin teknik detaylara iner. Concurrency (eşzamanlılık) ve network yönetimi burada kritik rol oynar.
GCD (Grand Central Dispatch) vs Swift Concurrency (Async/Await)
IOS'ta aynı anda birden fazla işi yapmak (örneğin arka planda veri indirip ana ekranda göstermek) için iki ana yol vardır:
- GCD: Kuyruklar (DispatchQueue) üzerinden çalışır.
DispatchQueue.main.asyncgibi yapılarla ana thread yönetilir. - Async/Await: Swift 5.5 ile gelen modern yapıdır. Callback hell (iç içe closure'lar) sorununu çözer ve kodu senkronmuş gibi okunabilir kılar.
URLSession ve API Yönetimi
Veri çekme işlemleri için URLSession standarttır. Mülakatlarda Generic yapılar kullanarak nasıl esnek bir Network Layer oluşturduğunuz sorulabilir. JSON verilerini modele dönüştürmek için Codable protokolünün kullanımı temel bir gerekliliktir.
Algoritma ve Problem Çözme Yaklaşımı
Birçok şirket, teknik mülakatın bir kısmında LeetCode tarzı algoritma soruları sorar. Burada önemli olan doğru cevaba ulaşmaktan ziyade, düşünme sürecinizi yüksek sesle paylaşmanızdır.
Bir problemle karşılaştığınızda şu adımları izleyin:
- Soruyu Netleştirin: Eksik parametreler var mı? Giriş ve çıkış değerleri neler olmalı?
- Kaba Taslak Çözüm: Hemen kod yazmaya başlamayın. Önce mantığı (pseudocode) kurun.
- Karmaşıklık Analizi: Çözümünüzün Time Complexity (Zaman Karmaşıklığı) ve Space Complexity (Alan Karmaşıklığı) değerlerini (Big O notation) belirtin.
- Optimizasyon: İlk çözümünüz çalıştıktan sonra, "Bunu daha performanslı nasıl yapabilirim?" sorusuna odaklanın.
Mülakat Hazırlık Süreci ve Portfolyo
Teknik bilgi kadar, bu bilgiyi nasıl sunduğunuz da önemlidir. İK uzmanlarının dikkatini çekmek için stratejik bir hazırlık yapmalısınız.
Etkili Bir Yazılım CV'si Nasıl Olmalı?
Bir iOS geliştiricinin Cv belgesi, sadece deneyimlerini değil, teknik yetkinliklerini de kanıtlamalıdır. Projeleriniz için GitHub linkleri eklemek, kullandığınız kütüphaneleri (Alamofire, Combine, RxSwift vb.) belirtmek ve başarılarınızı (örneğin: "Uygulama açılış hızını %20 artırdım") rakamlarla ifade etmek sizi öne çıkarır.
Eğer profesyonel bir görünüm arıyorsanız, modern ve sade bir Cv şablon seçimi yaparak okunabilirliği artırabilirsiniz. Karmaşık tasarımlar yerine, teknik yeteneklerin ve projelerin ön planda olduğu şablonlar tercih edilmelidir.
GitHub ve Portfolyo Yönetimi
Kod kaliteniz, mülakatçının sizin hakkınızdaki en net fikrini edinmesini sağlar. GitHub profilinizde şunlara dikkat edin:
- README Dosyaları: Projenin ne işe yaradığını, hangi teknolojilerin kullanıldığını ve nasıl çalıştırılacağını açıklayan detaylı README dosyaları oluşturun.
- Kod Standartları: İsimlendirme kurallarına (camelCase) uyun ve gereksiz yorum satırlarından kaçının.
- Modülerlik: Kodunuzu parçalara ayırın; tek bir dosyada yüzlerce satır kod yazmak kötü bir izlenim bırakır.
Sıkça Sorulan Davranışsal Sorular
Teknik yetkinlik kadar "soft skill" dediğimiz sosyal beceriler de değerlendirilir. Bu sorulara STAR (Situation, Task, Action, Result) yöntemiyle cevap vermeniz önerilir.
"Bir teknik anlaşmazlık yaşadığınızda nasıl çözersiniz?"
Burada mülakatçı, egonuzu nasıl yönettiğinizi ve ortak paydada nasıl buluştuğunuzu anlamaya çalışır. "Veriye dayalı karar verme" ve "açık iletişim" anahtar kelimelerini kullanın. Örnek: "Bir mimari seçiminde farklı fikirdeydik, her iki yöntemin artılarını ve eksilerini listeleyip küçük bir PoC (Proof of Concept) yaparak performans testleri sonucunda ortak karara vardık."
"En zorlandığınız teknik problem neydi ve nasıl çözdünüz?"
Bu soru, problem çözme yeteneğinizi ve öğrenme azminizi ölçer. Sorunu tanımlayın, denediğiniz başarısız yöntemleri anlatın ve sonunda nasıl bir çözüm bulduğunuzu açıklayın. Bu süreçte kullandığınız debug araçlarından (Instruments, LLDB) bahsetmek teknik derinliğinizi gösterir.
Özet ve Son Tavsiyeler
IOS geliştirici mülakatları, hem derinlemesine dil bilgisi hem de geniş bir ekosistem hakimiyeti gerektirir. Swift'in temellerinden başlayarak, bellek yönetimi, modern UI frameworkleri ve mimari desenler üzerinde uzmanlaşmak sizi rekabette öne taşır.
Hazırlık sürecinizde sadece teorik okumalar yapmayın; küçük projeler geliştirin, mevcut projelerinizi refactor edin ve kod inceleme (code review) süreçlerine dahil olun. En iyi öğrenme yolu, karşılaşılan hataları çözmektir. Teknik hazırlığınızı tamamladıktan sonra, yetkinliklerinizi en iyi şekilde yansıtan bir Cv oluştur aşamasına geçerek hayalinizdeki işe bir adım daha yaklaşabilirsiniz.
Başarılar dileriz!
ATS uyumlu CV'ni dakikalar içinde hazırla.
Ücretsiz Başla