百度测试开发岗位面试真题

1.java语言中接口和抽象类表示什么

  • 两者的特点
    1. 抽象类用于描述类的共同性和行为,可以有成员变量、构造方法和具体方法。通常用于明显继承关系的场景
    2. 接口用于定义行为规范,可以多实现,只能有常量和抽象方法(java 8以后可以有默认方法和静态方法)。适用于定义类的能力或功能。
  • 两者的区别
    1. 实现方式:实现接口的关键字implements,继承抽象类的关键字extends。一个类可以实现多个接口,但一个类只能继承一个抽象类。所以,使用接口可以间接地实现多重继承
    2. 方法方式:接口只有定义,不能有方法的实现,java1.8中可以定义default方法体,而抽象类可以有定义与实现,方法可在抽象类中实现
    3. 访问修饰符:接口成员变量默认为public static final,必须赋初值,不能被修改;接口中的抽象方法默认是public abstract,从java 8起接口可以定义default和static方法(带方法体),从java 9起还可以定义private方法用于辅助default方法的实现。抽象类中成员变量默认为default访问权限,可在子类中被重新定义,也可被重新赋值。抽象方法被abstract修饰,不能被private、static、synchronized和native等修饰,必须以分号结尾,不带花括号。
    4. 变量:抽象类可以包含实例变量和静态变量,而接口只能包含常量(即静态变量)

2.接口里面可以定义哪些方法?

  • 抽象方法

抽象方法是接口的核心部分,所有实现接口的类都必须实现这些方法。抽象方法默认是public和abstract,这些修饰符可以省略。

java 复制代码
public interface Animal{
    void makeSound();
}
  • 默认方法

默认方法是在java 8中引入的,允许接口提供具体实现。实现类可以选择重写默认方法。

java 复制代码
public interface Animal{
    void makeSound();

    default void sleep(){
        System.out.println("Sleeping...")
    }
}
  • 静态方法

静态方法也是在java 8中引入的,它们属于接口本身,可以通过接口名直接调用,而不需要实现类的对象。

java 复制代码
public interface Animal{
    void makeSound();

    static void staticMethod(){
        System.out.pritln("Static method in interface");
   }
}
  • 私有方法

私有方法是在java 9中引入的,用于在接口中为默认方法或其他私有方法提供辅助功能。这些方法不能被实现类访问,只能在接口内部使用。

java 复制代码
public interface Animal{
    void makeSound();

    default void sleep(){
        System.out.println("Sleeping...");
        logSleep();
   }

    private void logSleep(){
        System.out.println("Logging sleep");
    }
}

public interface Animal{
    void makeSound();
}

3.List、set和map是什么,有什么区别?

java里list和set都是collection的核心子接口,最核心的区别就是「是否允许元素重复」和「是否保证有序」,原理和使用场景也因此完全不同。

list是有序、可重复、有索引

set不可重复、大多是无序的

  • map存储方式是键值对,通过键来查找值
  • 键不能重复,值可以重复
  • 一个键最多只能映射到一个值
  • 它不是collection接口的子接口,是独立的顶级接口
  • 常见实现类:HashMap、LinkedHashMap和TreeMap

编程题

找出字符串中无重复字符的最长子串长度(对应leetcode3. 无重复字符的最长子串