JAVA开发面试题
目录
- 1、进程与线程的区别
- 2、Thread类的start()和run()方法之间的区别
- 3、线程状态
- 4、关于JMM的面试题:JMM的规定
- 5、B+树与B树的区别/索引使用了什么数据结构/介绍一下B+树
- 事物的ACID特性
1、进程与线程的区别
1、进程中包含线程,至少有一个主线程
2、进程是申请资源的最小单位
3、线程是CPU调度的最小单位
4、线程共享进程申请来的所有资源
5、一个线程如果崩溃了,会影响整个进程
2、Thread类的start()和run()方法之间的区别
1、start()方法,真正的申请系统线程PBC,从而启动一个线程,参与CPU调度
2、run()方法,定义线程时指定线程要执行的任务,如果调用只是Java对象的一个普通方法而已
3、线程状态
1、NEW:表示创建好了一个Java线程对象,安排好了任务,但是还没有启动没有调用start()方法之前是不会创建PCB的,和PCB没有任何关系。
2、RUNNABLE:运行+就绪的状态,在执行任务时最常见的状态之一,在系统中有对应PCB。
3、BLOCKED:等待锁的状态,阻塞中的一种。
4、WATING:没有等待时间,一直死等,直到被唤醒。
5、TIMED WATING:指定了等待时间的阻塞状态,过时不侯。
6、TERMINATED:结束,完成状态,PCB已经销毁,但是JAVA线程对象还在。
4、关于JMM的面试题:JMM的规定
1、所有的线程不可以直接修改内存中的共享变量
2、如果要修改共享变量,需要把这个变量从主内存中复制到自己的工作内存中,修改完成之后在刷回主内存
3、各个线程之间不能相互通信,做到了内存级别的线程隔离
5、B+树与B树的区别/索引使用了什么数据结构/介绍一下B+树
1、叶子节点之间有一个相互连接的引用(可以双向或单向,InnoDB中是双向),可以通过一个叶子节点找到它相邻的兄弟节点
MySQL在组织叶子节点的时候用的是双向链表
2、非叶子节点的值都包含在叶子节点中
MySQL非叶子节点只保存了对子节点的引用,没有保存真实的数据,所有的真实数据都在叶子节点中保存
3、对于B+树而言,在相同树高的情况下,查找任意元素的时间复杂度都一样,性能均衡。
事物的ACID特性
事物的ACID特性指的是Atomicity(原子性),Consistency(一致性),Isolation(隔离性)和Durability(持久性)。
1、Atomicity(原子性):一个事务中所有的操作,要么全部成功,要么全部失败,不会出现只执行了一半的情况,如果事务在执行过程中发生错误,会回滚到事务开始之前的状态,就像这个事务从来没有执行过一样;
2、Consistency(一致性):在事务开始之前和事务结束以后,数据库的完整性不会被破坏。这表示写入的数据必须完全符合所有的预设规则,包括数据的精度、关联性以及关于事务执行过程中服务器崩溃后如何恢复;
3、Isolation(隔离性):数据库允许多个并发事务同时对数据进行读写和修改,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务可以指定不同的隔离级别,以权衡在不同的应用场景下数据库性能和安全:
4、Durability(持久性):事务处理结束后,对数据的修改将永久的写入存储介质,即便系统故障也不会丢失。