自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(65)
  • 资源 (1)
  • 收藏
  • 关注

原创 中间件之XXL-JOB的介绍及源码分析

XXL-JOB的使用及原理一、基本介绍1.Quartz的不足2.xxl-job特性二、简单使用1.快速启动2.路由策略3.运行模式4.阻塞处理策略5.子任务6.分片任务三、架构设计一、基本介绍1.Quartz的不足Quartz差不多有20年的历史,调度模型已经非常成熟,而且很容易集成到Spring中去,用来执行业务任务是一个很好的选择。但是还是会有一些问题,比如:调度逻辑(Scheduler)和任务耦合在同一个项目中,随着调度任务数量逐渐增多,同时任务逻辑逐渐加重,调度系统的整体性能会受到很大的

2020-11-15 21:58:21 3492 3

原创 Kafka之记录一次消息丢失和大批量消息重复发送

Kafka io抖动导致的生产问题记录

2022-09-04 22:10:26 1099 1

原创 Kafka之常用参数配置整理

kafka常用参数

2022-08-16 11:34:05 5146

原创 ElasticSearch之TermQuery和MatchQuery

ElasticSearch之TermQuery和MatchQuery一、TermQuery1.验证Term查询2.Term特殊用法3.跳过算分二、MatchQuery1.验证Match查询2.Operator提高精准度3.minimum_should_match提高精准度4.Match Query的查询过程三、小结在日常使用ES的时候,经常会将TermQuery和MatchQuery混淆,不知道该使用什么查询。本文举例说明。一、TermQueryTerm是表达语意的最小单位。搜索和利用统计语言模型进行

2022-02-13 20:49:07 10997

原创 ElasticSearch之基本概念小结

ElasticSearch之基本概念总结一、产品及适用场景二、基本概念三、搜索和聚合四、DOC和Index一、产品及适用场景ElasticSearch是一个开源的分布式搜索与分析引擎,提供了近实时搜索和聚合两大功能。Elastic Stack包括ElasticSearch,Kibana,Logstash,Beats等产品ElasticSearch是核心引擎,提供了海量数据存储,搜索和聚合能力Beats是轻量的数据采集器Logstash用来做数据转换Kibana提供了可视化ElasticSt

2022-02-13 19:20:51 1055

原创 ElasticSearch之聚合简介Bucket和Metric

ElasticSearch之聚合Bucket和Metrix简介一、聚合(Aggregation)二、聚合的分类三、Bucket和Mertrix1.Bucket示例2.Metrix示例3.嵌套4.stats一、聚合(Aggregation)ES除了提供搜索以外,还提供了针对ES数据进行统计分析的功能实时性高Hadoop统计分析功能时效性为(T+1)通过聚合,我们会得到一个数据的概览,是分析和总结全套数据,而不是寻找某个文档性能高,只需要一条语句,就能从ElasticSearch中得到分析结

2022-02-13 17:21:40 1045

原创 ElasticSearch之处理深度分页

ElasticSearch之处理深度分页一、常规分页二、scroll分页三、search_after在ES中实现分页的方法有三种,我们逐个分析一下他们的优缺点。一、常规分页在ES中,我们可以给查询条件加from和size达到分页的效果,比如:get test_index/_doc/_search{ "query":{ "match_all":{} }, "from":1000, "size":3}但是这种使用方式效率是非常低的,比如上面那条语句,意味着ES要在每个分片

2021-12-29 23:29:21 2422

原创 Elasticsearch之Template详解

Elasticsearch之Template详解一、Index Template示例1示例2示例3二、Dynamic Template示例1在ES中我们可以通过设置Index Template和Dynamic Template来更好的为我们管理和设置索引和mapping。一、Index Template比如一个我们需要使用ES来做日志管理,我们都知道日志的数据量是十分庞大的,如果使用单个索引来保存所有日志数据的话,可能会存在一些性能问题。我们可以通过按天或月来自动生成index,这时候我们就可以用到I

2021-12-26 22:00:38 8076

原创 Elasticsearch之Mapping设置详解

Elasticsearch之Mapping详解什么是Mapping?字段的数据类型Dynamic MappingES类型自动识别机制更新mapping定义Mapping1.控制字段是否被索引2.索引配置3.Null Value4.copy to5.数组什么是Mapping?Mapping类似于数据库中的表定义,主要有以下几个作用:定义索引中字段的名称定义字段的数据类型,例如:字符串、数字…倒排索引的相关配置,是否分词,字段分词器选择等Mapping设置会把JSON文档映射成Lucence所

2021-12-24 00:03:02 9269 1

原创 Elaseacsearch之Search的基本API

Search APIURL Search:在url中使用查询参数来进行数据查询Reqeust Body Search:使用ES提供的基于JSON格式的查询操作。Query Domain Specific Language(DSL)基本API:/_search:查询集群上的所有索引/index1/_search:查询范围为index1/index1,index2/_search:查询范围为index1和index24./index*/_search:查询范围为index开头的索引URI

2021-12-22 23:06:52 1222 1

原创 Elasticsearch之Analyzer分词器介绍

AnalysisAnalysis文本分析,也叫分词,是把全文本转换为一系列单词的过程。Analyzer叫做分词器。Analysis是通过Analyzer来实现的,ES当中内置了很多分词器,同时我们也可以按需定制化分词器。分词器的作用,除了在数据写入时对需要分词的字段进行词条切分转换,同时匹配Query语句的时候也需要使用相同的分词器对查询语句进行分析。例如:Elasticsearch is fun这个文本就会被分词器切分成,elasticsaerch、is、fun三个单词。Analyzer的组成

2021-12-21 23:03:53 2228

原创 Elasticsearch之倒排索引

正排索引和倒排索引比如我们现在有两个文档,id分别是1、2、31:Elasticsearch is fun2:I am learning Elasticsearch3:Elasticsearch is powerful我们常说的正排索引就是根据文档的id,去查找到文档的内容。比如我们使用的关系型数据库,通常都会给表设立一个主键,根据主键来找到数据。倒排索引是什么呢?将上述三个文档构建成倒排索引,结构如下:TermCountDocumentId:PositionElast

2021-12-21 21:49:33 178

原创 ElasticSearch之Document的基本API

Elasticsearch之基本API一、文档的CRUD1.index2.Create3.Read4.update5.deleteBulk API批量插入批量查询一、文档的CRUDType名,约定都用_doc1.index如果ID不存在,创建新的文档。否则先删除现有的文档,再创建新的文档,文档的版本会增加。支持自动生成文档id和指定文档id两种方式示例:// 首先我们创建一个文档put index/_doc/1{ "user":"程大帅", "comment":"ES真好玩"}

2021-12-19 21:49:00 577

原创 ElasticSearch之节点、集群、分片和副本

分布式系统高可用:服务的可用性,有部分节点停止服务时,可正常提供工作。数据的可用性,部分节点丢失,不会丢失数据可扩展:请求量提升/数据不断增长(将数据分布到所有节点上),实现水平扩展分布式特性ES分布式架构的好处:存储的水平扩容,提高扩展能力提高系统的可用性,部分节点停止服务,整个集群的服务不受影响ES的分布式架构:不同的集群通过不同的名字来区分,默认名字为"elasticsearch"通过配置文件修改,或者在命令行中-E cluster.name=xxx进行设定一个集群可以有一个

2021-12-19 20:39:16 629

原创 ElasticSearch之文档、索引和基本API

什么是数据建模?数据建模是创建数据模型的过程。数据模型是对真实世界进行抽象描述的一种工具和方法,实现对像是世界的映射。三个过程:概念模型 - 逻辑模型 - 数据模型(遵循第三范式)数据模型:结合具体的数据库,在满足业务读写性能等需求的前提下,确定最终定义。如何对字段进行建模?字段类型 - 是否需要搜索及分词 - 是否需要聚合及排序 - 是否需要额外的存储字段类型Text用于全文本字段,文本会被Analyzer分词默认不支持聚合分析及排序。需要设置fielddata为true

2021-12-19 19:56:54 1115

原创 ElasticSearch之索引(index)和mapping

创建索引使用put命令可以创建索引,并指定索引的分片数和副本数。PUT 索引名{ "settings": { "index": { "number_of_shards": "8", // 分片数量 "number_of_replicas": "0" // 副本数量 } }}修改索引副本修改索引副本数量PUT /索引名/_settings{ "number_of_replicas": 1 // 副本数量}删除索引delete 索引名

2021-12-19 18:42:19 2386

原创 Java并发编程之指令重排序

在我们面试过程中,通常避免不了会被问到什么是指令重排序?本文就这个问题进行探索。重排序前言一、重排序种类二、happens-before三、重排序1.数据依赖性2. as-if-serial语义3.程序顺序规则4.重排序在多线程中的影响前言在执行程序时,为了提高性能,编译器和处理器常常会对指令做重排序。一、重排序种类在java语言中,重排序分为3种。编译器优化的重排序。编译器在不改变单线程程序的语义前提下,可以重新安排语句的执行顺序。指令级并行的重排序。现在处理器采用了指令集并行技术,

2021-11-23 23:36:07 4164 1

原创 Java并发编程之volatile可见及非原子特性

特性可见性:对一个volatile的读,总能看到对这个volatile变量的最后写入原子性:对于一个bolatile变量的单个读/写操作具有原子性,但类似于voliatile++这种复合操作不具有原子性验证原子性public class VolatileThread extends Thread { // 1.能够保证可见 当一个线程在修改我们主内存共享变量的数据 对另外一个线程可见 private volatile static boolean flag = true;

2021-11-23 14:10:07 180

原创 设计模式回顾之责任链模式

介绍责任链模式是将每一个节点看作一个对象,每个节点处理的请求均不同,且节点内部维护下一个节点对象。当请求进来时,从首端进入,沿着链的路径依次传递给每一个节点对象,直到有对象处理这个请求位置。责任链模式主要是解耦了请求与处理,客户只需要将请求发送到链上即可,无需关心请求的具体内容和处理细节,请求会自动进行传递直至有节点对象进行处理。适用场景:多个对象可以处理同一个请求,但是具体由哪个对象处理则在运行时决定。在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。可动态指定一组对象处理请求。

2021-08-18 23:50:39 128

原创 设计模式回顾之策略模式

介绍策略模式可以解决在又多种算法相似的情况下,使用if...else或’switch…case’所带来的复杂性和臃肿性,策略模式适用于以下场景:针对统一类型问题,多种处理方式,每一种都能解决特定的场景。算法需要自由切换场景。需要屏蔽算法规则的场景。策略模式中几个重要的角色:抽象策略,具体策略,上下文。抽象策略:规定策略或算法行为接口。具体策略:具体的策略算法实现。上下文角色:用来操作策略的上下文环境,屏蔽高层模块策略,算法直接访问,封装可能存在变化。实战在saas系统中,通常需

2021-08-17 23:05:02 98

原创 设计模式回顾之原型模式

原型模式原型模式(Prototype Pattern)是指原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象,属于 创建型模式 。原型模式的核心在于拷贝原型对象。以系统中已存在的一个对象为原型,直接基于内存二进制流进行拷贝,无需再经理耗时的对象初始化过程(不需要调用构造函数),性能提升许多。当对象的都见过程比较耗时时,可以利用当前系统中已存在的对象作为原型,对其克隆(基于二进制流的复制),躲避初始化过程,使得新对象的创建时间大大减少。反射对象准备/** * @author chen

2021-08-12 21:50:34 140

原创 中间件之浅析PowerJob对比XXL-JOB的两大特性

浅析PowerJob对比XXL-JOB的两大特性无锁化MapReduce无锁化为了保证高可用,一般会在admin部署多份,那么就难免要考虑多个调度端同时工作,而带来的重复调度问题。在XXL-JOB中使用了数据库锁,来保证在多台调度段同时工作时,仅有一台机器提供调度工作。在PowerJob中,引入了执行器分组的概念。同一个执行器APPNAME仅有一台机器来调度,这样实现了调度的横向扩展。MapReduceXXL-JOB中提供了分片广播的路由策略,这个路由策略的实现原理,其实是读取到

2021-08-10 15:19:45 6705

转载 分布式之线上监控工具CAT

分布式监控CAT背景整体设计存储线上使用注意转自 深度剖析开源分布式监控CAT背景CAT主要解决了什么问题?根据直观的监控页面快速定位生产问题,简化生产问题排查。适用于分布式环境下的系统。对集群的运行情况做监控CAT有哪些特性实时处理,信息的价值会随时间锐减,尤其是事故处理过程中全量数据高可用,因为是一个监控平台,要服务于所有的业务系统,就算所有的业务系统都到下, CAT也需要提供监控供开发定位问题。故障容忍,在侵入业务代码时,CAT本身故障不应该影响业务系统的正常运行。高吞吐

2021-08-08 20:28:34 835

原创 算法之快速排序实现原理刨析

h

2021-06-02 15:00:46 73

原创 Java并发编程之一张图理解ContDownLatch

Java并发编程之你们常说的CAS到底是个啥?!.Java并发编程之一张图理解ReentrantLock.前面的文章理解了java中实现的乐观锁CAS思想,也理解了ReentrantLock中AQS的思想,今天本文主要介绍JUC中常用的几个工具。ContDownLatchSemphoreCyclicBarrier...

2021-05-30 01:02:52 154

原创 Java并发编程之一张图理解ReentrantLock

一张图理解ReentrantLock1.lock()跟踪源码1.1.非公平锁实现1.1.1.tryAcquire(arg)1.1.2.acquireQueued(addWaiter(Node.EXCLUSIVE), arg)1.2.公平锁实现1.2.1.tryAcquire(arg)首先看图。1.lock()跟踪源码这里对公平锁和非公平锁做了不同实现,由构造方法参数决定是否公平。public ReentrantLock(boolean fair) { sync = fair ? new

2021-05-22 23:38:53 896 16

原创 JVM性能调优之排查死锁

查看死锁的步骤如下:通过jps命令,查看java进程的PID通过jstck PID查看线程日志如果存在死锁,日志中会给出Found one Java-level deadlock:,定位到这个信息就可以快速定位问题。Found one Java-level deadlock:============================="Thread-1": waiting to lock monitor 0x000000001d1b0d58 (object 0x000000076b6cb3

2021-05-16 11:21:19 599

原创 JVM性能调优之服务器CPU飙升,响应速度慢

有时候我们会发现CPU占用率很高,系统日志中也看不出问题所在,那么此时我们就需要区查看以下运行中的线程有没有异常情况。简单说就是先找到CPU飙升的进程,再找到进程中占用CPU资源最多的线程,通过jstack命令打出这个线程的dump文件,找到具体的代码位置通过top -c命令可以动态显示进程占用资源排行榜,包括CPU、内存、占用进行ID。得到的PID=80972然后再定位到当前进程的哪个线程,通过命令top -H -p 80972查找到当前进程中最消耗CPU的线程。PID=81122。通.

2021-05-16 11:08:35 336

原创 Java并发编程之多线程基本原理

线程执行基本原理我们要搞清楚线程是怎样被启动的,就需要先搞清楚CPU调度算法,操作系统的调度算法有很多,比如先来先服务(FIFO)、最短优先、时间片轮转等。那么当调用线程的start()方法后,它具体做了什么呢?看下面这张图。实际上,我们在将一个线程置为运行状态时,也就是调用start()方法时,在JVM和操作系统层面,JVM像操作系统发送了两个指令os:: create thread和os:: start thread操作系统根据调度算法来分配CPU资源用于执行这两个指令,执行完毕后回调JVM中的

2021-05-16 10:49:42 108 1

原创 Java并发编程之你们常说的CAS到底是个啥?!

独占锁是一种悲观锁,synchronized就是一种独占锁,会导致其它所有需要锁的线程挂起,等待持有锁的线程释放锁。而另一个更加有效的锁就是乐观锁。所谓乐观锁就是,每次不加锁而是假设没有冲突而去完成某项操作,如果因为冲突失败就重试,直到成功为止。乐观锁用到的机制就是CAS,Compare and Swap。简单的理解,CAS操作包含三个操作数:内存值(V)、预期原值(A)、新值(B)。如果内存值(V)与预期原值(A)相匹配,那么就会自动将该内存位置的值(V)更新为新值(B)。否则,将不更新该位置的值

2021-05-12 15:03:35 135

原创 Java并发编程之创建线程池详解

java之创建线程池详解构造方法Executors.newFixedThreadPool()Executors.newSingleThreadExecutor()Executors.newCachedThreadPool()Executors.newScheduledThreadPool()等待队列饱和策略线程工厂Executor是一java线程JUC相关包的顶层接口,里面只有一个Execute方法,用于执行Runnable任务。ExecutorService接口扩展了Executor,增加了线程生命

2021-05-12 10:57:17 187

原创 LeetCode刷题练习- 搜索二维矩阵(240)

//编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:////// 每行的元素从左到右升序排列。// 每列的元素从上到下升序排列。////////// 示例 1: //输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21//,23,26,30]], target = 5//输出:true////// 示例 2:/.

2021-05-11 13:48:48 90

原创 LeetCode刷题练习- 多数元素(169)

//给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 //// 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 //// //// 示例 1: //// //输入:[3,2,3]//输出:3 //// 示例 2: //// //输入:[2,2,1,1,1,2,2]//输出:2// //// //// 进阶: //// // 尝试设计时间复杂度为 O(n)、空间复杂度为 O(1) 的算法解决此

2021-05-11 10:53:52 73

原创 LeetCode刷题练习- 只出现一次的数字(136)

//给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 //// 说明: //// 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗? //// 示例 1: //// 输入: [2,2,1]//输出: 1// //// 示例 2: //// 输入: [4,1,2,1,2]//输出: 4 // Related Topics 位运算 哈希表 // ???? 1850 ???? 0解法一:class Solu

2021-05-11 10:44:41 55

原创 LeetCode刷题练习- 合并两个有序链表(21)

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 1:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]示例 2:输入:l1 = [], l2 = []输出:[]示例 3:输入:l1 = [], l2 = [0]输出:[0]提示:两个链表的节点数目范围是 [0, 50]-100 <= Node.val <= 100l1 和 l2 均按 非递减顺序 排列解法

2021-05-11 09:53:30 70

原创 LeetCode刷题练习- 两数相加(2)

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例 1:输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.示例 2:输入:l1 = [0], l2 = [0]输出:[0]示例 3:输入:l1 = [9,9,9,9,9,9,9],

2021-05-10 15:32:44 55

原创 LeetCode刷题练习- 有效的括号(20)

给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例 1:输入:s = “()”输出:true示例 2:输入:s = “()[]{}”输出:true示例 3:输入:s = “(]”输出:false示例 4:输入:s = “([)]”输出:false示例 5:输入:s = “{[]}”输出:truepublic boole

2021-05-10 14:37:59 69

原创 LeetCode刷题练习- 最长公共前缀(14)

编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入:strs = [“flower”,“flow”,“flight”]输出:“fl”示例 2:输入:strs = [“dog”,“racecar”,“car”]输出:""解释:输入不存在公共前缀。提示:0 <= strs.length <= 2000 <= strs[i].length <= 200strs[i] 仅由小写英文字母组成解法一:pub

2021-05-10 11:51:33 67

原创 多数据源/动态数据源的解决方案

多数据源/动态数据源的解决方案一. DAO层的解决方案1.配置数据源2.创建切点注解3.AbstractRoutingDataSource4.读取数据源配置5.切面拦截6.使用验证二.ORM框架层三.驱动层四.代理层五.数据库服务项目中用到了多个数据源,MySql+Oracle。一条语句的执行一般要经过以下流程:DAO、Mapper、JDBC、代理、数据库。那么就可以从这几个方面入手来解决多数据源或者动态数据源的问题。一. DAO层的解决方案在DAO层,我们可以在获取连接的时候进行拦截扩展,根据

2021-05-09 22:10:04 2104

原创 LeetCode刷题练习- 罗马数字转整数(13)

罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。通常

2021-05-08 16:51:21 109

xxl-job-2.2.0.zip

xxl-job-2.2.0源码

2020-11-16

空空如也

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

TA关注的人

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