02 2022 档案
摘要:【MySQL】事务、隔离级别、MVVC是怎么回事? 一、认识事务 1、为什么要设计事务 事务会把数据库从一种一致状态转换为另一种一致状态。 2、事务的四个特征 原子性 事务是不可分割的工作单位 一致性 事务从一种状态转变为下一种一致的状态。提交或者回滚,不可以破坏原来的表结构。 隔离性 通过锁、MV
阅读全文
摘要:【MySQL】数据库中的哪些“锁”事 在Java中,锁就是提供多线程并发访问的控制工具。那么在开发多用户、数据库驱动的应用时,最大的难点就是最大程度地利用数据库的并发访问,另外一方面就是要确保每个用户能以一致的方式读取和修改数据。 一、什么是锁? 锁机制用于管理对共享资源的并发访问,这里的共享资源不
阅读全文
摘要:【Kill Thread Part.2-1】Java内存模型——底层原理 一、什么是“底层原理”?本章研究的内容? 1、从Java代码到CPU指令 从.java文件到.class文件,然后JVM翻译成对应操作系统平台的机器指令。 JVM实现会带来不同的“翻译”,不同的CPU平台的机器指令又千差万别,
阅读全文
摘要:【深究系列】LRU算法设计 一、LeetCode算法题目 https://leetcode-cn.com/problems/lru-cache/ 所谓缓存,必须要有读写两个操作,按照命中率的思路考虑,写操作+读操作的时间复杂度都需要O(1) 特性要求: 必须要有顺序之分,以区分最近使用的和很久没有使
阅读全文
摘要:【深究系列】实现自己的HashMap /** * * table什么时候扩容的,threshold = capacity*loadfactor * 当size>threshold时,table扩容,数组长度增加为原长度的2倍,要重新计算hash值,重新把entry放入新的table中 */ publ
阅读全文
摘要:【深究系列】手撕HashMap 一、HashMap数据结构 1、取模的数组 存储一个数,100,100模10为0,那么就存放在下标为0的位置。403%10为3,放在下标为3的位置。 那么如果200也进来,300也要进来,该往哪里放呢?(此时便发生了冲突) 2、冲突问题 通过Next指针逐渐往下添加,
阅读全文
摘要:【Beautiful JUC Part.11】Future和Callable治理线程 一、为什么需要Future和Callable 1、Runnable的缺陷 线程没有返回值 run方法无法抛出checked Exception 这是因为run()方法在声明的时候就规定好了形式。只能通过try/ca
阅读全文
摘要:【Beautiful JUC Part.10】AQS 并发灵魂人物 一、为什么需要AQS? 二、Semaphore和AQS的关系 CountDownLatch和ReentrantLock也是一样的。 三、AQS的认识 1、AQS的比喻 比喻:群面、单面 安排就坐、叫号、先来后到等HR的工作就是AQS
阅读全文
摘要:【Beautiful JUC Part.9】控制并发流程 线程间的协调人 一、什么是控制并发流程? 控制能发流程的工具类,作用就是帮助我们程序员更容易得让线程之间合作。 让线程之间相互配合,来满足业务逻辑 比如让线程A等待线程B执行完毕后再执行等合作策略 二、CountDownLatch倒计时门闩
阅读全文
摘要:【Beautiful JUC Part.8】ConcurrentHashMap等并发集合 并发容器概览、集合类的历史、ConcurrentHashMap(重点、面试常考) CopyOnWriteArrayList、并发队列Queue(阻塞队列、非阻塞队列) 一、并发容器的概览 ConcurrentH
阅读全文
摘要:【Beautiful JUC Part.7】fina关键字和不变性 一、什么是不变性(Immutable) 如果对象在被创建后,状态就不能被修改,那么它就是不可变的 例如:person对象,age和name都不能再变。但是如果person对象还有其他非final的属性,就是可变的对象。 具有不变性的
阅读全文
摘要:【Beautiful JUC Part.6】CAS 不可中断的典范 一、什么是CAS 运用场合:并发场景,实现不能被打断的交换操作 主要思路: 我认为V的值应该是A,如果是的话那我就把它改成B,如果不是A(说明被别人修改过了),那我就不修改了,避免多人同时修改导致出错。 CAS有三个操作数: 内存值
阅读全文
摘要:【Beautiful JUC Part.5】atomic包 一刻也不能分割 一、什么是原子类 不可分割 一个操作是不可中断的,即便是多线程的情况下也可以保证 java.util.concurrent.atomic 原子类的作用和锁类似,是为了保证并发情况下线程安全。不过原子类相比于锁,有一定的优势。
阅读全文
摘要:【Beautiful JUC Part.4】不可不说的“锁”事 Lock接口 锁的分类 乐观锁和悲观锁 可重入锁和非可重入锁,以ReentrantLock为例(重点) 公平锁和非公平锁 共享锁和排它锁:以ReentrantReadWriteLock读写锁为例(重点) 自旋锁和阻塞锁 可中断锁:顾名思
阅读全文
摘要:【Beautiful JUC Part.3】ThreadLocal详解 一、两大使用场景——ThreadLocal的用途 1、典型场景1 每个线程需要一个独享的对象(通常是工具类,典型需要使用的类有SimpleDateFormat和Random),比如说后端返回给前端结果的封装工具类。 每个Thre
阅读全文
摘要:【Beautiful JUC Part.2】线程池 治理线程的最大法宝 一、线程池的重要性 1、什么是池 如果不使用线程池,每个任务都新开一个线程处理 一个线程,直接创建 当10个线程时候,for循环创建线程 当任务数量上升到1000 这样开销太大,我们希望有固定的数量的线程,来执行这1000个线程
阅读全文
摘要:【Beautiful JUC Part.1】建立起Java并发体系的大厦 思维导图地址 https://darkerg.lanzout.com/iNtK0zmosmb 密码:91bb 一、并发工具类的分类 为了并发安全:互斥同步、非互斥同步、无同步方案 管理线程、提高效率 线程协作 二、为了线程安全
阅读全文
摘要:【Kill Thread Part.3-1】死锁的概念 一、死锁是什么 1、死锁图解 发生在并发中 互不相让:当两个(或更多)线程(或进程)相互持有对方所需要的资源,又不主动释放,导致所有人都无法继续前进,导致程序陷入无尽的阻塞,这就是死锁。 2、死锁的影响 死锁的影响在不同系统中是不一样的,这取决
阅读全文