Java常用JUC并发包的简单使用和AQS原理分析 常见并发包Reentrant Lock实现锁的功能,类似Synchronized,相较于Synchronized,Lock提供了更灵活的API,更容易扩展,以及更灵活的使用场景。 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596 2020-09-20 Java基础 #JUC #AQS
CAS (CompareAndSwap) 底层基本原理分析和 ABA问题 CAS机制CAS——CompareAndSwap:比较并替换 作用是进行计算的时候判断当前值是否满足预期,如果满足则更新为新值,保证整个过程具备原子性。通过内存中的值,逻辑值和要更改的值进行比较替换,通过自旋的方式在操作内存的值的时候通过内存的值和逻辑值进行比较,如果一致,则替换更改(这一步原子操作)。 代码分析JDK中为了方便开发正操作,已经实现了很多原子性操作的类,这些类底层就是通过CAS控制 2020-09-07 Java基础 #CAS #ABA
Synchronized和Volatile底层知识、内存屏障相关内容 基本内容见之前文章“JAVA 线程 Synchronized Volatile” Synchronized注:不同虚拟机对于锁的实现机制都不同,本文主要是针对hotspot的实现进行简单学习 java 对于synchronized的使用主要有两方式synchronized 修饰方法可以查看修饰方法这种情况对应的字节码,通过字节码可以看到这种情况是通过对该方法添加了一个访问标识符 Access 2020-08-31 Java基础 #重排序 #内存屏障 #volatile #synchronized
开发需要知道的CPU底层知识学习记录 CPU的作用:取指令,取数据,做运算,然后将运算结果写入内存,线程是CPU执行的最小单元 CPU的主要组成: 指令计数器PC: 作用:保存下一跳指令的地址,CPU在运行的时候会根据指令寄存器中保存的地址从内存中获取数据,获取完后回保存到CPU的寄存器中。 寄存器 Registers: 作用:用来保存从内存中读取过来的数据 运算单元ALU: 作用:根据根据寄存器中保存的数据做运算,算完后再写入到 2020-08-10 计算机网络 #CPU #线程
Salesforce Apex 触发器学习记录 Apex 触发器(Apex Triggers)是一种特殊的 Apex 类。它的主要作用是在一条记录被插入、修改、删除之前或之后自动执行一系列的操作。每一个 Trigger 类必须对应一种对象。 1、直接在Trigger中写对应的逻辑。 2、通过Trigger 绑定 TriggerHandler ,在TriggerHandler中写对应的业务逻辑 注:在处理Trigger中的业务逻辑时,一定要考 2020-07-01 Salesforce #Apex #Salesforce #Triggers
Salesforce 进程生成器Process Builder Apex操作类型 进程生成器的操作类型有好多,该文只记录Apex类型 创建Apex类 123456789101112131415161718/** * 注:进程执行器的类 必须要有@InvocableMethod 注解 * 且 仅有一个 */public class PurchaseOrderProcessBuilder { /** * label 进程执行器名称,在平台 2020-06-30 Salesforce #Apex #Salesforce #进程生成器
HashMap源码(七)—— 红黑树删除原理分析 动态图解析 红黑书的删除本质上是一个穷举的过程 删除情况说明 删除的节点没有子节点的情况 如果为红色,直接删除即可,不会影响黑色节点的数量 如果为黑色,删除的时候需要进行平衡操作 删除的节点只有一个子节点时,删除节点只能是黑色,子节点也只能是红色。否则无法满足红黑树黑色节点完全平衡的特性(从任一节点到其每个叶子的所有简单路径都包含相同数目的黑色节点) 如果删除节点有两个子节点时,使用后继节点作为 2020-06-03 Java基础 #HashMap #红黑树
HashMap源码(六)—— 扩容 resize(),和获取 get() 扩容 resize()扩容机制当HashMap中的元素个数超过数组大小(数组长度) * loadFactor(负载因子)时,就会进行数组扩容,loadFactor的默认值(DEFAULT_LOAD_FACTOR)是0.75,这是一个折中的取值。也就是说,默认情况下,数组大小为16,那么当HashMap中的元素个数超过16×0.75=12(这个值就是阈值或者边界值threshold值)的时候,就把数 2020-06-01 Java基础 #HashMap
HashMap源码(五)—— 底层红黑树原理解析(新增)动图分析 满足红黑书结构原则: 每个节点只能是红色或者黑色 根节点都是黑色 不可能有连在一起的红色节点 每个红色节点的两个子节点都是黑色,叶子节点都是黑色 除了根节点,插入的时候每个节点都是红色 红黑树示例图: HashMap底层为什么要用红黑树不用完全平衡二叉树(AVL数):红黑树:黑色完美平衡,任意一个节点到每个叶子节点的路径都包含想通数量的黑色节点。 AVL树和红黑树有几点比较和区别: (1)AV 2020-06-01 Java基础 #HashMap #红黑树
HashMap源码(四)—— hashMap 之 put方法详解 put() 方法1234//入口方法public V put(K key, V value) { return putVal(hash(key), key, value, false, true);} hash() 方法介绍入口方法中只调用了一个putVal方法,在调用这个方法之前,调用了hash(key)这个方法, 具体源码如下: 123456789/**说明,当key 2020-05-28 Java基础 #HashMap