中软国际
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)。