头条 Android 面经
个人情况
我在开学后内推了头条西瓜视频的 Android 开发实习生,经历了三轮技术面试和一轮 HR 面试。全部流程大约持续了一周,在 HR 面以后收到了口头 offer。
以下内容均按照面试顺序还原。可能有部分遗漏。
一面
-
自我介绍
-
算法:一个数组中子数组(连续)的最大和)
-
java 抽象类和接口的区别
-
线程通信的方式
-
类加载
-
HashMap 和 ConcurrentHashMap 的源代码实现
-
View 事件分发流程,如果 ViewGroup 拦截(Intercept)了事件会怎么样?
-
如何移动一个 View 的位置?
-
属性动画和帧动画
-
ViewStub 的作用,能不能 inflate 两次?
-
一个垂直布局的 LinearLayout 80dp 高,三个按钮高都是 30dp,实际显示效果?
-
同上,换成 RelativeLayout 实际显示效果?
-
Volley 和 OKhttp 源码相关问题。问了缓存和两个库各自适用场景。
-
图像压缩的方法,jpeg 编码过程,jpg、png、bmp 的区别。
-
让我问他问题。
面试总时间:约 55 分钟。
二面
-
自我介绍
-
LRU 缓存怎么实现,手写代码
-
使用缓存的过程中,除了 LRU 外有没有什么其他缓存策略来影响缓存的顺序?
-
Activity 生命周期
-
Handler 机制,问的很细。例如,一条线程里面两个 Handler,怎么确定 msg 发到哪里(msg.target)? handler 的 Post 一个 Runnable 和 sendMessage 有什么区别?
-
线程的 run 和 start,能不能直接调用某个线程的run方法?
-
断点续传
-
TCP 三次握手、四次挥手
-
一道算法题。找出数组中出现次数超过一半的元素,假设一定存在。用哈希表、贪心、快排三种策略实现。
-
联创团队是个怎样的团队?
-
还有什么问他的问题吗?
面试总时间:约 50 分钟。
三面
-
自我介绍
-
三道算法题:无序数组去重、两个排序数组找中位数、快速选择
-
垃圾回收,强引用弱引用
-
view绘制,实现扇形转盘布局,如何旋转内容
-
解决滑动冲突
-
fragment 生命周期,各种情况
-
jpeg编码。视频的帧内压缩和帧间压缩。I帧P帧B帧
-
StartService 和 BindService
-
binder
-
线程同步
-
闲聊
面试总时间:约 60 分钟。
HR 面
-
自我介绍
-
询问个人隐私:哪里人、父母职业、城镇/农村户口,诸如此类。
-
现在投了几家公司?已经拿了哪些offer?如果有多个offer选哪几家?为什么选头条?
-
联创团队(她比较感兴趣,谈了10分钟以上)。
-
确认实习时间。
-
选择考研还是工作?
-
让我问她问题,我确认了后续流程,得到答复,当前这是最后一面,下周发offer。
面试总时间:约 20 分钟。