详细版脑图
代码示例
提问环节
- Queue在Java中是什么?解决什么问题?是怎么实现的?
- ArrayDeque和LinkedList又是什么?解决了什么问题?它们底层分别是怎么实现Queue接口的?
- 实现队列的方式有两种,分别是:循环数组 和 链表,它们有什么区别?在什么场景下哪个效率更高(如何选择)?
- 为什么一般来说循环数组要比链表更高效?
- 在Java的API文档中有哪些以Abstract开头的类?它们分别又用来做什么?(最好有整理成图片,能够一目了然)
- Abstract开头的类是为类库实现者而设计的
- 比如:AbstractQueue类是为更方便设计自己的队列类(比实现Queue接口所有方法更简单)
- Collection在Java中是什么?解决了什么问题?是怎么实现的?
- Collection接口、Iterator接口、Iterable接口关系&区分
- Collection接口有一个iterator方法,返回实现了Iterator接口的对象
- Collection接口扩展了Iterable接口,因此标准类库中任何集合都可以使用”for each”循环,这是什么因果关系?没明白
- 常用的集合类有哪些?它们分别解决了什么问题?又是如何实现的?在哪些场景下如何选择?
- ArrayList是一种可以动态伸缩的索引序列,那么它底层是如何实现这种动态伸缩的?
- LinkedList是如何实现高效插入和删除的?
- HashMap底层是如何是实现的?
- Vector类和ArrayList类有什么区别?现在是否还需要用Vector类?在什么时候用?
- 一般要对集合进行随机访问,推荐使用数组或数组列表,而不要使用链表,因为数组和数组列表的访问效率比链表更高,这是为什么呢?它们底层是如何实现的?(以访问集合中第n个元素为例说明链表/数组/数组列表的底层区别)
- 公共的超类Object中的hashCode方法其底层是怎么实现的?获取到的值究竟是不是对象在内存中的地址?一般有几种获取散列码的方式?散列方法选择不当会产生的负面影响有哪些(比如散列码分布不均匀导致什么)?
- 散列冲突(哈希冲突)是什么?有几种解决方案?分别是怎么解决的(原理)?在散列集中是如何解决的?
- 散列集中的:散列码、桶、通的总数、桶数、桶的大小、散列冲突、负载因子、再散列概念区分及影响?
- 拓展问题:桶的大小默认是多少,为什么?负载因子默认是多少,为什么?桶数默认是多少,为什么?【默认值相关】
- 在Java SE 8中桶满时从链表转为平衡二叉树,那么平衡二叉树是什么?它解决什么问题?怎么实现的?
- 红黑树是什么?它解决什么问题?怎么实现的?
- 树集是一个有序集合,它是如何实现对集合进行遍历时能够按照排序后的顺序访问的?又是如何排序的?或者如何控制这个排序顺序?(以TreeSet类为例,剖析底层实现)
- 链表、数组、数组列表、散列集、树集、队列与双端队列、优先级队列它们各自的代表类分别是哪些?底层数据结构有什么差异?不同场景下该如何选择?
- 能否写几个简单的示例关于链表、数组、数组列表、散列集、树集、队列与双端队列、优先级队列的示例,更能体会它们之间的差别
- HashSet类和HashMap类有什么区别(底层实现)?TreeSet类和TreeMap类又有什么区别(底层实现)?(好容易混淆这些类,要在什么时候用哪些)
- HashMap类和TreeMap类是与映射相关的(键值对)
- 关于散列映射代表的类HashMap是什么?解决了什么问题?是怎么实现的?
- 关于树映射代表的类TreeMap是什么?解决了什么问题?是怎么实现的?
- Map.Entry接口是什么?解决哪些问题?
- HashMap和TreeMap获取映射的视图的三个方法是如何实现的?(keySet, entrySet, values) 简单说明即可
- HashMap和WeakHashMap有什么区别?WeakHashMap类解决了什么问题?又是怎么实现的?
- LinkedHashSet和LinkedHashMap类有什么区别?LinkedHashMap类是什么(链接散列映射)?它解决什么问题?底层是怎么实现的?“最近最少使用”原则又是怎么实现的?
- EnumSet和EnumMap类有什么区别?EnumMap又是什么?为了解决什么问题?底层如何实现的?
- 标识散列映射IdentityHashMap类是什么?解决了什么问题?是如何实现的?
- 说说集合包装器它底层是如何实现的?从原理出发来看它的表象(编译器是不是介入做了什么操作?)
- 为什么对子范围的操作如remove、clear会对整个列表产生影响?是怎么作用的?
- Collections类的一些不可修改视图是怎么实现的?它是如何检测视图被修改了呢?
- Collections类的checkedList方法是如何实现对列表的add添加异常检测的?
- 在映射视图中,可以通过键集的删除操作对原始映射进行更改,这是怎么实现的?
- Collections.sort方法和Arrays.sort方法它们底层是如何对元素进行排序的呢?用了哪些算法?
- 常用的算法有哪些?它们的原理是什么?(用Java实现每个算法)
- 遗留类Hashtable为什么不再推荐使用了?转而推荐使用HashMap或ConcurrentHashMap?
- Java遗留类还有哪些在高频使用?哪些不再推荐使用?为什么?