android 基础知识

android 面试题总结

2019-08-19  本文已影响0人  android源码探索

欢迎大家下载我个人开发的app安琪花园

android 常见的面试题

1. java中== equals hashCode的区别?

===

答:

===

3. ViewGroup的绘制顺序

1566199093610.jpg

4. hashMap, hashTable ConcurrentHashMap

区别: hashmap 线程不安全, concurrentHashMap是线程安全的, hashTable已经过时了,用得比较少
着重讲一下hashMap:

  1. hashMap 允许null作为key
  2. 哈希碰撞的处理是通过链表来实现的。hashmap中的每一个元素都是链表的头结点。当出现哈希碰撞的时候 则入链表里面插入数据。
  3. 为什么要用头插法。 因为在设计的时候,后插入的数据可能在访问频率上要高一点。所以当出现哈希碰撞的时候 也是直接往头结点插入数据的。
  4. hashMap 初始长度是16
  5. 为什么扩容的时候必须是2的幂。因为2的幂的数字在转换成二进制的时候,每一位都是1, 在与key的hashCode值做与运算的时候 ,得到的index的值就是hashCode的最后几位。

5. 进程间通信面试题

  1. 进程通信方式有如下: Binder, socket, Bundle, file, aidl, contentProvider, messager

6. handler面试题(从以下几点来掌握 )

  1. handler的内存泄漏
    答: 出现内存泄漏是因为出现生命周期比较长的问题。主要是因为handle里面有一个循环,队列,导致出现了泄漏。
  2. 为什么不能在子线程创建handler
    答: 子线程创建handler 会抛异常是因为从ThreadLocal里面取不到Looper导致了这个问题。
    因为在new Handler的时候 里面会调用Looper.myLooper(), 而这个方法里面会调用threadLocal.get().因为 这个时候从ThreadLocal里面是取不到值的。所以才出现了问题。
  3. TextView.setText()只能在主线程执行是错误的
    答: 因为底层做了线程判断 , 如果线程更新ui的线程不是主线程则会抛出异常
  4. new Handler的两种写法区别
    答: 其实是有四种 创建handler的方式, 有传Callback的,有无参的,还有传入Looper的
  5. ThreadLocal的原理
    答: 保存了Looper
    handler的面试题理解这些就差不多了
上一篇下一篇

猜你喜欢

热点阅读