Java面试题分享
1、hashmap的底层设计原理以及扩容规则,是否线程安全,如何线程安全。
jdk1.7以前采用数组加链表结构通过键哈希确定数组下标存键值对。jdk1.8及以后采用数组加链表加红黑树,链表超阈值且数组满足条件会转红黑树,哈希函数先取键 hashCode 值再运算使分布均匀,键值对以含键、值等信息的内部类存储,当元素数量达到负载因子与容量的乘积会扩容2倍。hashmap线程不安全,可以通过Collections.synchronizedMap 加同步锁也可以使用 ConcurrentHashMap来实现线程安全。
2、八大基本数据类型以及长度
整数类型的有byte 1字节,short 2字节,int 4字节,long 8字节
浮点类型有:float 4字节,double 8字节
字符类型:char 2字节
布尔类型:一般1字节储存false和true
3、多线程创建四种方式,以及callable和runnable的区别,如何获取返回值
继承Thread类、实现Runnable接口、使用Callable和Future接口、使用线程池创建多线程。
runnable中的run方法没有返回值,callable中的call方法有返回值可以通过Future的get方法获取。