《面试题》

Java内存模型

Java的并发采用的是共享内存模型
Java内存模型:JMM决定一个线程对共享变量的写入何时对另一个线程可见
共享变量的通信方法 本地内存A(共享变量的副本) 主内存
JVM对Java内存模型的实现
Java内存模型把内存分成了两部分:线程栈区和堆区
每个线程都有自己的线程栈,线程栈包含了
1、当前线程执行的方法调用相关信息(调用栈)
2、当前方法的所有本地变量信息。
java内存模型

equals与==

  1. 对于==
    a.如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;
    b.如果作用于引用类型的变量,则比较的是所指向的对象的地址

  2. 对于equals方法,注意:equals方法不能作用于基本数据类型的变量,equals继承Object类,比较的是是否是同一个对象
    a.如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;
    b.诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。
    测试案例:

drop、truncate和delete的区别

DROP:

DLL:data definition language-数据定义语言

操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger.

drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状态. drop语句将表所占用的空间全部释放 .

TRUNCATE:
DLL:data definition language-数据定义语言

操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger.

TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,只在事务日志中记录页的释放。 truncate 语句缺省情况下表空间释放到 minextents个 extent,除非使用reuse storage;

DELETE:

DML:Data Manipulation Language-数据操作语言

操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发.

DELETE 不带WHERE 子句删除表中的所有数据. DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。不影响表所占用的extent, 高水线(high watermark)保持原位置不动 .

以下情况是TRUNCATE无法代替DELETE

1、要保留标识的情况下不能用 TRUNCATE TABLE,因为 TRUNCATE TABLE 会重置标识。
2、需要使用触发器的情况下不能使用 TRUNCATE TABLE ,它不会激发触发器。
3、对于由 FOREIGN KEY 约束引用的表(即主键所在的表,不是外键所在的表)不能使用 TRUNCATE TABLE。
4、对于参与了索引视图的表不能使用 TRUNCATE TABLE ,注意指索引视图,并非普通视图。

执行速度:
DROP>TRUNCATE>DELETE
https://blog.csdn.net/zxd112233/article/details/5733461

你可能感兴趣的:(面试)