可选标题:面了一个应届生,我问了这些 Java 基础问题。
Java 中有哪 8 种基本数据类型?它们的默认值和占用的空间大小知道不? 说说这 8 种基本数据类型对应的包装类型。
💡 提示:Java 中有 8 种基本数据类型,分别为:
- 6 种数字类型 :
byte
、short
、int
、long
、float
、double
- 1 种字符类型:
char
- 1 种布尔型:
boolean
。
包装类型的常量池技术了解么?
💡 提示:Java 基本类型的包装类的大部分(Byte
,Short
,Integer
,Long
,Character
,Boolean
)都实现了常量池技术。
🌈 拓展:整型包装类对象之间值的比较应该使用 equals
方法
为什么要有包装类型?
💡 提示: 基本类型有默认值、泛型参数不能是基本类型
什么是自动拆装箱?原理?
💡 提示:基本类型和包装类型之间的互转。装箱其实就是调用了 包装类的valueOf()
方法,拆箱其实就是调用了 xxxValue()
方法。
遇到过自动拆箱引发的 NPE 问题吗?
💡 提示:两个常见的场景:
- 数据库的查询结果可能是 null,因为自动拆箱,用基本数据类型接收有 NPE 风险
- 三目运算符使用不当会导致诡异的 NPE 异常
**String**
、**StringBuffer**
和 **StringBuilder**
的区别是什么? **String**
为什么是不可变的?
💡 提示:可以从可变性、线程安全性、性能这几个角度来回答。
重载和重写的区别?
💡 提示:可以从下面几个角度来回答:
- 发生范围
- 参数列表
- 返回值类型
- 异常
- 访问修饰符
- 发生阶段
**==**
和 **equals()**
的区别
💡 提示:**==**
对于基本类型和引用类型的作用效果是不同的,**equals()**
不能用于判断基本数据类型的变量,只能用来判断两个对象是否相等。equals()
方法存在两种使用情况:
- 类没有重写
**equals()**
方法 :通过equals()
比较该类的两个对象时,等价于通过“==”比较这两个对象,使用的默认是Object
类equals()
方法。 - 类重写了
**equals()**
方法 :一般我们都重写equals()
方法来比较两个对象中的属性是否相等;若它们的属性相等,则返回 true(即,认为这两个对象相等)。
Java 反射?反射有什么优点/缺点?你是怎么理解反射的(为什么框架需要反射)?
💡 提示: 想想你平时使用框架为啥能够如此方便。想想动态代理以及注解和反射之间的关系。
谈谈对 Java 注解的理解,解决了什么问题?
💡 提示: 想想你平时使用框架为啥能够如此方便。另外,需要注意注解的解析依赖于反射机制,务必要提前把反射机制搞懂。
Java 泛型了解么?泛型的作用?什么是类型擦除?泛型有哪些限制?介绍一下常用的通配符?
💡 提示:
- 好处:编译期间的类型检测(安全)、可读性更好
- Java 的泛型是伪泛型
内部类了解吗?匿名内部类了解吗?
内部类分为下面 4 种:
- 成员内部类
- 静态内部类
- 局部(方法)内部类
- 匿名内部类
BIO,NIO,AIO 有什么区别?
IO 模型这块挺难理解的,需要很多计算机底层知识。建议小伙伴们克服困难,一定要把这个点搞明白。