Skip to content

白板篇-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这个特性的理解?

注:课后讨论题回答后如果在答疑区讨论,给出你的答案我会抽一部分朋友的点评。

文章来源于自己总结和网络转载,内容如有任何问题,请大佬斧正!联系我