主题
又到面试季了,从群里,看到许多同学分享了自己的面试题目,我也抽空在网上搜索了一些许多公司使用的面试题,目前校招和社招的面试题基本都集中在几个大方向上,主要是:Java基础、并发、JVM、算法、数据库、一些框架、分布式集群 等。这里呢,单独就面试中的【并发】问题的准备和学习发表一下个人的见解。
现状
关于对并发的学习和理解,通过大家在课程群里的反馈,总结一下,主要包含以下几种:
完全不知道并发的存在
知道并发要学,但是不知道该学习什么
知道并发重要,自己买相关书籍学,但是看完了还是懵懵懂懂
知道并发重要,自己查资料学了一些,许多都学会了,但总能发现不会的,不知道并发到底都要学什么
已经完成进阶,并发的问题了然于胸,这样的小伙伴目前很少
首先说一下,为什么Java面试要考并发,而且并发相关的题目占比又是那么的高。对并发有一定了解的同学,应该都知道,大家平时 只要做Java项目就会涉及到并发 ,个别同学说自己从没接触过并发,这只是个人还没意识到而已。当你定义好一个可以调用的接口时,这时其实就已经和并发有关系了,因为任何一个接口都可能同时被请求多次。当你在项目中已经可以熟练的使用synchronized、volatile、static、final这些基本的Java关键字时,其实你对并发已经有一些基础了。大家总说的:面试造火箭、入职拧螺丝,其实有一部分原因也是因为你还没意识到面试考的这些东西其实一直就伴随着你的日常开发。
我不自量力的去列一下并发涉及到的关键字、类及可以考察的知识点:CPU缓存、Java内存模型JMM、atomic、AtomicInteger、AtomicLong、LongAdder、AtomicReference、AtomicBoolean、CAS原理、Unsafe、synchronized、volatile、final、static、ThreadLocal、AQS、J.U.C、CountDownLatch、Semaphore、CyclicBarrier、ReentrantLock、ReentrantReadWriteLock、StampLock、Condition、FutureTask、Fork/Join、BlockingQueue、ThreadPoolExecutor、ExecutorService、Thread、Runnable、Future、Callable、HashMap、 HashTable、ConcurrentHashMap、CopyOnWriteArrayList、CopyOnWriteArraySet、RateLimiter、SimpleDateFormat、StringBuffer、StringBuilder、ArrayList、Vector、HashSet、ConcurrentSkipListSet、Collections.synchronizedXXX、Guava Cache、Redis ... 我尝试去写出脑海里与并发有关的类和