Java基础常见面试题整理
Java基本数据类型
- 字节型:byte (1字节),范围-128~127
- 短整型:short(2字节),范围-32768~32767
- 整形:int(4字节),范围-2147483648~2147483647
- 长整形:long(8字节), 范围-9223372036854775808L~9223372036854775807L
- 单精度浮点型:float(4字节),范围+/-3.4E+38F(6~7 个有效位)
- 双精度浮点型:double(8字节),范围+/-1.8E+308 (15 个有效位)
- 字符串:char(2字节)
- 布尔型:boolean(1字节)
讲讲类的实例化顺序
Java8新特性
final关键字
- final修饰成员变量表示常量,只能被赋值一次,赋值后值不再改变。
- final修饰的方法不能被重写,但可以被继承。
- final修饰类不能被继承。
- static final 修饰成员变量时,必须赋值,不可在构造赋值。
String,StringBuilder,StringBuffer的区别是什么
- String是字符串常量(内部private final char value[]),所以字符内容是不可改变的。
- 当+操作符操作已存在的变量时,其本质是创建了StringBuilder对象调用append方法。
- StringBuffer是线程安全的,而StringBuilder是非线程安全的。因此在效率上StringBuilder>StringBuffer。
- 相同之处:都是final类,都不允许被继承。
HashMap
- HashMap底层将key-value作为一个整体(Node对象)来进行处理,本质上就是Node的数组,存储值时使用key的hash值寻址存储,读取时根据key的hash值寻址读取,默认容量为16,每次扩容为当前的两倍。
- HashMap线程不安全,如需要保证线程安全可使用ConcurrentHashMap。
TreeMap
- TreeMap基础二叉树数据结构存储数据,同时实现了SortedMap接口以保障元素顺序存取(默认升序,可自定义)。
- 如何保证有序
ConcurrentHashMap为什么放弃了分段锁
HashSet
- HashSet底层使用HashMap实现(public HashSet() { map = new HashMap<>(); })。
- 内部是如何工作的
TreeSet
- TreeSet底层使用TreeMap实现(public TreeSet() { this(new TreeMap<E,Object>()); })。