JDK问题与解答
2019-02-08 本文已影响80人
Real_man
常见JDK问题
- 红黑树的实现原理和应用场景;
红黑树有几个性质:
- 节点是红色或黑色。
- 根是黑色。
- 所有叶子都是黑色(叶子是NIL节点)。
- 每个红色节点必须有两个黑色的子节点。(从每个叶子到根的所有路径上不能有两个连续的红色节点。)
- 从任一节点到其每个叶子的所有简单路径都包含相同数目的黑色节点。
HashMap在链表数量过长之后会转换成红黑树,TreeMap的实现。
待补充..
- NIO是什么?适用于何种场景?
IO | NIO |
---|---|
面向流 | 面向缓冲 |
阻塞IO | 非阻塞IO |
无 | 选择器 |
NIO好处:
- 事件驱动模型
- 避免多线程
- 单线程处理多任务
- 非阻塞I/O,I/O读写不再阻塞,而是返回0
- 基于block的传输,通常比基于流的传输更高效
- 更高级的IO函数,zero-copy
- IO多路复用大大提高了Java网络应用的可伸缩性和实用性
参考:Java NIO浅析
- Java9比Java8改进了什么?
- 模块化,Jigsaw
- 新的Http Client,支持Http2和WebSocket,性能提升
- Process API,进程的API,控制和管理操作系统的进程
- JShell
- 统一的JVM日志
- 发布-订阅框架
- HashMap内部的数据结构是什么?底层是怎么实现的?(还可能会延伸考察ConcurrentHashMap与HashMap、HashTable等,考察对技术细节的深入了解程度);
参考:
- 说说反射的用途及实现,反射是不是很慢,我们在项目中是否要避免使用反射;
反射机制指的是程序在运行时能够获取自身的信息。在java中,只要给定类的名字,那么就可以通过反射机制来获得类的所有属性和方法。
优点:反射提高了程序的灵活性和扩展性。
缺点:
- 代码可读性低及可维护性
- 反射代码执行的性能低
- 破坏了封装性。
获取反射:
1.根据对象的引用.getClass()方法获取:MyObject object=new MyObject(); Class c=object.getClass();
2.根据类名.class获取:Class c=MyObject.class;
3.根据Class中的静态方法Class.forName(); Class c=Class.forName("MyObject");
在业务代码中应该尽量避免使用反射,但是对于框架的反射要明白其使用方式。
-
说说自定义注解的场景及实现;
答:除了元注解,都是自定义注解。通过元注解定义出来的注解。
如我们常用的Override 、Autowire等。日常开发中也可以自定义一个注解,这些都是自定义注解。
@Target
@Retention
@Documented
@Inherited -
List 和 Map 区别,Arraylist 与 LinkedList 区别,ArrayList 与 Vector 区别;
-
Integer的缓存机制
image.png
最后
待完善