自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

井底之蛙

学而知不足,思而得远虑

  • 博客(443)
  • 资源 (5)
  • 问答 (4)
  • 收藏
  • 关注

原创 Chat 文章

Chat 地址:https://gitbook.cn/gitchat/author/5bc58d055c3f706584a48033最近抽空写了几篇 Chat,与各位交流学习一下:《分布式任务调度框架 Elastic-Job 实例解析》《分布式任务调度框架 XXL-JOB 实例解析》标题《RocketMQ 消息类型介绍及实现原理探究》标题...

2019-03-02 17:06:05 626

原创 Mybatis逻辑分页原理解析RowBounds

物理分页Mybatis插件原理分析(三)分页插件Mybatis提供了一个简单的逻辑分页使用类RowBounds(物理分页当然就是我们在sql语句中指定limit和offset值),在DefaultSqlSession提供的某些查询接口中我们可以看到RowBounds是作为参数用来进行分页的,如下接口:  public <E> List<E> selectLis...

2019-02-26 10:22:46 71906 2

原创 RocketMQ原理学习--索引

 1、RocketMQ原理学习--RocketMQ源码运行 2、RocketMQ原理学习--RocketMQ整体架构窥探 3、RocketMQ原理学习--消息类型 4、RocketMQ原理学习-- Name Server 5、RocketMQ原理学习---生产者普通消息发送 6、RocketMQ原理学习---生产者事物消息发送 7、RocketM...

2019-01-04 13:59:23 1479 3

原创 Cron4j调度框架学习与改造

1、cron4j表达式cron4j支持的表达式是类似unix定时任务的字符串表达式,目前支持由5部分组成分:从0到59时:从0到23天:从1到31,字母L可以表示月的最后一天月:从1到12,可以别名:"jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep&

2018-07-09 15:15:44 6563 10

原创 Spring源码学习--Bean对象循环依赖问题解决(四)

循环依赖就是N个类相互嵌套引用,如果通过new对象的方式产生循环依赖的话会导致程序内存溢出报错,接下来我们了解一下spring是如何解决循环依赖问题。第一种:prototype原型bean循环依赖对于原型bean的初始化过程中不论是通过构造器参数循环依赖还是通过setXxx方法产生循环依赖,Spring都会直接报错处理。AbstractBeanFactory.doGetBean()方法:if (i

2017-07-05 18:28:17 6076 4

原创 架构设计文档模板

(1)可以是描述现有业务架构的改动点,演进的业务架构及全新的业务架构,包含的内容包括内部的视图层服务、内部系统的业务模块,底层依赖的中间件架构,外部依赖的其他系统等。

2022-11-05 16:56:33 788 2

转载 Skywalking on the way-千亿级的数据储能、毫秒级的查询耗时

1、开篇。

2022-08-31 17:48:41 474

转载 Java动态追踪技术探究

Java动态追踪技术探究2019年02月28日作者: 高扬文章链接8942字18分钟阅读引子在遥远的希艾斯星球爪哇国塞沃城中,两名年轻的程序员正在为一件事情苦恼,程序出问题了,一时看不出问题出在哪里,于是有了以下对话:“Debug一下吧。”“线上机器,没开Debug端口。”“看日志,看看请求值和返回值分别是什么?”“那段代码没打印日志。”“改代码,加日志,重新发布一次。”“怀疑是线程池的问题,重启会破坏现场。”长达几十秒的沉默之后:“据说,排查问题的最高境界,....

2022-08-31 17:46:11 198

转载 一文读懂DDD

在活动中,团队先通过头脑风暴的形式罗列出领域中所有的领域事件,整合之后形成最终的领域事件集合,然后对于每一个事件,标注出导致该事件的命令(Command),再然后为每个事件标注出命令发起方的角色,命令可以是用户发起,也可以是第三方系统调用或者是定时器触发等。一个业务领域划分成多个BC,BC之间通过Context Map进行集成,BC是一个显示边界,领域模型在这个边界之内,领域模型是关于某个特定业务领域的软件模型,领域模型通过对象模型来实现,这些对象同时包含了数据和行为,并表达了准确的业务含义。...

2022-08-09 18:10:36 325

原创 Jacoco配置-从报告中排除类/程序包

为了提供一个更好的 JaCoCo 单测报告,我们可以将一些无业务逻辑的代码(PO,DTO等)从单测报告中移除。如下面配置,通过在 configuration -> excludes -> exclude 排除相关包路径即可。<plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0

2021-12-14 19:54:09 6925 6

转载 Java线程池实现原理及其在美团业务中的实践

随着计算机行业的飞速发展,摩尔定律逐渐失效,多核CPU成为主流。使用多线程并行计算逐渐成为开发人员提升服务器性能的基本武器。J.U.C提供的线程池:ThreadPoolExecutor类,帮助开发人员管理线程并方便地执行并行任务。了解并合理使用线程池,是一个开发人员必修的基本功。本文开篇简述线程池概念和用途,接着结合线程池的源码,帮助读者领略线程池的设计思路,最后回归实践,通过案例讲述使用线程池遇到的问题,并给出了一种动态化线程池解决方案。一、写在前面1.1 线程池是什么线程池(Thread

2021-11-15 23:04:03 235

转载 Java动态追踪技术探究

引子在遥远的希艾斯星球爪哇国塞沃城中,两名年轻的程序员正在为一件事情苦恼,程序出问题了,一时看不出问题出在哪里,于是有了以下对话:“Debug一下吧。”“线上机器,没开Debug端口。”“看日志,看看请求值和返回值分别是什么?”“那段代码没打印日志。”“改代码,加日志,重新发布一次。”“怀疑是线程池的问题,重启会破坏现场。”长达几十秒的沉默之后:“据说,排查问题的最高境界,就是只通过Review代码来发现问题。”比几十秒长几十倍的沉默之后:“我轮询了那段代码一十七遍之后,

2021-11-15 22:33:23 195

原创 脚手架工程发布与使用

1、首先在工程目录下执行 mvn clean install2、接下来执行生成脚手架mvn archetype:create-from-project3、本地打包脚手架 cd target/generated-sources/archetype/ mvn clean install4、在本地 maven 库中可以看到生成的 jar 及 pom.xml 文件本地maven路径 /com/my/project/myproject-archetype/1.0.0-SNAPSHOT/ 目录

2021-08-06 16:56:38 177

原创 裂变业务学习

裂变分享活动是一种强有力的用户拉新活动,还记得几年前 QQ 空间病毒式传播的算命、测相等应用,还有最近几年让拼多多崛起砍价活动等,这类活动的特点是很容易引起病毒式传播,有极好的拉新能力。(1)用户 A 打开一个裂变券活动,用户 A 通过分享活动给 B、C 和 D,如果此时B、C 和 D 都参与了活动,则 A 就可以获得这个活动的主券。(2)B、C 和 D 打开用户 A 的分享页面时,如果页面存在 shareId,则在 A 的分享列表中记录打开用户信息,并给打开用户发送子券。

2021-06-18 16:43:27 499

原创 分布式追踪系统总结

一、背景随着互联网架构的扩张,分布式系统变得日趋复杂,越来越多的组件开始走向分布式化,如微服务、消息收发、分布式数据库、分布式缓存、分布式对象存储、跨域调用,这些组件共同构成了繁杂的分布式网络,那现在的问题是一个请求经过了这些服务后其中出现了一个调用失败的问题,只知道有异常,但具体的异常在哪个服务引起的就需要进入每一个服务里面看日志,这样的处理效率是非常低的。分布式调用链其实就是将一次分布式请求还原成调用链路。显式的在后端查看一次分布式请求的调用情况,比如各个节点上的耗时、请求具体打到了哪台机器上、每

2021-06-14 10:31:52 812

原创 XXL-JOB原理--任务执行时间轮(六)

1、介绍之前 XXL-JOB 任务执行是通过 Quartz来进行任务管理触发的,在之前的博客 《Quartz任务调度框架–任务执行流程》 我们进行了任务执行的流程介绍,目前 XXL-JOB 任务执行已经摒弃 Quartz 框架,目前通过时间轮方式来管理任务触发任务。2、任务执行XXL-JOB 任务执行中启动了两个线程:(1)线程 scheduleThread 运行中不断的从任务表中查询 查询近 5000 毫秒(5秒)中要执行的任务,如果当前时间大于任务接下来要执行的时间则立即执行,否则将任务执行时间

2021-01-13 00:15:13 5492 1

转载 Guava Cache 过期回源

缓存的更新有两种方法:被动更新:先从缓存获取,没有则回源获取,再更新缓存; 主动更新:发现数据改变后直接更新缓存(在分布式场景下,不容易实现)在高并发环境,被动回源是需要注意的。 问题:高并发场景下,大量请求在同一时间回源,大量的请求同一时间穿透到后端,容易引起后端服务崩溃(也容易引起并发问题)。guava cache解决办法: guava cache保证单线程回源,对于同一个key,只让一个请求回源load,其他线程阻塞等待结果。同时,在Guava里可以通过配置expireAfterAcces

2020-09-29 15:12:58 2121

原创 skywalking 开发环境编译及联调

https://cloud.tencent.com/developer/article/1529684

2020-07-10 22:31:18 3956

原创 docker 安装 tomcat 镜像相关命令简单记录

docker 下载tomcat 镜像 安装启动相关命令:下载 tomcat 镜像docker pull tomcat查看镜像docker images启动镜像docker run -p 8080:8080 --name mytomcat tomcat:latest列出所有容器docker ps -a启动容器docker start 容器id在容器中执行脚本docker exec -it mytomcat /bin/bash拷贝文件容器文件到当前目前目录下docke

2020-07-04 15:45:05 562

转载 RocketMQ原理学习--多副本实现 DLedger

一、DLedger引入目的在 RocketMQ 4.5 版本之前,RocketMQ 只有 Master/Slave 一种部署方式,一组 broker 中有一个 Master ,有零到多个Slave,Slave 通过同步复制或异步复制的方式去同步 Master 数据。Master/Slave 部署模式,提供了一定的高可用性。但这样的部署模式,有一定缺陷。比如故障转移方面,如果主节...

2020-02-27 23:19:17 2147

转载 MySQL事务的实现原理

1. 开篇相信大家都用过事务以及了解他的特点,如原子性(Atomicity),一致性(Consistency),隔离型(Isolation)以及持久性(Durability)等。今天想跟大家一起研究下事务内部到底是怎么实现的,在讲解前我想先抛出个问题:事务想要做到什么效果?按我理解,无非是要做到可靠性以及并发处理。可靠性:数据库要保证当insert或update操作时抛异常或者数据...

2020-02-27 22:42:45 1441

原创 redis数据类型介绍

数据类型 实现方式 描述 String int 用来保存整数值 raw 用来保存长字符串(长度大于44字节) embstr 保存短字符串(长度小于44字节) List ziplist(压缩列表) 列表保存元素个数小于512个 每个元素长度小于64字节 压缩列表是Redis为了节省内存而开发的,是由一系列特殊编码...

2019-11-03 21:39:53 652

原创 限流 -- Sentinel 相关实现原理学习总结

简介Sentinel 是什么?随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。官方地址:https://github.com/alibaba/Sentinel/Sentinel 具有以下特征:丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场...

2019-08-25 18:05:58 5658

原创 配置中心 -- Apollo 相关知识总结学习

1、总体架构上图简要描述了Apollo的总体设计,我们可以从下往上看:Config Service提供配置的读取、推送等功能,服务对象是Apollo客户端 Admin Service提供配置的修改、发布等功能,服务对象是Apollo Portal(管理界面) Config Service和Admin Service都是多实例、无状态部署,所以需要将自己注册到Eureka中并保持心...

2019-08-10 17:44:17 1147

原创 配置中心 -- Nacos 客户端配置获取及监听实现原理

这篇博客我们通过示例来了解学习一下 Nacos 的客户端获取配置以及服务端发送配置的相关流程。服务端创建配置在 Nacos 的管理页面我们可以创建如下配置信息1、在默认命名空间下新建配置2、编辑配置并发布客户端获取配置1、客户端主动获取配置(1)客户端创建 ConfigService 服务根据 dataId 和 group 来获取配置信息示例:根据data...

2019-07-15 19:53:32 26334 2

转载 配置中心 -- Nacos 实现原理

动态配置管理是 Nacos 的三大功能之一,通过动态配置服务,我们可以在所有环境中以集中和动态的方式管理所有应用程序或服务的配置信息。动态配置中心可以实现配置更新时无需重新部署应用程序和服务即可使相应的配置信息生效,这极大了增加了系统的运维能力。动态配置下面我将来和大家一起来了解下 Nacos 的动态配置的能力,看看 Nacos 是如何以简单、优雅、高效的方式管理配置,实现配置的动态变...

2019-07-14 20:17:15 7667 1

原创 Orika 拷贝框架

Orika是一个简单、快速的JavaBean拷贝框架,Orika使用字节代码生成来创建具有最小开销的快速映射器。pom.xml 引入: <dependency> <groupId>ma.glasnost.orika</groupId> <artifactId>orika-cor...

2019-07-09 10:45:28 2598

原创 Spring Web 学习 -- DeferredResult 长连接异步返回

最近在学习有个配置中心(nacos 和 apollo),配置中心在配置变更时通过 http 长连接的方式进行通知。(1)配置客户端定时向配置中心发送请求获取最新配置(apollo客户端会像服务端发送长轮训http请求,超时时间60秒,当超时后返回客户端一个304 httpstatus,表明配置没有变更,客户端继续这个步骤重复发起请求,当有发布配置的时候,服务端会调用DeferredResult...

2019-07-07 14:46:04 3249

原创 业务学习 -- 高并发系统保护之限流和降级熔断

限流是我们在业务开发中经常遇到的问题1、请求入口限流(Nginx 限流,Tomcat 线程池及等待队列设置,限流算法(漏桶算法,令牌桶算法,计数器算法))2、接口调用限流(Spring Cloud Hystrix(线程池/信号量) 和 Sentinel(信号量))3、基于削峰填谷流量整理(kafka、RocketMQ和RabbitMQ)https://juejin.im/post/5b3a...

2019-06-16 21:52:54 3914

转载 Dubbo源码学习--ExceptionFilter 异常处理机制

背景我们的项目使用了dubbo进行不同系统之间的调用。每个项目都有一个全局的异常处理,对于业务异常,我们会抛出自定义的业务异常(继承RuntimeException)。全局的异常处理会根据不同的异常类型进行不同的处理。最近我们发现,某个系统调用dubbo请求,provider端(服务提供方)抛出了自定义的业务异常,但consumer端(服务消费方)拿到的并不是自定义的业务异常。这是为什...

2019-05-28 10:26:31 782

原创 微信和支付宝相关支付业务场景介绍

支付宝 当面付 条码支付 应用场景:商家使用扫码设备,扫描用户支付宝钱包上的条码/二维码,完成收款。支付流程:API列表: 接口名称 描述 API地址 alipay.trade.pay 统一收单交易支付接口 https://docs.op...

2019-05-18 22:50:54 11050 1

原创 支付业务简单理解

目前微信和支付宝支付已经非常深入我们的日常生活, 尤其在大城市中几乎涉及所有和钱相关的场景(银行除外)下都少不了支付宝和微信支付的二维码身影,真是大大方便了人们的日常生活,之前工作中也有涉及到和支付(微信和支付宝)相关功能及接口开发,这篇博客来稍微总结一下吧。接口文档1、支付宝蚂蚁开放平台:https://open.alipay.com/platform/home.ht...

2019-05-18 22:39:45 3564

原创 限流 -- Sentinel 搭建及入门学习

简介服务安装客户端界面

2019-05-11 21:39:02 4708

原创 Skywalking原理学习 -- skywalking 搭建及入门示例

访问地址:http://localhost:8080/1、首页:2、调用关系3、服务调用信息4、追踪日志信息。

2019-04-27 17:38:53 95475 12

原创 Zipkin原理学习 -- Druid 追踪多种数据库 SQL 执行

在上一篇博客 《Zipkin原理学习–日志追踪 MySQL 执行语句》 中我们已经了解学习到 Zipkin 官方提供的针对 MySQL 数据库 sql 语句执行的追踪拦截器,现在我们基于数据库连接池 Druid 的 Filter 机制 写一个能支持多种数据库(mysql,pg、oracle 等)日志追踪拦截器。Druid 过滤器 FilterDruidDataSource支持通过Filter-...

2019-03-18 21:29:52 1881

转载 Fescar源码学习--锁设计和隔离级别的理解

Fescar全局锁的理解前几天夜里,我老大发我一篇文章说阿里的GTS开源了.因为一直对分布式事务比较感兴趣。立马pull了代码,进行阅读。基本的原理,实现方案我就不一一细化了,详细见官方文档(写的很棒,点赞)。 在fescar的社区,大家比较关注的是通过fescar回滚到before快照前,别的线程假如更新了数据,且业务走完了,那么恢复的这个快照不就是脏数据了么。很显然,这种情况在...

2019-03-16 17:56:03 553 1

原创 Zipkin原理学习--日志追踪 MySQL 执行语句

目前Zipkin官方提供了插件用于支持对MySQL语句执行过程的日志追踪,提供了对MySQL5、MySQL6和MySQL8的支持,官方地址:https://github.com/openzipkin/brave/tree/master/instrumentation一、介绍及示例配置示例:1、引入相关jar包:&lt;dependency&gt; &lt;...

2019-03-14 20:07:23 3404

转载 一文了解JVM全部垃圾回收器,从Serial到ZGC

《对象搜索算法与回收算法》介绍了垃圾回收的基础算法,相当于垃圾回收的方法论。接下来就详细看看垃圾回收的具体实现。上文提到过现代的商用虚拟机的都是采用分代收集的,不同的区域用不同的收集器。常用的7种收集器,其适用的范围如图所示  Serial、ParNew、Parallel Scavenge用于新生代;CMS、Serial Old、Paralled Old用于老年代。 并且他们相...

2019-02-23 21:43:49 897

原创 Fescar源码学习--服务协调器TC

之前我们已经用两篇博客分别介绍了Fescar中的TM和RM两个角色的相关操作,这篇博客我们来介绍一下TC《Fescar源码学习--事物管理者TM(服务调用方)》《Fescar源码学习--资源管理者RM(服务提供方)》一、简介TC(Fescar Server)作为全局事务协调器主要做了以下操作。(1)TM和RM启动时会注册到TC,TC会将注册信息持久化。(2)TM在begin...

2019-01-29 13:52:27 3032 2

原创 Fescar源码学习--资源管理者RM(服务提供方)

 之前我们已经在博客《分布式事务--Fescar》中了解学习到Fescar相关的架构,接下来我们分别用几篇博客分别来介绍一下Fescar的 TM、RM 和 TC之间的交互流程。TM、RM和TC之间的交互流程图:简单角色理解:TC: Fesacr-server应用TM:dubbo服务调用方RM:dubbo服务提供方一、RM 简介1、简介       在上一篇博客《...

2019-01-28 17:04:25 1983 6

微信支付宝业务总结

微信支付宝多种支付业务场景相关业务流程介绍,接口地址说明等

2019-03-15

umlet uml工具

umlet

2017-07-13

虚拟机知识点

虚拟机知识点

2017-07-11

jvm相关的知识

jvm相关的知识的pdf

2017-07-11

Java并发编程实践-Java Concurrency in Practice

Java并发编程实践,Java Concurrency in Practice

2015-08-20

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

TA关注的人

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