InterviewTop
Java方法冲突
原因
一个类可以实现多个接口,java8起可以定义静态方法,使用default关键字
可能会有相同签名的方法的实现,即方法冲突
如果发生方法冲突,java会调用优先级高的方法
总结:越具体越优先,越抽象的或离本类越远的优先级越低
类的优先级比接口高
子类的优先级比父类高
相同优先级
本类就必须重写方法,来显示的选择方法实现。
父类名.super.方法名()
不指定,编译会出错
public interface D extends A, B {
@Override
default void run() {
System.out.print("D run");
}
}
public class Son implements A, B, D {
public static void main(String[] args) {
new Son().run(); //打印 D run,优先调用子接口方法
}
}
public class Son implements A, B {
public static void main(String[] args) {
new Son().run();
}
@Override
public void run() {
A.super.run(); //打印 A run
}
}
内存溢出和内存泄漏
内存溢出:程序在申请内存时,此时已用内存过多,没有足够的剩余内存供其使用 内存泄漏:程序在申请内存后,不能完全释放已申请的内存空间
不稳定排序算法
希尔排序、直接选择排序、堆排序、快速排序
SQL优化方法
核心就是避免全表扫描,多走索引
尽量对利用字段较多的建立索引,即在where及order by涉及的列上建立索引
尽量避免在where字句中使用or、null值判断,in和 对字段使用函数操作
建立索引时需要多考虑最左匹配原则
内核态和用户态
为了避免操作系统和关键数据被用户程序破坏,将处理器的执行状态分为内核态和用户态
内核态是操作系统管理程序执行时所处的状态,能够执行包含特权指令在内的一系列指令,能够访问系统内所有的存储空间
用户态是用户程序执行时处理器所在的状态,不能执行特权指令,只能访问用户地址空间
用户程序运行在用户态,操作系统内核运行在内核态
集合并行流中的Spring事务会生效吗?
parallelStream():
ForkJoinPool.commonPool.worker
一般来说并行流会新建线程去执行方法,而Spring的事务只会保证主线程的事务会回滚,其他线程事务不会回滚
ThreadLocal实现的事务(保存的数据库连接)。 详见
所以不要再并行流中使用ThreadLocal、数据库事务
Last modified: 28 十一月 2023