- 1.Java线程的状态
Runnable状态与操作系统中进程运行状态的关系
- 2.sleep和wait的区别
从资源层面来看,sleep占有哪些资源???
3.什么是锁?
- 乐观锁与悲观锁
平时有没有用过乐观锁,怎么用的
CAS原理。有用过CAS吗
4.什么是内存可见性,怎么保证的,可见性和原子性有什么关系?
5.解释一下volatile和synchronized,两者一样吗?volatile能保证线程安全吗?
6.索引的种类?什么是聚族索引?什么是覆盖索引?
7.数据库的隔离级别有哪些
8.Redis出现多个Client同时修改redis服务器中同一个key怎么办?(redis并发竞争问题?)
9.redis的事务跟数据库的事务一样吗?
10.算法题:
输入:1->2->3->….>n-1>n
输出:1->n->2->n-1->3->n-2…..
二面:
1.JVM
2.MVCC是什么?原理?
3.乐观锁与悲观锁
4.volatile的原理?volatile有那些应用场景,写下代码
答:单例模式
- 写的代码:
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)已经保证了获取这个类锁的只能有一个线程,为什么还会出现这种情况?结合具体例子分析一下?
答:????
- 5.什么是平衡二叉数
答:我先讲了一下排序二叉树,有什么缺点,然后讲什么是平衡二叉树
再问:给了个具体例子:
10
8 16
6 9
这颗二叉树要新插入一个5怎么做?
答:5成为6的左孩子导致二叉树不平衡,要进行右旋转。
问:具体怎么旋转的,给你15分钟,代码实现一下
答:?????
- 6.算法题:k个有序链表合并。要求讲一下时间复杂度。