在保研前参加了人人的面试,三面后了无音讯了,然后面试前也准备了一些知识储备,包括Java集合,线程以及面试经常会问的一些基础问题,整理一下。
Java基础部分
1.重载和重写区别
- 重载:同一个类,相同名称方法,参数类型,个数,顺序,返回值,访问顺序不同,发生在编译时。
- 重写:发生在父子类中,方法名,参数相同(不同类),返回值的访问范围要小于父类,抛出异常的范围小于父类,访问修饰符范围大于父类,如果private则不能重写。
private:只有本类方法可以访问,不能重写,不可直接访问。
friendly:包访问权限,子类不可访问。
protect:同包,子类均可,其他包不可访问。
2.String、StringBuffer、StringBuild的区别
String:底层由final char[]value 适合操作少量数据
StringBuffer:底层由char[]value 其操作方法有sychronized修饰,线程安全。
StringBuild:底层由char[]value 线程不安全,可扩展,初始长度16。
3.自动装箱/自动拆箱
装箱:将基本类型用他们对应的引用类型包装。int->Integer
拆箱:将引用类型转换成基本类型。
4.equals与==
equals来自object类,对于其方法在开发手册这样描述:对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true(x == y 具有值 true)。 也就是和==一样的。
但是Java中很多引用类型都将equals方法重写了,对于String类型来说,它的equals不再是==而实比较其内容是否相等。
注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。
5.final、finally、finalize区别
final:
- 修饰变量:表示该变量的值不可更改(就是常量)
- 修饰引用类型变量:表示该引用变量初始化后不能指向其他对象。
- 修饰类:表示该类不能被继承,且其成员都默认为final。
(早期final修饰的方法会转换为内嵌调用,提高效率)
finally:使用在try/catch中。
finalize:Object类中的方法,在GC内存清理对象时被调用。
6.接口和抽象类
接口:只能定义,不能实现,都为public,抽象类可以有非抽象方法。注意:Java8新变化中接口允许添加默认实现方法。接口中的变量为static final修饰必须初始化,抽象类中不一定。
抽象类:除了不能实现与普通Java类并无区别。
一个类可以实现多个接口,但是只能实现一个抽象类。
接口是行为的抽象,抽象类是对象的抽象,是一种模板设计。
7.Java对象的初始化顺序。
单个类:静态(成员、代码块)>成员变量>构造器
调用构造函数,会先调用父类的构造函数,默认调用无参构造函数,所以一般都要写。
8.true、false、null是关键字吗? 不是
true/false是布尔常量。
null是引用类型字面变量。
9.Integer的缓存机制
在Integer类中封装了一个-128127之间的整型对象,也就是说,当年创建值为-128127之间的对象的时候,会返回同一个对象的引用。
10.String类型的创建方式
String str=new String(“helloworld”);
至少创建了一个对象 ,可能创建了两个对象。
原因:我们需要把这句话拆分成为两句。new String()和String str=。new肯定创建了一个对象的,String str=“helloworld”,这句话首先在字符串常量池中找,看是否存在该对象,如果存在则无需创建新 对象直接返回该对象的引用;不存在,则创建一个对象,加入到字符串常量池中,返回它的引用。
11.后续更新
本文整理了保研前参加人人面试的Java基础知识储备,涵盖了重载与重写、String与StringBuilder的区别、自动装箱拆箱、equals与==的使用、final与finally的差异、接口与抽象类的概念、对象初始化顺序等核心知识点。
3186

被折叠的 条评论
为什么被折叠?



