Tüm Yazılar
KategoriCareer
Okuma Süresi
28 dk okuma
Yayın Tarihi
...
Kelime Sayısı
2.282kelime

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

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

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ı

Senior iOS Developer

12+ yıllık deneyime sahip iOS Developer. Swift, SwiftUI ve modern iOS mimarileri konusunda uzman. Apple platformlarında performanslı ve kullanıcı dostu 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ş

Bunu da begenebilirsiniz