面试一家小公司,被问了 1 个小时并发编程。。全程已记录!

Hollis

共 2188字,需浏览 5分钟

 · 2020-12-30

最近有读者投简历去一家公司去面试的时候,和面试官聊了一个小时的并发编程,整个过程已全记录下来。

面试的时候小心翼翼,如履薄冰,生怕说错一句话,就错失机会,担心,面试紧张、卡壳。不知道大家有没有这个问题?


面试官:你知道CAS吗,能跟我讲讲吗?

我:CAS(Compare And Swap),比较并交换。整个AQS同步组件,Atomic原子类操作等等都是基于CAS实现的,甚至ConcurrentHashMap在JDK1.8版本中,也调整为CAS+synchronized。可以说,CAS是整个JUC的基石。

CAS的实现方式其实不难。在CAS中有三个参数:内存值V、旧的预期值A、要更新的值B,当且仅当内存值V的值等于旧的预期值A时,才会将内存值V的值修改为B,否则什么也不干,是一种乐观锁。其伪代码如下:

我:接着我举了个AtomicInteger的例子,来给面试官阐述CAS的实现。

面试官:那CAS有什么缺陷吗?

我:CAS虽然高效的解决了原子问题,但是还是存在一些缺陷的,主要体现在三个方面: 



1.循环时间太长:

如果自旋CAS长时间不成功,则会给CPU带来非常大的开销,在JUC中,有些地方就会限制CAS自旋的次数。 

2.只能保证一个共享变量原子操作:

看了CAS的实现就知道这只能针对一个共享变量,如果是多个共享变量就只能使用锁了。或者把多个变量整成一个变量也可以用CAS。 

3.ABA问题:

CAS需要检查操作值有没有发生改变,如果没有发生改变则更新,但是存在这样一种情况:如果一个值原来是A,变成了B,然后又变成了A,那么在CAS检查的时候会发现没有改变,但是实质上它已经发生了改变,这就是所谓的ABA问题。对于ABA问题的解决方案是加上版本号,即在每个变量都加上一个版本号,每次改变时加1,即A->B->A,变成1A->2B->3A。例如原子类中AtomicInteger会发生ABA问题,使用AtomicStampedReference可以解决ABA问题。





面试官:你能说下轻量级锁吗?

面试官:你先说下你对synchronized的了解。

面试官:什么是原子操作?

面试官:什么是Executors框架?

面试官:什么是阻塞队列?阻塞队列的实现原理是什么?如何使用阻塞队列来实现生产者-消费者模型?

面试官:CycliBarriar和CountdownLatch有什么区别?

面试官:Java中用到的线程调度算法是什么?

我:....................................



总结

面试的时候,开口第一句,面试官就知道你的水平了。你很多东西用过,但是并不懂底层原理,面试官一问,你就哑火了…

并发编程中涉及到的知识点其实挺多,工作多年的程序员,应该掌握哪些技术?如何才能在大厂面试中侃侃而谈,在无数竞争对手中脱颖而出?

为了给在工作和技术上遇到瓶颈的小伙伴找到发展方向,彻底要把这块技术掌握好,我最近听了一期并发编程的技术课程,觉得对Java并发核心解析得很透彻,还结合了面试真题。推荐大家都去听一下,仅需0.02元就可以抢占:


更多并发编程课程干货:

01.并发编程的优缺点

02.线程的状态转换以及基本操作

03.java内存模型以及happens-before...

04.彻底理解synchronized

05.彻底理解volatile

06.你以为你真的了解final吗?

07.三大性质总结:原子性、可见性以...

08.初识Lock与AbstractQueuedSynchr...

09.深入理解AbstractQueuedSynchron...

10.彻底理解ReentrantLock

11.深入理解读写锁ReentrantReadWrit...

12.详解Condition的await和signal等待...

13.LockSupport工具

14.并发容器之ConcurrentHashMap(J...

15.并发容器之ConcurrentLinkedQueue

16.并发容器之CopyOnWriteArrayList

17.并发容器之ThreadLocal

18.一篇文章,从源码深入详解Thread...

19.并发容器之BlockingQueue

20.并发容器之ArrayBlockingQueue和...

21.线程池ThreadPoolExecutor实现原理

22线程池之ScheduledThreadPoolExe...

23.FutureTask基本操作总结

24.Java中atomic包中的原子操作类总结

25.大白话说java并发工具类-CountDo...

26.大白话说java并发工具类-Semapho...

27.一篇文章,让你彻底弄懂生产者


课程将主要对java.util.concurrent包下一些类做深入的的讲解和原理源码,解析高并发的环境下开发会遇到什么问题,学完可以在开发中熟练的使用java.util.concurrent下的类,并且可以避免在高并发的环境下遇到的一些问题扫码即刻购课:


☟戳阅读原文也可购课~

浏览 18
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报