- 博客(1920)
- 资源 (12)
- 收藏
- 关注
原创 Java 8 - Optional全解
文章目录在Optional出现之前经常遇到的空指针异常采用防御式减少NullPointerException (深度质疑)null-安全的第二种尝试(过多的退出语句)Optional的介绍以及API的详解Optional之flatMap,综合练习,Optional源码剖析在Optional出现之前经常遇到的空指针异常NullPointerException【Person / Car / Insurance 的数据模型】public class Person { private Car car;
2021-03-14 10:51:25 13459 1
原创 Java 8 - 收集器Collectors_分区partitioningBy
文章目录PrePre分区是分组的特殊情况:由一个谓词(返回一个布尔值的函数)作为分类函数,它称分区函数 。分区函数返回一个布尔值,这意味着得到的分组 Map 的键类型是 Boolean ,于是它最多可以分为两组—— true 是一组, false 是一组举个例子: 把菜单按照素食和非素食分开 Map<Boolean, List<Dish>> collect = menu.stream().collect(partitioningBy(Dish::isVege
2021-03-13 15:47:05 13366
原创 Java 8 - 收集器Collectors_分组groupingBy
文章目录Pre第二个例子Pre来看个小例子: 把菜单中的菜按照类型进行分类,有菜的放一组,有肉的放一组,其他的都放另一组。Map<Dish.Type, List<Dish>> collect = menu.stream().collect(groupingBy(Dish::getType));用 Collectors.groupingBy 工厂方法返回的收集器就可以轻松地完成这项任务。这里,给 groupingBy 方法传递了一个 Function (以方法引用的形式
2021-03-12 22:26:02 15683 1
原创 Java 8 - 收集器Collectors_归约和汇总
文章目录Pre查找流中的最大值和最小值Pre在需要将流项目重组成集合时,一般会使用收集器( Stream 方法 collect的参数)。再宽泛一点来说,但凡要把流中所有的项目合并成一个结果时就可以用。这个结果可以是任何类型。 public static List<Dish> menu = Arrays.asList( new Dish("pork", false, 800, Dish.Type.MEAT), new Dish("bee
2021-03-12 01:03:51 12957 1
原创 Java 8 - 收集器Collectors
文章目录Pre简介Pre我们前面学到了,流可以用类似于数据库的操作帮助你处理集合。它们支持两种类型的操作:中间操作(如 filter 或 map )终端操作(如 count 、 findFirst 、 forEach 和 reduce )中间操作可以链接起来,将一个流转换为另一个流。这些操作不会消耗流,其目的是建立一个流水线。与此相反,终端操作会消耗流,以产生一个最终结果,例如返回流中的最大元素。它们通常可以通过优化流水线来缩短计算时间。前面使用过了collect 终端操作了
2021-03-11 22:49:42 12981 1
原创 MySQL - mysqldump多种方式实现数据迁移
一行命令mysqldump -h172.168.15.222 -P3406 -uroot -p123456 -C --databases artisan |mysql -h172.168.15.221 -P3406 -uroot -p123456 zfdc-C 压缩Shell 导入导出【导出】#!/bin/bash# 以下配置信息请根据现场实际情况修改mysql_user="root" #MySQL备份用户mysql_password="123456" #MySQL备份用户的密码.
2021-03-11 22:26:23 12742 1
原创 Java 8 - 数值流Numberic Stream
文章目录Pre附PreJava 8 - Stream流骚操作解读2_归约操作操作了reduce, 使用 reduce 方法计算流中元素的总和.来看个例子 // 菜单中的热量求和 public static Integer sumCal(List<Dish> dishes){ return dishes.stream().map(Dish::getCalories) .reduce(0,Integer::sum);
2021-03-10 21:58:58 12858
原创 Java 8 - Stream实战
文章目录习题附 Trader & Transaction习题(1) 找出2011年发生的所有交易,并按交易额排序(从低到高)。-(2) 交易员都在哪些不同的城市工作过?-(3) 查找所有来自于剑桥的交易员,并按姓名排序。-(4) 返回所有交易员的姓名字符串,按字母顺序排序。-(5) 有没有交易员是在米兰工作的?-(6) 打印生活在剑桥的交易员的所有交易额。-(7) 所有交易中,最高的交易额是多少?-(8) 找到交易额最小的交易附 Trader & Tran
2021-03-09 00:11:35 13473 12
原创 Java 8 - Stream流骚操作解读2_归约操作
文章目录Pre规约元素求和最大值和最小值PreJava 8 - Stream流骚操作解读见到过的终端操作都是返回一个 boolean ( allMatch 之类的)、 void( forEach )或 Optional 对象( findAny 等)。也见过了使用 collect 来将流中的所有元素组合成一个 List 。我们这里将学会如何把一个流中的元素组合起来,使用 reduce 操作来表达更复杂的查询,比如“计算菜单中的总卡路里”或“菜单中卡路里最高的?是哪一个”。此类查询需要将流中所有元素
2021-03-08 23:06:00 13322 10
原创 Java 8 - Stream流骚操作解读
文章目录java.util.stream.Stream 中的 Stream 接口定义了许多操作。我们来看个例子可以分为两大类操作filter 、 map 和 limit 可以连成一条流水线collect 触发流水线执行并关闭它可以连接起来的流操作称为中间操作,关闭流的操作称为终端操作...
2021-03-08 11:53:15 13594 1
原创 Java 8 - Stream基本实例及Stream的并行处理在线程上的表现
文章目录需求Java 7及之前的实现需求需求: 输出小于400的Dish的名字 , 并按照卡路里排序Java 7及之前的实现package com.artisan.java8.stream;import com.artisan.java8.Dish;import java.util.*;import java.util.stream.Collectors;/** * @author 小工匠 * @version 1.0 * @description: TODO * @dat
2021-03-07 22:28:41 13148 8
原创 Java 8 - Lambda从兴趣盎然到索然无味
文章目录Pre常见的内置函数式接口`FunctionPreLambda表达式是以函数式接口作为基础,所以非常有必要了解一下函数式接口Java 8 - 01 优雅编程 lambda 以及 @FunctionalInterface注解一点通Java 8 - 02 Lambda ExpressionJava 8 - 03 Lambda 函数式接口Predicate & Consumer & Function & SupplierJava 8 - 04 类型检查、类型推断以及限制
2021-03-07 09:27:49 12548 8
原创 Java 8 - 时间API
文章目录Pre模拟SimpleDateFormate线程安全问题Pre并发编程-12线程安全策略之常见的线程不安全类模拟SimpleDateFormate线程安全问题package com.artisan.java8.testDate;import java.text.ParseException;import java.text.SimpleDateFormat;import java.time.*;import java.time.format.DateTimeFormatter;
2021-03-05 14:51:14 12490 8
原创 深入理解分布式技术 - 探究缓存穿透、缓存击穿、缓存雪崩解决方案
文章目录概述缓存穿透what缓存穿透发生的场景举例不合理的缓存失效策略恶意攻击如何规避缓存穿透概述缓存系统不得不考虑的问题是缓存穿透、缓存击穿与失效时的雪崩效应,这是避免不了的问题 。 今天我们来讨论下这几种问题的常见的解决思路缓存穿透what顾名思义,是指业务请求穿过了缓存层,落到持久化存储上。在大多数场景下,我们应用缓存是为了承载前端业务请求,缓存被击穿以后,如果请求量比较大,则会导致数据库出现风险。高并发的情况下, 单靠数据库是不能承载的,如果缓存不能很好的工作,可能会影响数据库
2021-03-04 22:58:45 12498 2
原创 深入理解分布式技术 - 分布式系统中的缓存
文章目录缓存无处不在缓存无处不在缓存是分布式系统开发中的常见技术,在分布式系统中的缓存,不止 Redis、Memcached 等后端存储;在前端页面、浏览器、网络 CDN 中也都有缓存的身影。作为后端工程师,提起缓存首先想到的应该是应用 Redis,或者 Memcached 等服务端缓存,其实这些在缓存分类中只是一小部分。然而在整个业务流程中,从前端 Web 请求,到网络传输,再到服务端和数据库服务,各个阶段都有缓存的应用。举个例子,打开京东,查看一个商品详情页,这个过程就涉及多种缓存的协同,我们从
2021-03-04 21:23:43 13061 1
原创 深入理解分布式技术 - 消息队列知识点回顾总结
文章目录概述MQ相关理论和设计特定MQ的问题KafkaRocketMQ概述我们平常如何评估MQ掌握的怎么样呢? 我觉得可以从以下两点来考虑针对消息队列的相关理论,比如消息队列重复消费、消费幂等性、消息队列的可靠传输等针对某个具体的消息队列中间件,掌握组件应用的原理,实现方案和应用细节,比如常见的 Kafka、RabbitMQ、RocketMQ 等消息队列组件。MQ相关理论和设计针对第一点MQ相关理论和设计,可以考虑的点有如何保证消息队列的高可用?如何保证消息不被重复消费?
2021-03-01 23:05:26 12268 4
原创 深入理解分布式技术 - RocketMQ解析
文章目录概述RocketMQ组成典型应用Binlog 分发事务消息实现分布式一致性概述消息队列的应用场景有很多,不同消息队列由于在实现上有着细微的差别,所以有着各自适合的应用场景。当我们在进行业务开发的时候,还是需要了解一下消息队列背后的设计思想,以及其基本的特性,这样才能对消息队列进行合理的选型。RocketMQ组成RocketMQ 在阿里巴巴被大规模应用,其前身是淘宝的 MetaQ,后来改名为 RocketMQ,并加入了 Apache 基金会。RocketMQ 基于高可用分布式集群技术
2021-02-27 05:42:36 13821 10
原创 深入理解分布式技术 - Kafka 高性能原理剖析
文章目录概述磁盘顺序读写批量操作优化Sendfile 零拷贝MMAP 技术小结概述Kafka 所实现的高性能不需要太高配置的机器,它使用普通服务器就能实现 TB 级别的传输性能。这一点也是 Kafka 对外宣传的一个特性,也正是因为这一点,Kafka 被广泛运用于大数据处理、流式计算、各类日志监控等需要处理海量数据的场景。为什么呢?磁盘顺序读写Kafka 消息是存储在磁盘上的,众所周知,普通的机械磁盘读取是比较慢的,那 Kafka 文件在磁盘上,如何实现高性能的读写呢?Kafka 对磁盘
2021-02-24 22:48:41 12171
原创 深入理解分布式技术 - 构建高可用的消息队列
文章目录概述概述一般来说,分布式系统的高可用依赖副本技术,副本的引入,使得分布式系统可以更好地进行扩展,当出现某个节点宕机时,由于副本的存在,也能够快速地进行替换,提升系统整体可靠性,防止数据丢失。可以根据对分布式系统的了解,围绕副本、集群、一致性等展开讨论。消息队列在系统中承担了数据存储和数据传输的两种功能,所以消息队列的高可用设计,也比数据库、文件索引等持久性存储要复杂。我们今天围绕Kafka开看下它是如何实现高可用的...
2021-02-24 22:16:01 11825
原创 深入理解分布式技术 - 消息幂等性如何保障不重复消费
文章目录概述如何理解幂等各类中间件对幂等性的处理远程服务调用的幂等问题消息消费中的重试问题消息投递的几种语义At most onceAt least onceExactly once业务上如何处理幂天然幂等不需要额外设计利用数据库进行去重设置全局唯一消息 ID 或者任务 ID不同消息队列支持的投递方式【RocketMQ】【Kafka】小结概述应用的幂等是在分布式系统设计时必须要考虑的一个方面,如果对幂等没有额外的考虑,那么在消息失败重新投递,或者远程服务重试时,可能会出现许多莫名其妙的问题。那今天
2021-02-24 00:05:52 12465
原创 Apache Kafka-max.poll.interval.ms参数含义说明
文章目录官方说明官方说明https://kafka.apache.org/documentation/选择对应的版本,我这里选的是 2.4.Xhttps://kafka.apache.org/24/documentation.html选择https://kafka.apache.org/24/documentation.html#consumerconfigs查找 max.poll.interval.ms让我们来品一品官方的解读...
2021-02-23 00:40:43 14281
原创 Apache Kafka-auto.offset.reset参数(earliest、latest、none)含义说明
文章目录官方说明参数解读官方说明https://kafka.apache.org/documentation/选择对应的版本,我这里选的是 2.4.Xhttps://kafka.apache.org/24/documentation.html选择https://kafka.apache.org/24/documentation.html#consumerconfigs查找 auto.offset.reset参数解读...
2021-02-23 00:30:15 14659 1
原创 深入理解分布式技术 - 顺序消费如何才能保证时序性
文章目录概述概述在分布式系统中,很多业务场景都需要考虑消息投递的时序 ,举个例子 电商中的订单状态流转、数据库的 binlog 分发等都会对业务的有序性有要求。在分布式场景下,消息的有序性是很难保证的,为什么这么说呢? 我们来拆解一下其中的点分布式的时钟问题有序性可以分为业务上的有序和时间上的有序,先看一下时钟上的有序.在分布式环境下,消息的生产者、消费者和队列存储,可能分布在不同的机器上,不同的机器使用各自的本地时钟,由于服务器存在时钟偏斜等问题,本地时间会出现不一致,所以不能
2021-02-22 18:06:45 12058
原创 Apache Kafka-事务消息的支持与实现(本地事务)
文章目录概述官方示例CodePOM依赖配置文件生产者消费者单元测试测试结果源码地址概述Kafka的事务不同于Rocketmq,Rocketmq是保障本地事务(比如数据库)与mq消息发送的事务一致性,Kafka的事务主要是保障一次发送多条消息的事务一致性(要么同时成功要么同时失败)。一般在kafka的流式计算场景用得多一点,比如,kafka需要对一个topic里的消息做不同的流式计算处理,处理完分别发到不同的topic里,这些topic分别被不同的下游系统消费(比如hbase,redis,es等)
2021-02-20 08:35:27 13023
原创 深入理解分布式技术 - 消息队列使用场景
文章目录概述What's MQ ?应用场景概述分布式系统不同模块之间的通信,除了远程服务调用以外, 还有一种比较重要的手段 那就是通过消息队列。我们来探讨下常见的MQ的问题吧What’s MQ ?消息队列,顾名思义,就是传递消息的队列 . 随着分布式系统的发展,消息队列在系统设计中又有了更多的应用。参与消息传递的双方称为生产者和消费者,生产者和消费者可以只有一个实例,也可以集群部署,典型架构如下图所示:消息体是参与生产和消费两方传递的数据,消息格式既可以是简单的字符串,也可以是序
2021-02-19 23:00:01 12163 2
原创 Apache Kafka-AckMode最佳实践
文章目录概述AckMode源码解读概述Apache Kafka-消息丢失分析 及 ACK机制探究AckMode源码解读我们来看下 Spring Kafka封装的ACKContainerProperties#AckMode /** * The offset commit behavior enumeration. */ public enum AckMode { /** * Commit after each record is processed by the li
2021-02-19 17:23:41 13162
原创 Apache Kafka-消息丢失分析 及 ACK机制探究
(1)acks=0: 表示producer不需要等待任何broker确认收到消息的回复,就可以继续发送下一条消息。性能最高,但是最容易丢消息。大数据统计报表场景,对性能要求很高,对数据丢失不敏感的情况可以用这种。(2)acks=1: 至少要等待leader已经成功将数据写入本地log,但是不需要等待所有follower是否成功写入。就可以继续发送下一条消
2021-02-19 14:43:10 12595
原创 Apache Kafka-消费端_顺序消费的实现
文章目录概述CodePOM依赖配置文件生产者消费者单元测试测试结果源码地址概述一个partition同一个时刻在一个consumer group中只能有一个consumer instance在消费,从而保证消费顺序。consumer group中的consumer instance的数量不能比一个Topic中的partition的数量多,否则,多出来的consumer消费不到消息。Kafka只在partition的范围内保证消息消费的局部顺序性,不能在同一个topic中的多个partition中
2021-02-18 23:29:41 12207
原创 Apache Kafka-通过concurrency实现并发消费
文章目录概述CodePOM依赖配置文件生产者消费者单元测试测速结果源码地址概述我们要发送的CodePOM依赖 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> &l
2021-02-18 21:46:04 16662 5
原创 Apache Kafka-消费端消费重试和死信队列
文章目录概述CodePOM依赖配置文件配置类生产者消费者单元测试测速结果源码地址概述Spring-Kafka 提供消费重试的机制。当消息消费失败的时候,Spring-Kafka 会通过消费重试机制,重新投递该消息给 Consumer ,让 Consumer 重新消费消息 。默认情况下,Spring-Kafka 达到配置的重试次数时,【每条消息的失败重试时间,由配置的时间隔决定】Consumer 如果依然消费失败 ,那么该消息就会进入到死信队列。Spring-Kafka 封装了消费重试和死信队列,
2021-02-18 16:34:31 17316 10
原创 Apache Kafka-通过设置Consumer Group实现广播模式
文章目录概述CodePOM依赖配置文件生产者消费者单元测试测速结果源码地址概述传统的消息传递模式有2种:队列( queue) 和(publish-subscribe)queue模式:多个consumer从服务器中读取数据,消息只会到达一个consumerpublish-subscribe模式:消息会被广播给所有的consumerKafka基于这2种模式提供了一种consumer的抽象概念: consumer groupqueue模式:所有的consumer都位于同一个consumer
2021-02-18 13:26:49 17712 3
原创 Apache Kafka-消费端_批量消费消息的核心参数及功能实现
文章目录概述参数设置CodePOM依赖配置文件生产者消费者单元测试测速结果概述kafka提供了一些参数可以用于设置在消费端,用于提高消费的速度。参数设置https://kafka.apache.org/24/documentation.html#consumerconfigs支持的属性 见源码 KafkaProperties#Consumerspring.kafka.listener.type 默认Singlespring.kafka.consumer.max-poll-rec
2021-02-18 12:19:37 12599
原创 Apache Kafka-生产者_批量发送消息的核心参数及功能实现
文章目录概述参数设置概述kafka中有个 micro batch 的概念 ,为了提高Producer 发送的性能。不同于RocketMQ 提供了一个可以批量发送多条消息的 API 。 Kafka 的做法是:提供了一个 RecordAccumulator 消息收集器,将发送给相同 Topic 的相同 Partition 分区的消息们,缓冲一下,当满足条件时候,一次性批量将缓冲的消息提交给 Kafka Broker 。参数设置https://kafka.apache.org/24/documen
2021-02-18 10:23:59 13860
原创 Apache Kafka-SpringBoot整合Kafka发送复杂对象
文章目录Spring Kafka概述CodeSpring Kafka概述Spring提供了 Spring-Kafka 项目来操作 Kafka。https://spring.io/projects/spring-kafkaCode我们先对 Kafka-Spring 做个快速入门,实现 Producer发送消息 ,同时Consumer 消费消息。为了方便测试验证 ,我们把生产者和消费者都写到一个工程里面。...
2021-02-17 23:32:53 14567
原创 Apache Kafka-生产消费基础篇
文章目录POM 依赖生产者消费者POM 依赖版本请同使用的kafka服务端的版本保持一致 <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> <version>2.4.1</version> </dependency>生产者请小伙伴注意一下注释,这里就
2021-02-17 20:30:31 11775 3
原创 Apache Kafka-CMAK(kafka manager)安装部署使用
文章目录Github地址二进制安装包下载3.0.0.2 及之后3.0.0.2 之前Github地址https://github.com/yahoo/CMAK详见README.md因为误用了 Apache 的商标,kafka manager改名为“CMAK”,意为 (Cluster Manager for Apache Kafka)参考: https://github.com/yahoo/CMAK/issues/713二进制安装包下载Kafka Manager 在 3.0.0.2 之前
2021-02-17 16:57:05 12410
原创 Redis - RedisTemplate及4种序列化方式深入解读
文章目录概述RedisTemplateStringRedisTemplateRedisSerializer 序列化概述使用Spring 提供的 Spring Data Redis 操作redis 必然要使用Spring提供的模板类 RedisTemplate, 今天我们好好的看看这个模板类 。RedisTemplate看看4个序列化相关的属性 ,主要是 用于 KEY 和 VALUE 的序列化 。 举个例子,比如说我们经常会将POJO 对象存储到 Redis 中,一般情况下会使用 JSON
2021-02-16 22:24:24 16725
原创 Redis - Spring Data Redis 操作 Jedis 、Lettuce 、 Redisson
文章目录官网Jedis VS LettuceCodePOM依赖配置文件官网https://spring.io/projects/spring-data-redis我们知道常用的Redis客户端 https://redis.io/clients#java怎么还有 Spring Data Redis ?莫慌,小兄弟, 来看个关系图 帮你捋一捋Jedis VS Lettuce在 spring-boot-starter-data-redis 项目 2.X 版本中 ,默认使用 Lettuc
2021-02-16 20:49:40 12699 2
原创 Spring Session - 源码解读
文章目录Spring Session 原理Spring Session 原理Spring Session 主要是利用过滤器,偷梁换柱,实现session储存无感知的切换。页面请求被全局的过滤器org.springframework.web.filter.DelegatingFilterProxy过滤Spring Session 提供了 SessionRepositoryFilter 过滤器,它会过滤请求时,将请求 HttpServletRequest 对象包装成 SessionRep
2021-02-16 17:14:49 13078 2
X86-NFS rpm包
2020-11-24
中标龙芯-MIPS- NFS rpm包
2020-11-24
mybatisSource.zip
2020-06-14
apache-tomcat-8.5.50-src.zip
2020-06-02
「Tomcat源码剖析」.pdf
2020-06-01
Jest-5.3.4.zip
2020-01-19
Spring4CachingAnnotationsExample
2017-10-04
Java反编译工具
2015-06-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人