题目来源:知乎:慕课网:最全的BAT大厂面试题整理
(一)java基础面试知识点:
1.java中==和equals和hashCode的区别
- == :比较两个对象是否相等。对于基本类型来说,是比较值是否相等;对于引用类型来说,是比较两个引用对象的地址是否相等;
- equals:比较两个对象的引用是否相等,即比较两个引用是否指向同一对象。不能用于基本数据类型,对于未重写过的equals,比较的还是对象的地址是否相同,重写后的equals比较的是对象的内容是否相同;
- hashCode:用于比较两个对象是否相等。Object类的hashCode方法是将对象的物理地址转换成一个整数,再将这个整数经过hash函数的计算,得到该对象在hash表中的位置。
- 推荐阅读:hashcode详解
2. int、char、long各占多少字节数
- int:占4个字节数(float)
- char:占2个字节数(short)
- long:占8个字节数(double)
3.int和Integer的区别
- int是基本数据类型,Integer是int的包装器类;
- int的默认值是0,Integer对象的默认值是null;
- 其他的一些关于int和Integer的知识,推荐大家看: 彻底让你明白 Integer 类和 int 基本数据类型的区别
4.谈谈对java多态的了解
- 由于存在继承关系,java允许子类对象可以向上转型为父类的对象
- 动态绑定
- 编译时类型和运行时类型不一致时,导致多态的发生
5.String、StringBuilder、StringBuffer的区别
- String类是final类,不可被继承,当需要改变字符串的内容时,String类的方法都会返回一个新的String对象。因此,在做字符串拼接的操作时,若在循环中使用重载的“+”或者concat()方法,将产生大量需要垃圾回收的中间对象。
- StringBuilder是在1.5版本之后出现的类,高效率的进行字符串的拼接,运行效率高于StringBuffer,但是是线程不安全的。
- StringBuffer也可以高效的进行字符串的拼接工作,是线程安全的。
6.什么是内部类?内部类的作用
- 内部类,就是定义在类中的类,是编译时的语法,编译后生成的两个类彼此独立。
- 内部类配合接口使用,来强制做到弱耦合。内部类可以自由的访问外部类的成员,包括私有成员
7.抽象类和接口的区别
- abstract 关键字修饰的类就是抽象类,倘若一个类中存在至少一个抽象方法,该类必须被声明为抽象类,不可生成对象,必须被继承(extends关键字)使用,一个类只能继承一个类(单继承);抽象类中可以有方法的实现。
- 接口不是类,是一种协议,用interface关键字声明,接口中的所有方法必须都是public、抽象的;所有字段默认都是public static final 的;实现接口的关键字implements,一个类可以实现多个接口(多实现),接口间可以有继承关系;接口中不能有方法的实现。
8.抽象类的意义
9.抽象类和与接口的应用场景
10.抽象类是否可以没有方法和属性?
- 抽象类可以没有方法和属性;
- 若一个类中有一个抽象方法,这个类就必须是抽象类;但抽象类中可以没有抽象方法;
11.接口的意义
- 提供了统一的标准
12.泛型中的extends和super的区别
- <? extends E>,表示容器中的类型是E的子类,即向下匹配
- <? super E>,表示容器中的类型是E的父类,即向上匹配
13.父类的静态方法能否被子类重写
子类中可以存在与父类相同的方法签名,且必须为静态,但由于是静态方法,方法与任何对象无关,只与其所在的类相关,因此子类中的方法并不能覆盖父类中的方法
14.进程和线程的区别
- 进程:正在运行的程序,动态的概念
- 线程:可以看作是轻量级的进程
15.final、finally、finalize的区别
- final是Java中的关键字,可以修饰类、方法和字段;修饰类时,表明该类不可被继承(final类的所有方法默认是final的);修饰方法时,表明该方法不可被覆盖(private或static方法默认是final方法);修饰字段时,对于基本数据类型,表明其值不可改变,对于引用类型,表明该对象的引用不可变
- finally,在捕获异常的try{}catch(){}块的最后,finally{},表示无论try中的块有没有异常发生,都会执行finally块中的内容
- finalize是Object类的一个方法,当对象被垃圾收集的时候,最后会由JVM调用这个对象的finalize()方法
16.序列化的方式
- 实现Serializable接口,这个接口中没有任何抽象方法,只是用作标记
- 序列化:把对象放在流中进行传输
17.Serializable和Parcelable的区别
18.静态属性和静态方法是否可以被继承?是否可以被重写?以及原因?
- 静态属性和静态方法可以被继承。原因:在继承关系中,子类继承父类所有的属性和方法,对于private修饰的属性或方法,虽然子类可以继承,但子类却是不可调用的。
- 静态方法不可以被重写。原因:见13。
静态内部类的设计意图
成员内部类、静态内部类、局部内部类和匿名内部类的理解,以及项目中的应用
- 内部类可以弥补java单继承的缺陷
谈谈对kotlin的理解
闭包和局部内部类的区别
String转换成Integer的方式及原理
- Integer.valueOf(String str)
- Integer.parseInt(String str)