【面试高频知识点】

第一批面试已经正式开始啦!快抓紧时间投递吧!
内推传送门:https://campus.ctrip.com/recommendation-apply/trip/38951?recommendCode=AH5dn&codeType=1&hash=%23%2Fjobs
面试现场👇👇​
图片说明

Java 基础

携程内推链接:
https://campus.ctrip.com/recommendation-apply/trip/38951?recommendCode=AH5dn&codeType=1&hash=%23%2Fjobs

已经有很多小伙伴进入了专业面试阶段,还没有投递的学弟学妹们抓紧时间哦,尽早投递越早安排面试哦!!
图片说明

高频知识点

  • 公平锁与非公平锁

    • 公平锁:各个线程申请资源时,会进入等待队列进行排队,当资源可以访问时由等待队列中第一个线程进行访问,属于有顺序的访问
      • 优点:所有线程都可以获得资源,不会被饿死
      • 缺点:唤醒需要消耗性能,吞吐量低,队列里面除了第一个线程,其他的线程都会阻塞,cpu唤醒阻塞线程的开销会很大。(A完成时会去唤醒B,此时C来了,还是要去排队即阻塞)
    • 非公平锁:多个线程直接去尝试获取锁,如果没有申请到就进入等待队列,当资源空余时进行随机抢占,如此可以使得后来的线程也有可以得到资源
      • 优点:可以减少CPU唤醒线程的开销,整体效率高(A完成时会去唤醒B,此时C来了直接获取锁,B唤醒后发现已经有锁了,继续阻塞,提高了利用率,有可能C只要获取了该资源就能够执行完,这样效率高,如果公平锁,还要一直排队,太死板,说不定排队首的还要等下一个资源,排队尾的就差这个资源)
      • 缺点:有可能发生死锁,即某个线程一直得不到资源。导致饿死
  • 乐观锁和非乐观锁

    • 乐观锁:总是以乐观的态度去判断,认为资源不会被其他线程占用,当需要更新时,会才有 CAS 看一下有没有被修改过,没有被动过就可以更新,适用多读的情况
    • 悲观锁:总是认为资源会被抢占,在访问前先给资源上锁,此时其他线程不能抢占,等到访问结束释放锁后,其他线程才能继续访问该资源
  • CAS:比较并替换,比如读取一个数据,准备更新前会比较一下该数据与自己之前读的一样不一样,如果期间数据都一样即没有人修改过,则更新

  • volatile 关键字,修饰变量 state,管理状态

  • CAS + volatile ,实现高并发抢占

#面经##Java##学习路径#
全部评论
有想要咨询问题的伙伴们可以直接私信我哦,也可以帮忙修改简历😊
点赞 回复
分享
发布于 2021-08-11 16:05

相关推荐

1 2 评论
分享
牛客网
牛客企业服务