自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(48)
  • 收藏
  • 关注

原创 CAS中ABA问题及解决

一、ABA 场景描述基于上节中提到的 CAS 原理,CAS 算法实现一个重要前提需要取出内存中某时刻的数据并在当下时刻比较并替换,那么在这个时间差类会导致数据的变化。设想一个场景:有线程 A、B 两个线程想对同一变量 Num = 1进行修改,此时有:第一步:线程 A 读取 Num 值为 1 。第二步:线程 B读取 Num 值为 1 。第三步:线程 B修改Num 值为 2。第四步:线程 B修改Num 值为 1。第五步:线程 A修改Num 值为 2。以上场景可以...

2021-01-26 17:10:30 429

原创 乐观锁:CAS

一、CAS 简述CAS:比较并交换(CompareAndSwap),应用于多线程并发场景中,实现了无锁状态下的线程安全。CAS 避免了使用互斥锁,当多个线程同时进行 CAS 指令更新同一个变量时,只有其中一个线程能够操作成功,而其他线程都会更新失败。但此时更新失败的线程并不会被阻塞,而是还可以再次 CAS 尝试。二、Unsafe 类sun.misc.Unsafe 是 Java 提供的一个可直接操作内存空间的类。其特点:1)、不受 JVM 管理,使用 Unsafe 操作内存无法被 JVM GC

2021-01-26 16:54:26 241 1

原创 Merge Into 快速更新大量数据

一、场景描述接到几个数据修改的单子,需求是根据要求将给出的数据字段更新到表里边,数据量级第一次10万,第二次大约在20万左右,之前没有更新大量数据的经验,所以直接update。第一批5万条数据大约执行了4个小时,感觉等不下去了,看了一下执行计划,Cost 是10位数(当然,Cost 跟执行时长并无直接关系,只当作一个参考),如下图。由执行计划可以看出,进行了两次全盘扫描,且提供数据的表中无任何索引。二、SQL改进1、添加索引上文中提到提供数据的表中无任何索引,所以可以添加一个索引来缩

2020-12-12 18:14:43 6249 1

原创 Java‘volatile conception

一、Java内存模型Java内存模型简称JMM (Java Memory Model),是Java虚拟机所定义的一种抽象规范,用来屏蔽不同硬件和操作系统的内存访问差异,让java程序在各种平台下都能达到一致的内存访问效果。主内存(Main Memory):主内存被所有的线程所共享,对于一个共享变量(比如静态变量,或是堆内存中的实例)来说,主内存当中存储了它的“本尊”。工作内存(Working Memory):每一个线程拥有自己的工作内存,对于一个共享变量来说,工作内存当中存储了它的“副本”。

2020-11-27 16:21:35 114

原创 Threadpool Description:线程池描述

一、线程与线程的执行单元在Java中:一个线程可以通过构造 Thread 类来实现。继承Thread类创建线程类,创建Thread类的实例,即创建了线程对象。之后,通过重写 run( ) 方法来让线程执行我们想要让它执行的逻辑。然而,为了让线程生效,我们还需要通过调用start()方法来启动它。创建线程实例:new Thread( )线程的执行单元:即重写 Thread 类中的 run( ) 方法体线程的启动:调用 start( ) 方法来启动该线程run 与 start 的区别:

2020-11-26 16:52:41 158

原创 RSA加解密及加密数据长度处理

一、关于RSA RSA是非对称加密,由一个公钥和私玥组成。公钥加密-私玥解密或私钥加密-公玥解密。其安全性生成的位数有关,位数越大越安全,目前最大支持2048。RSA加密的原理是通过算法实现的,主要用到的是欧拉定理。生成后的是base64 编码过的。 缺点,效率底,小量数据加密可以使用RSA...

2020-11-26 09:44:04 4334

原创 RSA中的数学概念

一、质数与互质 质数(Prime number,又称素数),指在大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数(也可定义为只有1与该数本身两个正因数的数)。互质:公约数只有1的两个整数,叫做互质整数。公约数只有1的两个自然数,叫做互质自然数,后者是前者的特殊情形。二、费马小定理 描述: 证明: 1、构建集合X:X = { 1、2、......、p-1 }。显然,集合X中的每个元素都与p互质(互素),所以可得:1*2*...*(p-1) = ...

2020-11-21 21:14:05 426

原创 【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";

2020-11-10 17:30:51 1098

原创 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

2020-09-18 13:48:49 136

原创 Comparison Sort:Merge Sort

一、算法描述归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,归并排序将两个已排序的表合并成一个表。分治法: 分--将问题分解为规模更小的子问题; 治--将这些规模更小的子问题逐个击破; 合--将已解决的子问题合并,最终得出“母”问题的解二、代码实现package algorithmInit;public class MergeSort { //将有二个有序数列a[...

2020-09-17 10:04:44 145

原创 Comparison Sort:Bubble Sort

一、冒泡排序描述冒泡排序(Bubble Sort)是一种典型的交换排序算法,通过交换数据元素的位置进行排序。从无序序列头部开始,进行两两比较,根据大小交换位置,直到最后将最大(小)的数据元素交换到了无序队列的队尾,从而成为有序序列的一部分;下一次继续这个过程,直到所有数据元素都排好序。算法的核心在于每次通过两两比较交换位置,选出剩余无序序列里最大(小)的数据元素放到队尾。二、Java代码实现package algorithmInit;//冒泡排序public class BubbleSor

2020-09-15 15:51:08 155

原创 Comparison Sort:Quick Sort

一、快速排序描述快排基于分治思想,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。二、Java代码实现:package algorithmInit;//快速排序public class QuickSort { public static void main(String[] args) { //测试 int[] a = {47,

2020-09-15 15:08:11 212

原创 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

2020-09-14 17:38:47 586

原创 自动装箱与拆箱:Integer & int

一、包装类型Java:面向对象,不过Java中的基本数据类型却是不面向对象的,不过在设计类时为每个基本数据类型设计了一个对应的类进行代表,所以八个和基本数据类型对应的类统称为包装类(Wrapper Class)。包装类均位于java.lang包,包装类和基本数据类型的对应关系如下表所示:基本数据类型 包装类型 byte Byte short Short int Integer long Long char Character float

2020-09-14 16:34:11 162

原创 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 { /*文件写入路.

2020-09-14 10:51:20 306

原创 【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.

2020-06-17 23:18:20 117

原创 【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..

2020-06-17 23:15:34 101

原创 【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; ...

2020-06-17 23:10:50 86

原创 【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

2020-06-17 23:06:40 105

原创 【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...

2020-06-17 22:59:59 80

原创 【LeetCode_58】最后一个单词的长度

描述:给定一个仅包含大小写字母和空格' '的字符串 s,返回其最后一个单词的长度。如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词。如果不存在最后一个单词,请返回 0。说明:一个单词是指仅由字母组成、不包含任何空格字符的 最大子字符串。示例:输入: "Hello World"输出: 5代码:class Solution { public int lengthOfLastWord(String s) { String[] splits =...

2020-06-17 22:55:30 76

原创 Spring注解:IOC的应用

一、概述注解的优势:它可以充分利用 Java 的反射机制获取类结构信息,这些信息可以有效减少配置的工作。如使用 JPA 注释配置 ORM 映射时,我们就不需要指定 PO 的属性名、类型等信息,如果关系表字段和 PO 属性名、类型都一致,甚至无需编写任务属性映射信息——因为这些信息都可以通过 Java 反射机制获取。 注释和 Java 代码位于一个文件中,而 XML 配置采用独立的配置文件...

2020-04-27 14:55:02 123

原创 About HashMap

一、Map的概念Map:一个集合,一种依照键(key)存储元素的容器,键(key)很像下标,在List中下标是整数。在Map中键(key)可以使任意类型的对象。Map中不能有重复的键(Key),每个键(key)都有一个对应的值(value)。一个键(key)和它对应的值构成map集合中的一个元素。Map中的元素是两个对象,一个对象作为键,一个对象作为值。键不可以重复,但是值可以重复。Map本身...

2020-04-20 14:22:24 136

原创 线程安全概念初探(Java)

一 线程线程是进程中实施调度和分派的基本单位。一个进程可以有多个线程,但至少有一个线程;而一个线程只能在一个进程的地址空间内活动。内存资源分配给进程,同一个进程的所有线程共享该进程所有资源。而CPU分配给线程,即真正在处理器运行的是线程。二 线程安全多线程可以带来更好的性能,但是线程也不是越多越好,多线程往往会带来许多意想不到的问题,比如因为线程之间的调度和切换会浪费CPU的时间以及下...

2020-04-17 22:12:29 173

原创 Spring的AOP与IOC原理

一、IOC(Inversion of Control):控制反转传统模式下使用类的方法与属性,我们需要new出这个类的对象,然后使用对象进行方法调用,这种方法耦合度极高,为了降低耦合度,Spring提供了IOC控制反转机制,Spring帮助我们来创建对象就是我们所说的bean,并且管理bean对象,当我们需要用的时候,需要Spring提供给我们创建好的bean对象。这样就从之前我们的主动创建对...

2020-04-17 17:58:41 1886

原创 事务的概念及其ACID特性

一、事务的概念事务是用户定义的一个数据库操作序列,这些操作要么全不做,要么全做,是一个不可分割的工作单位。例如在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或者整个程序。事务和程序是两个概念。一般的讲一个程序包含多个事务。事务的开始与结束可以有用户显式控制。如果用户没有显式的定义事务,则由数据库管理系统DBMS按默认规定自动划分事务。在SQL中,定义事务的语句一般有三条...

2020-04-14 11:43:17 2597

原创 【LeetCode_178】分数排名(MySQL)

SQL架构编写一个 SQL 查询来实现分数排名。如果两个分数相同,则两个分数排名(Rank)相同。请注意,平分后的下一个名次应该是下一个连续的整数值。换句话说,名次之间不应该有“间隔”。+----+-------+| Id | Score |+----+-------+| 1 | 3.50 || 2 | 3.65 || 3 | 4.00 || 4 | 3.8...

2020-04-05 22:18:58 177

原创 【LeetCode_177】第N高的薪水(MySQL)

编写一个 SQL 查询,获取 Employee 表中第n高的薪水(Salary)。+----+--------+| Id | Salary |+----+--------+| 1 | 100 || 2 | 200 || 3 | 300 |+----+--------+例如上述Employee表,n = 2时,应返回第二高的薪水200。如果不存在...

2020-04-05 22:02:49 140

原创 【LeetCode_176】第二高的薪水(MySQL)

SQL架构编写一个 SQL 查询,获取Employee表中第二高的薪水(Salary)。+----+--------+| Id | Salary |+----+--------+| 1 | 100 || 2 | 200 || 3 | 300 |+----+--------+例如上述Employee表,SQL查询应该返回200作为第二...

2020-04-05 21:49:29 89

原创 【LeetCode_175】两个表组合(MySQL)

SQL架构表1:Person+-------------+---------+| 列名 | 类型 |+-------------+---------+| PersonId | int || FirstName | varchar || LastName | varchar |+-------------+---------+...

2020-04-05 20:46:12 109

原创 【LeetCode_100】相同的树(递归应用)

题目描述:给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例:输入: 1 1 1 1 / \ / \ ...

2020-04-04 13:30:10 77

原创 【LeetCode_160】相交链表:快慢指针

题目描述:编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点 c1 开始相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值...

2020-04-03 22:42:39 192

原创 【LeetCode_112】路径总和(深度优先)

题目描述:给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明:叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和sum = 22, 5 / \ 4 8 / / \ 11 13 4...

2020-04-03 20:12:14 188

原创 【LeetCode_171】数字字符:Excel表列序号

题目描述:给定一个Excel表格中的列名称,返回其相应的列序号。例如, A -> 1 B -> 2 C -> 3 ... Z -> 26 AA -> 27 AB -> 28 ...示例:输出: "A" 输出: "AB" 输出: "ZY"输入: 1...

2020-04-03 18:53:33 273

原创 【LeetCode_20】有效括号:栈(valid-parentheses)

题目描述:给定一个只包括 '(',')','{','}','[',']'的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意:空字符串可被认为是有效字符串。示例:输入: "()" 输入: "(]" 输入: "([)]" 输入: "([])"...

2020-04-03 18:39:20 60

原创 【LeetCode_70】爬楼梯:斐波那契

题目描述:假设你正在爬楼梯。需要n阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定n是一个正整数。示例:输入: 2 输入: 2输出: 2 输出: 2解释: 有两种方法可以爬到楼顶。 ...

2020-04-03 18:17:47 129

原创 【LeetCode_169】多数元素:众位数

题目描述:给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于⌊ n/2 ⌋的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例:输入: [3,2,3] 输入: [2,2,1,1,1,2,2]输出: 3 输出: 2代码:class Solution { public...

2020-04-03 16:48:44 120

原创 【LeetCode_168】字符数字:Excel表列名称

题目描述:给定一个正整数,返回它在 Excel 表中相对应的列名称。例如, 1 -> A 2 -> B 3 -> C ... 26 -> Z 27 -> AA 28 -> AB ...示例:输入: 1 28 701输出: "A" "AB" ...

2020-04-03 15:48:23 64

原创 【LeetCode_35】二分查找:搜索插入位置

题目描述:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。样例:示例 1: 示例2: 示例 3: ...

2019-12-31 16:12:19 88

原创 【LeetCode_01】两数和

问题描述:给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所...

2019-12-17 23:12:39 63

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除