# iOS Mulakat Hazirlik Rehberi: Junior'dan Senior'a
iOS developer mulakatlari, teknik bilgi, problem cozme yetkinligi ve iletisim becerisinin birlesimini olcer. Ister ilk isinize basvuruyor olun, ister senior pozisyona gecis yapin - bu rehber sizi hazirlamak icin tasarlandi. Gercek mulakat sorulari, beklenen cevaplar ve pratik ipuclari ile donatilmis kapsamli bir kaynak.
Deneyim: Bu rehber, 50+ iOS mulakati yapan ve 100+ adayla gorusen birinin tecrubelerine dayanmaktadir.
Icindekiler
- Mulakat Sureci
- Swift Temelleri
- UIKit Sorulari
- SwiftUI Sorulari
- Concurrency
- Memory Management
- Mimari ve Design Patterns
- Networking
- Sistem Tasarimi
- Davranissal Sorular
- Kod Challange Ipuclari
- Sonuc ve Oneriler
1. Mulakat Sureci
Tipik bir iOS mulakat sureci:
Asama | Sure | Icerik | Hazirlik |
|---|---|---|---|
**Phone Screen** | 30-45 dk | Temel teknik + motivasyon | CV + temel sorular |
**Technical 1** | 60 dk | Swift + framework bilgisi | Bu rehber |
**Coding Challenge** | 60-90 dk | Canli kodlama | LeetCode + HackerRank |
**System Design** | 45-60 dk | Uygulama mimarisi | Sistem tasarim ornekleri |
**Behavioral** | 30-45 dk | Takim calismasi, liderlik | STAR metodu |
**Culture Fit** | 30 dk | Sirket uyumu | Sirket arastirmasi |
Seviyeye Gore Beklentiler
Konu | Junior (0-2 yil) | Mid (2-5 yil) | Senior (5+ yil) |
|---|---|---|---|
**Swift** | Syntax, optionals, protocols | Generics, PAT, closures | Macros, type system, compiler |
**UI** | Temel layout, navigation | Custom components, animations | Performance, accessibility |
**Mimari** | MVC biliyor | MVVM uygulamis | Clean Arch, modularizasyon |
**Concurrency** | async/await kullanmis | Actor, TaskGroup | Lock-free, distributed |
**Test** | Unit test yazmis | TDD uygulamis | Test stratejisi tasarlamis |
**CI/CD** | Kullanmis | Kurup yapilandirmis | Tasarlamis ve optimize etmis |
2. Swift Temelleri
S: Value type ile reference type farki nedir?
swift
1// Value type - kopyalanir2struct Point {3 var x: Double4 var y: Double5}6 7var p1 = Point(x: 1, y: 2)8var p2 = p1 // KOPYA9p2.x = 1010print(p1.x) // 1 (degismedi)11print(p2.x) // 1012 13// Reference type - referans paylasilir14class Node {15 var value: Int16 init(value: Int) { self.value = value }17}18 19let n1 = Node(value: 1)20let n2 = n1 // AYNI REFERANS21n2.value = 1022print(n1.value) // 10 (degisti!)Mulakatta beklenen cevap: Struct'lar stack'te, class'lar heap'te tutulur (cogunlukla). Struct kopyalanir (COW optimizasyonu ile), class referans paylasilir. Protocol-oriented programming'de struct tercih edilir.
S: Optional nedir ve kac cesit unwrap vardir?
swift
1var name: String? = "Ali"2 3// 1. Force unwrap (TEHLIKELI)4let forced = name!5 6// 2. Optional binding (if let)7if let unwrapped = name {8 print(unwrapped)9}10 11// 3. Guard let (early exit)12guard let safeName = name else { return }13print(safeName)14 15// 4. Nil coalescing16let displayName = name ?? "Misafir"17 18// 5. Optional chaining19let count = name?.count // Int?20 21// 6. Map / flatMap22let uppercased = name.map { item in item.uppercased() } // String?S: Protocol ile Abstract Class farki?
Cevap: Swift'te abstract class yoktur. Protocol, blueprint tanimlar ve multiple conformance destekler. Protocol extension ile default implementasyon verilebilir. Class inheritance tek, protocol conformance coklu.
S: @escaping closure nedir?
swift
1// Non-escaping: fonksiyon bitince closure da biter2func syncOperation(completion: () -> Void) {3 completion()4}5 6// Escaping: closure fonksiyon bittikten SONRA calisabilir7func asyncOperation(completion: @escaping() -> Void) {8 DispatchQueue.main.asyncAfter(deadline: .now() + 1) {9 completion() // Fonksiyon coktan bitti, closure hala yasiyor10 }11}3. UIKit Sorulari
S: UIView lifecycle nedir?
swift
1class CustomView: UIView {2 // 1. Olusturma3 override init(frame: CGRect) { super.init(frame: frame) }4 required init?(coder: NSCoder) { super.init(coder: coder) }5 6 // 2. Layout7 override func layoutSubviews() {8 super.layoutSubviews()9 // Frame-based layout hesaplamalari10 }11 12 // 3. Cizim13 override func draw(_ rect: CGRect) {14 // Custom drawing (Core Graphics)15 }16 17 // 4. Trait degisikligi18 override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {19 super.traitCollectionDidChange(previousTraitCollection)20 // Dark mode, size class degisikligi21 }22}S: UITableView / UICollectionView optimizasyonu?
Cevap: Cell reuse, prefetching, otomatik boyutlandirma icin estimatedRowHeight, asenkron gorsel yukleme, diffable data source, compositional layout.
4. SwiftUI Sorulari
S: @State, @Binding, @StateObject, @ObservedObject farki?
swift
1struct ParentView: View {2 @State private var count = 0 // Sahiplik burada3 @StateObject private var vm = MyVM() // ViewModel sahipligi4 5 var body: some View {6 ChildView(count: $count, vm: vm) // Referans gecir7 }8}9 10struct ChildView: View {11 @Binding var count: Int // Disaridan gelen state referansi12 @ObservedObject var vm: MyVM // Disaridan gelen ViewModel13 @Environment(\.colorScheme) var scheme // Cevre degiskeni14 15 var body: some View {16 Text("Count: \(count)")17 }18}Kritik fark: @StateObject SADECE ilk olusturmada init cagrilir, view yeniden olusturulsa bile. @ObservedObject her view olusturmada YENiDEN init edilebilir - bu yuzden sahiplik (ownership) parent'ta olmalidir.
5. Concurrency
S: Actor nedir ve neden onemlidir?
swift
1// Data race ornegi (TEHLIKELI)2class UnsafeCounter {3 var value = 04 func increment() { value += 1 }5}6 7// Actor ile guvenli (DOGRU)8actor SafeCounter {9 var value = 010 func increment() { value += 1 }11 func getValue() -> Int { value }12}13 14// Kullanim15let counter = SafeCounter()16await counter.increment() // await zorunlu17let val = await counter.getValue()S: Task, TaskGroup ve structured concurrency?
swift
1// Structured concurrency2func fetchDashboard() async throws -> Dashboard {3 async let profile = fetchProfile()4 async let orders = fetchOrders()5 async let notifications = fetchNotifications()6 7 return try await Dashboard(8 profile: profile,9 orders: orders,10 notifications: notifications11 )12}13 14// TaskGroup ile dinamik parallelism15func fetchAllPages() async throws -> [Page] {16 try await withThrowingTaskGroup(of: Page.self) { group in17 for i in 1...10 {18 group.addTask {19 try await self.fetchPage(i)20 }21 }22 23 var pages: [Page] = []24 for try await page in group {25 pages.append(page)26 }27 return pages.sorted { a, b in a.number < b.number }28 }29}Easter Egg
Gizli bir bilgi buldun!
Bu bölümde gizli bir bilgi var. Keşfetmek ister misin?
6. Memory Management
S: ARC nasil calisir? Retain cycle nedir?
swift
1// Retain cycle ornegi2class ViewController {3 var onComplete: (() -> Void)?4 5 func setup() {6 // HATALI: self'i strong capture eder7 onComplete = {8 self.updateUI() // retain cycle!9 }10 11 // DOGRU: weak capture12 onComplete = { [weak self] in13 guard let self else { return }14 self.updateUI()15 }16 }17 18 func updateUI() { }19}20 21// Delegate pattern'de weak kullanimi22protocol DataDelegate: AnyObject {23 func didReceiveData(_ data: Data)24}25 26class DataManager {27 weak var delegate: DataDelegate? // WEAK olmali28}Memory Debugging Araclari
Arac | Kullanim | Ne Zaman |
|---|---|---|
**Instruments - Leaks** | Retain cycle tespiti | Memory artan senaryo |
**Instruments - Allocations** | Bellek kullanim analizi | Genel profiling |
**Memory Graph Debugger** | Gorsel referans grafi | Specific leak bulma |
**Zombie Objects** | Deallocated obje erisimi | EXC_BAD_ACCESS |
7. Mimari ve Design Patterns
S: MVC, MVVM, VIPER, TCA farklari?
Mimari | Karmasiklik | Test Edilebilirlik | Ogrenme Egrisi | Kullanim |
|---|---|---|---|---|
**MVC** | Dusuk | Dusuk | Kolay | Kucuk projeler |
**MVVM** | Orta | Iyi | Orta | Orta projeler |
**VIPER** | Yuksek | Cok iyi | Zor | Buyuk projeler |
**TCA** | Yuksek | Mukemmel | Zor | SwiftUI + state management |
**Clean** | Yuksek | Cok iyi | Zor | Enterprise |
S: Dependency Injection nedir?
swift
1// Constructor injection (en yaygin)2class UserService {3 private let repository: UserRepository4 private let validator: UserValidator5 6 init(repository: UserRepository, validator: UserValidator) {7 self.repository = repository8 self.validator = validator9 }10}11 12// Test'te mock kullanimi13let mockRepo = MockUserRepository()14let service = UserService(repository: mockRepo, validator: RealValidator())8. Networking
S: URLSession ile API call nasil yapilir?
swift
1// Modern async/await yaklasimi2func fetchUser(id: String) async throws -> User {3 let url = URL(string: "https://api.example.com/users/" + id)!4 var request = URLRequest(url: url)5 request.httpMethod = "GET"6 request.addValue("application/json", forHTTPHeaderField: "Content-Type")7 8 let (data, response) = try await URLSession.shared.data(for: request)9 10 guard let httpResponse = response as? HTTPURLResponse,11 (200...299).contains(httpResponse.statusCode) else {12 throw NetworkError.invalidResponse13 }14 15 return try JSONDecoder().decode(User.self, from: data)16}9. Sistem Tasarimi
Senior mulakatlarda sik sorulan soru: "X uygulamasini nasil tasarlarsiniz?"
Ornek: Twitter benzeri bir uygulamanin mimari tasarimi
Adimlari:
- Gereksinimleri netlestirin (scope)
- Yuksek seviye mimari cizin
- Veri modellerini tanimlayin
- API tasarlayim
- Onbellekleme stratejisi
- Offline destek
- Performance optimizasyonu
Sistem Tasarimi Degerlendirme Kriterleri
Kriter | Aciklama | Ornek |
|---|---|---|
**Scalability** | Buyuyen veriyle basa cikma | Pagination, lazy loading |
**Offline** | Internet olmadan calisma | Core Data, cache |
**Performance** | Hizli yuklenme | Image cache, prefetch |
**Security** | Veri guvenligi | Keychain, SSL pinning |
**Testability** | Test edilebilirlik | DI, protocol abstraction |
**Accessibility** | Erisebilirlik | VoiceOver, Dynamic Type |
10. Davranissal Sorular
STAR metodu ile cevaplayin: Situation, Task, Action, Result.
Ornek sorular:
- "Zor bir teknik karar verdiginiz bir durumu anlatin"
- "Takim icinde anlasmazlik yasadiginiz bir an"
- "Deadline'a yetisemeyeceginizi farkettiginiz bir proje"
- "Basindan beri yanlis yapildigini fark ettiginiz bir sey"
11. Kod Challenge Ipuclari
Adim Adim Yaklasim
- Anlama: Soruyu tekrarlayin, orneklerle dogrulayin
- Planlama: Brute-force cozum sonra optimizasyon
- Kodlama: Temiz, okunabilir kod yazin
- Test: Edge case'leri dusunun
- Optimizasyon: Zaman ve alan karmasikligi
Sik Sorulan Konular
Konu | Ornek | Siklik |
|---|---|---|
**Array/String** | Two sum, palindrome | Cok sik |
**Linked List** | Reverse, cycle detection | Sik |
**Tree** | BFS, DFS, invert | Sik |
**Stack/Queue** | Valid parentheses | Orta |
**Dynamic Prog.** | Fibonacci, knapsack | Bazen |
**Graph** | Shortest path | Senior'da |
12. Sonuc ve Oneriler
Haftalik Calisma Plani
Gun | Konu | Sure |
|---|---|---|
Pazartesi | Swift temelleri + Protocol | 2 saat |
Sali | UIKit/SwiftUI sorulari | 2 saat |
Carsamba | Concurrency + Memory | 2 saat |
Persembe | Mimari + Design Patterns | 2 saat |
Cuma | Kod challenge (LeetCode) | 2 saat |
Cumartesi | Sistem tasarimi | 3 saat |
Pazar | Mock mulakat + review | 2 saat |
Son Tavsiyeler
- Portfolio projesi olusturun (GitHub'da gorunur olsun)
- Acik kaynak projelere katkin
- Blog yazin veya konusma yapin
- Networking yapin (meetup, konferans)
- Mock mulakat pratigi yapin
- Soruyu anlamadiginizda sormaktan cekiNMEyin
- Whiteboard'da dusunce surecinizi sesli paylasIN
ALTIN İPUCU
Bu yazının en değerli bilgisi
Bu ipucu, yazının en önemli çıkarımını içeriyor.
Okuyucu Ödülü
Tebrikler! Bu yazıyı sonuna kadar okuduğun için sana özel bir hediyem var:
Sonuç ve Öneriler
iOS mulakat sureci teknik bilgi kadar iletisim becerisi, problem cozme yaklasimi ve mimari dusunce yapisi gerektiren cok katmanli bir degerlendirmedir. Swift dilinin temellerinden concurrency modeline, UIKit'ten SwiftUI'ya, MVVM'den Clean Architecture'a kadar genis bir yelpazede hazirlikli olmaniz gerekir. Ancak her seyi ezberlemeye calismak yerine, temel kavramlari derinlemesine anlayin ve bunlari gercek projelerde nasil uyguladiginizi anlatabilecek seviyeye gelin.
Mulakat hazirliginda en etkili strateji, sistematik ve tutarli bir calisma plani olusturmaktir. Haftanin her gunune farkli bir konu atamak — ornegin Pazartesi Swift temelleri, Sali mimari, Carsamba algoritma — bilgiyi dengeli sekilde pekistirir. Mock mulakat pratigi yapmak, ozellikle sesli dusunme ve whiteboard kodlama konusunda ozguven kazanmanizi saglar. Unutmayin: mulakatcilar cozumunuz kadar dusunce surecinizi de degerlendiriyor.
Son olarak, teknik hazirligin otesinde kisisel markanizi guclendirmeyi ihmal etmeyin. GitHub'da gorunur bir portfolio projesi, teknik blog yazilari ve acik kaynak katkilar sizi diger adaylardan ayiran unsurlardir. Mulakatta basarisiz olsaniz bile her deneyimi bir ogrenme firsati olarak degerlendirin — hangi konularda eksik kaldiginizi not edin ve bir sonraki mulakat icin o alanlara odaklanin.

