最近,正值面试季,无论是校招还是社招,都在如火如荼的进行着。我也和很多朋友交流过,面试者普遍的反应是现在的招聘太难。而面试官们则普遍认为现在的应聘者太水。
我问了一些面试者,面试难在哪里,他们说,现在的面试,动不动就要求有分布式相关经验,要求面试者有高并发编程经历。深入理解多线程等。
我也问了一些面试官,应聘者水在哪里,他们说,很多面试者,最基本的Java内存模型和JVM内存结构都分不清楚;常见的锁机制都不了解;来了之后根本无法应付我们的高并发场景。
造成这一现象的原因是什么呢?作者认为,主要是应聘者在工作中没遇到并发编程的场景,没有处理高并发的经验。现在使用的很多框架都把多线程的事情屏蔽掉了。项目中更是很少需要写多线程代码。
而对于大一点的企业来说,虽然日常开发并不经常写多线程的代码,但是业务量在哪里摆着,需要程序员对并发的原理有深入的理解,需要他们在时时刻刻能够考虑到并发的情况,能够识别出并发,并且妥善的保证数据的可靠性。
举一个最简单的例子,并发编程离不开锁,围绕锁,我们希望开发者知道什么是数据库锁(行级锁、表级锁、共享锁、排它锁)?不同的事务隔离级别加锁会有什么区别(gap锁、next-key lock)?锁和索引之间有什么关系?不同类型的索引加锁顺序是怎么样的?什么是乐观锁和悲观锁?乐观锁和悲观锁有什么区别?高并发应该如何选择锁?锁的粒度如何控制?如何避免发生死锁?死锁了怎么解决?如何做锁优化?等等一系列问题。
有的时候,企业要求的并不一定是你完完全全可以在开发过程中避免出问题,企业希望的是,在出现问题后,可以快速的分析问题、定位问题以及解决问题的能力。说到根本,这就是理论知识是否扎实!尤其是原理级的!!!
所以说,只要你想进大厂,并发是必须跨过的一道“坎”。
并发编程是Java语言中最为晦涩的知识点,它涉及操作系统、内存、CPU、编程语言等多方面的基础能力,而这些知识点看上去非常的零散、独立,可实则关联性又比较强,更为考验一个程序员的内功。
不过,因为网上学习资料非常零散,也很少有人能系统讲清楚并发,所以想掌握并发,只能靠“自学”,却往往不得要领。
说到这里,我想给你推荐一张“并发编程”全景图。是由京东资深架构师王宝令凝聚他十几年经验制成的,从三个核心问题:分工、互斥、协作,全面且系统地涵盖了Java并发编程的技术难点。
我认为,这个全景图是回到并发的源头思考来问题,根据这个思路,可以举一反三,融会贯通。
并发编程全景图
分工,类似于现实中一个组织完成一个项目,项目经理要拆分任务,安排合适的成员去完成。在并发编程领域,你就是项目经理,线程就是项目组成员。分工非常重要,它直接决定了并发程序的性能。
同步,主要指的就是线程间的协作,本质上和现实生活中的协作没区别,不过是一个线程执行完了一个任务,如何通知执行后续任务的线程开工而已。
互斥,指的是同一时刻,只允许一个线程访问共享变量。
小编分类整理了许多java进阶学习材料和BAT面试题,需要资料的请加JAVA高阶学习Q群:851531810;就能领取2019年java架构师进阶学习资料和BAT面试题。
网友评论