自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 资源 (17)
  • 收藏
  • 关注

原创 base64字符串及AES、DES、RSA区别

2.1 由于URL中的特殊字符限制,URL中经常会将"+“替换成空格字符” “,将”/“替换成”-“或者”_"。因此,在将Base64字符串从前端传递到后端时,往往需要对这些字符进行还原。如下代码所示,最终输出的字符串为MI/ICdwIBADANBgkqh+kiG9w/base64字符串由大小写字母、数字、加号(+)、斜杠(/)、等号(=)5种字符组成。\s:表示空白字符的元字符。包括空格、制表符、换行符等。2.2 对包括空格、制表符、换行符等进行替换。*:表示匹配前面的元素零次或多次。

2023-07-13 14:47:19 640

原创 分布式事务

分布式事务⼤概分为:2pc(两段式提交)3pc(三段式提交)TCC(Try、Confirm、Cancel)最⼤努⼒通知XA本地消息表(ebay研发出的)半消息/最终⼀致性(RocketMQ)1.2pc(两段式提交) :2pc(两段式提交)可以说是分布式事务的最开始的样⼦了,像极了媒婆,就是通过消息中间件协调多个系统,在两个系统操作事务的时候都锁定资源但是不提交事务,等两者都准备好了,告诉消息中间件,然后再分别提交事务。但是,如果A系统事务提交成功了,但是B系统在提交的时候⽹络波动或者各种

2023-05-12 15:09:15 85

原创 kafka消息队列防止数据丢失、重复消费(幂等性)、顺序消费解决方案

Kafka 实际上有个 offset 的概念,就是每个消息写进去,都有一个 offset,代表消息的序号,然后 consumer 消费了数据之后,每隔一段时间(定时定期),会把自己消费过的消息的 offset 提交一下,表示“我已经消费过了,下次我要是重启啥的,你就让我继续从上次消费到的 offset 来继续消费吧”如果消费过了,那你就别处理了,保证别重复处理相同的消息即可。但是,我们在消费者里可能会搞。幂等性,通俗点说,就一个数据,或者一个请求,给你重复来多次,你得确保对应的数据是不会改变的,不能出错。

2023-02-27 15:40:08 637

原创 MySQL 事务、锁和MVCC

来实现的,undo log会记录修改数据之前的信息,可以帮我们找到「版本」的数据,而read view 实际上就是在查询时,InnoDB会生成一个read view,read view 有几个重要的字段,分别是:trx_ids(尚未提交commit的事务版本号集合),up_limit_id(下一次要生成的事务ID值),low_limit_id(尚未提交版本号的事务ID最小值)以及creator_trx_id(当前的事务版本号)一、B+树非叶子节点不存储数据,在相同的数据量下,B+树更加矮壮。

2023-02-24 14:55:21 163

原创 mybatis基于注解和拦截器实现敏感信息加密和解密

定义注解敏感信息类(如实体类POJO\PO)的注解。

2023-01-17 17:03:35 274

原创 spring AOP配合注解实现隐私数据前端展示脱敏,简直是王炸

昨天同事让我帮他解答AOP的代码,复习了一下,感觉有点东西。想想项目中有些地方还是能用到spring AOP的,比如证件号码、手机号、姓名等,在前端显示时需要脱敏,比如176***0776这样。4.定义AOP切面,拦截自定义的脱敏注解,对加了注解的字段在返回前端前做脱敏处理。

2023-01-13 14:25:50 610 1

原创 Spring事务的传播机制

Spring 事务传播机制是包含多个事务的方法在相互调用时,事务是如何在这些方法间传播的。事务的传播级别有 7 个,支持当前事务的:REQUIRED、SUPPORTS、MANDATORY;不支持当前事务的:REQUIRES_NEW、NOT_SUPPORTED、NEVER,以及嵌套事务 NESTED,其中 REQUIRED 是默认的事务传播级别。

2022-10-26 15:53:48 6304

原创 Spring事务不生效的5个场景

调用类内部 @Transactional 的方法不自动回滚事务的原因是,@Transactional 是基于 Spring AOP 实现的,而 Spring AOP 又是基于动态代理实现的,而当调用类内部的方法时,不是通过代理对象完成的,而是通过 this 对象实现的,这样就绕过了代理对象,从而事务就失效了。在前面 @Transactional 的执行流程中,我们提到:当方法中出现了异常之后,事务会自动回滚。此时我们的解决方案是给调用的方法上也加上 @Transactional。

2022-10-26 14:58:21 311 1

原创 责任链模式

当你想要让一个以上的对象有机会能够处理某个请求的时候,就使用责任链模式。责任链模式为请求创建了一个接收者对象的链。执行链上有多个对象节点,每个对象节点都有机会(条件匹配)处理请求事务,如果某个对象节点处理完了,就可以根据实际业务需求传递给下一个节点继续处理或者返回处理完毕。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。责任链模式实际上是一种处理请求的模式,它让多个处理器(对象节点)都有机会处理该请求,直到其中某个处理成功为止。

2022-10-20 15:15:50 80

原创 策略模式(消除if/lse,代码维护容易,可读性高)

策略模式定义了算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的的客户。这个策略模式的定义是不是有点抽象呢?那我们来看点通俗易懂的比喻:假设你跟不同性格类型的小姐姐约会,要用不同的策略,有的请电影比较好,有的则去吃小吃效果不错,有的去逛街买买买最合适。当然,目的都是为了得到小姐姐的芳心,请看电影、吃小吃、逛街就是不同的策略。策略模式针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。

2022-10-20 11:47:32 118

原创 观察者模式

我们来看下EventBus的实战代码哈,首先可以声明一个EventBusCenter类,它类似于被观察者那种角色,包含往EventBus注册和移除观察者的方法。自己搞一套观察者模式的代码,还是有点小麻烦。实际上,Guava EventBus就封装好了,它 提供一套基于注解的事件总线,api可以灵活的使用,爽歪歪。然后再声明观察者EventListener和通知消息实体类NotifyEvent。

2022-10-19 17:52:41 44

原创 jdk8新特性(Stream流和日期)

二、java8日期的使用,涉及getYear、getMonthValue、getHour、plusDays、minusDays、minusMonths、plusMonths、Period.between、ChronoUnit.MONTHS.between、Instant.now()、Instant.plus、Duration.ofSeconds(10)、Duration.between、isAfter、Clock、ZoneId等类和方法。

2022-10-18 16:46:40 421

原创 写出优雅的代码消除if/else(注解、模板方法、策略+工厂模式、责任链模式)

这段代码的关键是PayStrategyFactory类,它是一个策略工厂,里面定义了一个全局的map,在所有IPay的实现类中注册当前实例到map中,然后在调用的地方通过PayStrategyFactory类根据code从map获取支付类实例即可。这段代码中先把实现了IPay接口的支付类实例初始化到一个list集合中,返回在调用支付接口时循环遍历这个list集合,如果code跟自己定义的一样,则调用当前的支付类实例的pay方法。注意:这种方式的code可以没有业务含义,可以是纯数字,只有不重复就行。

2022-10-13 15:55:27 143

原创 Linux文件编辑与查看命令

3.less退出后shell不会留下刚显示的内容,而more退出后会在shell上留下刚显示的内容.1.less可以按键盘上下方向键显示上下内容,more不能通过上下方向键控制显示。2.less不必读整个文件,加载速度会比more更快。...

2022-07-22 10:20:52 121

原创 Oracle sql语法相关

1.start with connect by prior 递归查询用法给出任意一个结点,遍历其所有的父结点或者子结点。用法如下:(1)根据子节点id 863400 合肥中心支公司查询此节点的所有父节点start with 子句:遍历起始条件,有个小技巧,如果要查父结点,这里可以用子结点的列,反之亦然。connect by 子句:连接条件。关键词prior,prior跟父节点列parentid放在一起,就是往父结点方向遍历;prior跟子结点列subid放在一起,则往叶子结点方向遍历,parent

2021-08-30 14:42:56 242

原创 生产踩坑,url地址+号被去除问题

生产反馈报表单行数据删除失败,分析原因看生产日志发现传过来的参数的+号被替换成了空格,导致查不到记录删除失败。针对这种问题网上搜了大概有三种解决办法:方法一、修改客户端,将客户端带“+”的参数中的“+”全部替换为‍“%2B”,这样参数传到服务器端时就能得到“+”了。方法二、修改服务器端,将空格替换为“+”,这种方式只适用于参数中有‍“+”没有空格的情况。例子:String a = reuqest.‍getParameter(“clientStr”)‍.replace(’ ‘,’+’);如果客户端

2021-08-18 14:50:09 861

原创 java按字节截取字符串

按字节分割字符串后台数据库有时不能使用CLOB存储数据的时候,需要将前台传递的字符串分割为更小的字符串存到多个字段中,这时如果使用substring的话,字符串中的中文情况下,由于数据库字符类型存储字节数的限制,以oracle的varchar2为例,长度最长为4000字节,会造成字段长度不够的异常。这时需要以字节为单位分割字符串。代码如下: private List<String> splitStringToListByByte(String srcStr, int byteLimi

2021-08-10 20:07:11 1234

原创 多线程CountDownLatch、CyclicBarrier、Semaphore同步工具类

Java为我们提供了三个同步工具类:CountDownLatch(闭锁)CyclicBarrier(栅栏)Semaphore(信号量)这几个工具类其实说白了就是为了能够更好控制线程之间的通讯问题~一、CountDownLatch1.1CountDownLatch简介A synchronization aid that allows one or more threads to wait until a set of operationsbeing performed in other thr

2021-07-29 11:40:49 222

原创 解决谷歌浏览器响应数据中文乱码问题

第一步:下载https://github.com/jinliming2/Chrome-Charset找到release: https://github.com/jinliming2/Chrome-Charset/releases下载Source code (zip)解压第二步:添加打开浏览器,找到设置1.直接打开 chrome://extensions2.或者点击 更多工具——》扩展程序——》点击右上角“开发者模式”——》加载已解压的扩展程序...

2021-07-28 17:42:24 2238

原创 BigDecimal的常用方法

【为什么要用BigDecimal?】首先,我们先看一下,下面这个现象那为什么会出现这种情况呢?因为不论是float 还是double都是浮点数,而计算机是二进制的,浮点数会失去一定的精确度。注:根本原因是:十进制值通常没有完全相同的二进制表示形式;十进制数的二进制表示形式可能不精确。只能无限接近于那个值但是,在项目中,我们不可能让这种情况出现,特别是金融项目,因为涉及金额的计算都必须十分精确,你想想,如果你的支付宝账户余额显示193.99999999999998,那是一种怎么样的体验?1.add

2021-07-28 16:36:35 236

原创 分布式锁的实现

分布式锁的三种实现⽅式:Zookeeper,Redis,MySQL1.zk实现分布式锁思路:利用zk的临时节点的唯一性,如果临时节点存在则create -e /目录 节点名 会失败,创建成功证名可以获取到锁,获取到之后执行del -e /目录 节点名 则可释放。死循环,递归不断去尝试,直到成功。监听节点的删除事件可以知道删除了节点2.redis实现分布式锁setex命令:nx和px的结合参数,就是set值并且加了过期时间,这两个命令是原子性的操作,这时间内如果第⼆个没拿到第⼀个的锁,就退出阻

2021-07-01 17:01:36 47

原创 redis高级用法

1.分布式锁使用setnx命令可以实现分布式锁,但是这个锁会有原子性、可重入问题,就⽐如setnx成功,设置失效时间expire的时候可能失败。第三⽅的⼀些插件可以解决这些问题,Redission ,Jedis等,他们的底层都是通过lua脚本去保证的,就⽐如去删除的时候,去校验是否当前线程锁定的,就把⽐较和删除这样⼀些动作都放到⼀起了:2.位图bitmap在我们平时开发过程中,会有⼀些 bool 型数据需要存取,⽐如⽤户⼀年的签到记录,签了是 1,没签是0,要记录 365 天。如果使⽤普通的 ke

2021-07-01 10:27:05 481

原创 js动态时钟倒计时

效果图:js代码:/** 订单剩余时间处理 */ orderTime: function (res, type) { var nowTime = new Date().getTime(); var endTime = new Date(res.createDate.replace(/-/g, '/')).getTime() + (24 * 60 * 60 * 1000); if (type == 'time') { this

2021-06-28 16:27:06 79

【Java8新特带你看尽Java8新特性.zip

【Java8新特带你看尽Java8新特性.zip

2023-01-21

Spring Boot 进阶笔记.pdf

Spring Boot 进阶笔记.pdf

2023-01-14

java代码生成工具d

java代码生成工具d

2022-11-28

周年庆活动代码.rar

周年庆活动代码.rar

2022-01-25

jdk-8u311-windows-x64.rar

jdk-8u311-windows-x64.rar

2021-11-24

postmanwindows.rar

postmanwindows.rar

2021-11-24

Snipaste-1.16.2-x64.rar

Snipaste-1.16.2-x64.rar

2021-11-24

GoogleChrome.rar

GoogleChrome.rar

2021-11-24

Everything.rar

Everything.rar

2021-11-24

设计模式.zip

设计模式.zip

2021-11-16

8509核心知识点总结.zip

8509核心知识点总结.zip

2021-11-16

JAVA核心知识点整理.pdf

JAVA核心知识点整理.pdf

2021-11-16

Oracle经典教程.pdf

Oracle经典教程.pdf

2021-11-16

SQL完全手册.pdf

SQL完全手册.pdf

2021-11-16

java多线程完整使用教程.rar

java多线程完整使用教程.rar

2021-07-21

三歪教你学习过滤器和监听器.zip

三歪教你学习过滤器和监听器.zip

2021-07-06

HashTable、ConcurrentHashMap.pdf

HashTable、ConcurrentHashMap.pdf

2021-07-06

ArrayList.pdf

ArrayList.pdf

2021-07-06

HashMap.pdf

HashMap.pdf

2021-07-06

书单工具整理111.zip

书单工具整理111.zip

2021-06-28

空空如也

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

TA关注的人

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