白板篇-Java编程总结(以及面试题)
集合部分
回答什么集合是什么?诸如此类的问题,首先要理解的是集合内部是什么数据结构——Tree、HashTable、LinkedList、Array、Stack、Queue……具体我们会在下一章继续讨论。
比如TreeMap是一颗二叉搜索树(具体来说是红黑树),查询和插入的时间复杂度分别是多少?——都是 O(logn)——见下一部分。
另一方面,就是侧重他们的抽象机制回答。比如说,ConcurrentHashMap是一种Map,然后Map是一种映射。Map内部有EntrySet(一种Set),Set是一种Collection;Collection可以Iterable。
课后讨论题:HashMap和HashSet的关系是什么?
Stream部分
Stream部分有很多的Monad操作,比如map\reduce\filter\takewhile,首先你要能够在面试中使用这些操作。建议查阅下资料(https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html)了解下所有的操作(英文不好可以开翻译模式)。
另一部分就是Monad的实现,可以说掌握了Monad的实现,就掌握了Stream设计的核心。
课后讨论题:简述下Stream的设计?
Buffer
缓冲区部分一方面需要理解缓冲区的设计,特别是flip\rewind\clear等几个操作,原理是什么? 另一部分,就是要理解缓冲区是如何提升性能的?
课后讨论题:说说这3个操作flip/rewind/clear?
反射部分
反射部分首先要理解如何获取元数据,获取元数据的基本方式和API。在ClassLoader部分我会还会继续讨论。
另一部分就是利用反射做很多事情,比如实现注解;实现AOP、实现代理等。
课后讨论题:Method.invoke慢,为什么慢?如何提速?
Java新特性
新特性部分,知识比较琐碎,建议读多读1-2遍,加深理解。面试中可能会出现类似:聊聊Java XXX新特性,这样的题目。
课后讨论题:谈谈你对FunctionalInterface这个特性的理解?
注:课后讨论题回答后如果在答疑区讨论,给出你的答案我会抽一部分朋友的点评。