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。

    Java基础常见面试题整理

TreeMap

  • TreeMap基础二叉树数据结构存储数据,同时实现了SortedMap接口以保障元素顺序存取(默认升序,可自定义)。
  • 如何保证有序

ConcurrentHashMap为什么放弃了分段锁

HashSet

  • HashSet底层使用HashMap实现(public HashSet() { map = new HashMap<>(); })。
  • 内部是如何工作的

TreeSet

  • TreeSet底层使用TreeMap实现(public TreeSet() { this(new TreeMap<E,Object>()); })。

JVM 虚拟机

Java基础常见面试题整理

JVM中一次完整的GC流程是怎样的

简单说说你了解的类加载器,可以打破双亲委派么,怎么打破

深拷贝和浅拷贝实现

什么是序列化,怎么序列化,为什么序列化,反序列化会遇到什么问题,如何解决

IO模型有哪些

讲讲nio,它和bio,aio的区别是啥,谈谈reactor模型

反射的原理

反射中,Class.forName和ClassLoader区别

描述动态代理的几种实现方式,分别说出相应的优缺点

多线程

编写多线程程序有几种实现方式

怎么加锁

线程池