头条二面失败问题:
(1)Permission标签和uses-permission标签的区别,设置Permission标签,如何保证其他进程app不会访问到act界面?
(2)多手势的具体实现
(3)转场动画具体实现
(4)画中画具体实现,悬浮窗口具体实现
(5)aidl binder异步调用具体实现
(6)如何实现定时任务
全是具体实现,我就呵呵了。
小红书:
(1)concurrentHashMap 如何加锁的
(2)measure参数详解,view设置wrap不起作用
(3)Bind service,如何实现保活
(4)两个进程act,如何加快启动速度
(5)性能优化(面试官老插嘴,都说不上话)
(6)Eventbus如何实现线程的切换
(7)jetpack的Navigation的xml引用,在什么时候调用的?
(8)Inflater.inflate如何实现xml转java的(framework),方法中的各个参数含义。
通过的面试题,按个人梳理后列举
基本问题
(1)范型:<super>和<extends>的具体区别;在java编译过程中的实现原理(范型擦除);逆变协变(范型子类的转换问题)
(2)性能优化(多家都问了,很大的一个技术专题,靠自己总结),个人笔记总结了7块:
启动速度优化
布局优化
代码优化
内存优化(oom anr)
app瘦身
网络优化
电池使用优化
安全优化
存储优化
(3)ANR:给个标准的回答流程:anr的几种原因(深入到源码,讲讲AMS.appNotResponding()的流程,你就腻害了),分析工具等怎么分析定位到具体原因。
(4)内存溢出(OOM)+内存泄漏的区别,分析工具或者开源leakcanary,优化方案,可能会问你,handler怎么导致的oom,如何优化等
(5)事件分发机制+嵌套滑动机制原理,区别
(6)handler相关(给的很全了):流程;threadLocal+内部原理(threadLocalMap如何实现的,key,val是啥,弱引用,是否引起内存泄露等);loop()为什么不阻塞主线程;什么是同步屏障(屏障消息);什么是闲时机制(IdleHandler)+作用;消息队列的消息排序顺序(delay如何实现的);Message.obtain原理(用了那种设计模式:享元);实现子线程的handler流程;handler内存泄漏及解决方案;handler和looper,MessageQueue的关系(几个handler几个looper,handler的msg可以再别的handler的handleMessage方法上处理吗);扩展:子线程和主线程通讯,有哪些方案。
(7)自定义View相关:
framework流程;
mesureSpec的作用;
自定义extends View时,手动处理wrap_content时的坑:直接继承View的控件需要重写onMeasure方法并设置wrap_content时的自身大小,否则在布局中使用 wrap_content就相当于使用match_parent;
postInvalidate()和invalidate()和requestLayout()的区别(自己总结下吧,里头有很多点要记住);
在Activity的onCreate方法中获取控件宽高的几种方式;
View的Draw(Canvas canvas)的绘制流程;
(8)京东一家问了: io流(字符流,字节流,file和其它流的区别),