一、前言
长文警告,事实上我不愿意写太长的文章,一面是太冗余,一方面读者容易疲倦,但是只要是涉及到源码级别的,就肯定篇幅不短,因为太短肯定没意义也解释不清楚,但是相信,耐心看完这个文章一定会对Spring源码有所收获!
最近有很多读者面试的时候都被问到了有关于Spring三级缓存的解决方案,很多读者在面试受挫之后,试着自己去读源码,试着去跟断点又发现一层套一层,一会自己就懵了,我这几天总结了一下,为了能够让读者更加的去了解Spring解决循环依赖问题,我决定从以下四个方面去讲述:
- 什么是循环依赖
- 如果不依赖于Spring自己解决循环依赖如何解决?
- 自己实现的方式有什么缺陷?
- Spring中是如何解决循环依赖的?
线程
- 线程的启动
- 实现Runnab1e接口
- 继承Thread类
- 实现Callable接口
- 线程的状态
- 线程的方法
- 线程的优先级
- 守护线程
- 未捕获异常处理器
并发编程的问题
- 线程引入开销:上下文切换与内存同步
- 线程安全性(原子性+可见性)
- 死锁
线程间通信/线程同步 工具使用
- synchronized
- Lock
- volatile
- Atomic
Lock使用 深入
- 可重入锁 ReentrantLock
- Condition与wait¬ify区别
- await&signal
- 公平锁
- 读写锁 ReentrantReadWriteLock
- LockSupport(锁住的是线程,synchronized锁住的是对象)
- synchronized与Lock的区别
- 原子操作类使用
Java内存模型 线程同步工具原理
- JMM抽象结构
- 指令重排序
- 内存屏障
- happens-before(抽象概念,基于内存屏障)
- 顺序一致性
- volatile原理
- synchronized原理
- 原子操作原理
- 锁的比较
- 锁的优化
- 锁的分类
- 偏向锁(只有一个线程进入临界区)
- 轻量级锁(多个线程交替进入临界区)
- 重量级锁(多个线程同时进入临界区)
- CPU如何实现原子操作
- Java如何实现原子操作
- CAS在OpenJDK中的实现
同步容器
- ConcurrentHashMap
- CopyOnWriteArrayList
- BlockingQueue
- ThreadLocal
同步工具使用
- Semaphore (信号量)
- Cycli eBarrier (可循环使用的屏障/栅栏)
- Exchanger (两个线程交换数据)
- CountDownLatch (闭锁)
- FutureTask (Future实现类)
- 将批量同步操作转为异步操作(并行流/CompletableFuture)
- 多个异步任务合并
- API
线程池使用
- 引入原因
- 继承体系
- ExecutorService
- ScheduledExecutorService
- ThreadPoolExecutor
- 创建线程池
- 线程动态变化
- 扩展ThreadPoolExecutor
- ScheduledThreadPoolExecutor
- Executors
- CompletionService
J.U.C 源码解析
- AQS的接口
- AQS使用实例(互斥锁,tryAcquire只需一次CAS)
- AQS实现
- 同步队列
- 独占式同步状态
- 共享式同步状态
- 独占式超时获取同步状态
- ReentrantLock公平锁
- ReentrantReadWriteLock
- 读写状态的设计
- 写锁的获取与释放
- 读锁的获取与释放(放弃)
- 锁降级
- LockSupport
- Condition
- 等待队列
- AtomicInteger
- ThreadPoolExeuctor
- 状态转换
- 成员变量
- 构造方法
- 执行任务
并发体系思维导图
Java内存模型(JMM)
- 线程通信机制
- 内存模型
- synchronized
- volatile
- DCL
并发基础
- AQS
- CAS
锁
- ReentrantLock
- ReentrantReadWriteLock
- Condition
并发工具类
- CyclicBarrier
- CountDownLatch
- Semaphore
- Exchanger
其他
- ThreadLocal
- Fork/Join
Java并发集合
- ConcurrentHashMap
- ConcurrentLinkedQueue
- Concurr entSkipListMap
- ConcurrentSkipListSet
atomic
- 基本类型类
- 数组
- 引用类型
- 字段类
阻塞队列
- ArrayBlockingQueue
- LinkedBlockingQueue
- PriorityBlockingQueue
- DelayQueue
- SynchronousQueue
- LinkedTransferQueue
- LinkedBlockingDeque
线程池
- Executor
- Future
很多程序员,整天沉浸在业务代码的 CRUD 中,业务中没有大量数据做并发,缺少实战经验,对并发仅仅停留在了解,做不到精通,所以总是与大厂擦肩而过。
我把私藏的这套并发体系的笔记和思维脑图分享出来,理论知识与项目实战的结合,我觉得只要你肯花时间用心学完这些,一定可以快速掌握并发编程。
不管是查缺补漏还是深度学习都能有非常不错的成效,需要的话记得帮忙点个赞支持一下
如何快速更新自己的技术积累?
- 在现有的项目里,深挖技术,比如用到netty可以把相关底层代码和要点都看起来。
- 如果不知道目前的努力方向,就看自己的领导或公司里技术强的人在学什么。
- 知道努力方向后不知道该怎么学,就到处去找相关资料然后练习。
- 学习以后不知道有没有学成,则可以通过面试去检验。
我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!
以上面试专题的答小编案整理成面试文档了,文档里有答案详解,以及其他一些大厂面试题目,有需要的朋友点击这里即可免费领取
败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!**
以上面试专题的答小编案整理成面试文档了,文档里有答案详解,以及其他一些大厂面试题目,有需要的朋友点击这里即可免费领取
[外链图片转存中…(img-1V7e9HzR-1622779052288)]
[外链图片转存中…(img-F3QeX207-1622779052289)]