京东的小哥哥真的特别好,一开始倒了杯咖啡给我,是京东的杯子。印象很深,非常喜欢。二面的面试官也很友好,聊的很开心,也让我对未来做了一个规划。
先记一下比较好的题,这篇文章做个补充和总结。
- weak的本质和底层实现:参考资料
weak的本质是一个hash表:
它的key存储的是对象的地址,
它的value存储的是weak指针地址的数组,而数组元素的count就是引用计数的count,当count为0时,key移除表,指针致空。
所以用weak可以避免出现野指针的情况,而assign就会出现安全性问题。
- AFNManager不会自动销毁问题:参考资料
原因:session在ARC下不会及时释放
原因探究: AFURLSessionManager实现了NSURLSession的协议,即AFURLSessionManager和NSURLSession互相持有,如果这个delegate是week的话,那没什么问题,但是系统提供的是retain:如图
解决方法有两种: 设计成单例 或者 取消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实现一个异步下载图片功能(可以写伪代码,记不清的地方可以大概写一下,仿AFN设计)
这个我写了一个大概。。流程应该没问题。。。
- 如果让你自己设计一个缓存框架,你会怎么设计?(仿SD设计:一个下载器,一个缓存器,一个管理者)
这里主要设计了下载器,和缓存器,
缓存要设计最大时间清理,以及超过峰值大小,遍历最远没有修改的文件,删除大小为峰值的一半。
京东的面试过程很愉快,面试官很友好并且很有耐心的引导我走向正确的结果,很感谢,感恩,希望能与京东的面试官和小伙伴们共事。再次感恩!感谢!