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 线程死锁定义 场景 解决方法
死锁是指两个或两个以上的线程在执行过程中 由于资源竞争或由于相互通信而造成的一种
阻塞现象 如果没有外力影响 这种现象将一直持续下去 这种永远相互等待的进程成为死锁
网友评论