个人情况
我在开学后内推了头条西瓜视频的 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 分钟。