CAS中ABA问题及解决 一、ABA 场景描述基于上节中提到的 CAS 原理,CAS 算法实现一个重要前提需要取出内存中某时刻的数据并在当下时刻比较并替换,那么在这个时间差类会导致数据的变化。设想一个场景:有线程 A、B 两个线程想对同一变量 Num = 1进行修改,此时有:第一步:线程 A 读取 Num 值为 1 。第二步:线程 B读取 Num 值为 1 。第三步:线程 B修改Num 值为 2。第四步:线程 B修改Num 值为 1。第五步:线程 A修改Num 值为 2。以上场景可以...
乐观锁:CAS 一、CAS 简述CAS:比较并交换(CompareAndSwap),应用于多线程并发场景中,实现了无锁状态下的线程安全。CAS 避免了使用互斥锁,当多个线程同时进行 CAS 指令更新同一个变量时,只有其中一个线程能够操作成功,而其他线程都会更新失败。但此时更新失败的线程并不会被阻塞,而是还可以再次 CAS 尝试。二、Unsafe 类sun.misc.Unsafe 是 Java 提供的一个可直接操作内存空间的类。其特点:1)、不受 JVM 管理,使用 Unsafe 操作内存无法被 JVM GC
Merge Into 快速更新大量数据 一、场景描述接到几个数据修改的单子,需求是根据要求将给出的数据字段更新到表里边,数据量级第一次10万,第二次大约在20万左右,之前没有更新大量数据的经验,所以直接update。第一批5万条数据大约执行了4个小时,感觉等不下去了,看了一下执行计划,Cost 是10位数(当然,Cost 跟执行时长并无直接关系,只当作一个参考),如下图。由执行计划可以看出,进行了两次全盘扫描,且提供数据的表中无任何索引。二、SQL改进1、添加索引上文中提到提供数据的表中无任何索引,所以可以添加一个索引来缩
Java‘volatile conception 一、Java内存模型Java内存模型简称JMM (Java Memory Model),是Java虚拟机所定义的一种抽象规范,用来屏蔽不同硬件和操作系统的内存访问差异,让java程序在各种平台下都能达到一致的内存访问效果。主内存(Main Memory):主内存被所有的线程所共享,对于一个共享变量(比如静态变量,或是堆内存中的实例)来说,主内存当中存储了它的“本尊”。工作内存(Working Memory):每一个线程拥有自己的工作内存,对于一个共享变量来说,工作内存当中存储了它的“副本”。
Threadpool Description:线程池描述 一、线程与线程的执行单元在Java中:一个线程可以通过构造 Thread 类来实现。继承Thread类创建线程类,创建Thread类的实例,即创建了线程对象。之后,通过重写 run( ) 方法来让线程执行我们想要让它执行的逻辑。然而,为了让线程生效,我们还需要通过调用start()方法来启动它。创建线程实例:new Thread( )线程的执行单元:即重写 Thread 类中的 run( ) 方法体线程的启动:调用 start( ) 方法来启动该线程run 与 start 的区别:
RSA加解密及加密数据长度处理 一、关于RSA RSA是非对称加密,由一个公钥和私玥组成。公钥加密-私玥解密或私钥加密-公玥解密。其安全性生成的位数有关,位数越大越安全,目前最大支持2048。RSA加密的原理是通过算法实现的,主要用到的是欧拉定理。生成后的是base64 编码过的。 缺点,效率底,小量数据加密可以使用RSA...
RSA中的数学概念 一、质数与互质 质数(Prime number,又称素数),指在大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数(也可定义为只有1与该数本身两个正因数的数)。互质:公约数只有1的两个整数,叫做互质整数。公约数只有1的两个自然数,叫做互质自然数,后者是前者的特殊情形。二、费马小定理 描述: 证明: 1、构建集合X:X = { 1、2、......、p-1 }。显然,集合X中的每个元素都与p互质(互素),所以可得:1*2*...*(p-1) = ...
【Java】时间区间实现及Date类时间的区间判定工具 需求实现代码:SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); Date currDate= new Date(); sdf.format(currDate); String SUFFIX_TIME_00 ="-01-01"; String SUFFIX_TIME_01 ="-05-16"; String SUFFIX_TIME_02 ="-11-15";
Comparison Sort:Selection Sort 一、算法描述:简单选择排序,在待排序列中选出一个最小值,在剩余元素中进行相同操作。二、代码实现:package algorithmInit;public class SelectionSort { public static void main(String[] args) { int[] arr={1, 4, 2, 0, 8, 6, 7, 5, 3, 9}; selectionSort(arr); } public static void selectionSort(in
Comparison Sort:Merge Sort 一、算法描述归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,归并排序将两个已排序的表合并成一个表。分治法: 分--将问题分解为规模更小的子问题; 治--将这些规模更小的子问题逐个击破; 合--将已解决的子问题合并,最终得出“母”问题的解二、代码实现package algorithmInit;public class MergeSort { //将有二个有序数列a[...
Comparison Sort:Bubble Sort 一、冒泡排序描述冒泡排序(Bubble Sort)是一种典型的交换排序算法,通过交换数据元素的位置进行排序。从无序序列头部开始,进行两两比较,根据大小交换位置,直到最后将最大(小)的数据元素交换到了无序队列的队尾,从而成为有序序列的一部分;下一次继续这个过程,直到所有数据元素都排好序。算法的核心在于每次通过两两比较交换位置,选出剩余无序序列里最大(小)的数据元素放到队尾。二、Java代码实现package algorithmInit;//冒泡排序public class BubbleSor
Comparison Sort:Quick Sort 一、快速排序描述快排基于分治思想,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。二、Java代码实现:package algorithmInit;//快速排序public class QuickSort { public static void main(String[] args) { //测试 int[] a = {47,
String重写的Equals 一、"==" 与 equals下边这段代码应该都看过或者写过:String str1 = "test";String str2 = "test"; String str3 = new String("test");String str4 = new String("test"); System.out.println(str1 == str2);//trueSystem.out.println(str1.equals(str2));//trueSystem.out.printl
自动装箱与拆箱:Integer & int 一、包装类型Java:面向对象,不过Java中的基本数据类型却是不面向对象的,不过在设计类时为每个基本数据类型设计了一个对应的类进行代表,所以八个和基本数据类型对应的类统称为包装类(Wrapper Class)。包装类均位于java.lang包,包装类和基本数据类型的对应关系如下表所示:基本数据类型 包装类型 byte Byte short Short int Integer long Long char Character float
Java实现文件读取与写入 package trans;import java.io.File;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.Date;public class ObjectFileTrans { /*文件写入路.
【LeetCode_107】二叉树的层次遍历 II 描述:给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)示例:给定二叉树[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其自底向上的层次遍历为:[ [15,7], [9,20], [3]]代码:/** * Definition for a binary tree node. * public class TreeNo.
【LeetCode_101】 对称二叉树 描述:给定一个二叉树,检查它是否是镜像对称的。示例:例如,二叉树[1,2,2,3,4,4,3]是对称的代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution..
【LeetCode_69】 x 的平方根 描述:实现int sqrt(int x)函数。计算并返回x的平方根,其中x是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例:输入: 4输出: 2输入: 8输出: 2说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。代码:class Solution { public int mySqrt(int x) { if (x == 1) return 1; ...
【LeetCode_141】 环形链表 描述:给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。示例:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。输入:head = [1,2], pos = 0输出:true解释:链表中有一个环,其尾部连接到第一个节点。输入:head = [1], pos = -1输出:fa
【LeetCode_83】 删除排序链表中的重复元素 描述:给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例: 输入: 1->1->2 输出: 1->2输入: 1->1->2->3->3 输出: 1->2->3 代码:class Solution { public ListNode deleteDuplicates(ListNode head) { if (head == null || head...