前言
麵試筆試經驗技巧篇
經驗技巧1 如何巧妙地迴答麵試官的問題2
經驗技巧2 如何迴答技術性問題3
經驗技巧3 如何迴答非技術性問題5
經驗技巧4 如何迴答快速估算類問題5
經驗技巧5 如何迴答算法設計問題6
經驗技巧6 如何迴答係統設計題9
經驗技巧7 如何解決求職中的時間衝突問題11
經驗技巧8 如果麵試問題曾經遇見過,是否要告知麵試官12
經驗技巧9 被企業拒絕後是否可以再申請12
經驗技巧10 如何應對自己不會迴答的問題13
經驗技巧11 如何應對麵試官的“激將法”語言13
經驗技巧12 如何處理與麵試官持不同觀點這個問題14
經驗技巧13 什麼是職場暗語15
經驗技巧14 名企iOS工程師行業訪談錄18
經驗技巧15 iOS開發的前景如何20
經驗技巧16 如何選擇iOS開發語言20
經驗技巧17 React Native 和Weex重要嗎21
經驗技巧18 企業對iOS開發者的要求有哪些22
經驗技巧19 iOS開發招聘有哪些要求24
經驗技巧20 iOS技術崗位麵試精選27
麵試筆試技術攻剋篇
第1章 iOS開發基礎概念35
1.1 概念35
1.1.1 什麼是“應用瘦身”35
1.1.2 什麼是Cocoa和Cocoa Touch36
1.1.3 什麼是謂詞36
1.1.4 什麼是響應者鏈38
1.1.5 什麼是“懶加載”39
1.1.6 類工廠方法是什麼40
1.1.7 App ID和Bundle ID有什麼不同40
1.1.8 什麼是糖衣語法40
1.2 其他43
1.2.1 什麼是SpriteKit和SceneKit43
1.2.2 iOS應用的生命周期迴調方法主要有哪些43
1.2.3 iOS應用有哪幾種不同狀態?分彆錶示什麼含義44
1.2.4 UIButton到NSObject之間的繼承關係是怎樣的45
1.2.5 Git和SVN有什麼異同45
第2章 Objective-C語言基礎47
2.1 Objective-C語言基礎特性47
2.1.1 Objective-C的優缺點有哪些47
2.1.2 相對於Objective-C而言,Swift有什麼新特性48
2.1.3 Foundation對象與Core Foundation對象有什麼區彆52
2.1.4 Objective-C中的類方法和實例方法有什麼本質區彆和聯係53
2.1.5 子類初始化時為什麼要調用self = [super init]54
2.1.6 #import與#include以及#import<>與#import" "各有什麼區彆54
2.1.7 Objective-C中@class代錶什麼54
2.1.8 Objective-C中有二維數組嗎?如何實現55
2.1.9 在Objective-C的數組或字典中,添加nil對象會有什麼問題55
2.1.10 Objective-C中的可變和不可變類型是什麼56
2.2 數據類型57
2.2.1 在Objective-C中,常量有哪幾種類型57
2.2.2 Objective-C中數據類型的限定詞有哪些58
2.2.3 Objective-C中的NSInteger類型和C語言中的int類型有什麼區彆59
2.2.4 NSNumber與NSInteger有什麼區彆59
2.3 運算符和錶達式60
2.3.1 在Objective-C中,前置運算和後置運算有什麼區彆60
2.3.2 整型值和浮點值在賦值操作中如何相互轉換61
第3章 Objective-C語言的高級特性63
3.1 Objective-C中的屬性63
3.2 Objective-C語言的多態性72
3.2.1 什麼叫多態72
3.2.2 重載、重寫和隱藏的區彆是什麼74
3.2.3 Objective-C和Swift中有重載嗎74
3.3 Objective-C語言的動態性75
3.3.1 什麼是編譯時與運行時79
3.3.2 所謂的Objective-C是動態運行時語言是什麼意思79
3.3.3 Objective-C中的id類型指的是什麼?id、nil代錶什麼82
3.3.4 一般的方法method和Objective-C中的選擇器selector有什麼區彆83
3.3.5 什麼時候會報unrecognized selector錯誤83
3.3.6 什麼是目標-動作機製83
3.3.7 在runtime中類與對象如何錶示84
3.3.8 如何打印一個類中所有的實例變量85
3.3.9 如何使用runtime動態添加一個類87
3.3.10 如何在Category中增加屬性(關聯對象)88
3.3.11 如何理解消息傳遞機製89
3.3.12 如何理解消息轉發機製91
3.3.13 isKindOfClass和isMemberOfClass有什麼區彆與聯係94
3.3.14 Objective-C有私有方法嗎?有私有變量嗎94
3.4 Objective-C中的類彆與擴展機製96
3.4.1 類彆與其他特性(類擴展和繼承)有什麼區彆97
3.4.2 Objective-C中類彆特性的作用及其局限性是什麼97
3.4.3 類彆和類擴展如何使用98
3.4.4 為什麼類彆隻能添加擴展方法而不能添加屬性變量101
3.5 Method Swizzling魔法102
3.5.1 Method Swizzling的應用場景有哪些102
3.5.2 如何使用runtime進行方法交換105
3.6 其他問題107
3.6.1 C和Objective-C如何混用107
3.6.2 Swift和Objective-C如何互調107
3.6.3 Objective-C對象可以被copy的條件是什麼109
3.6.4 Objective-C等同性中的字符串相等如何判斷110
3.6.5 一個Objective-C對象如何進行內存布局(考慮有父類的情況)111
第4章 Cocoa Touch框架相關112
4.1 UITableView112
4.1.1 UITableViewCell的復用原理是怎麼樣的112
4.1.2 能否在一個視圖控製器中嵌入兩個tableView控製器114
4.1.3 一個tableView是否可以關聯兩個不同的datasource數據源115
4.1.4 如何對UITableView的滾動加載進行優化,防止卡頓116
4.2 UI視圖117
4.2.1 viewDidLoad和viewDidAppear的區彆是什麼117
4.2.2 frame和bounds有什麼區彆117
4.2.3 masksToBounds屬性是什麼?它有什麼作用118
4.2.4 tintColor 的作用是什麼118
4.2.5 UIViewController的生命周期方法有哪些118
4.2.6 View和View之間的傳值方式有哪些119
4.3 其他問題119
4.3.1 xib和storyboard相比各自的優缺點是什麼119
4.3.2 如何進行iOS 6和iOS 7的適配120
4.3.3 imageNamed和imageWithContentsOfFile有什麼區彆120
4.3.4 UIDevice如何獲取設備信息120
4.3.5 iOS中是如何使用自定義字體的122
第5章 iOS開發中的對象間通信機製125
5.1 iOS中的Protocol和Delegate125
5.2 推送和通知126
5.2.1 什麼是消息推送?和Notification有什麼區彆126
5.2.2 什麼是Notification?什麼時候用Delegate或Notification128
5.2.3 NSNotification是同步還是異步129
5.3 Objective-C中的鍵值編碼和鍵值觀察130
5.3.1 什麼是鍵值編碼KVC?鍵路徑是什麼? 什麼是鍵值觀察KVC130
5.3.2 KVC的應用場景有哪些132
5.3.3 如何運用KVO進行鍵值觀察134
5.3.4 如何使用KVO設置鍵值觀察依賴鍵136
5.3.5 KVO的背後原理是什麼137
5.3.6 setValue:forKey:方法的底層實現是什麼138
5.3.7 NSMutableDictionary中setValue和setObject有什麼區彆139
5.3.8 NSNotification、Delegate、Block和KVO的區彆是什麼140
第6章 iOS中的圖層與動畫142
6.1 圖層142
6.1.1 UIView和CALayer的區彆與聯係是什麼142
6.1.2 什麼是Layer層對象143
6.1.3 如何使用CAShapeLayer繪製圖層146
6.1.4 iOS中如何實現為UIImageView添加圓角148
6.1.5 contentsScale屬性有什麼作用149
6.1.6 如何理解anchorPoint和position的作用150
6.1.7 如何理解drawRect:方法151
6.1.8 如何使用mask屬性實現圖層濛版功能152
6.1.9 如何解決masksToBounds離屏渲染帶來的性能損耗153
6.1.10 QuartzCore和Core Graphics有什麼區彆154
6.2 動畫154
6.2.1 UIView動畫原理是什麼?以UIView類的animateWithDuration方法為例154
6.2.2 什麼是隱式動畫和顯式動畫154
6.2.3 隱式動畫的實現原理是什麼?如何禁用圖層的隱式動畫155
6.2.4 CGAffineTransform和CATransform3D分彆有什麼作用157
6.2.5 CATransition中過渡類型動畫有哪幾種type158
6.2.6 如何使用UIView動畫自定義過渡動畫159
6.2.7 如何理解並使用CAKeyframeAnimation160
6.2.8 如何自定義UIViewController之間的轉場動畫161
6.2.9 如何保持視圖界麵為動畫結束時的狀態164
第7章 iOS中的數據持久化167
7.1 沙盒機製169
7.2 數據持久化方案170
7.2.1 iOS平颱做數據的持久化方式有哪些170
7.2.2 如何使用NSUserDefault偏好設置保存數據170
7.2.3 如何使用NSUserDefault保存自定義對象171
7.2.4 什麼是序列化或者歸檔172
第8章 iOS中的內存管理174
8.1 內存管理174
8.1.1 什麼是內存泄漏?什麼是安全釋放174
8.1.2 僵屍對象、野指針、空指針分彆指什麼?它們有什麼區彆174
8.1.3 Objective-C有GC垃圾迴收機製嗎175
8.1.4 在Objective-C中,與alloc語義相反的方法是dealloc還是release175
8.2 內存管理機製176
8.2.1 當使用block時,什麼情況會發生引用循環?如何解決176
8.2.2 CAAnimation的delegate是強引用還是弱引用176
8.2.3 按照默認法則,哪些關鍵字生成的對象需要手動釋放177
8.2.4 Objective-C是如何實現內存管理的179
8.2.5 如何實現autorealeasepool179
8.2.6 如果一個對象釋放前被加到瞭NotificationCenter中,不在NotificationCenter中,那麼remove對象可能會怎樣181
8.2.7 NSArray和NSMutableArray在Copy和MutableCopy下的內存情況是怎樣的182
第9章 iOS中的網絡和多綫程編程183
9.1 iOS網絡編程與多綫程基礎183
9.1.1 什麼是綫程?綫程與進程有什麼區彆?為什麼要使用多綫程189
9.1.2 如何理解多綫程190
9.1.3 如何理解HTTP協議191
9.1.4 HTTPS協議與HTTP協議有什麼區彆與聯係193
9.1.5 UIKit類要在哪一個應用綫程上使用194
9.1.6 iOS中有哪幾種從其他綫程迴到主綫程的方法195
9.1.7 用戶下載一個大圖片,分成很多份下載,如何使用GCD實現196
9.1.8 項目中什麼時候選擇使用GCD?什麼時候選擇NSOperation196
9.1.9 NSOpertion如何實現綫程依賴196
9.1.10 什麼是綫程死鎖197
9.1.11 dispatch_barrier_(a)sync的作用是什麼198
9.1.12 如何理解綫程安全199
9.1.13 如何實現Cocoa中多綫程的安全201
9.1.14 如何使用NSURLConnection進行網絡請求202
9.1.15 如何使用NSURLSession進行網絡請求205
9.2 block與GCD206
9.2.1 block有哪幾種定義的方式206
9.2.2 在ARC環境下,是否需要使用copy關鍵字來修飾block207
9.2.3 在block內如何修改block外部變量208
9.2.4 在block中使用self關鍵字是否一定導緻循環引用209
9.2.5 GCD中有哪幾種隊列211
9.2.6 如何理解GCD死鎖211
9.2.7 如何使用GCD實現綫程之間的通信212
9.2.8 GCD如何實現綫程同步213
9.2.9 GCD多綫程編程中什麼時候會創建新綫程215
9.2.10 iOS中如何觸發定時任務或延時任務217
9.2.11 如何解決網絡請求的依賴關係220
第10章 iOS其他話題221
10.1 iOS中函數響應式編程及ReactiveCocoa的使用221
10.1.1 什麼是ReactiveCocoa?如何使用221
10.1.2 如何使用RAC防止button短時間內重復單擊223
10.2 iOS基礎設計模式223
10.2.1 什麼是單例模式224
10.2.2 什麼是MVC設計模式225
10.2.3 如何理解MVVM設計模式228
10.3 第三方框架229
10.3.1 SDWebImage是什麼?加載圖片的原理是什麼230
10.3.2 什麼是CocoaPods233
10.4 程序調試234
10.4.1 BAD_ACCESS在什麼情況下齣現234
10.4.2 如何調試BAD_ACCESS錯誤235
10.4.3 如何查看設備應用的crash日誌235
10.4.4 如何檢測內存泄漏237
10.4.5 lldb(gdb)常用的調試命令有哪些237
第11章 數據庫239
11.1 數據庫基礎知識239
11.2 SQL語言的功能有哪些240
11.3 內連接與外連接有什麼區彆242
11.4 什麼是事務243
11.5 什麼是存儲過程?它與函數有什麼區彆與聯係245
11.6 一二三四範式有什麼區彆245
11.7 什麼是觸發器247
11.8 什麼是遊標248
11.9 如果數據庫日誌滿瞭,那麼會齣現什麼情況249
11.10 union和union all有什麼區彆249
11.11 什麼是視圖250
11.12 什麼是數據庫三級封鎖協議251
11.13 索引的優缺點有哪些251
第12章 操作係統253
12.1 進程管理253
12.1.1 進程與綫程有什麼區彆253
12.1.2 綫程同步有哪些機製254
12.1.3 內核綫程和用戶綫程有什麼區彆254
12.2 內存管理255
12.2.1 內存管理有哪幾種方式255
12.2.2 什麼是虛擬內存256
12.2.3 什麼是內存碎片?什麼是內碎片?什麼是外碎片256
12.2.4 虛擬地址、邏輯地址、綫性地址、物理地址有什麼區彆257
12.2.5 Cache替換算法有哪些257
12.3 用戶編程接口259
12.3.1 庫函數調用與係統調用有什麼不同259
12.3.2 靜態鏈接與動態鏈接有什麼區彆259
12.3.3 靜態鏈接庫與動態鏈接庫有什麼區彆260
12.3.4 用戶態和核心態有什麼區彆260
12.3.5 用戶棧與內核棧有什麼區彆261
附錄 262
真題1262
真題2264
真題3265
真題1答案267
真題2答案274
真題3答案281
參考文獻 290
· · · · · · (
收起)