本文为分布式系列文章的集锦汇总,长期保持置顶及更新,读者可以在本文中更好的学习到某个具体的系列。

注: 转载本博客文章请注明出处,原创不易,洗文可耻。

我说分布式事务系列

文章链接
我说分布式事务之TCC
我说分布式事务之最大努力通知型事务
我说分布式事务之可靠消息最终一致性事务1-原理及实现
我说分布式事务之消息一致性事务2-rocketmq的实现
【汇总】我说分布式事务系列
分布式事务之聊聊TCC
分布式事务最终一致性常用方案
TCC-Transaction源码解析之事务执行
TCC-Transaction源码解析之事务补偿
自己写分布式事务框架之原理篇[详解本地消息表]

跟我学RocketMQ

文章链接
[1-1]安装RocketMQ
[1-2]安装RocketMQ-Console管理平台
[1-3]发送普通消息及封装DefaultMQProducer支持spring
[1-4]消费消息及封装DefaultMQPushConsumer支持spring
[1-5]发送事务消息实现分布式事务及封装TransactionMQProducer支持spring
[2-0]跟我学RocketMQ之消息重试
[2-1]跟我学RocketMQ之消息幂等
[2-2]跟我学RocketMQ之消息轨迹实战与源码分析
[2-3]跟我学RocketMQ之消息发送源码解析
[2-4]跟我学RocketMQ之批量消息发送源码解析
[2-5]跟我学RocketMQ之消息消费源码解析-p1
[2-6]跟我学RocketMQ之消息消费源码解析-p2
[2-7]跟我学RocketMQ之订阅关系一致性源码讨论
[2-8]跟我学RocketMQ之消息拉取源码解析
[2-9]跟我学RocketMQ之开源客户端混合云实践与案例解析
[2-10]跟我学RocketMQ之事务消息发送源码解析
[2-10]跟我学RocketMQ之事务消息存储源码解析
[2-11]跟我学RocektMQ之事务消息提交及回查源码解析
[2-12]跟我学RocketMQ之定时消息源码解析
[2-13]跟我学RocektMQ之理解长轮询机制
[2-14]跟我学RocketMQ之消息持久化原理与Mmap
[2-15]跟我学RocketMQ之拉模式消费的两种方式
[2-16]跟我学RocketMQ之聊聊死信队列

分库分表

文章链接
我说分布式之分库分表
跟我学shardingjdbc之shardingjdbc入门
跟我学shardingjdbc之使用jasypt加密数据库连接密码
跟我学shardingjdbc之分布式主键及其自定义
跟我学shardingjdbc之自定义分库分表策略-复合分片算法自定义实现

Read More

本文将主要记录在日常开发中遇到的各种问题。以技术类别进行章节划分,作为个人的编码备忘录随时进行查阅,并长期进行置顶。

JavaCore相关

该模块主要记录JavaCore相关的技术点

bigdecimal四舍五入

BigDecimal.ROUND_HALF_UP: 遇到.5的情况时往上近似,例: 1.5 ->;2
BigDecimal.ROUND_HALF_DOWN : 遇到.5的情况时往下近似,例: 1.5 ->;1

bigDecimal转换为百分比,保留若干小数

DecimalFormat decimalFormat = new DecimalFormat("0.00%");
BigDecimal decimal = new BigDecimal(count.intValue()).divide(new BigDecimal(allCount), 5, ROUND_HALF_UP);
String formatted = decimalFormat.format(sdPercent);

bigDecimal精确度

BigDecimal.setScale(5,  BigDecimal.ROUND_HALF_UP)  -->保留五位小数,最后一位遇到.5的情况时往上近似

Read More

本文我们重点讲解一下Stream中收集器Collector的主要使用方式。

收集器

收集器(Collector)的作用为:将流中元素累积成一个结果作用于终端操作collect()上

关于收集器,我们主要关注:

collect()(操作实现Collector接口的集合)、

Collector(接口)

Collectors(工具类)

日常开发中,我们使用最多的是预定义收集器功能(Collectors)

它的作用主要是:

将流元素规约和汇总为一个值

将流元素分组

将流元素分区

Read More

本文是Java8函数式编程的最后一个章节,到此我们的Stream相关的讲解就暂时告一段落。

本文中我将带领读者朋友一起学习一下Stream高级编程相关的知识。

规约与汇总

Stream操作中有两个相对高阶的概念,分别为规约和汇总。

规约(reduce)

将Stream流中元素转换成一个值

汇总(collect)

将Stream流中的元素转换成一个容器,如Map 、List 、 Set

上文我们已经讲过了汇总操作Collect,此处我们重点讲讲规约操作(reduce)

Read More

上文中主要学习了Stream编程中的中间操作,本文我们接着分析终端操作,它分为短路和非短路操作。

我们提前明确一个原则:一个流一旦经过终端操作,就不能进行后续操作了。

allMatch: 检测所有元素是否满足断言,如果都满足返回true,有一个不满足返回false

@Test
public void allMatchTest() {
    boolean isMatch = list.stream()
            // 打印出部门商品名称即结束,参考打印结果
            .peek(sku -> System.out.println(sku.getSkuName()))
            // allMatch是短路操作
            .allMatch(sku -> sku.getTotalPrice() > 100);
    System.out.println(isMatch);
}

运行结果:

无人机
VR一体机
牛仔裤
false

Read More

我始终认为通过案例学习是最好的掌握一个技能的方式,因此我们还是通过之前文章中的案例,对Stream编程中涉及到的具体的方法进行详细的学习。

初始化数据

首先初始化一个List集合,用于后续讲解所用。

List<Sku> list;

@Before
public void init() {
    list = CartService.getCartSkuList();
}

我们仍旧使用之前的购物车数据

Read More

本文,我们开始进入到Java8的Stream流编程概念及实际使用方式的学习。

什么是流(Stream)?

Stream流是jdk1.8引入的新成员,通过声明式的方式处理集合数据(多通过lambda表达式方式进行展示)

它能够将基础操作链接起来,从而完成复杂的数据处理流水线

它也为开发者提供了透明的并行处理

《Java8实战》一书的解释为

流,是从支持 数据处理操作 的 源 生成的元素序列

Read More

本章节中,我们通过一个实战案例对比原始集合操作与Stream集合操作具体有哪些不同,直观地展示Stream集合操作对编程效率的提升。

案例:对比原始集合操作与Stream集合操作

需求场景:

针对上面的购物车,我们想要

  1. 全局查看购物车中都有哪些商品
  2. 将购物车中的图书类商品进行过滤(删除图书类商品)
  3. 在其余商品中挑选两件最贵的
  4. 打印出上述两件商品的名称和总价

Read More

这是一个新的系列,主要讲Java8的lambda编程以及Stream流式编程相关的用法和案例。

这个系列脱胎于一个内部的分享,由于篇幅较长,内容较多,因此拆分成多篇文章进行发布,方便自己后续参考,也希望能够帮到读者朋友。

在这里重点感谢慕课网的 《告别996,开启Java高效编程之门》 课程。

本文是Java8函数式编程系列的第一篇,我们一起学习一下Java8函数式编程的基本概念及操作。

1.概述Lambda表达式

Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。

Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。

使用 Lambda 表达式可以使代码变的更加简洁紧凑。

Read More

Fork me on GitHub