自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

天道酬勤

不忘初心,方得始终

原创 设计模式之-策略模式

策略模式解决的核心:代码的重构以及优化:if-else 设计原则:开闭原则 设计核心:策略的上下文,用于动态的获取具体的某个策略对象 设计的相关类:策略的抽象类,策略的具体实现类,策略上下文类以及动态的获取策略对象类 动态获取对象:反射(也可以结合Spring的上下文管理) 核心问题:根...

2020-04-30 14:46:10 31 0

原创 ApplicationContext的实际项目操作--动态获取抽象类的各个子类即实现类(设计模式之-模板)

package com.github.dadiyang.bestpractice.SpringUtil; import org.springframework.beans.BeansException; import org.springframework.beans.factory.annot...

2020-04-16 22:18:06 69 0

原创 Spring事务的理解(个人认为非常好容易理解)

事务传播行为 什么叫事务传播行为?听起来挺高端的,其实很简单。 即然是传播,那么至少有两个东西,才可以发生传播。单体不存在传播这个行为。 事务传播行为(propagation behavior)指的就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行。 例如:methodA事务方...

2020-02-18 22:15:32 103 0

原创 java & 和 |运算(看HashMap源码时)

首先得明白10进制的数和2进制的数转换关系 遵循“8421”原则 1=1 2=10 3=11 4=100 5=101 6=110 7=111 8=1000 9=1001 … 128=1000 0000 129=1000 0001 & 是所有的2进制位数“与”出的最终结果,“与”的规则是两...

2020-02-18 10:06:46 60 0

原创 redis主存,哨兵,集群的应用(生产环境可用)

启动 * redis的数据类型: * 本质上是key-value的数据结构.而这个value分为: * String :单值和多值 * hash : * set * zset * list * 核心: 具有业务标示的key.过期策略指的是key的过期,key过期,key对应的值就会失效(如分布...

2020-02-14 16:23:37 59 0

原创 分布式架构-zookeeper --实际应用(注册中心,分布式job,分布式锁,)

数据结构: 核心:以节点的形式存储数据,根节点 >> 临时节点(临时序号节点) zookeeper作为dubbo的注册中心的时候,相关的服务的节点结构 必须注意一点:临时节点下不能存在其他的节点; 服务的节点是临时节点 /dubbo/com.tuling.zk.dubb...

2020-02-07 15:02:36 157 0

原创 分布式架构zookeeper-集群

从下面三个方面解释: 1.集群部署 2.选举机制 3.数据提交机制 特点:主存自动切换 一般是3台服务器,3个节点,半数运行机制,生产环境上应该部署到不同的物理机上,如果是测试环境可以部署到同一个物理机上,只要port不同就可以, 首先解决集群启动时遇到的一个问题: 详见这个博客:...

2020-02-06 22:14:02 38 0

原创 分布式框架-zookeeper的安装(linux版本)-一

一 、下载zookeeper wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.5.5/apache-zookeeper-3.5.5-bin.tar.gz 二、解压zookeeper tar -zxvf apache-zooke...

2020-02-06 14:43:02 30 0

原创 布隆过滤器

package com.redis.set; import java.util.BitSet; /** * 布隆过滤器: * 是由足够长的bit数组和k个hash函数构成的 * 本身是存在误判率的,但是误判率不能超过0.1%; * 通过概率算出来的,求导以及最值的公式; * * 应...

2020-02-04 00:41:01 30 0

原创 算法-查找bitMap

package com.redis.hash; /** * 计算机当中最小的单位是:Bit位 * 1Byte = 8bit * int = 4byte= 4*8bit * flote = 4Byte * Long = 8Byte * Char = 2Byte * * Int a ...

2020-02-02 22:14:25 25 0

原创 红黑树解决了什么问题

/** * 平衡二叉树:就是为了防止二叉搜索树变为线性数据结构,而出现的数据结构 * 而AVL树-绝对平衡树.左右子树的高度差不能超过1 * 红黑树:特性: * 1.每个结点不是红色就是黑色 * 2.根节点:一定是黑色的 * 3.不可能有两个红色的节点连在一起,每个叶子节点都是黑色的空...

2020-02-01 22:58:25 835 0

原创 树论-二叉搜索树

package com.redis.redandblack; /** * 特点: * 1.如果它的左子树不为空,则左子树上的节点值小于根节点 * 2.如果它的右子树不为空,则右子树上的节点值大于等于根节点 * 3.子树同样遵循以上两点 * 只要一棵树是二叉查找树,那么中序遍历一定是有...

2020-02-01 22:25:10 28 0

原创 树论基本操作-建立二叉树以及相关概念

package com.redis.binary; /** * 结点高度:结点到叶子节点的最长路径 * 结点深度:跟结点到该结点边的个数 * 结点层次:结点深度+1; * 树的高度:根结点的高度 * 常见的二叉树: * 平衡二叉树 * 二叉查找树 * 平衡二叉树 * B树:是多...

2020-02-01 21:32:56 24 0

原创 排序算法-快速排序

package com.redis.order; import java.util.Arrays; /** * 快速排序: * 基准数:一般就是取要排序的序列的第一个; * 算法的选择:数据量小的时候选择:插入和冒泡排序 数据量大的时候选择:快速排序 jdk当中...

2020-01-31 17:16:04 18 0

原创 排序算法-插入排序

package com.redis.order; /** * 插入/希尔/归并 * 1.时间效率 * 2.空间复杂度 * 3.比较次数&交换次数 * 两个操作: * 1:比较 * 2:交换 * 4.稳定性 */ 特点:对一个已有顺序的序列进行排序 public clas...

2020-01-31 15:18:04 95 0

原创 排序算法-归并排序

package com.redis.order; import java.util.Arrays; /** *归并的算法:是对递归算法的优化, * 底层的实现: * 递归+分治 * 递归的核心概念是: * //递归:就是把一个问题分成很多个子问题,而且每个子问题做相同的操...

2020-01-31 15:16:52 90 0

原创 自己实现一个栈结构

明白一个概念: 栈:是一种特殊的数据结构,特数性在于:栈本身是数组或者链表,常用的是数组 特点: LIFO:后进先出 生活场景:叠加盘子,取盘子 2.栈在函数中的调用 package com.redis.algorithm.stack; /** * 栈:一种特殊的数据结构,是数...

2020-01-31 14:36:56 78 0

原创 什么是缓存穿透?什么是缓存雪崩?什么是缓存失效以及采取什么样的措施去解决这些问题

一:缓存穿透; 当一个微应用或者分布式环境有上百万的流量请求时,如果这些请求的数据在redis缓存这一层不存在,那么就会穿过redis的缓存直达到后台,也就是mysql服务器,导致整个微服务应用挂掉,针对这种问题,给出有以下解决方案: 1.当大量的流量请求过来时,如果数据不存在,给redis...

2020-01-16 17:49:36 41 0

原创 redis分布式锁(生产环境可用,支持多种高并发)

package com.redis.lock; import com.google.common.hash.BloomFilter; import com.google.common.hash.Funnels; import org.slf4j.Logger; import org.slf4j....

2020-01-16 17:27:08 139 0

原创 Spring事务理解(Spring 如何在一个事务中开启另一个事务)

但是这只适用与业务比较简单的,如果出现多次数据库的写操作,而我们调用的系统只需要其中一个写操作的最新数据,如果我们将它分开,那么如果调用目标系统出现异常的时候,那么之前的写操作就不能回滚了。 举个简单的例子: @Service public class ServiceA { @Trans...

2019-12-23 13:57:46 74 0

原创 oracle生成主键的方法

select * from user_sequences; /*第二步:建立自定义的sequence*/ drop SEQUENCE K_CONFIG_DIAGNOSE_TYPE_SEQ; CREATE SEQUENCE K_CONFIG_ACTIVITY_TYPE_SEQ increment b...

2019-11-11 11:25:46 37 0

原创 Linux中Redis的安装

一、下载redis redis官网地址:http://www.redis.io/ 下载地址:http://download.redis.io/releases/ redis中文文档地址:http://www.redis.cn/documentation.html 最新版本:5.0 稳定版...

2019-11-07 10:41:54 39 0

原创 单个list集合中存在相同的元素的去重

1.重写对象中某个属性的hashCode和equals方法 2.利用set的特性 //去重 public static <T> List<T> getConfigInfo(List<T> t) { Set set = new HashSet(); ...

2019-11-06 17:08:46 230 0

原创 获取两个List集合中的不相同的对象

1.重写对象中某个属性的hashCode和equals方法 2.解决了大量for循环嵌套的问题 private List<ActivityConfigDo> getListCompare(List<ActivityConfigDo> configDoList, List...

2019-11-06 17:06:42 229 0

原创 SpringCloud两种服务降级的方法

1.feign整合hystrix的降级 2.hystrix本身的降级 3.进行熔断的处理 package com.mcloud.nis.knowledge.feign; import com.alibaba.fastjson.JSONObject; import com.mcloud.n...

2019-11-06 17:00:27 1307 0

原创 在Windows上通过Xshell将文件上传到Linux上

步骤: 一、下载Xshell 二、在Linux主机上,安装上传下载工具包rz及sz   如果不知道你要安装包的具体名称,可以使用yum provides */name 进行查找系统自带软件包的信息;   [root@localhost src]#yum provides */rz   l...

2019-11-05 22:39:15 42 0

原创 fastjson List转JSONArray以及JSONArray转List

1.fastjson List转JSONArrayList<T> list = new ArrayList<T>();JSONArray array= JSONArray.parseArray(JSON.toJSONString(list));2.fastjson JSON...

2019-10-24 11:46:04 28 0

原创 分布式架构:并发重复请求和幂等场景技术实现总结

概念 重复请求是指一个请求因为某些原因被多次提交,场景简述如下: 用户快速多次点击按钮 Nginx失败重试机制 服务框架失败重试机制 MQ消息重复消费 第三方支付支付成功后,因为异常原因导致的多次异步回调; 幂等性是指同样的请求参数,多次请求返回的结果相同。一般是因为重复请求导致的重复...

2019-10-14 09:34:28 35 0

原创 项目问题:Synchronized锁在Spring事务下的线程不安全问题:

开启10000个线程,每个线程给员工表的money字段【初始值是0】加1,没有使用悲观锁和乐观锁,但是在业务层方法上加了synchronized关键字,问题是代码执行完毕后数据库中的money 字段不是10000,而是小于10000 问题出在哪里? Service层代码: SQL代码...

2019-10-14 09:26:46 29 0

原创 springboot单机项目的部署流程

项目部署: 1.打包: 跳过单元测试: mvn clean package -Dmaven.test.skip=true 2.拷贝到服务器的目录: scp target/sell.jar(本地目录) root@192.168.30.113:/opt/javaapps 3.启动并且指定修改端口和修改...

2019-09-20 13:19:08 101 0

原创 限流的两种算法以及相关的实现方法

令牌桶算法限流 限流 限流是对某一时间窗口内的请求数进行限制,保持系统的可用性和稳定性,防止因流量暴增而导致的系统运行缓慢或宕机。常用的限流算法有令牌桶和和漏桶,而Google开源项目Guava中的RateLimiter使用的就是令牌桶控制算法。 在开发高并发系统时有三把利器用来保护系统:缓...

2019-09-17 21:22:22 181 0

原创 redis分布式锁

import org.apache.commons.lang3.StringUtils; import org.springframework.data.redis.core.StringRedisTemplate; /** * @描述:Redis 做分布式锁,利用 redis的setnx(SE...

2019-09-16 21:35:03 61 0

原创 synchronized关键字的底层实现

1.从两个方方面去考虑: 1.编译以后,由.java文件变为.class文件.因为本身是一个对象锁,所以编译以后是字节码 monitorentor和monitorexit,中间是执行业务逻辑的,然后获取的锁就是创建对象的时候,默认的会有一个monitor锁的权限,从用户态到内核态的转换 jv...

2019-09-09 15:57:01 92 0

原创 关于枚举用法的总结

最简单的枚举使用方式: /** * 季节枚举类 * Created by SYJ on 2017/5/1. */ public enum SeasonEnum { SPRING, SUMMER, AUTUMN, WINTER } 用法举例: /** * Cre...

2019-08-23 18:04:22 140 0

原创 git 如何把分支代码合并到master主分支上

1.首先切换到分支; git checkout hellomonkey 2.使用git pull 把分支代码pull下来; git pull 3.切换到主分支; git checkout master 4.把分支的代码merge到主分支; git merge hellomonkey 5.g...

2019-08-23 17:50:44 2094 0

原创 java如何消除太多的if else判断?

if..else public int calculate(int a, int b, String operator) { int result = Integer.MIN_VALUE; if ("add".equals(op...

2019-08-23 14:08:44 3407 2

原创 Git 从master拉取代码创建新分支

从master拉取新分支并push到远端 开发过程中经常用到从master分支copy一个开发分支: 1.切换到被copy的分支(master),并且从远端拉取最新版本 $git checkout master $git pull 2.从当前分支拉copy开发分支 $git check...

2019-08-23 09:59:24 627 0

原创 java实现两个有序单链表合并

遍历方法 递归 非递归 节点类 /** * @auther: lawt * @date: 2018/11/4 08 * @Description: 结点信息 */ public class Node { /** * 为了方便,这两个变量都使用public,而不用private就不需要编...

2019-08-14 18:12:24 207 0

原创 采用redis token,分布式锁的接口幂等性实现

每一次进行幂等校验之前先获取token,因为token的时效性只有1次,我们每次获得的token在幂等操作后就无效了,所以一个token不需要长期保存在redis中。 @RestController public class TokenController { @Autowired priva...

2019-08-12 16:00:54 135 1

原创 RocketMQ解决数据一致性的问题

整个系统架构的演变过程: 串行---->并行------>MQ解耦执行

2019-08-12 10:32:35 654 0

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