前言:
最近公司項(xiàng)目不怎么忙, 閑暇時間把iOS 在面試中可能會遇到的問題整理了一番, 一部分題目是自己面試遇到的,一部分題目則是網(wǎng)上收錄的, 方便自己鞏固復(fù)習(xí), 也分享給大家! 知識點(diǎn)比較多,比較雜,這里做了分類,下面是分類鏈接地址;
面試知識點(diǎn)整理 - 目錄:
iOS | 面試知識整理 - OC基礎(chǔ) (一)
iOS | 面試知識整理 - OC基礎(chǔ) (二)
iOS | 面試知識整理 - OC底層 (三)
iOS | 面試知識整理 - UI 相 關(guān) (四)
iOS | 面試知識整理 - 內(nèi)存管理 (五)
iOS | 面試知識整理 - 多 線 程 (六)
iOS | 面試知識整理 - 網(wǎng)絡(luò)相關(guān) (七)
iOS | 面試知識整理 - 數(shù)據(jù)持久化 (八)
iOS | 面試知識整理 - Swift 基礎(chǔ) (九)
iOS | 面試知識整理 - 三方框架 (十)
iOS | 面試知識整理 - 三方框架 (十)
1.列舉現(xiàn)在熟悉 iOS開發(fā)庫和第三方開發(fā)庫?
iOS開發(fā)中第三方框架非常豐富,種類和數(shù)量也繁多,所謂框架就是對每一類功能的封裝,作為快捷的使用開發(fā)工具,提升開發(fā)效率
OC 常用的三方庫如下:
框架名稱 | 描述 |
---|---|
AFNetworking | 網(wǎng)絡(luò)請求 |
SDWebImage | 圖像異步加載 |
MJRefresh | 上啦下拉刷新 |
MJExtension | 數(shù)據(jù)解析 |
MBProgressHUD | 進(jìn)度顯示組件 |
FMDB | SQLite的封裝數(shù)據(jù)庫 |
Masonry | 自動布局 |
Charts | 圖標(biāo)繪制庫 |
CocoaAsyncSocket | 異步 Socket 網(wǎng)絡(luò)編程框架 |
AsyncDisplayKit | 異步UI 加載庫 |
Aspects | 面向切面編程庫 |
CocoaLumberjack | 簡單高效快速靈活登錄模塊框架 |
DZNEmptyDataSet | 空列表UI庫,列表為空時友好展示庫 |
FSCalendar | 日歷控件庫 |
JazzHands | 應(yīng)用滑動引導(dǎo)頁頁動畫庫 |
JSPatch | 熱更新 |
AvoidCrash | 容錯處理框架 |
Bludy | 錯誤收集 |
Swift比較常用庫
框架名稱 | 描述 |
---|---|
SnapKit | 自動布局 |
Alamofire | 網(wǎng)絡(luò)請求 |
Kingfisher | 異步圖片加載庫 |
KakaJSON | 數(shù)據(jù)解析 |
PKHUD | 進(jìn)度顯示組件 |
SwiftyJSON | 轉(zhuǎn)JSON庫 |
2. SDWebImage加載原理?
- 當(dāng)我們的
UIImageView
控件調(diào)用sd_setImageWithURL: ()...
方法 來進(jìn)行加載圖片泉唁; - 框架會直接調(diào)用
UIView+WebCache
中的sd_internalSetImageWithURL:() ...
, 該方法是UIImageView
和UIButton
的共有拓展方法 - 接下來調(diào)用
SDWebImageManager
類中的loadImageWithURL:() ...
方法焕阿,會根據(jù)提供的圖片URL
加載圖片蟹倾,SDWebImageManager
主要負(fù)責(zé)管理SDImageCache
緩存和SDWebImageDownloader
下載器 - 首先進(jìn)入
SDImageCache
類敌蚜,調(diào)用queryCacheOperationForKey...
在內(nèi)存或者磁盤進(jìn)行查詢荆残,如果有圖片緩存則進(jìn)行回調(diào)展示邢疙, 如果沒有查詢到圖片緩存肮柜,則進(jìn)行下一步下載 - 在未查詢到圖片緩存時陷舅,
SDWebImageDownloader
類會進(jìn)行網(wǎng)絡(luò)下載,下載成功后進(jìn)行回調(diào)展示审洞,并將下載的圖片緩存到內(nèi)存和磁盤
總結(jié):
根據(jù)Url
在內(nèi)存
中查詢圖片莱睁,如果有則展示,沒有則在磁盤
查詢圖片芒澜,查詢到展示仰剿, 沒有查詢到在會通過網(wǎng)絡(luò)下載
進(jìn)行展示。下載完后會存儲到內(nèi)存和磁盤
痴晦,方便下次直接使用南吮,磁盤查詢和網(wǎng)絡(luò)下載都是異步的,不會影響主線程
.
3 .SDWebImage框架的架構(gòu)是怎么樣的?
SDWebImage 有三個核心組件:
- SDWebImageManager: 核心管理器
- SDImageCache: 緩存處理組件,主要負(fù)責(zé)內(nèi)存緩存以及磁盤緩存
- SDImageDownloader: 下載處理組件,負(fù)責(zé)異步下載圖片等操作
4. SDWebImage 圖片名稱是如何處理?
- 拿到圖片對應(yīng)的URL路徑誊酌,對該路徑進(jìn)行MD5加密,作為名稱進(jìn)行保存
5. SDWebImage的最大并發(fā)數(shù)是多少部凑?
_downloadQueue.maxConcurrentOperationCount = 6;
6. SDWebImage默認(rèn)下載的超時時長是多少?
15秒, _downloadTimeout = 15.0;
7. SDWebImage默認(rèn)緩存的時間是多久碧浊?
一周時間
_maxCacheAge = kDefaultCacheMaxCacheAge;
static const NSInteger kDefaultCacheMaxCacheAge = 60 * 60 * 24 * 7; // 1 week
6.AFNetWorking 架構(gòu)分析?
AFN根據(jù)功能模塊來劃分,可以分為5個部分:
- NSURLSession - 負(fù)責(zé)網(wǎng)絡(luò)通信工作(核心)
- Serialization - 負(fù)責(zé)數(shù)據(jù)的序列化工作
- Reachability - 負(fù)責(zé)網(wǎng)絡(luò)狀態(tài)監(jiān)聽工作
- Security - 負(fù)責(zé)安全認(rèn)證工作
- UIKit - 對UIKit框架擴(kuò)展
AFNetworking
實(shí)際上只是對 NSURLSession
高度地封裝, 提供一些簡單易用的 API 方便我們在 iOS 開發(fā)中發(fā)出網(wǎng)絡(luò)請求并在其上更快地構(gòu)建網(wǎng)絡(luò)層組件并提供合理的接口;
7.AFNetworking 2.0 和3.0 的區(qū)別
在AFNetworking 3.0之前涂邀,底層是通過封裝NSURLConnection來實(shí)現(xiàn)的。
在AFNetworking 3.0之后箱锐,也就是在iOS 9.0 之后比勉,NSURLConnection被棄用,蘋果推薦使用NSURLSession來管理網(wǎng)絡(luò)請求驹止,所以AFNetworking 3.0之后浩聋,底層是通過封裝NSURLSession來實(shí)現(xiàn)的。
從AFNetworking 3.0中之后臊恋,下面三個方法被棄用了衣洁。
AFURLConnectionOperation
AFHTTPRequestOperation
AFHTTPRequestOperationManager
- 依次被下面三個類代替了,同時請求方法也跟著改變了抖仅,所以AFNetworking 3.0以后發(fā)生了很大的變化闸与。
AFURLSessionManager
AFHTTPSessionManager
AFNetworkReachabilityManager
8.MJExtension 字典轉(zhuǎn)模型原理?
MJExtension是一個轉(zhuǎn)換速度快、使用簡單方便的字典轉(zhuǎn)模型框架, 通過rumtime
獲取對象的所有成員變量(包括父類的),通過KVC進(jìn)行賦值操作,達(dá)到了將字典數(shù)據(jù)映射到了模型對象上;
9.FMDB如何保證線程安全?
FMDB是對蘋果SQLite的封裝, 通過使用FMDatabaseQueue
來保證線程安全,FMDatabaseQueue是同步執(zhí)行, _queue是 同步串行隊(duì)列岸售。
10.你讀過哪些三方庫源碼?
11.常用的 git 指令有什么?
git clone # 克隆代碼倉庫
git add # 將工作區(qū)的修改提交到暫存區(qū)
git commit # 將暫存區(qū)的修改提交到當(dāng)前分支
git reset # 回退到某一個版本
git stash # 保存某次修改
git pull # 從遠(yuǎn)程更新代碼
git push # 將本地代碼更新到遠(yuǎn)程分支上
git reflog # 查看歷史命令
git status # 查看當(dāng)前倉庫的狀態(tài)
git diff # 查看修改
git log # 查看提交歷史
git revert # 回退某個修改
git checkout -b dev #創(chuàng)建分支践樱,然后切換到分支
git branch # 查看當(dāng)前分支
git merge dev #合并指定分支到當(dāng)前分支