1. 1.Java线程的状态

Runnable状态与操作系统中进程运行状态的关系

  1. 2.sleep和wait的区别

从资源层面来看,sleep占有哪些资源???

3.什么是锁?

  1. 乐观锁与悲观锁

平时有没有用过乐观锁,怎么用的

  1. CAS原理。有用过CAS吗

  2. 4.什么是内存可见性,怎么保证的,可见性和原子性有什么关系?

  3. 5.解释一下volatile和synchronized,两者一样吗?volatile能保证线程安全吗?

  4. 6.索引的种类?什么是聚族索引?什么是覆盖索引?

  5. 7.数据库的隔离级别有哪些

  6. 8.Redis出现多个Client同时修改redis服务器中同一个key怎么办?(redis并发竞争问题?)

  7. 9.redis的事务跟数据库的事务一样吗?

  8. 10.算法题:

输入:1->2->3->….>n-1>n

输出:1->n->2->n-1->3->n-2…..

二面:

  1. 1.JVM

  2. 2.MVCC是什么?原理?

  3. 3.乐观锁与悲观锁

  4. 4.volatile的原理?volatile有那些应用场景,写下代码

答:单例模式

  1. 写的代码:

public class Singleton {

private Singleton(){}

private volatile static Singleton instance;

public static Singleton getInstance() {

if (instance == null) {

synchronized(Singleton.class) {

if (instance == null) {

instance = new Singleton();

}

}

}

return instance;

}

}

问:为什么要使用volatile修饰。

答:为了防止指令重排序。

这行代码instance = new Singleton();实际上涉及到3个步骤

1.分配内存空间

2.初始化

3.instance指向分配的内存空间

2,3步骤是可以指令重排序的,如果不用volatile修饰,会造成return一个未初始化的instance

继续问:synchronized(Singleton.class)已经保证了获取这个类锁的只能有一个线程,为什么还会出现这种情况?结合具体例子分析一下?

答:????

  1. 5.什么是平衡二叉数

答:我先讲了一下排序二叉树,有什么缺点,然后讲什么是平衡二叉树

再问:给了个具体例子:

10

8 16

6 9

这颗二叉树要新插入一个5怎么做?

答:5成为6的左孩子导致二叉树不平衡,要进行右旋转。

问:具体怎么旋转的,给你15分钟,代码实现一下

答:?????

  1. 6.算法题:k个有序链表合并。要求讲一下时间复杂度。