【牛客面经】SE基础部分

基础

关键字

面向对象

1. 对一个类不重写,它的equals()方法时如何比较的?

  • 比较的是对象的地址。

2. 请解释hashCode()和equals()方法有什么联系?

  • Java对象的equals方法和hashCode()方法的规定:
    • 相等(相同)的对象必须具有相等的哈希码(或者散列码)
    • 如果两个对象的hashCode相同,他们不一定相同

3. 请解释Java中的概念,什么是构造函数?什么是构造函数重载?什么是赋值构造函数?

  • 新对象被创建时,构造函数会被调用。每个类都有构造函数。在没有主动写构造函数的情况下,Java编译器会为这个类自动创建一个默认的无参构造函数。
  • Java中构造函数重载和方法重载类似。可以为一个类创建多个构造函数。每一个构造函数必须有它自己唯一的参数列表。
  • Java不支持向C++的复制构造函数。
  • tips:在创建有参构造函数后,若仍旧没有无参构造函数,java编译器不会自动创建无参构造函数。

4. 请说明Java中的方法覆盖(Overrding)和方法重载(Overload)是什么意思

  • 方法重载:在同一个类里面两个或者是多个方法的方法名相同但是参数不同。
  • 方法覆盖:子类重新定义了父类的方法。必须具有相同方法名,参数列表和返回类型。并且覆盖不会影响对原方法的访问。

**5. 请说明Query接口的list方法和iterate方法有什么区别 **

  • list()方法无法利用一级缓存和二级缓存(对缓存只写不读),它只能在开启查询缓存的前提下使用查询缓存;
  • iterate()方法可以充分利用缓存,如果目标数据只读或者读取频繁,使用iterate()方法可以减少性能开销。
  • list()方法不会引起N+1查询问题,而iterate()方法可能引起N+1查询问题

6.请你谈一下面向对象的“六原则一法则”

  • 单一职责原则:一个类只做它该做的事情。
  • 开闭原则:软件实体应当对拓展开放,对修改关闭。
  • 依赖倒转原则:面向接口编程
  • 里氏替换原则:任何时候都可以用子类型替换掉父类型。
  • 接口隔离原则:接口要小而专,绝不能大而全。
  • 合成聚合复用原则:优先使用聚合或合成关系复用代码。【is-a、has-a、use-a分别代表继承、关联、依赖】
  • 迪米特法则:迪米特法则又叫最少只是原则,一个对象应当对其他对象有尽可能少的了解。

7.如何通过反射获取和设置对象的私有字段的值

  • 通过类对象的getDeclaredField()方法获取字段(File)对象
  • 再通过字段对象的setAccessible(true)将其设置为可以访问
  • 接下来通过get/set方法获取/设置字段的值。
import java.lang.reflect.Method;
class MethodInvokeTest {
    public static void main(String[] args) throws Exception {
        String str = "hello";
    	Method m = str.getClass().getMethod("toUpperCase");
        System.out.println(m.invoke(str));  // HELLO
    }
}

8.说明重载和重写的区别。重载的方法能够根据返回类型进行区分?

  • 方法的重载和重写都是实现多态的方式,重载实现的是编译时的多态性,重写实现的是运行时的多态性。
  • 方法重载:同一个类里面两个或者是多个方法的方法名相同但是参数不同。
  • 方法覆盖:子类重新定义了父类的方法。必须具有相同方法名,参数列表和返回类型。并且覆盖不会影响对原方法的访问。
  • 重载对返回类型没有特殊的要求。

9.两个对象值相同(A.equals(B) == true),但却可有不同的hash code,该说法是否正确,为什么?

  • 不对,如果对象A和对象B满足A.euqals(B)==true,它们的哈希码(hashCode)应当相同。
  • Java对equals方法和hashCode方法的规定:
      1. 如果两个对象相同,那么他们的hashCode一定相同
      1. 如过两个对象的hashCode相同,他们不一定相同。

10.请说明内部类可以引用其他包含类的成员么,如果可以,有没有什么限制?

  • 一个内部类对象可以访问创建它的外部类对象的内容,内部类如果不是static的,那么它可以访问创建它的外部类对象的所有属性【非静态,可以访问所有外部类对象的所有属性】
  • 内部类如果是sattic的,即为nested class,那么它只可以访问创建它的外部类对象的所有static属性【静态,只能访问外部类对象多有静态属性】
  • 一般普通类只有public或package的访问修饰,而内部类可以实现static,protected,private等访问修饰。
  • 当从外部类继承的时候,内部类是不会被覆盖的,它们是完全独立的实体,每个都在自己的命名空间内,如果从内部类中明确地继承,就可以覆盖原来内部类的方法。

** 11.请说明JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?**

  • Java通过

集合

线程

JDK

反射

GC

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值