京東的小哥哥真的特別好,一開始倒了杯咖啡給我,是京東的杯子。印象很深,非常喜歡。二面的面試官也很友好,聊的很開心,也讓我對未來做了一個規(guī)劃。
先記一下比較好的題,這篇文章做個補充和總結(jié)。
- weak的本質(zhì)和底層實現(xiàn):參考資料
weak的本質(zhì)是一個hash表:
它的key存儲的是對象的地址,
它的value存儲的是weak指針地址的數(shù)組,而數(shù)組元素的count就是引用計數(shù)的count,當(dāng)count為0時,key移除表,指針致空。
所以用weak可以避免出現(xiàn)野指針的情況,而assign就會出現(xiàn)安全性問題。
- AFNManager不會自動銷毀問題:參考資料
原因:session在ARC下不會及時釋放
原因探究: AFURLSessionManager實現(xiàn)了NSURLSession的協(xié)議,即AFURLSessionManager和NSURLSession互相持有,如果這個delegate是week的話,那沒什么問題,但是系統(tǒng)提供的是retain:如圖
delegate是retain
解決方法有兩種: 設(shè)計成單例 或者 取消tasks,將session對象銷毀
//廢棄session對象。cancelPendingTasks決定是否取消此session中的tasks
–(void)invalidateSessionCancelingTasks:(BOOL)cancelPendingTasks
__weak typeof(manager) weak_manager = manager;
[manager requestWithMethod:method
URLString:uri
parameters:param
success:^(NSURLSessionDataTask *task, id responseObject) {
if (completion) {
completion(YES, responseObject, task.response);
}
[weak_manager invalidateSessionCancelingTasks:YES];
}
failure:^(NSURLSessionDataTask *task, NSError *error) {
if (completion) {
completion(NO, error, task.response);
}
[weak_manager invalidateSessionCancelingTasks:YES];
}];
- 在不使用AFN等第三方庫的情況下,自己用蘋果源生API實現(xiàn)一個異步下載圖片功能(可以寫偽代碼,記不清的地方可以大概寫一下,仿AFN設(shè)計)
這個我寫了一個大概。。流程應(yīng)該沒問題。。。
- 如果讓你自己設(shè)計一個緩存框架,你會怎么設(shè)計?(仿SD設(shè)計:一個下載器,一個緩存器,一個管理者)
這里主要設(shè)計了下載器,和緩存器,
緩存要設(shè)計最大時間清理,以及超過峰值大小,遍歷最遠沒有修改的文件,刪除大小為峰值的一半。
京東的面試過程很愉快,面試官很友好并且很有耐心的引導(dǎo)我走向正確的結(jié)果,很感謝,感恩,希望能與京東的面試官和小伙伴們共事。再次感恩!感謝!
