JAVASE面试宝典

JAVASE面试宝典
摘要由CSDN通过智能技术生成

一.面对对象

1.面向对象的深刻理解

面向对象是一种编程思想,利用类或者方法等的封装,继承,多态来进行编程设计.
封装就是,不直接访问对象的属性和功能,把属性或者功能抽取出来,封装成对象,可以提高代码的复用性
继承:子类可以继承父类,只可以单继承,子类拥有父类所有的功能和属性,还可以扩展出新的功能,也可以提高代码的复用性
多态:父类引用指向子类实现,条件:继承,重写,向上转型

2.JRE,JDK,JVM的区别

JDK是JAVA开发工具包,JDK包括JRE和JVM
JRE是开发环境,包括JVM和核心类库
JVM是虚拟机,是JAVA实现跨平台最核心的部分

3.JDK1.8之前和之后定义接口不同

Lambda 表达式:Lambda 允许把函数作为一个方法的参数。
方法引用:方法引用允许直接引用已有 Java 类或对象的方法或构造方法
函数式接口:有且仅有一个抽象方法的接口叫做函数式接口,函数式接口可以被隐式转换为Lambda 表达式。
Stream API :这种风格将要处理的元素集合看作一种流,流在管道中传输,并且可以在管道的节点上进行处理,比如筛选,排序,聚合等。
JDK8 开始,允许接口中存在一个或多个默认非抽象方法和静态方法
日期/时间类改进:之前的 JDK 自带的日期处理类非常不方便, JDK8 出现之后这个改观了很多,比如日期时间的创建、比较、调整、格式化、时间间隔等。
Optional 类:Optional 类是一个可以为 null 的容器对象。
Java8 Base64 实现:Java 8 内置了 Base64 编码的编码器和解码器

4.接口和抽象类有什么不同

实现方法:抽象类使用extends来继承,接口使用implements来实现接口
构造函数:抽象类可以有构造函数,接口不能有
抽象类可有有main方法,而且还能运行他,接口没有main方法
实现数量:类可以实现多个接口,但是只能继承一个抽象类
访问修饰符:接口中默认使用的是public,抽象类可以使用任意的修饰符

5.final、finally、finalize区别,什么作用?

final修饰的类不能被继承,修饰的方法不行被重写,修饰的变量为常量,不能被重新赋值
finally一般出现在try-catch中,不管是不是出现异常,它后面的代码都能执行
finalize是object类的方法,用在垃圾回收站中

6.局部变量和成员变量的区别

局部变量是在方法块内部存在的变量只有在方法内部可以使用,他没有默认值使用的时候需要手动赋值,成员变量是在类中的变量,整个类都可以使用,成员变量有默认值,如果没有赋值会使用默认值.
局部变量在栈内存中,成员变量在堆内存中,局部变量随着方法进栈而诞生,随着方法出栈消失,成员变量在堆内存中随着方法创建而诞生,随着对象垃圾回收(垃圾回收机制)而消失.

7.值传递和引用传递的区别

指的是在方法被调用时,将实参赋值给形参一份,基本数据类型就是储存的数据本身,所以是值传递,引用数据类型储存的是对象的地址,所以叫引用传递.

8.==和equals的区别

==号在基本类型中比较的是内容,引用类型中比较的是地址值
equals默认情况下比较的是引用类型的地址值,但是equals可以被重写,重写之后比较的就是对象的值

9.hashcode和equals的区别

hashcode和equals都是object类中的方法,equals默认比较的是地址值是否相同,hashcode是基于native方法实现的,底层是通过hash函数返回一个hash值进行比较,在大量需要比较的时候先进行hash值的比较,如果hash值不同,就没必要用equals进行比较,如果hash值相同,再用equals进行比较,可以提高效率.提高可靠性.

10.重载和重写的区别

重载:发生在同一个类中,方法名必须相同,参数类型,数量,顺序,返回值和修饰符可以不同.
重写,发生在子类继承父类中,方法名和参数列表必须相同,返回值范围,异常小于父类,修饰符要大于等于父类,如果父类使用的是private就不能重写该方法.

11.JAVA的数据类型

整形:byte,short,int,long
浮点型:double
布尔型:boolean
字符型:char

12.包装类和基础类区别

基础类基本都对应一个包装类,包装类的值可以为null基本类型不可以
基本类型占用内存更小,其效率更高
相同内容下,包装类型生成的是两个对象,其中的地址值不同
包装类可以成为泛型,基本类型不行

13.为什么要提供包装类

某些方法的参数必须是对象,为了让基本数据类型作为参数,所以提供了包装类,还可以实现字符串和基本数据类型之间的转换.

14.包装类和基础类型怎么转换

自动装箱和拆箱
装箱:把基本数据类型装换为对应的包装类
拆箱:把包装类转换为对应的基本数据类型

15.构造器代码块,局部代码块,静态代码块的执行顺序和执行次数

执行顺序是:
静态代码块>构造器代码块>局部代码块
静态代码块:当类加载的时候执行,如果类中有多个静态代码块,按照书写顺序执行
构造器代码块:对象被创建的之前执行,优先于构造方法,如果类中有多个代码块的时候按照书写顺序执行.
局部代码块:当方法执行的时候执行,如果方法有多个局部代码块,按照书写顺序执行.
执行次数:
静态代码块只执行一次,构造器代码块每次创建对象都会执行,局部代码块每次调用方法都会执行

16.构造代码块的作用

1.可以把所有的构造方法公共的代码放在构造代码块中
2.匿名内部类的初始化操作,匿名内部类没有明显的构造方法

17.Integer和String是否可以被继承

不可以,因为这两个类都是被final修饰的类

18.Integer缓存区间?什么时候触发缓存区间?

缓存区间是-128到127之间,如果在这个之间java内部会对值进行缓存,如果超出这个范围那么,会在堆内存中new一个对象来储存值

09.String str = “abc” 和 String str = new String(“abc”)区别?

String str = "abc"如果常量池中没有abc那么就在常量池中创建一个,str最后指向常量池
String str = new String(“abc”)如果常量池中没有abc那么就在常量池中创建一个abc,然后再堆内存中创建一个对象,将常量池的abc复制一份过去,str最终指向堆内存.

20.String、StringBuffer、StringBuilder区别?是否线程安全?怎么做的到线程安全?

是否可以改变:String底层是用char数组来维持的,被final修饰了,每次改变都是返回一个新的对象,StringBuffer、StringBuilder底层也是char数组,但是没有用final修饰,每次改变都是在原对象的基础上进行改变.不会返回新的对象
线程是否安全:
StringBuffer所有的方法都使用synchronized进行修饰线程安全
String是不可变的字符串,线程安全
StringBuilder线程不安全
使用场景:
如果不经常改变字符串的值就是用string
又改变需求的不考虑线程安全的用StringBuilder,考虑线程安全的用StringBuffer

21.包装类,Math,String常用的方法有哪些

每个包装类都已一个对应的基本类型
还有将字符串转化为基本类型的方法比如转化为I=int类型的parselnt,浮点类型额parseDouble
Math中常用的方法有
abs求绝对值
max最大值
min最小值
ceil,flioor向上向下取整等

22.&和&&,|和||的区别是什么

这两个符号的话单个使用是操作符,两个一起用的话就是逻辑操作符
&&号左边如果是false的话右边就不再继续执行,是ture的话就反着
||左边如果是false的话右边还要继续执行,反之

23.java中的深克隆和浅克隆的区别,怎么实现

浅克隆的话就是将对象的基本内容赋值过去,引用类型的话两个对象指的是同一个地址值,深克隆的话就是重新开辟一个空间,引用类型不指向同一个地址.
深克隆的话就是有三种方法
1.重写clone方法clone中嵌套clone
2.使用序列化流
3.使用开源工具类比如json

24.Comparable 和Comparator的区别,分别说出使⽤场景?

1.comparable是lang包下的,Comparator是util包下的
2.comparable是内在比较器,comparator是外在比较器
3.comparable接口必须重写compareTo方法,comparator接口必须重写compar方法
4.两个同时存在的话comparator的优先级高
5.comparable使用的话需要修改原先的实体类,是一种自然排序,comparator不需要修改实体类,应用更广泛.

25.object类和泛型的区别,说出泛型的执行机制,为什么要是用泛型?

object类的话没办法保证返回类型,每次使用的时候还需要进行强转,还有可能抛出类型转换异常.
泛型的主要作用之一就是指定容器,编译器运行的时候自动监测类型安全,不需要进行强制类型转换,避免隐形的类型转换异常

26.Error和Exception有什么区别;

都是Throwable的类,Error是程序无法解决的异常,Exception是程序可以解决的异常.

27.什么是反射

反射就是动态获取信息,或者动态调用方法的一种机制,jvm会为每个类提供一个.class实例,通过该实例就可以访问到访问到该类的信息,通过api完成各种需求.

28.设计模式

1.创建型模式 提供了对象的创建过程中的各种问题的解决方法总结:单例模式,抽象工厂模式,原型模式,构建者模式,工厂方法模式,
2.结构性模式 对类在设计上的总结,比较

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值