又到面试季了,整理了一些较难的题目,如果想去拿更多薪水的同学,可以关注下。如果你感兴趣,可以在评论区写下你的答案,我可以帮你纠正。
TreeMap和HashMap的区别?
HashMap为什么会采用链表+红黑树的形式?
ConcurrentHashTable和HashTable的区别?
谈谈HashTable的扩容问题?
如何实现一个基于Key-Value的 LRU缓存?用什么数据集结构?
为什么Proxy.newProxyInstance要传入一个ClassLoader?
AOP用什么实现?
谈谈你对Stream的map函数的理解?
同步、异步和阻塞、非阻塞有什么关系?
读取文件是,缓冲区一般设置多大性能比较好?
NIO的Channel比缓冲区快吗?
缓冲区读到中文是乱码应该如何处理?
使用反射时,Method.invoke方法速度慢,有没有更好的方法?
热门评论
TreeMap和HashMap的区别?
1.TreeMap是红黑树实现,HashMap是数组 + 链表 + 红黑树的实现
2.由于TreeMap是红黑树实现,所以TreeMap有序
HashMap为什么会采用链表+红黑树的形式?
最坏情况可能出现一个链表过长,查询效率降低,为了提高查询效率,链表长度超过阈值时,会升级成红黑树
ConcurrentHashMap和Hashtable的区别?
两者都是线程安全的,但是Hashtable的实现是通过Synchronized实现,操作时会锁住整个hash表
ConcurrentHashMap主要思想是把锁细化。
1.7中ConcurrentHashMap相当于是在Hashtable的前面又加了一层segment,分段锁
1.8中ConcurrentHashMap改成了数组+链表+红黑树的实现,通过Synchronized和cas实现锁
谈谈HashTable的扩容问题?
扩容通过rehash()实现,当Hashtable中的元素大于阈值(capacity * loadFactor)时,触发扩容,调用rehash(),
newCapacity = capacity * 2 + 1; (为了取模时减少hash碰撞,长度尽量为素数或者奇数)
TreeMap和HashMap的区别?
1.TreeMap是红黑树实现,HashMap是数组 + 链表 + 红黑树的实现
2.由于TreeMap是红黑树实现,所以TreeMap有序
HashMap为什么会采用链表+红黑树的形式?
最坏情况可能出现一个链表过长,查询效率降低,为了提高查询效率,链表长度超过阈值时,会升级成红黑树
ConcurrentHashMap和Hashtable的区别?
两者都是线程安全的,但是Hashtable的实现是通过Synchronized实现,操作时会锁住整个hash表
ConcurrentHashMap主要思想是把锁细化。
1.7中ConcurrentHashMap相当于是在Hashtable的前面又加了一层segment,分段锁
1.8中ConcurrentHashMap改成了数组+链表+红黑树的实现,通过Synchronized和cas实现锁
谈谈HashTable的扩容问题?
扩容通过rehash()实现,当Hashtable中的元素大于阈值(capacity * loadFactor)时,触发扩容,调用rehash(),
newCapacity = capacity * 2 + 1; (为了取模时减少hash碰撞,长度尽量为素数或者奇数)
如何实现一个基于Key-Value的 LRU缓存?用什么数据集结构?
LinkedHashMap
1.达到临界点时,删除头部节点
2.修改节点元素时,先删除节点,再插入新节点
为什么Proxy.newProxyInstance要传入一个ClassLoader?
保证Proxy代理类的class生成时,能找到对应的接口的class文件
AOP用什么实现?
静态代理
动态代理(
JDK动态代理(面向接口,通过反射生成被代理接口实现新的匿名实现类),
CGLIB代理(面向类,继承被动态代理的类)
)
谈谈你对Stream的map函数的理解?
Stream->map->Stream