Tüm Yazılar
KategoriCareer
Okuma Süresi
28 dk
Yayın Tarihi
2025-09-10
Kelime Sayısı
2.282kelime

Kahveni hazırla - bu içerikli bir makale!

iOS Mulakat Hazirlik Rehberi: Junior'dan Senior'a

Özet

iOS developer mulakat sorulari ve cevaplari. Swift temelleri, UIKit/SwiftUI, mimari, concurrency, memory management ve sistem tasarimi.

  • Mulakat sureci: Phone Screen, Technical, Coding Challenge, System Design, Behavioral asamalari.
  • Value type (struct) kopyalanir, reference type (class) referans paylasir; POP'ta struct tercih edilir.
  • @StateObject ilk olusturmada bir kez init edilir, @ObservedObject her seferinde yeniden init olabilir.
  • MVC, MVVM, VIPER, TCA, Clean Architecture karmasiklik ve test edilebilirlik acisindan karsilastirilir.
iOS Mulakat Hazirlik Rehberi: Junior'dan Senior'a

# 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


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 - kopyalanir
2struct Point {
3 var x: Double
4 var y: Double
5}
6 
7var p1 = Point(x: 1, y: 2)
8var p2 = p1 // KOPYA
9p2.x = 10
10print(p1.x) // 1 (degismedi)
11print(p2.x) // 10
12 
13// Reference type - referans paylasilir
14class Node {
15 var value: Int
16 init(value: Int) { self.value = value }
17}
18 
19let n1 = Node(value: 1)
20let n2 = n1 // AYNI REFERANS
21n2.value = 10
22print(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 coalescing
16let displayName = name ?? "Misafir"
17 
18// 5. Optional chaining
19let count = name?.count // Int?
20 
21// 6. Map / flatMap
22let 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 biter
2func syncOperation(completion: () -> Void) {
3 completion()
4}
5 
6// Escaping: closure fonksiyon bittikten SONRA calisabilir
7func asyncOperation(completion: @escaping () -> Void) {
8 DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
9 completion() // Fonksiyon coktan bitti, closure hala yasiyor
10 }
11}

3. UIKit Sorulari

S: UIView lifecycle nedir?

swift
1class CustomView: UIView {
2 // 1. Olusturma
3 override init(frame: CGRect) { super.init(frame: frame) }
4 required init?(coder: NSCoder) { super.init(coder: coder) }
5 
6 // 2. Layout
7 override func layoutSubviews() {
8 super.layoutSubviews()
9 // Frame-based layout hesaplamalari
10 }
11 
12 // 3. Cizim
13 override func draw(_ rect: CGRect) {
14 // Custom drawing (Core Graphics)
15 }
16 
17 // 4. Trait degisikligi
18 override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
19 super.traitCollectionDidChange(previousTraitCollection)
20 // Dark mode, size class degisikligi
21 }
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 burada
3 @StateObject private var vm = MyVM() // ViewModel sahipligi
4 
5 var body: some View {
6 ChildView(count: $count, vm: vm) // Referans gecir
7 }
8}
9 
10struct ChildView: View {
11 @Binding var count: Int // Disaridan gelen state referansi
12 @ObservedObject var vm: MyVM // Disaridan gelen ViewModel
13 @Environment(\.colorScheme) var scheme // Cevre degiskeni
14 
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 = 0
4 func increment() { value += 1 }
5}
6 
7// Actor ile guvenli (DOGRU)
8actor SafeCounter {
9 var value = 0
10 func increment() { value += 1 }
11 func getValue() -> Int { value }
12}
13 
14// Kullanim
15let counter = SafeCounter()
16await counter.increment() // await zorunlu
17let val = await counter.getValue()

S: Task, TaskGroup ve structured concurrency?

swift
1// Structured concurrency
2func 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: notifications
11 )
12}
13 
14// TaskGroup ile dinamik parallelism
15func fetchAllPages() async throws -> [Page] {
16 try await withThrowingTaskGroup(of: Page.self) { group in
17 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 ornegi
2class ViewController {
3 var onComplete: (() -> Void)?
4 
5 func setup() {
6 // HATALI: self'i strong capture eder
7 onComplete = {
8 self.updateUI() // retain cycle!
9 }
10 
11 // DOGRU: weak capture
12 onComplete = { [weak self] in
13 guard let self else { return }
14 self.updateUI()
15 }
16 }
17 
18 func updateUI() { }
19}
20 
21// Delegate pattern'de weak kullanimi
22protocol DataDelegate: AnyObject {
23 func didReceiveData(_ data: Data)
24}
25 
26class DataManager {
27 weak var delegate: DataDelegate? // WEAK olmali
28}

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: UserRepository
4 private let validator: UserValidator
5 
6 init(repository: UserRepository, validator: UserValidator) {
7 self.repository = repository
8 self.validator = validator
9 }
10}
11 
12// Test'te mock kullanimi
13let mockRepo = MockUserRepository()
14let service = UserService(repository: mockRepo, validator: RealValidator())

8. Networking

S: URLSession ile API call nasil yapilir?

swift
1// Modern async/await yaklasimi
2func 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.invalidResponse
13 }
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:

  1. Gereksinimleri netlestirin (scope)
  2. Yuksek seviye mimari cizin
  3. Veri modellerini tanimlayin
  4. API tasarlayim
  5. Onbellekleme stratejisi
  6. Offline destek
  7. 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

  1. Anlama: Soruyu tekrarlayin, orneklerle dogrulayin
  2. Planlama: Brute-force cozum sonra optimizasyon
  3. Kodlama: Temiz, okunabilir kod yazin
  4. Test: Edge case'leri dusunun
  5. 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.

Etiketler

#Interview#Career#Swift#iOS#System Design#Architecture#Tips
Muhittin Çamdalı

Muhittin Çamdalı

Lead Mobile Engineer

12+ yıllık deneyime sahip Lead Mobile Engineer. Swift, SwiftUI, Kotlin ve Flutter ile iOS, Android ve cross-platform mimarilerde uzman. Performanslı ve kullanıcı dostu mobil uygulamalar geliştiriyorum.

iOS Geliştirme Haberleri

Haftalık Swift tips, SwiftUI tricks ve iOS best practices. Spam yok, sadece değerli içerik.

Gizliliğinize saygı duyuyoruz. İstediğiniz zaman abonelikten çıkabilirsiniz.

Paylaş

İlgili İçerik