iOS | 面試知識(shí)整理 - 三方框架 (十)

前言:

最近公司項(xiàng)目不怎么忙, 閑暇時(shí)間把iOS 在面試中可能會(huì)遇到的問(wèn)題整理了一番, 一部分題目是自己面試遇到的,一部分題目則是網(wǎng)上收錄的, 方便自己鞏固復(fù)習(xí), 也分享給大家! 知識(shí)點(diǎn)比較多,比較雜,這里做了分類(lèi),下面是分類(lèi)鏈接地址;

面試知識(shí)點(diǎn)整理 - 目錄:

iOS | 面試知識(shí)整理 - OC基礎(chǔ) (一)
iOS | 面試知識(shí)整理 - OC基礎(chǔ) (二)
iOS | 面試知識(shí)整理 - OC底層 (三)
iOS | 面試知識(shí)整理 - UI 相 關(guān) (四)
iOS | 面試知識(shí)整理 - 內(nèi)存管理 (五)
iOS | 面試知識(shí)整理 - 多 線(xiàn) 程 (六)
iOS | 面試知識(shí)整理 - 網(wǎng)絡(luò)相關(guān) (七)
iOS | 面試知識(shí)整理 - 數(shù)據(jù)持久化 (八)
iOS | 面試知識(shí)整理 - Swift 基礎(chǔ) (九)
iOS | 面試知識(shí)整理 - 三方框架 (十)

iOS | 面試知識(shí)整理 - 三方框架 (十)

1.列舉現(xiàn)在熟悉 iOS開(kāi)發(fā)庫(kù)和第三方開(kāi)發(fā)庫(kù)?

iOS開(kāi)發(fā)中第三方框架非常豐富,種類(lèi)和數(shù)量也繁多,所謂框架就是對(duì)每一類(lèi)功能的封裝,作為快捷的使用開(kāi)發(fā)工具,提升開(kāi)發(fā)效率

OC 常用的三方庫(kù)如下:

框架名稱(chēng) 描述
AFNetworking 網(wǎng)絡(luò)請(qǐng)求
SDWebImage 圖像異步加載
MJRefresh 上啦下拉刷新
MJExtension 數(shù)據(jù)解析
MBProgressHUD 進(jìn)度顯示組件
FMDB SQLite的封裝數(shù)據(jù)庫(kù)
Masonry 自動(dòng)布局
Charts 圖標(biāo)繪制庫(kù)
CocoaAsyncSocket 異步 Socket 網(wǎng)絡(luò)編程框架
AsyncDisplayKit 異步UI 加載庫(kù)
Aspects 面向切面編程庫(kù)
CocoaLumberjack 簡(jiǎn)單高效快速靈活登錄模塊框架
DZNEmptyDataSet 空列表UI庫(kù),列表為空時(shí)友好展示庫(kù)
FSCalendar 日歷控件庫(kù)
JazzHands 應(yīng)用滑動(dòng)引導(dǎo)頁(yè)頁(yè)動(dòng)畫(huà)庫(kù)
JSPatch 熱更新
AvoidCrash 容錯(cuò)處理框架
Bludy 錯(cuò)誤收集

Swift比較常用庫(kù)

框架名稱(chēng) 描述
SnapKit 自動(dòng)布局
Alamofire 網(wǎng)絡(luò)請(qǐng)求
Kingfisher 異步圖片加載庫(kù)
KakaJSON 數(shù)據(jù)解析
PKHUD 進(jìn)度顯示組件
SwiftyJSON 轉(zhuǎn)JSON庫(kù)

2. SDWebImage加載原理?

  1. 當(dāng)我們的UIImageView控件調(diào)用sd_setImageWithURL: ()...方法 來(lái)進(jìn)行加載圖片;
  2. 框架會(huì)直接調(diào)用 UIView+WebCache中的sd_internalSetImageWithURL:() ..., 該方法是UIImageViewUIButton 的共有拓展方法
  3. 接下來(lái)調(diào)用SDWebImageManager類(lèi)中的loadImageWithURL:() ...方法,會(huì)根據(jù)提供的圖片URL 加載圖片,SDWebImageManager 主要負(fù)責(zé)管理SDImageCache緩存和SDWebImageDownloader下載器
  4. 首先進(jìn)入 SDImageCache類(lèi),調(diào)用 queryCacheOperationForKey...在內(nèi)存或者磁盤(pán)進(jìn)行查詢(xún),如果有圖片緩存則進(jìn)行回調(diào)展示, 如果沒(méi)有查詢(xún)到圖片緩存,則進(jìn)行下一步下載
  5. 在未查詢(xún)到圖片緩存時(shí), SDWebImageDownloader類(lèi)會(huì)進(jìn)行網(wǎng)絡(luò)下載,下載成功后進(jìn)行回調(diào)展示,并將下載的圖片緩存到內(nèi)存和磁盤(pán)

總結(jié):
根據(jù)Url內(nèi)存中查詢(xún)圖片,如果有則展示,沒(méi)有則在磁盤(pán)查詢(xún)圖片,查詢(xún)到展示, 沒(méi)有查詢(xún)到在會(huì)通過(guò)網(wǎng)絡(luò)下載進(jìn)行展示。下載完后會(huì)存儲(chǔ)到內(nèi)存和磁盤(pán),方便下次直接使用,磁盤(pán)查詢(xún)和網(wǎng)絡(luò)下載都是異步的,不會(huì)影響主線(xiàn)程.

3 .SDWebImage框架的架構(gòu)是怎么樣的?

SDWebImage 有三個(gè)核心組件:

  • SDWebImageManager: 核心管理器
  • SDImageCache: 緩存處理組件,主要負(fù)責(zé)內(nèi)存緩存以及磁盤(pán)緩存
  • SDImageDownloader: 下載處理組件,負(fù)責(zé)異步下載圖片等操作

4. SDWebImage 圖片名稱(chēng)是如何處理?

  • 拿到圖片對(duì)應(yīng)的URL路徑,對(duì)該路徑進(jìn)行MD5加密,作為名稱(chēng)進(jìn)行保存

5. SDWebImage的最大并發(fā)數(shù)是多少?

_downloadQueue.maxConcurrentOperationCount = 6;

6. SDWebImage默認(rèn)下載的超時(shí)時(shí)長(zhǎng)是多少?

15秒, _downloadTimeout = 15.0;

7. SDWebImage默認(rèn)緩存的時(shí)間是多久?

一周時(shí)間

_maxCacheAge = kDefaultCacheMaxCacheAge;
static const NSInteger kDefaultCacheMaxCacheAge = 60 * 60 * 24 * 7; // 1 week

6.AFNetWorking 架構(gòu)分析?

AFN根據(jù)功能模塊來(lái)劃分,可以分為5個(gè)部分:

  • NSURLSession - 負(fù)責(zé)網(wǎng)絡(luò)通信工作(核心)
  • Serialization - 負(fù)責(zé)數(shù)據(jù)的序列化工作
  • Reachability - 負(fù)責(zé)網(wǎng)絡(luò)狀態(tài)監(jiān)聽(tīng)工作
  • Security - 負(fù)責(zé)安全認(rèn)證工作
  • UIKit - 對(duì)UIKit框架擴(kuò)展

AFNetworking 實(shí)際上只是對(duì) NSURLSession 高度地封裝, 提供一些簡(jiǎn)單易用的 API 方便我們?cè)?iOS 開(kāi)發(fā)中發(fā)出網(wǎng)絡(luò)請(qǐng)求并在其上更快地構(gòu)建網(wǎng)絡(luò)層組件并提供合理的接口;

7.AFNetworking 2.0 和3.0 的區(qū)別

  • 在AFNetworking 3.0之前,底層是通過(guò)封裝NSURLConnection來(lái)實(shí)現(xiàn)的。

  • 在AFNetworking 3.0之后,也就是在iOS 9.0 之后,NSURLConnection被棄用,蘋(píng)果推薦使用NSURLSession來(lái)管理網(wǎng)絡(luò)請(qǐng)求,所以AFNetworking 3.0之后,底層是通過(guò)封裝NSURLSession來(lái)實(shí)現(xiàn)的。

  • 從AFNetworking 3.0中之后,下面三個(gè)方法被棄用了。

AFURLConnectionOperation 
AFHTTPRequestOperation 
AFHTTPRequestOperationManager 
  • 依次被下面三個(gè)類(lèi)代替了,同時(shí)請(qǐng)求方法也跟著改變了,所以AFNetworking 3.0以后發(fā)生了很大的變化。
AFURLSessionManager 
AFHTTPSessionManager 
AFNetworkReachabilityManager

8.MJExtension 字典轉(zhuǎn)模型原理?

MJExtension是一個(gè)轉(zhuǎn)換速度快、使用簡(jiǎn)單方便的字典轉(zhuǎn)模型框架, 通過(guò)rumtime獲取對(duì)象的所有成員變量(包括父類(lèi)的),通過(guò)KVC進(jìn)行賦值操作,達(dá)到了將字典數(shù)據(jù)映射到了模型對(duì)象上;

9.FMDB如何保證線(xiàn)程安全?

FMDB是對(duì)蘋(píng)果SQLite的封裝, 通過(guò)使用FMDatabaseQueue 來(lái)保證線(xiàn)程安全,FMDatabaseQueue是同步執(zhí)行, _queue是 同步串行隊(duì)列。

10.你讀過(guò)哪些三方庫(kù)源碼?

11.常用的 git 指令有什么?

git clone # 克隆代碼倉(cāng)庫(kù)
git add # 將工作區(qū)的修改提交到暫存區(qū)
git commit # 將暫存區(qū)的修改提交到當(dāng)前分支
git reset # 回退到某一個(gè)版本
git stash # 保存某次修改
git pull # 從遠(yuǎn)程更新代碼
git push # 將本地代碼更新到遠(yuǎn)程分支上
git reflog # 查看歷史命令
git status # 查看當(dāng)前倉(cāng)庫(kù)的狀態(tài)
git diff # 查看修改
git log # 查看提交歷史
git revert # 回退某個(gè)修改
git checkout -b dev #創(chuàng)建分支,然后切換到分支
git branch # 查看當(dāng)前分支
git merge dev #合并指定分支到當(dāng)前分支
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容