跳到主要内容

中软国际

1. 重载和重写的区别

特性重载(Overloading)重写(Overriding)
定义同一个类中方法名相同参数列表不同子类中重新定义父类的非私有方法
作用提高代码复用,增强方法的灵活性实现运行时多态,改变父类方法行为
所在位置同一个类中父类和子类中
是否涉及继承无需继承必须继承
比较维度重载(Overloading)重写(Overriding)
方法名相同相同
参数列表必须不同(参数个数或类型不同)必须相同(参数、顺序、类型都一致)
返回值可以不同(不影响重载)必须相同(或是返回值的协变类型)
修饰符限制没有限制(private, static 都可)不能重写 private, static, final 方法
访问权限无要求子类方法的权限不能比父类小(如:父类是 protected,子类不能是 private
抛出异常无限制子类不能抛出比父类更大的检查异常
多态类型编译时多态(静态绑定)运行时多态(动态绑定)
public class Calculator {
public int add(int a, int b) {
return a + b;
}

public double add(double a, double b) {
return a + b;
}

public int add(int a, int b, int c) {
return a + b + c;
}
}

重写

class Animal {
public void makeSound() {
System.out.println("动物在叫");
}
}

class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("狗在叫:汪汪!");
}
}
public class Test {
public static void main(String[] args) {
Animal a = new Dog(); // 向上转型
a.makeSound(); // 输出:狗在叫:汪汪!(运行时多态)
}
}

2. 构造方法可以重载或重写吗

构造方法可以重载,不能重写。

构造方法重载指的是在一个类中可以定义多个构造方法,它们的方法名相同(都与类名一致),但参数列表不同(参数类型或数量不同)。

不能被重写的原因:

  • 构造方法不能被继承: 构造方法是用于创建类的对象实例的,构造方法的本质目的是初始化当前类的对象。子类无法继承父类的构造方法,因此谈不上重写
  • 重写必须基于继承: Java 中的方法重写是指子类重写父类的实例方法(非构造方法),构造方法不是普通方法,不能被子类继承或修改。

3. 清空一张表

TRUNCATE TABLE 表名;
  • 快速:比 DELETE 快很多,因为它是 DDL 操作,直接清空数据页。
  • 重置自增主键(AUTO_INCREMENT)
  • 不会触发 DELETE 触发器(Trigger)
  • 无法通过 WHERE 条件清除部分数据,是全表清除
  • 不能回滚(除非你使用的是 InnoDB 并开启了事务支持,但仍建议谨慎)。
DELETE FROM 表名;
  • DML 操作,可以被事务管理。
  • 可以回滚(如果在事务中执行)。
  • 保留自增主键的当前值(不会重置 AUTO_INCREMENT)。
  • 可以添加 WHERE 子句删除部分数据。

4. 查询前100行日志

head -n 100 /path/to/logfile.log

5. 如何进入一个容器

docker exec 命令允许你在运行中的容器中启动一个新的进程,通常用于进入容器内部。

docker exec -it <容器ID或容器名称> <命令>
  • -i:表示交互模式(保持标准输入流打开)。
  • -t:分配伪终端,通常与 -i 一起使用。
  • <命令>:容器中执行的命令,通常是一个交互式的 shell(如 /bin/bash/bin/sh)。