oppo的面试题
collection和collections的区别
map遍历过程中删除数据会发生什么如何解决
1,Android为什么使用Dalvik 不用JVM Dalvik和ART的演变
2.双重锁单例 volitile关键字,sync锁
3.binder通信流程,跨进成通信方式,binder的大小
4.代理模式的实现
5.热修复原理 (双亲委托)。
oppo的面试题
1.tcp怎么保证数据传输的可靠性
2.多进程的好处和缺点
3.Service和Thread的区别
4.Socket有什么优化点
5.偏向锁的实现原理
6.CAS的实现原理
7.设计模式的设计原则
8.jvm的多线程机制
9.rsa加密原理
10.hashmap和treemap有什么区别
HashMap:基于哈希表实现 .优化HashMap空间的使用,可以调优初始容量和负载因子。适用于在Map中插入、删除和定位元素。
TreeMap:基于红黑树实现。TreeMap没有调优选项,因为该树总处于平衡状态。适用于按自然顺序或自定义顺序遍历键(key)。
1.为什么ThreadLocalMap使用弱引用存储ThreadLocal?
假如使用强引用,当ThreadLocal不再使用需要回收时,发现某个线程中ThreadLocalMap存在该ThreadLocal的强引用,无法回收,造成内存泄漏。
因此,使用弱引用可以防止长期存在的线程(通常使用了线程池)导致ThreadLocal无法回收造成内存泄漏。
2.那通常说的ThreadLocal内存泄漏是如何引起的呢?
我们注意到Entry对象中,虽然Key(ThreadLocal)是通过弱引用引入的,但是value即变量值本身是通过强引用引入。
这就导致,假如不作任何处理,由于ThreadLocalMap和线程的生命周期是一致的,当线程资源长期不释放,即使ThreadLocal本身由于弱引用机制已经回收掉了,但value还是驻留在线程的ThreadLocalMap的Entry中。即存在key为null,但value却有值的无效Entry。导致内存泄漏。
ANR导致原因?
- cpu过载导致,全量logcat日志里会有相关的打印,各个进程cpu占用情况,这种一般不需要分析trace文件
- 频繁gc导致,全量日志anr之前会有频繁的gc打印,trace文件头部也会统计gc单次耗时,总次数和总耗时
主线程也会进入wait状态,之后就是一系列的gc相关的线程 wait - 死锁,这种我遇到的很少,就讲了下一般会打印资源is heldby xxx进程会形成互相持有的状态