欢迎小伙伴订阅个人新专栏“html
开胃菜谱java
Hello,你好呀,我是灰小猿,一个超会写bug的程序猿,
通过多方面的深思熟虑,我仍是开了这样一个专栏“Java高薪面试宝典”,听着名字可能有些浮夸了,毕竟在坐的各位确定都是技术领域的大佬呀,在这个专栏中,我想和你们分享一些在java面试中常见的一些面试问题,还有咱们众多Java程序猿常常容易忽略或者在开发中经常会用到的一些问题,包括技术和管理等众多方面。
毕竟不少的面试都并不会让你直接的去讲述一个完整的项目的完成过程,而是对于在项目开发中常常会被程序员们忽略反而又比较重要的一些问题,甚至有时候还会拿一个看似很简单的问题来让咱们交智商税。可是不少时候呢,又偏偏是那些不太起眼的面试题,却让咱们与心爱的offer失之交臂。
因此考虑了好久以后,仍是想在这里出一个关于Java面试的专栏,来帮助你们解决和应对在面试中可能会遇到的那些坑,同时也是在对我本身在Java学习之路进行一个记录和总结,以前我也和你们分享了几个互联网面试常见的应对技巧,感兴趣的小伙伴能够看个人这篇文章“互联网面试六大常见问题及应对技巧,2021再也不入坑!”
在进行完整的学习以前,我先来和你们分享开胃小菜,Java面试中常见的几个小问题:
一、JDK、JRE、JVM是什么?
JDK:开发者提供的开发工具箱,是给程序开发者用的,它包括完整的jre、Java运行环境,还包括了其余供开发者使用的工具包。
JRE:运行时所必须的包依赖的环境都在jre中
JVM:当咱们运行一个程序时,JVM负责将字节码转换为特定机器代码,JVM提供了内存管理、垃圾回收和安全机制等,他独立于硬件和操做系统,正是java程序能够一次编写多处执行的缘由。
二、什么是面向对象
封装:封装把一个对象的属性私有化、同时提供一些能够被外界访问的属性的方法。
继承:
java是多单继承的,
子类拥有父类非private的属性和方法
子类能够拥有本身的属性和方法,即子类能够对父类进行扩展
子类能够用本身的方式实现父类的方法
多态:父类的引用指向子类
三、Java的数据类型有哪些?
不少人都会在这个看似简单的问题中入坑,一说到数据类型,不少人第一时间想到的就是int、char等类型,可是咱们仔细看题就会发现,题中所问的问题是数据类型,而不是基本数据类型。
数据类型有两种,分别是“基本数据类型”和“引用数据类型”
基本数据类型包括的内容以下表:
byte
short
int
long
double
float
char
boolean
字节大小
1
2
4
8
8
4
2
1
占位大小
8
16
32
64
64
32
16
8
而引用数据类型包括的是三种:类、接口、数组
那么在Java中为何会有“基本数据类型”和“引用数据类型”?
缘由是由于引用类型在堆里,基本类型在栈里,
栈空间小且连续,每每会被放在缓存。引用类型的高速缓存率高且要多一次解引用。
并且对象还要再多储存一个对象头,对基本数据类型来讲空间浪费率过高。
四、解释一下构造方法
构造方法有哪些规定?
构造方法名必须与类名一致
构造方法不举办任何返回值类型、关键字void也不能加入
任何类都有构造方法,若是没有显示的定义,则系统会为该类定义一个默认的无参构造器
若是显示的定义了构造器,系统就不会建立默认的不含参数的构造器了,
一个类中能够编写多个构造方法,构造方法之间构成重载关系。
五、如何理解方法的重载和重写?
对于方法的重载和重写,这是两个很是容易混淆的概念,因此在这里作了一个表格的对比:
重载
重写
发生在同一个类中
方法名必须相同、参数不一样,包括类型、个数、顺序,方法返回值和访问修饰符能够不一样。
发生在编译时
发生在父子类中
方法名、参数列表必须相同
返回值范围小于等于父类
访问修饰符范围大于等于父类
抛出的异常范围小于等于父类
以上是几个在Java面试中常见的概念型面试题,接下来再和你们分享几个对比类的面试题
六、解释this和super关键字
在this和super关键字使用过程当中有如下这些注意事项:
Super关键字用于从子类访问父类的变量和构造方法,也包含构造方法
Super调用父类中的其余构造方法时,调用时要放在构造方法的首行
this关键字用于引用类的当前实例,this能够调用当前类的构造方法
this调用本类中的其余构造方法时,也要放在首行
this和super都不能用在static方法中
七、解释字符串三剑客(String、StringBuilder、StringBuffer)
可变性
线程安全
性能
String
由final修饰,不可变
安全的
进行改变时,从新指向
StringBuilder
char[] value 可变
不安全
比StringBuffer有10%-15%的提高
StringBuffer
char[] value 可变
加锁、安全的
八、equals和 == 的区别
这个问题也是咱们在开发时经常使用的两个进行比较的方法,可是这两种方法你真的了解吗?
==:判断两个基本数据类型的值是否是相等,或两个引用类型对象的地址是否是相等
equals():判断是否用一个对象,更加灵活
接下来咱们来看一个经典的面试题实例:
public static void main(String[] args) {
Integer x = new Integer(500);
Integer y = new Integer(500);
System.out.println(x == y);
Integer i = 128;
Integer j = 128;
System.out.println(i == j);
Integer a = 127;
Integer b = 127;
System.out.println(a == b);
}
上面这个实例的运行结果以下:
第一个是false,缘由是由于:x和y是两个新的对象,因此这两个对象的地址是不一样的
而对于第二个和第三个,为何第一个是false,而第二个是true呢?缘由是由于integer在常量池中的存储范围是[-12八、127],127在这个范围以内,所以直接存储于常量池中,128不在这范围以内,因此会在堆中建立一个新的对象
九、解释接口和抽象类
接口是对行为的抽象,他是抽象方法的集合
接口不用被实例化,全部成员默认被public static final所修饰
接口中全部的方法,要么是抽象方法、要么是静态方法
抽象类和接口同样不能被实例化
抽象类中能够有一个或多个抽象方法,也能够不含有抽象方法
抽象类是对共有方法实现或者共有成员变量的抽取,主要经过继承的方式用于代码重用
在这里须要注意的是:从Java8开始,接口增长了对default method方法的支持,
Java9以后增长了对private default method方法的支持。也就是说在java8中接口中的default方法和static方法均可以有方法体的
以上就是我和你们分享的几个Java面试中常见的开胃小菜,其实从不少Java相关的面试中就能够看出,不少面试官更会注重于对Java基础的考核,毕竟任何的Java高级技术都是创建在基础框架之上的,以后我也会继续在这个专栏和你们分享关于在Java面试中常见的核心考点。
以为有用的小伙伴能够订阅专栏,
灰小猿陪你一块儿进步!