一:Java基础
1.Java支持多继承吗?
Java中类不支持多继承,只支持单继承,即一个类只有一个父类。但Java中的接口支持多继承,即一个子接口可以有多个父接口,接口的作用是用来拓展对象的功能,一个子接口继承多个父接口,说明子接口拓展了多个功能,当类拓展接口时,类就拓展了相应的功能。
2.
二:操作系统基础
1.进程和线程的区别是什么?
进程是执行着的应用程序,进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。而线程是进程内部的一个执行序列,一个进程可以有多个线程,线程又叫轻量级进程。
三:数据库基础
1.不考虑数据库的隔离性会发生什么?
脏读:
脏读是指一个事务在处理数据的过程中,读取到另一个未提交事务的数据。
例:
--原数据 --id name --1 lisi --事务1 START TRANSACTION; updata t_table set name = 'wangwu' where id = 1; --此时事务2查询id = 1 ROLLBACK; --事务2 select * from t_table where id = 1; --查询到 id = 1, name = 'wangwu'
事务1并没有提交,name 还是 lisi,但是事务2却读到了 name = wangwu,这就是脏读。
2. 不可重复读:
不可重复读是指对于数据库中的某个数据,一个事务范围内的多次查询却返回了不同的结果,这是由于在查询过程中,数据被另外一个事务修改并提交了。
--原数据 --id name --1 lisi --事务1 select * from t_table where id = 1; -- 查询到 id = 1, name = list, 事务2在此时提交 select * from t_table where id = 1; -- 查询到 id = 1, name = wangwu --事务2 start transaction; update t_table set name = 'wangwu' where id = 1; COMMIT;
不可重复读和脏读的区别是,脏读读取到的是一个未提交的数据,而不可重复读读取到的是前一个事务提交的数据。
3. 幻读:
幻读是事务非独立执行时发生的一种现象。例如事务T1对一个表中所有的行的某个数据项做了从“1”修改为“2”的操作,这时事务T2又对这个表中插入了一行数据项,而这个数据项的数值还是为“1”并且提交给数据库。而操作事务T1的用户如果再查看刚刚修改的数据,会发现还有一行没有修改,其实这行是从事务T2中添加的,就好像产生幻觉一样,这就是发生了幻读。
幻读和不可重复读都是读取了另一条已经提交的事务(这点就脏读不同),所不同的是不可重复读查询的都是同一个数据项,而幻读针对的是一批数据整体(比如数据的个数)。
2.数据库的隔离级别?
读未提交(Read Uncommitted):
在该隔离级别中,所有事务都可以看到其他未提交事务的执行结果。读取未提交的数据(脏读)。
读已提交(Read Committed):
这是大多数数据库系统默认的隔离级别(但不是MySQL默认的)。它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变。
可重复读(Repeable Read):
这是MySQL的默认事务隔离级别,它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。
可串行化(Serializable):
这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。
在MySQL中,实现了这四种隔离级别,分别有可能产生的问题如下图所示: