记录有关语言类的面试问题

有时不仅有大数据技术栈的面试问题,也会对像Java/Scala里面的一些使用产生一些问题,记录一下

Scala

1.可变和不可变集合有什么作用?

1
2
3
4
5
6
从官网的Doc中可以得出
Scala支同时持可变集合和不可变集合,不可变集合可以安全的并发访问
不可变集合是线程安全的
不可变集合仍然可以做一些类似的增加,删除,或者更新
但是实际上他返回了一个新的对象,这里面就是指返回了一个新的集合
而老的集合没有改变

Java

1.HashMap和TreeMap的区别

1
2
3
4
5
6
7
8
9
HashMap通过hashcode对其内容进行快速查找
HashMap中元素的排列顺序是不固定的
适用于在Map中插入,删除和定位元素
基于hash表实现

TreeMap中所有的元素都保持着某种固定的顺序
如果你需要得到一个有序的结果你就应该使TreeMap
适用于按自然顺序或自定义顺序遍历键
基于红黑树实现

2.ConcurrentHashMap是怎么实现的?

1
2
3
4
5
6
7
8
concurrent包中线程安全的哈希表,采用分段锁;
可以理解为把一个大的Map拆分成N个小的HashTable;
根据key.hashCode()来决定把key放到哪个HashTable中。
在ConcurrentHashMap中,就是把Map分成了N个Segment;
put和get的时候,都是现根据key.hashCode()算出放到哪个Segment中。

注意:
和HashMap的区别在于,ConcurrentHashMap的KV不允许为空。