这些Java并发面试题,有点虐人!

2019 年 4 月 11 日 InfoQ

虽说已经是金三银四末期了,但陆续来面试的 Java 程序员也不少。面试久了,发现自己每次都会问下面几个问题,也是大家经常留言问的。

  • 什么是 Java 内存模型?

  • 多线程同步和互斥有哪几种实现方法?

  • 悲观锁和乐观锁有什么区别?

  • Java 的锁实现机制,使用场景分析

  • ReentranLock 源码,设计原理,整体过程

  • volatile 的实现原理

  • AQS 的实现过程

  • ……

如果你仔细观察的话,上面的面试题都是和并发密切相关,是因为只要你的公司在上升,用户量级都会与日俱增,高性能、高并发的问题自然避免不了,那么具备并发能力的 Java 程序员必然是少不了。

1 如何提升自己的并发编程能力?

只有一条路:花时间学,并没有其他捷径。那有没有系统性学习并发的资料呐?当然有,而且我之前也有多次推荐过,就是极客时间的《Java 并发编程实战》专栏。

虽说网上关于并发编程的面试题也很多,但都比较简单,基本一两句话就带过了,

作者宝令把并发编程涉及到的 Java 内存模型、管程、多线程等关键性问题讲得通俗易懂,时常让你有种“原来如此”的豁然开朗。可以这么说,即使你是外行人,你也能看懂每篇内容的逻辑及要点。而且,每篇文章下的留言也特别精彩,有些是总结笔记,有些是提问,还有一些是课后作业的回答代码,多了一个向别人学习和督促自我学习的环节,真的很赞。

我特意挑选了两篇文章的内容,也是 Java 面试常问的两个内容,附上了一些不错的留言,你可以看看,肯定会有所收获。(文末有福利,请看完

2 第 02 篇 | Java 内存模型:看 Java 如何解决可见性和有序性问题

Java 内存模型这个概念,在职场的很多面试中都会考核到,是一个热门的考点,也是一个人并发水平的具体体现。原因是当并发程序出问题时,需要一行一行地检查代码,这个时候,只有掌握 Java 内存模型,才能慧眼如炬地发现问题。

在这篇文章里,宝令讲了“什么是 Java 内存模型?”,及 Java 内存模型规范了 JVM 如何提供按需禁用缓存和编译优化的方法。具体来说,这些方法包括 volatile、synchronized final 三个关键字,以及六项 Happens-Before 规则,这也正是第二篇文章的重点内容。弄明白了这些,你就能轻而易举地解决并发编程中的「可见性」和「有序性」问题。

大家在文章留言十分积极,很多文章总结笔记及课后题的回答。


3 08 | 管程:并发编程的万能钥匙

在并发编程领域,有两大核心问题:一个是互斥,即同一时刻只允许一个线程访问共享资源;另一个是同步,即线程之间如何通信、协作。这两大问题,管程都是能够解决的。

宝令就用这篇文章讲明白了“管程”:什么是管程?MESA 模型,及管程是如何解决互斥问题的?如何解决线程间的同步问题呢?

Java 参考了 MESA 模型,语言内置的管程(synchronized)对 MESA 模型进行了精简。MESA 模型中,条件变量可以有多个,Java 语言内置的管程里只有一个条件变量。具体如下图所示。

Java 中的管程示意图

有些不懂的点,你也可以留言求助。


这个专栏上新的时候,我推荐过了,但还是有不少粉丝问我是否还有优惠。今天也帮大伙争取了《Java 并发编程实战》专栏的超低价福利,发起超级拼团,这门课的常规价格都是 99 元,现在只需要¥79 元,两顿外卖的钱。强调一遍,在这里参团保证是最低价。

仅限 200 人,先到先得!


扫描上方二维码

立即订阅仅需¥79

阅读原文,试看前 3 篇文章

登录查看更多
0

相关内容

Java 是一门编程语言,拥有跨平台、面向对象、泛型编程等特性。
【实用书】Python技术手册,第三版767页pdf
专知会员服务
234+阅读 · 2020年5月21日
Python导论,476页pdf,现代Python计算
专知会员服务
259+阅读 · 2020年5月17日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
117+阅读 · 2020年5月10日
【2020新书】C++20 特性 第二版,A Problem-Solution Approach
专知会员服务
58+阅读 · 2020年4月26日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
95+阅读 · 2019年12月4日
史上最全的 Pinterest 面试资料
九章算法
6+阅读 · 2019年9月5日
在K8S上运行Kafka合适吗?会遇到哪些陷阱?
DBAplus社群
9+阅读 · 2019年9月4日
作为字节跳动的研发面试官,有些话我不得不说!
互联网架构师
12+阅读 · 2019年4月22日
每个架构师都应该培养业务思维
InfoQ
3+阅读 · 2019年4月21日
各编程领域最好的入门书籍
程序猿
27+阅读 · 2018年7月29日
Python 杠上 Java、C/C++,赢面有几成?
CSDN
6+阅读 · 2018年4月12日
2年Java经验,真的就拿不到30万年薪吗?
程序员观察
3+阅读 · 2018年4月8日
Arxiv
6+阅读 · 2018年4月24日
VIP会员
相关VIP内容
相关资讯
史上最全的 Pinterest 面试资料
九章算法
6+阅读 · 2019年9月5日
在K8S上运行Kafka合适吗?会遇到哪些陷阱?
DBAplus社群
9+阅读 · 2019年9月4日
作为字节跳动的研发面试官,有些话我不得不说!
互联网架构师
12+阅读 · 2019年4月22日
每个架构师都应该培养业务思维
InfoQ
3+阅读 · 2019年4月21日
各编程领域最好的入门书籍
程序猿
27+阅读 · 2018年7月29日
Python 杠上 Java、C/C++,赢面有几成?
CSDN
6+阅读 · 2018年4月12日
2年Java经验,真的就拿不到30万年薪吗?
程序员观察
3+阅读 · 2018年4月8日
Top
微信扫码咨询专知VIP会员