JAVA面试题-持续更新中

基础知识

  • 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实现生产者消费者模式?

  1. 线程池如何正常关闭?
  2. synchronized锁的升级过程?
  3. synchronized重入锁和非公平锁的实现原理?
  4. synchronized和Lock的区别?
  5. synchronized为什么称之为重量级锁?
  6. JUC(并发编程工具包)包下使用过哪些类?
  7. 阻塞队列的实现原理?
  8. 阻塞队列中的消息服务重启时,如何持久化?
  9. AQS队列原理?
  10. Lock的几种实现方式?
  11. 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的扩容过程?

红黑树解决了什么问题

线程池如果关闭了两次会有什么问题?
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值