写点什么

阿里内推面试,挂在了一道简单的问题上…

用户头像
小新
关注
发布于: 2020 年 07 月 06 日

上周,小北终于在内推了3次之后接到了阿里的面试。为了这场面试,他准备了很久,还专门找朋友开了小灶。

然后面试的时候,面试官就问了一个非常简单的问题——“非公平锁和公平锁有什么区别?

听到这个问题,小北腰杆一下子就挺直了,张口就回答:“随机访问”、“插队访问””。

没想到,面试官对这个回答微微皱了一下眉毛……就这样,整个面试的氛围就沉了下来,后来面试也没持续多久就结束了。后来小林怎么都想不通自己错在哪,于是找了我。

他这么回答对不对?只能说,也没错。但如果我作为面试官,我最想听到的就是:非公平锁有两次抢锁机会,但是一旦进入队列,就永远排队。“一朝排队,永远排队。

上面的结论,是我通过分析公平锁和非公平锁lock方法的源码之后得出来的。

公平锁lock方法的源码分析



final void lock() {
  acquire(1);//1------标识加锁成功之后改变的值
}



非公平锁的lock方法



finalvoid lock() {
  if (compareAndSetState(0, 1))
    setExclusiveOwnerThread(Thread.currentThread());
  else 
    acquire(1);
}



公平锁、非公平锁代码执行逻辑的区别

用一个例子来通俗讲解公平锁和非公平锁,那就是:

1、你去火车站买车票,大家都老老实实排队,你也跟着排队,非常公平合理,这就是公平锁

2、你去火车站买车票,大家都老老实实排队,但你是个小混混,直接走到售票窗口,“给我一张票!”

结果1:大家都不敢吭声,售票员直接把票卖给你了;抢锁成功

结果2:又来了一个小混混,把你按在地上一顿摩擦,他插队买票,你乖乖到后面排队;抢锁失败

很多人认为非公平锁插队就是永远在插队,实际上只要它第一次加锁失败之后,一旦进入队列,跟公平锁就没有区别了。

为什么阿里巴巴、美团经常会问你这些看起来很简单的面试题?因为这些看似简单的题目,面试官可以从你的回答里看出你的真实水平。

Java中有各种各样的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率!从互斥锁/读写锁、乐观锁/悲观锁、自旋锁、分段锁…再到JDK锁、分布式锁,你对Java中的锁了解多少?

谷歌线上如何使用锁及各种锁的效率有何不同?

主流分布式锁方案你知道哪些?

如何实现Redis分布式锁?



干货放送:(分布式事物+单点登录+高并发+性能优化+逻辑层处理+数据库性能优化)资料视频

需要的小伙伴,麻烦帮忙转发一下这篇文章+关注我,然后添加小助手VX:xuanwo008

带你深度解读框架核心源码,全面解析主流分布式锁方案,教你如何玩极致分布式锁。

适合人群

本次分享的内容偏原理和源码,需要有一定的Java基础知识,适合:

  • 具备一定自学能力,想提升自己;

  • 想要系统了解Java中锁的知识的小伙伴;

  • 立志成为高级工程师、架构师的IT人;

目录:

  • 1,Java各类锁机制精讲;

  • 2,公平锁和非公平锁底层原理分析;

  • 3,谷歌线上如何使用锁及效率对比;

  • 4,AQS框架核心源码深度解读;

  • 5,线上千万并发系统AQS调优实战.









程序员面试题集:

需要的小伙伴,麻烦帮忙转发一下这篇文章+关注我,然后添加小助手VX:xuanwo008



用户头像

小新

关注

还未添加个人签名 2020.07.02 加入

还未添加个人简介

评论

发布
暂无评论
阿里内推面试,挂在了一道简单的问题上…