链接:https://www.nowcoder.com/discuss/11392?type=2&order=0&pos=13&page=1
来源:牛客网
本人是做 iOS 移动客户端方向,已经拿到 爱奇艺 的转正 offer。这几天上海的京东校招也去面了一下,共享一下面试题目:
一面
(自我介绍、实习经历略)谈谈你对 Objective-C 的动态绑定理解?
个人回答方向是从 runtime 机制切入,对所有的 Object、Class 都进行对象化封装,对 clang 对 objc 的结构体改写转换来分析这个问题的。然后引入了 isa 指针和 swizzling method 等相关知识。(故意挖坑,因为自己在这方面比较擅长)
异步网络图片加载的设计思路。
根据 sdwebimage 三方库的源码对其进行分析。尤其是 Category 对于 url 的关联对象、operation 的 hash 表管理、download 方法的cache、disk查询方式这三个地方。(面试官是很满意的)
异步网络接口的缓存机制。
这个LZ曾经没有接触过,我只是用白纸画了一个流程图。用更新个人信息的功能为例,切记加入时间戳、考虑有无网络环境、引入 sync 同步性问题即可。
谈谈面向对象的含义
这个问题听到以后出乎意料。我理解成面试官在考察基础知识,便通过面向对象的三大特点来展开描述,并且用 objc和cpp进行解释。并且与面向过程进行对比。(吹水题,不要冷场就好。)
至此一面结束。比较顺利,面试官也比较满意。第二天晚 11 点收到了 21 号的复试通知。
二面
二面的面试官是一个光头,看看有没有同一个面的童鞋。
(没有做自我介绍,直接开问)ARC是什么?objc是如何记录引用计数的。GC机制有无了解。
只要从 isa 的ex_retain 位记录 引用计数加1,并且当引用计数不够时会使用sidetable进行额外记录即可。GC我猜想是考知识面,因为macOS在之前开发中都是使用垃圾回收,而现在苹果放弃了GC在所有开发上的运用,都换做ARC内存管理方式。
(面试官赞赏底层看的比较细,转问算法。由于我有acm经历,可能问题较难)第一题是给定Tag,在一个View中查询所有Tag为给定的View。
抽象成多叉树的深度优先搜索来做
给定一个 UIView 树,保证每一个结点View的Tag都不相同,让查询从rootView到指定Tag的View树上路径。
抽象成对于多叉树的广度优先搜索,利用队列来记录情况即可。
给定一个 UIView 树上的两个结点,搜索最近的父亲结点 View。
可以转换成 LCA 最近公共祖先问题,利用 Tarjan 的离线lca算法。
前两道题直接白纸上写的,最后一道题讲明了思路 dfs + rmq 问题即可做到。面试官很满意。全程面试 38 分钟,他还开玩笑说时间过了就跳过你的提问环节了。。。(好尴尬)
走的时候面试官说最早明天晚上会有hr通知,等消息吧。(虽然到现在仍然是复试中,但是希望运气好转~)
网友评论