京東的小哥哥真的特別好计济,一開始倒了杯咖啡給我茸苇,是京東的杯子。印象很深沦寂,非常喜歡学密。二面的面試官也很友好,聊的很開心传藏,也讓我對(duì)未來做了一個(gè)規(guī)劃腻暮。
先記一下比較好的題,這篇文章做個(gè)補(bǔ)充和總結(jié)毯侦。
- weak的本質(zhì)和底層實(shí)現(xiàn):參考資料
weak的本質(zhì)是一個(gè)hash表:
它的key存儲(chǔ)的是對(duì)象的地址哭靖,
它的value存儲(chǔ)的是weak指針地址的數(shù)組,而數(shù)組元素的count就是引用計(jì)數(shù)的count侈离,當(dāng)count為0時(shí)款青,key移除表,指針致空霍狰。
所以用weak可以避免出現(xiàn)野指針的情況抡草,而assign就會(huì)出現(xiàn)安全性問題。
- AFNManager不會(huì)自動(dòng)銷毀問題:參考資料
原因:session在ARC下不會(huì)及時(shí)釋放
原因探究: AFURLSessionManager實(shí)現(xiàn)了NSURLSession的協(xié)議蔗坯,即AFURLSessionManager和NSURLSession互相持有康震,如果這個(gè)delegate是week的話,那沒什么問題宾濒,但是系統(tǒng)提供的是retain:如圖
解決方法有兩種: 設(shè)計(jì)成單例 或者 取消tasks腿短,將session對(duì)象銷毀
//廢棄session對(duì)象。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實(shí)現(xiàn)一個(gè)異步下載圖片功能(可以寫偽代碼橘忱,記不清的地方可以大概寫一下,仿AFN設(shè)計(jì))
這個(gè)我寫了一個(gè)大概卸奉。钝诚。流程應(yīng)該沒問題。榄棵。凝颇。
- 如果讓你自己設(shè)計(jì)一個(gè)緩存框架潘拱,你會(huì)怎么設(shè)計(jì)?(仿SD設(shè)計(jì):一個(gè)下載器拧略,一個(gè)緩存器芦岂,一個(gè)管理者)
這里主要設(shè)計(jì)了下載器,和緩存器垫蛆,
緩存要設(shè)計(jì)最大時(shí)間清理禽最,以及超過峰值大小,遍歷最遠(yuǎn)沒有修改的文件袱饭,刪除大小為峰值的一半弛随。
京東的面試過程很愉快,面試官很友好并且很有耐心的引導(dǎo)我走向正確的結(jié)果宁赤,很感謝,感恩栓票,希望能與京東的面試官和小伙伴們共事决左。再次感恩!感謝走贪!