美文网首页
Android 面试知识总结2

Android 面试知识总结2

作者: cuzzy | 来源:发表于2019-06-12 18:53 被阅读0次
    Q1 ArrayList与LinkedList的区别
    LinkedList使用的是双向链表结构 一个表项包含三个部分 元素 前驱表 
    后驱表。并且不需要维护容量大小 但是每次元素增加都需要新建Entry对象 
    并增加了更多赋值操作 在频繁的系统调用中 会对性能产生一定影响。
    ArrayList 如果当前容量不够用时需要扩容 
    
    两者对比 插入数据时间 由于链表的结构优势 插入和删除数据对性能影响不大
    而ArrayList插入数据时需要重新对数据进行排列 因此越靠近末端 
    插入删除操作对性能的影响越大。
    

    完整资料
    其实这写是在大学时候已经学过了 但是...

    Q2 String StringBuffer StringBuilder的区别
    简单来说 三者在执行速度方面的比较:StringBuilder >  StringBuffer  >  String
    原因是     
    
    String:字符串常量
    StringBuffer:字符
    StringBuilder:字符串变量
    
    每当对String 字符串操作时 都是重新创建了新的字符串对象 而原来的对象会因为没有被
    引用而被 GC回收。StringBuffer与StringBuilder就不一样了,他们是字符串变量,
    是可改变的对象,每当我们用它们对字符串做操作时,实际上是在一个对象上操作的,
    这样就不会像String一样创建一些而外的对象进行操作了,当然速度就快了
    
    
    StringBuilder与 StringBuffer
    StringBuilder:线程非安全的
    StringBuffer:线程安全的
    
    当我们在字符串缓冲去被多个线程使用是,JVM不能保证StringBuilder的操作是安全的,
    虽然他的速度最快,但是可以保证StringBuffer是可以正确操作的。当然大多数情况下
    就是我们是在单线程下进行的操作,
    所以大多数情况下是建议用StringBuilder而不用StringBuffer的,就是速度的原因。
    
    对比三者: 1.如果要操作少量的数据用 = String
    2.单线程操作字符串缓冲区 下操作大量数据 = StringBuilder
    3.多线程操作字符串缓冲区 下操作大量数据 = StringBuffer
    

    资料

    Q3 RecyclerView以及Adapter的一些详细知识

    RecyclerView使用ScrollStateListener监听状态
    此方法可用于控制列表条目中播放视频

    Q4 ANR的定义 场景 解决方法
    1. 用户界面内如果5秒钟之内无法响应屏幕触摸事件或者键盘输入事件就会出现ANR
    2. 前台Service如果20秒之内未结束就会出现ANR,
       后台Service如果200秒之内未结束就会出现ANR
    3. 前台Broadcast如果在10秒之内未结束就会出现ANR,
       后台Broadcast如果60秒之内未结束就会出现ANR
    
    根据官网论述,死锁现象也会作为ANR的一种表现方式出现,也会把日志记录到/data/anr目录下,
    但是如果死锁发生在system server进程中,则看门狗(watchdog)会杀掉system server进程,
    并且在main log中会看到关键字"WATCHDOG KILLING SYSTEM PROCESS",
    系统运行时将会重启,system server也会重启,此时用户会看到开机动画会再次播放。
    
    
    可通过此命令查看记录ANR日志的文件路径
     adb shell getprop dalvik.vm.stack-trace-file/data/anr/traces.txt
    1. 最常见的错误,UI 线程等待其他线程释放某个锁,导致UI线程无处处理用户输入
    2. 游戏中每帧动画都进行了比较耗时的大量计算,导致CPU忙不过来
    3. Web应用中,网络状态不稳定,而界面在等待网络数据
    4. UI线程中进行了一些磁盘IO(包括数据库,SD卡等等)的耗时操作
    5. 手机被其他App占用着CPU,自己获取不到足够的CPU时间片
    
    
    

    资料

    Q5 内存泄漏定义 场景 解决方法
    Q6 线程死锁定义 场景 解决方法
    死锁是指两个或两个以上的线程在执行过程中 由于资源竞争或由于相互通信而造成的一种
    阻塞现象 如果没有外力影响 这种现象将一直持续下去 这种永远相互等待的进程成为死锁
    
    

    资料 附联系代码

    相关文章

      网友评论

          本文标题:Android 面试知识总结2

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