由于一直都在面试找工作,所以在面试的过程中,遇到的公司不同,所做的要求也都不一样,技术面问到的问题也都不尽一致。所以在此记录一下每一次面试所会遇到的问题,方便自己总结经验。
- 基础类最重要
- 线程多次遇到
- 框架一直都问
基础知识
JAVA的八大基础类型
种类 | 类型 |
---|---|
整型 | byte、short、int、long |
浮点型 | float、double |
逻辑型 | boolean |
字符型 | char |
其中它们按照字节位数来划分
位数 | 类型 |
---|---|
8位 | byte |
16位 | short、char |
32位 | int、float |
64位 | long、double |
其他 | boolean(true、false) |
面向对象的三大特征
特征:多态、封装和继承
其中在多次面试中都有问到多态的例子
多态性:允许不同对象对于同一个消息做出不同的行为方式
多态的实现方式有:接口的实现、继承父类对方法重写、同一方法内的方法重载
String、StringBuffer和StringBuilder的区别
这也是一个经常会被问到的问题,对于三者的比较一直都会在面试中出现,现在对他们的区别做一个简单的总结
- String对象是不可变的,StringBuffer和StringBuilder是可变的对象,所以在对他们进行改变的时候,String其实是生成了一个新的对象,通过指针来指向新的对象,而其他两个是对对象本身进行操作,并没有产生新的对象。
- StringBuffer和StringBuilder的区别:StringBuffer是线程安全的,StringBuilder是线程不安全的。StringBuffer中的方法加了同步锁,所以牺牲了速度保证线程安全。
int和Integer的区别
JAVA为了编程的方便,引入基本的数据类型,如以上所说的八大基本类型,同时为了能够把这些基本的数据类型当作是对象来使用,同时也为每一个基本数据类型封包装了包装类型。
- 基本数据类型:byte、short、int、long、float、double、char、boolean
- 相对应的包装类型:Byte、Short、Integer、Long、Float、Double、Charater
- 为什么引入包装类型:在进行类型转换的时候要用到对象引用方法(下次更新添加各种类型相互之间的转换)
- 给出两个Integer对象的值,比较他们返回的结果是否相等,例如以下代码。
public class Test {
public static void main(String[] args) {
Integer f1 = 100, f2 = 100, f3 = 150, f4 = 150;
System.out.println(f1 == f2);
System.out.println(f3 == f4);
}
}
以上输出的结果为第一个为true,第二个为false。由于int整型的取值范围为-128到127之间,所以在这之间的数值是直接通过引用Integer取值池中的值,而超过这个范围的会new一个Integer对象,而两个值虽然一样,但是他们的地址不一样,所以返回结果为false。
=和equals的区别
比较类型和比较值是否相同,无非就是比较两种:基本数据的比较和引用对象的比较。
- 基本数据类型存储在内存中的栈中,而对象引用是栈只存储引用类型的地址,而本身的值是存储在堆中的。
- ==对于基本数据类型比较的是他们两个变量本身的值是否相等,而对于引用对象比较的是两个变量存储在栈中的地址是否一致。
- equals表示的是两个变量是否是对同一个对象的引用,也就是比较他们存储在堆中的内容。
- equals比较返回为true的两个对象==不一定返回true
post和get的区别
区别是面试的时候最经常遇到的问题了,一下子就能看出一个人的基本