面试查漏补缺

广播部分:

http://www.cnblogs.com/lwbqqyumidi/p/4168017.html

Broadcast广播主要分为以下几个类型

  1. 普通广播 Normal Broadcast
  2. 系统广播 System Broadcast
  3. 顺序广播 Ordered Broadcast。通过Context.sendOrderedBroadcast发送的广播即为有序广播,与普通广播的不同在于,接收者是有序接收到广播的并且可以对广播进行修改或是取消广播向下传递。Android系统收到短信、接到电话后发送的广播都是有序广播,所以可以进行短信或电话的拦截,即取消广播。
  4. Sticky广播 Sticky Broadcast(官方已不推荐使用)
  5. APP内局部广播 Local Broadcast
    Broadcast实现的基本流程为:广播接受者BroadcastRecevier通过Binder机制向AMS(Activity manager Service)进行注册广播发送者通过Binder机制向AMS发送广播AMS查找符合条件(intentFilter/permission)的BroadcastRecevier,将广播发送给ReceiverDispatcher,Dispatcher将广播发送到BroadcastReceiver(一般情况是Activity)的消息循环队列中;消息循环执行此广播,回调到BoradcastReceiver中的onReceiver()方法中.

遗留问题:

  1. ReceiverDispatcher是哪个类里面的?

ArrayList与LinkList区别:

http://blog.csdn.net/eson_15/article/details/51145788

  1. ArrayList是基于动态数组的数据结构,LinkedList是基于链表的结构。
  2. 因为底层实现实现数据结构的不同,造成了ArrayList随机访问和存储速度要优于LinkedList, 主要原因是LinkedList存储的时候要移动指针尤其是在尾部或者中后段插入数据的时候,指针移动位数特别多(在LinkedList列表数据特别大的情况下)
  3. 对于数据的插入和删除速度这点跟我们猜测的其实不一样,根据测试结果:ArrayList对比LinkedList插入速度不一定慢,甚至在数据列表中段及以后Arraylist插入比LinkedList要快!根据100000W条数据对比,Arraylist 比LinkedList速度还6倍还不止,因为LinkedList移动指针速度太慢了。在数据前段插入Arraylist大部分确实比LinkedList要慢,有时候速度差不多。
    所以插入速度由插入位置和原有列表的数据量综合决定!

6.0 权限问题

http://www.cnblogs.com/cr330326/p/5181283.html
6.0版本权限变化主要有以下几点:

  1. 6.0的权限变更为运行时权限,不再统一在manifest中默认系统授权,而是有需要的时候向系统请求授权提高用户安全性和用户体验。对于normal级别普通的权限比如网络权限这些,如果安装的时候同意了,系统会默认帮我们授权,这部分不会特别提示。
  2. 如果系统权限提示框,用户点拒绝后系统不会再次弹框,这时候需要我们自己写代码检测如果未授权则自定义弹框,提示用户更改权限。
  3. 权限分为normal和dangerous类型,dangerous类型中的system_alert_window和write_settins这两个有点特殊,跟一般授权请求方式不同。不能直接通过代码申请,要发相应的Intent引导用户去相应界面自行更改权限才行!!!

ConcurrentHashMap与HashMap区别

  1. HashMap是非线程安全的。HashMap 允许null key和null value。ConcurrentHashMap是JDK1.5引入的线程安全的用于并发场景的HashMap。原有的Collections.synchronizedMap()方法也能将普通的HashMap转换成线程安全的,但是这种实现方法是基于普通的Synchronized的同步块实现的,因此效率比较低。ConcurrentHashMap引入了一个分段所的概念,简单的说就是把数据分成16段,每一段用不同的锁,只有不同线程写同一段数据的时候才会有同步的操作,如果是不同段数据可以直接并发写入读取,因此效率比较高。
  2. HashTable是线程安全的Collection。HashTable不允许null key和null value。

你可能感兴趣的:(面试查漏补缺)