单小明同学

Results 3 comments of 单小明同学

**韭菜明路过,以前写的文章,看完文章还是不懂或者理解不清楚的可以回来找我。** [两篇文章让你彻底理解Java虚拟机(一)](https://www.jianshu.com/p/0e5878429081) [两篇文章让你彻底理解Java虚拟机(二)](https://www.jianshu.com/p/c9f2143a1b3b)

多谢沐风大佬的邀请,本人会一一回复面试题,抛砖引玉,借花献佛,如果有错误,还请各位指出。 在Android系统中,Handler是一个消息发送和处理机制的核心组件之一,与之配套的其他主要组件还有Looper和Message,MessageQueue。 Message和Runnable类是消息的载体。MessageQueue是消息等待的队列。Looper则负责从队列中取消息。 ## Handler有两个主要作用: + 1.安排调度(scheule)消息和可执行的runnable,可以立即执行,也可以安排在某个将来的时间点执行。 + 2.让某一个行为(action)在其他线程中执行。 Handler是由系统所提供的一种异步消息处理的常用方式,一般情况下不会发生内存泄露。 Handler为什么可能造成内存泄漏。这里的内存泄漏,常常指的是泄漏了Activity等组件。 ``` public class ShanActivity extends Activity{ public Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg);...

**回答的问题有些晚,但依然希望能抛砖引玉** HashMap和Hashtable都实现了Map接口,但决定用哪一个之前先要弄清楚它们之间的分别。主要的区别有:线程安全性,同步(synchronization),以及速度。 ### 继承的父类不同 HashMap和Hashtable不仅作者不同,而且连父类也是不一样的。HashMap是继承自AbstractMap类,而HashTable是继承自Dictionary类。不过它们都实现了同时实现了map、Cloneable(可复制)、Serializable(可序列化)这三个接口 ### 特点及优缺点比较: 1. HashMap几乎可以等价于Hashtable,除了HashMap是非synchronized的,并可以接受null(HashMap可以接受为null的键值(key)和值(value),而Hashtable则不行)。 2. HashMap是非synchronized,而Hashtable是synchronized,这意味着Hashtable是线程安全的,多个线程可以共享一个Hashtable;而如果没有正确的同步的话,多个线程是不能共享HashMap的。Java 5提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的扩展性更好。 3. 另一个区别是HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。所以当有其它线程改变了HashMap的结构(增加或者移除元素),将会抛出ConcurrentModificationException,但迭代器本身的remove()方法移除元素则不会抛出ConcurrentModificationException异常。但这并不是一个一定发生的行为,要看JVM。这条同样也是Enumeration和Iterator的区别。 4. 由于Hashtable是线程安全的也是synchronized,所以在单线程环境下它比HashMap要慢。如果你不需要同步,只需要单一线程,那么使用HashMap性能要好过Hashtable。 5. HashMap不能保证随着时间的推移Map中的元素次序是不变的。 ### 内部实现与操作问题 ### **HashTable** - 底层数组+链表实现,无论key还是value都**不能为null**,线程**安全**,实现线程安全的方式是在修改数据时锁住整个HashTable,效率低,ConcurrentHashMap做了相关优化 - 初始size为**11**,扩容:newsize = olesize*2+1 - 计算index的方法:index...