春招 字节跳动android端 三面面经 攒人品求offer
电面: 45min 以基础为主
-
阻塞,阻塞使用场景,
-
wait使用场景
-
Handler消息机制(Looper.prepare(),Looper.init)
-
进程与线程区别,多线程使用场景,多线程断点下载
-
AsyncTask工作原理,serial_pool_executor是用什么实现的(blockingqueue)
-
自定义View,手势密码解锁
-
final各种用途
-
static使用场景
-
synchronized
-
抽象类和接口使用场景
-
两个队列实现栈(剑指offer原题,轮流使用两个队列插入,从有元素的队列弹出)
-
内部类和静态内部类区别
1. 项目:漫画功能,添加水印功能如何优化,本地生成水印有什么需要注意的地方
2. 自己做过的性能优化,内存,布局
3. Binder最大可传送多大图片
4. 生产者和消费者模型:要求用Queue实现
5. 自定义ThreadPool参数时的核心线程池的大小如何选择?工作队列大小如何选择?最大池如何选择?
6. 为什么你们项目采用的是otto事件分发,而非EventBus
7. 二维数组的斜向遍历
9. aidl IPC过程
二面:1h30min (二面面试官人超级好,不会的,会给你提示,再不会会慢慢告诉你怎么做到,比如ThreadPool的参数我记不清次要的参数了,最后都一一解释给我听)
1. AsyncTask原理,为什么AsyncTask必须运行在主线程?因为Handler的Looper是MainLooper
2. ThreadPool参数,当超出最大池一定会抛出异常吗? 不一定,可通过重写RejectedExecutionHandler来实现超过最大池如何处理
3. HashMap实现原理
4. aidl和Binder有何区别
5. 实现单例?实现了静态内部类,尴尬的是忘记把内部类写成static;坦诚和面试官说我平常都不会这么写,我写的最多是枚举单例和DCL模式,写内部类觉得有些冗余。再说了枚举单例有那些优势,1. 线程安全 2. 反序列化 3. 防止反射; 如果是静态内部类实现单例你要怎么做到反序列化? 给静态内部类的成员变量设置为final即可
6. 静态内部类和内部类差别
7. 两个链表的交叉节点
8. RecycleView使用优化?为什么在滑动过程要关闭Glide加载图片? 未答清楚
9. Handler原理
10. 自定义手势密码View如何实现的?讲了onMeasure,onDraw,onTouchEvent
11. 布局选择,RelativeLayout和LinearLayout源码的onMeasure
三面: 40min 更侧重综合能力考察
1. 添加水印功能过程(PS:解释了好久,面试官才理解了打水印过程和目的)
我实现添加水印功能时,把一张图切成9张图,用recyclerView显示,在按下某一个块时,给ViweStub添加遮罩层。面试官问可不可以用一张图片实现,我想了会,说可以,但我的解决方法比较低效,通过addView直接添加遮罩层;其中具体问了该View的onMeasure,onDraw, onTouchEvent具体细节。
2. requestLayout,invalidate,postInvalidate.
其中问了一个问题,为什么不能在View里的onTouchEvent直接调用onDraw(),而使用postInvalidate(),未答
3. MVVM,MVC比较
算法题,除了单例没写的太完整,其它的都还好,bug free。 童鞋们,划重点, 面试中没有调试以及运行过程,所以写的过程一定要三思,写完后和面试官说明30s检查代码。其它的就是从项目和知识点出发,直至问到你哑口无言为止,每一轮面试都有虚脱的感觉,每个问题都被怼到最后说不会。 自己深深体会到身上仍存在的不足。知识点仍旧不够深入,奇怪的是自己并没有被问三方开源框架的源码。仍旧是以基础为主,逐步深入。能走到三面,也算是对自己这四年凌晨7点的最大的回报。
#字节跳动##面经##春招##安卓工程师#