Java面试题(基础篇)

Java的要求现在是越来越高了。
主要原因呢还是太卷,同样是 CURD 的活,谁更熟练要谁。不背点八股文真的很难过面试。
每个问题我都做了详细版的回答和简答供大家参考。

1.JDK动态代理和CGLIB动态代理的区别

JDK动态代理和CGLIB动态代理的区别
1.JDK动态代理只能对实现了接口的类生成代理,而不能针对类
2.CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法(继承)

2.静态代理和动态代理的区别

静态代理和动态代理的区别
1.静态代理中代理类在编译期就已经确定,而动态代理则是JVM运行时动态生成,静态代理的效 率相对动态代理来说相对高一些,但是静态代理代码冗余大,一单需要修改接口,代理类和委 托类都需要改。
2.动态代理是在程序运行时运用反射机制动态创建而成。

3.ArrayList和LinkedList有什么区别?

ArrayList和LinkedList有什么区别
总结成一句话就是:ArrayList底层是数组,查询快、增删慢;LinkedList底层是链表,查询慢、增删快(并不绝对)。

4.重写和重载的区别

重写和重载的区别
重载是定义相同的方法名,参数不同,重写是子类重写父类的方法;重载是在一个类中,重写是子类与父类之间;重载是编译时的多态性,重写时运行时的多态性。

5.Java 8的接口新增了哪些特性?

Java 8的接口新增了哪些特性
增加了default方法和static方法,这2种方法可以有方法体。

6. 在Java中定义一个不做事且没有参数的构造方法的作用

Java程序在执行子类的构造方法之前,如果没有用super()来调用父类特定的构造方法,则会 调用父类中“没有参数的构造方法”。因此,如果父类中只定义了有参数的构造方法,而在子类 的构造方法中又没有用super()来调用父类中特定的构造方法,则编译时将发生错误,因为 Java程序在父类中找不到没有参数的构造方法可供执行。解决办法是在父类里加上一个不做事 且没有参数的构造方法。

7.static关键字

static关键字

8.this与super的区别

this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针。
super可以理解为是指向自己超(父)类对象的一个指针,而这个超类指的是离自己最近的一个父类。

9.new一个对象的过程和clone一个对象的区别?

new操作符的本意是分配内存,程序执行 到new操作时,首先去看new操作符后面的类型,因为知道了类型才能知道要分配多大的内存空间。分配完内存之后,再调用构造函数,填充对象的各个域,这一步叫做对象的初始化,构造方法返回后,一个对象创建完毕,可以把它引用(地址)发布到外部,在外部就可以使用这个引用操作这个对象。
clone 在第一步是和 new 相似的,都是分配内存,调用 clone 方法时,分配的内存和原对象 (即调用 clone 方法的对象)相同,然后再使用原对象中对应的各个域,填充新对象的域,填 充完成之后,clone方法返回,一个新的相同的对象被创建,同样可以把这个新对象的引用发 布到外部。

10.构造器(constructor)是否可被重写(override)?

构造器不能被继承,因此不能被重写,但可以被重载。

11.说说深克隆和浅克隆的区别?

浅克隆:创建一个新对象,新对象的属性和原来对象完全相同,对于非基本类型属性,仍指向 原有属性所指向的对象的内存地址。

深克隆:创建一个新对象,属性中引用的其他对象也会被克隆,不再指向原有对象地址。

12.Java中为什么要用 clone?

在实际编程过程中,我们常常要遇到这种情况:有一个对象 A,在某一时刻 A 中已经包含了一 些有效值,此时可能会需要一个和 A 完全相同新对象 B,并且此后对 B 任何改动都不会影响到 A 中的值,也就是说,A 与 B 是两个独立的对象,但 B 的初始值是由 A 对象确定的。在 Java 语言中,用简单的赋值语句是不能满足这种需求的。要满足这种需求虽然有很多途径,但 clone()方法是其中最简单,也是最高效的手段。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值