阿里巴巴Java岗位一面面经
。面试主要是Java集合类和并发编程
- Java集合类ArrayList初始化时数组的默认长度是多少?
- ArrayList扩容时扩容多少倍?扩容后是用原来的数组还是新的数组?
- ArrayList是一个线程安全的集合类吗?
- 判断一个集合类是否为线程安全的机制是什么?
- 说一下Fail-Fast机制,结合源码说一下(如果可以的话)。
- ArrayList和LinkedList的使用场景。
- 说一下HashMap的底层数据结构。
- 说一下HashMap的存储逻辑(put()函数)。
- HashMap存储元素时key完全一样该怎么处理?
- HashMap的默认长度是多少?扩容是扩成几倍?
- 若两个key的hashcode值相同但equals不同,也就是说它们会插入到同一个桶里,新添加的节点是插入到已有元素的前面还是后面?
- 为什么JDK 1.7是头插法,JDK 1.8是尾插法?
- JDK 1.8的HashMap是否线程安全?
- 既然HashMap不是线程安全的类,有啥办法解决这个问题?
- ConcurrentHashMap和HashMap的区别?为什么ConcurrentHashMap会线程安全?
- ConcurrentHashMap虽然是线程安全的,但它也存在什么问题?
- 了解TreeMap吗?TreeMap最大的特点是什么?为什么已经有了HashMap了还要有TreeMap类?
- 说一下红黑树的特点。
面试官的问题非常细致,尤其是关于HashMap和ConcurrentHashMap的部分,考察了很多底层实现和线程安全机制。