前言
同学帮我内推了美团新零售的Android开发岗,昨天晚上去公司面试,一共面了3轮技术面,也不知道结果如何,现在将面试过程和遇到的面试题记录一下,也为以后的面试提供一些参考。
一面
- XML布局文件中所写的layout_width和layout_height如何参与到这个View的绘制。
- Android中如何发送Http请求,HttpUrlConnection和OkHttp中分别是怎么实现的。
- 有没有对网络连接进行过抓包分析,TCP三次握手的过程和发送的数据包名称和值是多少。
- 是否对网络请求有过逐层的跟踪。
- Http中关于缓存的Header有哪些。
- OkHttp中用到了哪些设计模式?
- 构造者模式有什么优点,适用于什么场景。
- 对哪些设计模式比较了解。
- 能写出几种单例的实现方式。
- 编码:双重判空加synconized关键字的单例实现。
- volitale关键字的作用。
- Android中的消息机制。Looper如何派发Message
- 编码:使用链表实现一个队列。
一些说明:
有一些问题是前后连贯的,根据我的回答进行进一步的提问,比如第六个中OkHttp中的设计模式,我答了构造者模式,然后就接着问构造者模式的优点和使用场景,又延伸到其他设计模式。
二面
一面结束后,面试官让我坐一会,我还有点疑惑。因为之前没有经历过现场的技术面试,网上视频面试或者电话面试都是前面一轮过了然后另约时间进行下一轮面试。过了几分钟二面的面试官来了,直接开始了第二轮面试(我也不知道我的一面算不算过了)
题目:
- 先聊聊项目(包括实习公司的,在学校里面的),在项目中承担了哪些工作。
- 静态内部类和非静态内部类有什么区别
- synconized关键字的用法。一个线程先后调用一个同步方法,会造成死锁吗,会造成阻塞吗?
- Object类中的wait() 和notify() 方法的作用是什么?
- Fragment的生命周期
- 可以在子线程中操作UI吗,Service是在主线程还是在子线程,可以直接执行耗时操作吗?
- 编码:两个有序链表的合并。
三面
- HashCode是什么
- 如何证明两个对象的hashcode一定是可以相同的
- 在围棋棋盘上如何将相连的同一种颜色的棋子全部找出来
- Http各个版本之间的差异
- 自定义View中invidate() 和requestLayout() 方法有什么区别。
- LinkedHashMap的实现
- Android自己的集合框架有了解吗?
结语
三轮面试下来都到十点了,公交地铁都停运了,只能打车回去。
这次的面试还是很匆忙,有些之前知道的知识没有在面试前过一遍,导致面试的时候卡壳了。三面答得很糟糕,面试官非常随和但奈何境界太高,沟通起来实在是让我很紧张,很无力。