京东商城面试总结

京东的小哥哥真的特别好,一开始倒了杯咖啡给我,是京东的杯子。印象很深,非常喜欢。二面的面试官也很友好,聊的很开心,也让我对未来做了一个规划。

先记一下比较好的题,这篇文章做个补充和总结。

  • weak的本质和底层实现:参考资料

weak的本质是一个hash表:
它的key存储的是对象的地址,
它的value存储的是weak指针地址的数组,而数组元素的count就是引用计数的count,当count为0时,key移除表,指针致空。
所以用weak可以避免出现野指针的情况,而assign就会出现安全性问题。

  • AFNManager不会自动销毁问题:参考资料

原因:session在ARC下不会及时释放
原因探究: AFURLSessionManager实现了NSURLSession的协议,即AFURLSessionManager和NSURLSession互相持有,如果这个delegate是week的话,那没什么问题,但是系统提供的是retain:如图


京东商城面试总结_第1张图片
delegate是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设计:一个下载器,一个缓存器,一个管理者)

这里主要设计了下载器,和缓存器,
缓存要设计最大时间清理,以及超过峰值大小,遍历最远没有修改的文件,删除大小为峰值的一半。

京东的面试过程很愉快,面试官很友好并且很有耐心的引导我走向正确的结果,很感谢,感恩,希望能与京东的面试官和小伙伴们共事。再次感恩!感谢!

你可能感兴趣的:(京东商城面试总结)