基础知识
- Java中多态的实现原理?
https://www.cnblogs.com/kaleidoscope/p/9790766.html
- Java中线程池的工作原理?
https://www.cnblogs.com/franson-2016/p/13291591.html
- ThreadLocal的使用场景和原理?
https://www.cnblogs.com/fengzheng/p/8690253.html
- 使用syncronized和Lock实现生产者消费者模式?
- 线程池如何正常关闭?
- synchronized锁的升级过程?
- synchronized重入锁和非公平锁的实现原理?
- synchronized和Lock的区别?
- synchronized为什么称之为重量级锁?
- JUC(并发编程工具包)包下使用过哪些类?
- 阻塞队列的实现原理?
- 阻塞队列中的消息服务重启时,如何持久化?
- AQS队列原理?
- Lock的几种实现方式?
- volatile关键字的使用场景和作用 (解决可见性和有序性)
1.解决可见性问题
2.禁止指令重排序
JMM关于synchronized的两条规定:(解决可见性和原子性)
1.线程解锁前,必须把共享变量的最新值刷新到主内存中;
2.线程加锁时,将清空工作内存中共享变量的值,从而使用共享变量时需要从主内存中重新获取最新的值;(注意:加锁与解锁需要是同一把锁)
通过以上两点,可以看到synchronized能够实现可见性。同时,由于synchronized具有同步锁,所以它也具有原子性
volatile能当锁使用么?
简述JMM(Java内存模型)
ConcurrentHashMap的原理?
PriorityQueue(堆)?
BIO、NIO、AIO的区别?NIO中selector、poll、epoll模型的区别?
1.select,poll实现需要自己不断轮询所有fd集合,直到设备就绪,期间可能要睡眠和唤醒多次交替。而epoll其实也需要调用epoll_wait不断轮询就绪链表,期间也可能多次睡眠和唤醒交替,但是它是设备就绪时,调用回调函数,把就绪fd放入就绪链表中,并唤醒在epoll_wait中进入睡眠的进程。虽然都要睡眠和交替,但是select和poll在“醒着”的时候要遍历整个fd集合,而epoll在“醒着”的时候只要判断一下就绪链表是否为空就行了,这节省了大量的CPU时间。这就是回调机制带来的性能提升。
2. select,poll每次调用都要把fd集合从用户态往内核态拷贝一次,并且要把current往设备等待队列中挂一次,而epoll只要一次拷贝,而且把current往等待队列上挂也只挂一次(在epoll_wait的开始,注意这里的等待队列并不是设备等待队列,只是一个epoll内部定义的等待队列)。这也能节省不少的开销。
TCP协议、HTTP协议、https协议的原理?
TCP协议的滑动窗口?
常用的序列化协议及区别?
StringBuffer和SpringBuilder的区别,线程是否安全的原理?
ArrayList和LinkedList的区别?
重写equals方法的时候为什么要重写hasCode方法?
HashSet是如何实现去重功能的?HashMap怎么保证key不重复的?
HashMap的线程不安全体现在哪些地方?
1.数据丢失
2.数据覆盖
3.死循环
HashMap底层数据结构,为什么选择红黑树?
Java中为什么是单继承?
接口和抽象类的区别?
Java中多态的原理?
Java中类加载机制?
装载
链接
验证
准备
解析
初始化
Java中static关键字的作用?
修饰成员变量
修饰方法
修饰代码块
HashMap的扩容过程?
红黑树解决了什么问题
线程池如果关闭了两次会有什么问题?