自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

(づ ̄ 3 ̄)づxl

舍得付出,必有回报

  • 博客(70)
  • 收藏
  • 关注

原创 sharding-jdbc分片功能学习笔记

分片数据功能里用了比较多的设计模式,如装饰器、工厂、委托、模版、发布-订阅、建造者、上下文等,整体代码、流程设计很优秀,值得学习,里面还有许多实现细节还有没有分析到,比如事务,sql解析,归并,各类上下文等,只是把大概的流程梳理了一下,整理出使用时需要注意的点。

2023-06-27 23:31:16 471 2

原创 sharding-jdbc metadata load优化(4.1.1版本)

sharding-jdbc在分库场景加载元数据时,会发现速度比较慢,本文尝试提供一种解决思路

2024-09-14 05:47:44 945

原创 XXL-JOB中断信号感知

本文主要解决异步线程不感知xxl-job主线程中断信息的问题

2024-07-06 18:37:08 625

原创 Java对象通用比对工具

本文提供一种通用java对象比对方法,并支持自定义的过滤哪些字段无需比较

2024-07-06 17:19:49 1033

原创 Antlr4学习笔记

本文介绍Antlr4实现/语法规则以及sharding-jdbc的解析sql流程

2023-11-02 10:51:27 866 2

原创 idea插件&护眼模式设置

整理了下可以提高工作舒适度的一些设置。

2023-07-18 20:52:59 1541 1

原创 S3 Client:Timeout waiting for connection from pool 问题追踪

S3 Client:Timeout waiting for connection from pool

2022-11-13 16:34:31 2976 1

原创 springboot+mybatis-plus基于拦截器实现分表

前言最近在工作遇到数据量比较多的情况,单表压力比较大,crud的操作都受到影响,于是开发一款基于mybatis-plus的拦截器

2021-11-07 16:03:15 2399

原创 skywalking8.0+es构建监控系统

skywalking8.0集群+es7.x集群项目缺少链路监控工具,在考虑效率、代码侵入性、易用性等因素后,决定引入skywalking8.0进行链路监控首先搭建es集群用于存储skywalking收集的信息这里准备了三台机器,部署两台skywalking、3个es节点解压下载好的es7,es7自带jdk并做好相关配置#集群名称cluster.name: skywalking-es#节点名称node.name: skywalking-node2path.data: /u

2020-12-20 15:41:53 3538 4

原创 redis工具包开发——限流模块(滑动窗口、漏斗、令牌桶)的实现

限流模块主要是三种限流的算法+aop实现@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Import({RedisBloomFilterRegistar.class, RedisLimiterRegistar.class})public @interface EnableRedisAux { Stri...

2020-02-04 23:46:52 4035

原创 redis工具包开发——redis布隆过滤器实现

布隆过滤器实现其实核心也是模仿guava的布隆过滤器实现,只是操作字节数组的载体改为redis的bitmap结构,在该工具包的布隆过滤器开发里面涉及到比较核心的点有1.guava里的布隆过滤器理解2.如何接入spring3.redis 布隆过滤器实现先看第一部分布隆过滤器他能够判断某个对象肯定不存在或者可能存在,核心的思想是,对一个对象进行不同的hash函数处理所得到的值标志到...

2020-01-28 17:28:28 1493

原创 redis工具包开发——功能概览

这篇文章主要是介绍功能点,先看看这个工具包有什么可以用的,目前主要有两个模块——布隆过滤器、基于注解限流。基于redisTemplate用法:这里用maven作为工具管理包演示,添加jitpack源、添加下面的依赖 <repositories> <repository> <id>jitpack.io&l...

2020-01-11 02:51:46 970 6

原创 redis的数据类型

string:实现类似于java的ArrayList,当串大小小于1MB时候,采用加倍扩容,当大于1MB时,则每次扩容只会多扩容1MB的空间,最大长度为512MB相关指令:set key value get key mset key1 value1 key2 value2...keyn valuen mget key1..keyn setnx key value等list:实现类似...

2019-12-21 01:34:56 695

原创 scrapy+selenium爬取某招聘网站的职位、公司、面试评论

前一段时间因某些原因再次与爬虫碰面了,这次是爬取拉勾网的一些信息并利用wordcloud生成词云,并使用pyechart生成一些统计信息什么的爬取前还是要观察拉勾网的一个页面结构,一般都是有规律可循的首先查看职位要求比如要爬取对应的信息,这里选用xpath定位相应的位置,可以使用scrapy -shell 进行调试,但在调试要加上USER_AGENTscrapy shell ...

2019-12-19 23:58:36 1111 1

原创 基于netty、zookeeper手写RPC框架之五——心跳机制优化及添加负载均衡

本系列的第二篇,加入netty心跳机制,只是简单地描述了如何监听不活跃的服务端,即自定义一个标记服务是否活跃的规则及空闲链接的监听器,在标记为不活跃后,客户端应该怎么处理,服务端再次活跃了,客户端又如何处理,先看下这个图monitor负责监控server们的是否活跃,如果不活跃,修改zk上对应节点的值,client则监听zk上的事件,当发生变动的节点的值为不活跃,则加进不活跃的优先队列,这...

2019-11-24 16:07:38 909

原创 基于netty、zookeeper手写RPC框架之四——实现异步请求和连接池管理

上一篇文章说到,现在这种每发起请求一次就新建一个client链接,但是如果在并发比较高的情况下,就会造成资源浪费,如果通过client和server进行长期链接,把需要处理的请求存到client里面,并且通过异步的形式返回,便会减少资源浪费。这里有两个主要的问题,1、如何实现异步返回?2、如何把client和server对应起来?先看第一个问题,所谓的异步返回,可以以点奶茶为例,当顾客(消...

2019-11-22 12:11:45 493

原创 基于netty、zookeeper手写RPC框架之三——接入Spring

在接入前,先自定义一组传输对象,而不是原来传输一个Invocation,返回则是一个String,这里需要用到netty的编解码器,当然这里可以用netty已经实现好的对象编解码、第三方的Probuff编解码器,而如果想要实现自己的传输协议,就要继承netty的编解码,他可以用来自定义解析对象以及封装对象,这里对对象处理采用本来是采用gson,但是有很多bug,便用了另一种进行序列化,这样自定义协...

2019-11-20 19:04:01 326

原创 基于netty、zookeeper手写RPC框架之二——接入zookeeper作为注册中心,添加心跳机制

zookeeper介绍分布式是指多台不同的服务器中部署不同的服务模块,通过远程调用协同工作,对外提供服务,由于远程调用会出现网络故障等问题,如何保持数据一致性和可用性则成为要解决的问题。而zookeeper是一个分布式服务协调组件,是一个高性能的分布式数据一致性的解决方案。特性一致性:数据一致性,数据按照顺序分批入库。原子性:事务要么成功要么失败,不会局部化单一视图:客户端...

2019-11-19 14:10:25 1010

原创 基于netty、zookeeper手写RPC框架之一——基本模块搭建与编写

最近在b站看到一个视频,可以用来入门rpc(remote procedure call),记录一下学习的过程,rpc即是一个计算机通信协议,该协议允许运行于一台计算机的程序调用另一台计算机的子程序,程序员无需额外地为这个交互作用编程,如果设计的软件采用面向对象编程,远程调用亦可作为远程方法调用大概的流程是消费方以本地方式调用服务,将方法、参数等信息封装成请求体,并且找到服务地址,将消息发送到服...

2019-11-18 17:59:09 651

原创 设计模式之状态模式

状态模式允许对象在内部状态改变时改变他的行为,使用组合通过简单引用不同的状态对象来应对状态变化。下面简单的举个例子,比如一个登陆的流程1.用户一些参数校验(比如用户密码,用户有效状态,用户是否逻辑删除),没有问题则走22.在redis上存放用户信息,并返回用户相关信息3.返回错误信息可是有一天我想在密码校验那里加多一段逻辑,即连续输错5次密码后,锁定十分钟,十分钟之后才可以重新...

2019-11-10 01:32:49 179

原创 设计模式之过滤链模式

过滤链可以对对象进行一系列的步骤处理/过滤,把处理的步骤解耦一个个小的部分,主要有三个角色,1.抽象的过滤类,负责定义过滤器的实现接口,具体的实现还要具体过滤器角色去参与。2.具体的过滤类,负责具体筛选规则的逻辑实现,最后再返回被处理的对象3.被处理的对象, 具体过滤器角色中可以对指定感兴趣的目标进行处理,也可以统一处理抽象的过滤方法@FunctionalInterf...

2019-11-07 17:32:49 646

原创 设计模式之代理模式

定义:为其他对象提供一种代理以控制对这个对象的访问,代理对象起到中介作用,可以屏蔽功能或者增加额外的服务代理模式分为两种:静态代理:public interface Run { void run();}public class DogStaticProxy implements Run{ private Dog dog; public Do...

2019-10-28 09:37:21 131

原创 mybatis-plus/mybatis的组件们——拦截器、字段填充器、类型处理器、表名替换、SqlInjector(联合主键处理)

最近有个练手的小例子,大概就是配置两个数据源,从一个数据源读取数据写到另一个数据源,虽然最后做了出来,但是不支持事务。。。就当是对mybatis-plus/mybatis组件使用方式的记录吧,本次例子使用的仍是mybatis-plus回忆一下mybatis核心对象:Configuration 初始化基础配置,比如MyBatis的别名等,一些重要的类型对象,如,插件,映射器,ObjectFa...

2019-10-27 02:18:59 13550 1

原创 设计模式之装饰器模式

首先看个例子public abstract class Dog{ abstract void show();}一个简单的狗类,里面有一个展示的方法public abstract class Dog { protected String desc; abstract void show(); abstract void dress();}想象很多人...

2019-10-22 00:20:47 164

原创 设计模式之观察者模式

观察者模式:定义了对象之间一对多以来,当一个对象状态改变时,所有依赖者都会收到通知并作出相应的动作主要角色:主题,观察者优点:两个对象之间松耦合,但仍然可以交互,只是不清楚彼此的细节,当需要新的观察者,只需要让该对象实现观察者接口,主题代码不需要为兼容新的观察者进行修改,只会发送通知给所有实现观察者接口的对象,该设计模式把对象间的依赖关系降到最低而主题通知观察者自身发生改变时,改变的具...

2019-10-21 19:58:38 128

原创 设计模式之单例模式

对象也是资源的一种,而单例模式可以很好的避免对象这种资源浪费的问题,比如减少gc频率,避免大对象的频繁创建等等单例模式的核心就是只返回一个对象,并且只提供全局的一个访问点即访问方法。有如下几种实现方法饿汉式没有线程安全问题,适用于类成员少,占用内存不多的类,但无法做到延迟加载。//不可继承public final class Singleton { //静态:类变量...

2019-10-18 14:46:40 114

原创 设计模式之设计原则

代码有高低质量之分,而设计模式则是提高代码质量如提高其可维护性、扩展性、复用性等等,学习设计模式也可以提高个人对系统设计的理解等等,反正好处多多,正好最近也在学习,便记录一下。要理解设计模式,我觉得除了要懂得这些设计模式的使用场景外,还要知道他们是围绕什么样的思想或者遵守什么样规则,那不得不提设计原则了。1.开闭原则对扩展开放,对修改关闭,即对于某个模块功能应该尽量使用继承或者接口来实...

2019-10-18 11:35:48 133

转载 elasticsearch索引原理

看到一篇很好的文章,忍不住转了介绍Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎.Elasticsearch 是一个建立在全文搜索引擎 Apache Lucene(TM) 基础上的搜索引擎. 当然 Elasticsearch 并不仅仅是 Lucene 那么简单,它不仅包括了全文搜索功能,还可以进行以下工作:分布式实时文件存储,并将每一个字段都编入索引,使其可...

2019-10-09 22:37:10 365

原创 elasticsearch7.1.1学习之整合springboot——data整合

9.30的时候maven公库里发布了spring-data-elasticsearch3.2.0的正式版本,那么主要新的特性是支持响应式编程(这个响应式编程通过异步返回的方式来提高吞吐量,可以和springwebflux一起使用,主要返回的对象有mono,flux)和升级到支持elasticsearch6.8.1,而对应的springboot版本是2.2.0。下图是版本对应的关系Spring ...

2019-10-09 01:22:02 3511

原创 jdk9 reactive stream

背压:是指由于生产者生产速度过快,而造成消费者无法及时处理更多的事件而产生的问题,背压是该问题的一个解决方案,它可以通过主动从生产者拉取事件消费而避免过多事件推送而无法处理的情况,或者减缓事件发布的速率直到可以处理更多的事件,实现事件流的流量控制。reactive stream是一套基于发布/订阅模式的数据处理的规范,主要目标是管理跨异步边界的流数据交换 - 考虑将元素传递到另一个线程或线...

2019-08-08 11:28:24 250

原创 elasticsearch7.1.1学习之分词

正排索引文档id到文档内容、单词的关联关系倒排索引单词到文档id的关联关系单词词典记录所有文档的单词,一般比较大记录单词到倒排列表的关联信息一般为B+Tree倒排列表记录了单词对应的文档集合,由倒排索引项组成倒排索引项主要组成部分:1.文档id用于获取原始信息2.单词频率记录该单词在文档出现的次数,用于后续相关性算分3.位置:记录单词...

2019-08-01 19:55:08 908

原创 redis分布式锁&可重入锁&续约、缓存注解、同步过程

为什么要用分布式锁?假设一个场景,一个服务里面提供了操作某个变量的接口,在单机的时候,可以使用synchronize或者lock进行加锁防止并发问题,但是假如这个服务有3个实例,每个实例可以操作相应的共享资源,这时候三个请求恰好都分发到不同的实例上去,结果是变量不知道被改成什么样了,也许每个服务的实例里的变量都不一样,那么怎么控制这个变量在面对多个请求时所带来的并发问题呢,这时候需要一个...

2019-07-21 11:09:30 1545

原创 JUC相关

JUC提供并发编程的解决方案CAS是java.util.concurrent.atomic包的基础AQS是java.util.concurrent.locks包以及一些常用类比如Semophore,ReentrantLock等类的基础使用node实现FIFO队列,可以用于构建锁或者其他的同步装置的基础框架利用了一个类型表示状态使用方法为继承子类通过继承并通过实...

2019-07-17 23:09:03 216

原创 线程相关

基本概念串行:等待用户输入,系统空闲批处理:预先写下指令执行,如果按顺序执行任务A、B,但A处理时间较长,此时系统空闲进程:独立占用内存空间,相互不干扰并可以相互切换,切换时会保存状态,重新切换即恢复状态。线程:执行进程的子任务,实现进程的内部并发,实现粒度更细的任务控制。进程和线程区别进程是资源分配的最小单位,线程是CPU调度的最小单位线程不能看作独立应用,进程...

2019-07-16 22:49:00 170

原创 GC相关

判断对象是否可回收1.引用计数法:通过判断对象的引用数量来决定对象是否可回收每个对象实例都有一个引用计数器,被引用则+1,完成引用则-1,而该对象引用超过其生命周期或者设置为新值则也视为完成引用优点:执行效率高,程序执行受影响较少缺点:无法检测出循环引用的情况,导致内存泄漏2.可达性分析算法通过判断对象的引用链是否可达来判断对象是否可以回收,由GC Root这个对象开始...

2019-07-13 22:36:23 197

原创 JVM相关

本文仅为个人一个学习笔记类加载器1.相关概念1.1 类从编译到执行的过程1.编译器将.java源文件转为.class字节码文件2.classLoader将字节码(byte数组)转换为jvm中的class对象3.jvm利用class对象实例化对象。1.2 ClassLoaderclassLoader主要工作在class装载的加载阶段,主要作用是从系统外部获得的clas...

2019-07-13 12:48:38 152

原创 mysql innodb事务隔离级别

read uncommitted(未提交读)事务可以读取未提交的数据,性能上比其他隔离级别不会好太多,但是缺少了其他事务的好处。read commited(提交读)事务只能读取已经提交的数据,但有可能出现不可重复读repeatable read(可重复读)保证在同一个事务中,多次读取的记录的结果是一致的,但会出现幻读serializable(串行化)每一行的数据都加锁...

2019-07-11 23:54:15 168

原创 mysql慢查询优化

一、慢查询记录1.开启记录未使用索引语句的日志功能:SHOW VARIABLES LIKE 'log_queries%'SET GLOBAL log_queries_not_using_indexes=ON2.配置超时查询时间:(这里设置为0.05s,生产要根据实际情况设置)SHOW VARIABLES LIKE 'long_query_time'SET GLOBAL lo...

2019-07-08 11:56:15 261

原创 spring cloud stream消息发送与接受(简单使用)(版本:Greenwich.SR1)

springcloudstream是一个构建消息驱动微服务框架,可以用来实现服务间的通信。从图中可以看出,应用程序定义好inputs(服务接受消息)、outputs(服务发送消息)通过binder(与消息中间件通信的组件)与中间件(支持Kafka rabbitmq rocketmq)通过创建bindings(链接应用程序跟消息中间件的桥梁,用于消息的消费和生产)进行消息的发送与接受,...

2019-07-02 17:29:27 1486

转载 配置docker国内私有镜像地址

https://yq.aliyun.com/articles/29941

2019-07-02 10:39:23 395

空空如也

空空如也

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

TA关注的人

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