android 面试题总结

作者: android源码探索 | 来源:发表于2019-08-19 14:59 被阅读0次

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

    android 常见的面试题

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

    ===

    答:

    ===

    • == 对于基本数据类型比较的是值是否相等,对于引用类型比较的是在内存当中的引用地址是否相等。
    • 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的面试题理解这些就差不多了

    相关文章

      网友评论

        本文标题:android 面试题总结

        本文链接:https://www.haomeiwen.com/subject/ounssctx.html