自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

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

转载 rocketmq 部署启动指南-Docker 版

最近学习使用 rocketmq,需要搭建 rocketmq 服务端,本文主要记录 rocketmq 搭建过程以及这个过程踩到的一些坑。准备工作在搭建之前,我们需要做一些准备工作,这里我们需要使用 docker 搭建服务,所以需要提前安装 docker。此外,由于 rocketmq 需要部署 broker 与 nameserver ,考虑到分开部署比较麻烦,这里将会使用 docker...

2019-09-04 09:48:00 429

转载 SPI 机制-插件化扩展功能

SPI(Service Provider Interfaces),中文直译服务提供者接口,一种服务发现机制。可能很多人都不太熟悉这个机制,但是平常或多或少都用到了这个机制,比如我们使用 JDBC 连接操作数据库的时候。SPI 主要适用于功能扩展的场景,如一些框架提供某一部分功能可以由第三方开发人员扩展,满足其自身业务需求。假设我们在公司内实现了一个统一登陆框架,框架内部仅仅提供用户名...

2019-08-29 10:00:00 336

转载 ZooKeeper 相关概念以及使用小结

Dubbo 通过注册中心在分布式环境中实现服务的注册与发现,而注册中心通常采用 ZooKeeper,研究注册中心相关源码绕不开 ZooKeeper,所以学习了 ZooKeeper 的基本概念以及相关 API 操作。ZooKeeper 相关概念session客户端与服务端采用 TCP 长连接,服务端在为客户端创建 Session 会分配一个唯一 sessionId。在 Sessio...

2019-08-23 19:54:00 165

转载 如果有人问你 Dubbo 中注册中心工作原理,就把这篇文章给他

注册中心作用开篇首先想思考一个问题,没有注册中心 Dubbo 还能玩下去吗?当然可以,只要知道服务提供者地址相关信息,消费者配置之后就可以调用。如果只有几个服务,这么玩当然没问题。但是生产服务动辄成千上百,如果每个服务都需要手写配置信息,想象一下是多么麻烦。好吧,如果上面的问题都不是事的话,试想一下如果一个服务提供者在运行过程中宕机,消费者怎么办?消费者不知情,所以它还会不断把请...

2019-08-21 12:15:00 149

转载 为什么双重检查锁模式需要 volatile ?

双重检查锁定(Double check locked)模式经常会出现在一些框架源码中,目的是为了延迟初始化变量。这个模式还可以用来创建单例。下面来看一个 Spring 中双重检查锁定的例子。这个例子中需要将配置文件加载到 handlerMappings中,由于读取资源比较耗时,所以将动作放到真正需要 handlerMappings 的时候。我们可以看到 handlerMappings...

2019-08-15 10:27:00 346

转载 ibatis 核心原理解析

最近查找一个生产问题的原因,需要深入研究 ibatis 框架的源码。虽然最后证明问题的原因与 ibatis 无关,但是这个过程加深了对 ibatis 框架原理的理解。这篇文章主要就来讲讲 ibatis 框架的原理。可能现在很多人已不再使用 ibatis 或者说也没听 ibatis,不过肯定了解过 Mybatis。ibatis 就是 Mybatis框架的前身,虽然 ibatis 框架...

2019-08-10 13:52:00 86

转载 深入学习 Intellij IDEA 调试技巧

程序员的日常工作除了写代码之外,很大一部分时间将会在查找 BUG,解决问题。查找 BUG,离不开在 IDE 中调试代码。熟练的掌握调试技巧,可以帮助我们减少查找时间,快速定位问题。在 IDEA 中调试代码很方便,只要开启调试,在相应代码处使用断点,然后进行相应调试即可。正是因为只要掌握这几个功能,就可以调试代码,所以在很长一段时间内,不了解其他调试技巧。后续深入使用 IDEA 过程中,...

2019-07-31 20:44:00 257

转载 Spring 注解编程之 AnnotationMetadata

在上篇文章 Spring 注解编程之模式注解 中我们讲到 Spring 模式注解底层原理,依靠 AnnotationMetadata 接口判断是否存在指定元注解。这篇文章我们主要深入 AnnotationMetadata,了解其底层原理。Spring 版本为 5.1.8-RELEASEAnnotationMetadata 结构使用 IDEA 生成 AnnotationMeta...

2019-07-20 18:03:00 130

转载 Spring 注解编程之注解属性别名与覆盖

前两篇文章咱聊了深入了解了 Spring 注解编程一些原理,这篇文章我们关注注解属性方法,聊聊 Spring 为注解的带来的功能,属性别名与覆盖。注解属性方法在进入了解 Spring 注解属性功能之前,我们先看一个正常 Java 注解。在注解中,属性方法与其他类/接口方法写法类似,但是存在一些区别。注解属性方法的返回类型仅限为八种基本类型(包装类不支持),字符串,class,e...

2019-07-13 16:45:00 177

转载 Spring 注解编程之模式注解

Spring 框架中有很多可用的注解,其中有一类注解称模式注解(Stereotype Annotations),包括 @Component,@Service,@Controller,@Repository 等。只要在相应的类上标注这些注解,就能成为 Spring 中组件(Bean)。需要配置开启自动扫描。如在 XML 中配置 ` 或使用注解 @ComponentScan。从最终...

2019-07-01 17:19:00 125

转载 缘起 Dubbo ,讲讲 Spring XML Schema 扩展机制

背景在 Dubbo 中,可以使用 XML 配置相关信息,也可以用来引入服务或者导出服务。配置完成,启动工程,Spring 会读取配置文件,生成注入 相关 Bean。那 Dubbo 如何实现自定义 XML 被 Spring 加载读取?Spring XML Schema 扩展机制。从 Spring 2.0 开始,Spring 开始提供了一种基于 XML Schema 格式扩展机制,用于定...

2019-06-16 16:53:00 89

转载 IDEA 小技巧之书签与收藏

原文地址:IDEA 小技巧之书签与收藏最近翻阅 Spring 源码,由于源码调用链路很长,等看了十几类方法之后,想看前面调用方法就很不方便,需要查找历史的查看记录。还有时候看着看着就忘了中间某个方法,于是又要重新重头开始 ???? 。下面介绍 IDEA 两个功能,可以有效解决上述烦恼。书签首先介绍的是 IDEA 的书签功能,可以通过书签快速跳转到相应的源码。IDEA 书签分为两...

2019-06-09 15:50:00 88

转载 IDEA 日常小技巧

原文首发于 studyidea.cn点击查看更多技巧适用于 IDEA 2019.2 之前版本 ,2019.2 版本以下功能默认开启。Surround a selection with a quote or brace默认情况下,选中文本的再输入其他,选中文本将会被输入的字符代替。如果我们想输入双引号引用选中字符,选中字符将会被替换成双引号,非常尴尬 ???? 。这种情况下,不...

2019-06-02 17:01:00 63

转载 解决 IDEA 无法找到 java.util.Date 的问题

原文首发于 studyidea.cn点击查看更多技巧问题最近在项目中频繁使用到 java.util.Date,但是使用 IDEA 提示查找 Date 类,却无法找到 java.util.Date。可以看到,智能提示的结果没有 java.util.Date。没办法,只能暂时手动导入该包。最近闲下来,又碰到该问题,查找了一番解决过程,终于将其解决。首先我们打开 File|Se...

2019-06-01 17:50:00 321

转载 还不知道如何使用 IDEA ?教你三招快速掌握 IDEA

前言IntelliJ IDEA 是一个非常强大的 IDE,拥有许多功能。在 IDEA 中大部分功能都可以用快捷键去完成,如果掌握了大部分快捷键,可以只使用键盘开发了。ps: 最近正在练习快捷键,准备尝试只使用键盘进行开发也许因为这些繁多的功能,对于新入手 IDEA 的开发人员,快速掌握功能与快捷键并不是很简单。幸运的是 Jetbrain 早已考虑到该情况, 在 IDEA 有相关...

2019-05-30 01:36:00 158

转载 从源码解析 Spring JDBC 异常抽象

初入学习 JDBC 操作数据库,想必大家都写过下面的代码:数据库为:H2如果需要处理特定 SQL 异常,比如 SQL 语句错误,这个时候我们应该怎么办?查看 SQLException 源码,我们可以发现两个重要的方法。SQLException.getErrorCode:返回数据库特定的错误码,由数据库厂商制定,不同厂商错误码不同。如重复主键错误码在 MySQL 中是 106...

2019-05-25 15:17:00 121

转载 Dubbo 2.7.1 踩坑记

Dubbo 2.7.1 踩坑记Dubbo 2.7 版本增加新特性,新系统开始使用 Dubbo 2.7.1 尝鲜新功能。使用过程中不慎踩到这个版本的 Bug。系统架构Spring Boot 2.14-Release + Dubbo 2.7.1现象Dubbo 服务者启动成功,正常提供服务,消费者调用偶现失败的情况。错误如下图:可以看出,主要原因为 cause: message ...

2019-05-16 21:33:00 74

转载 支付渠道路由系统进化史

支付系统一般需要对接多个支付渠道,一是为了保证系统的可靠性,不能因为单一渠道的问题影响整个支付系统。二是为了提高支付能力,不同渠道提供支付能力不同。三是为了降低支付成本。对接多个支付渠道以后,为了可以正确选择支付渠道支付,因此设计渠道路由系统。从上图可以看到路由系统功能其实很简单,分发支付请求到正确的渠道。但就是这个简单系统,也经过几次系统改造升级,最终才成为现在的样子。下面就来说...

2019-05-11 15:34:00 97

转载 锁住余额,为何还会更新异常?

背景现有一个交易系统,每次交易都会更新余额。出账扣减余额,入账增加余额。为了保证资金安全,余额发生扣减时,需要比较现有余额与扣减金额大小,若扣减金额大于现有余额,扣减余额不足,扣减失败。余额表(省去其他字段)结构如下:CREATE TABLE `account`( `id` bigint(20) NOT NULL, `balance` bigint(20) D...

2019-04-05 23:16:00 57

转载 聊聊银企直联服务那些事

背景相关 wiki 定义。银企直联是指集团企业在集团内部建立自己的资金管理系统,通过数据接口将内部资金管理系统与商业银行核心系统、网银或者现金管理平台实现联接。通过银企直联系统企业可实现实时帐户信息查询、明细查询、自动转帐、交易查询等功能。并且交易的实时性和方便性得到大幅提高。“银企直联”的应用特点是连接手段不限,公网、专线均可。下面说说一些使用银企直联的实际场景。公司一般都...

2019-02-12 22:37:00 519

转载 分享一些 Windows 平台上的神器

下面分享一些 Windows 平台上日常开发使用的软件,有些软件我自认为是神器,可以大大提高效率。编辑器类软件IntelliJ IDEAIntelliJ IDEA 内部集成 Java 开发环境,具有代码智能提示,智能搜索,代码重构,版本控制工具集成(git,svn等),以及支持主流开源框架,如Spring。另外 IntelliJ IDEA 拥有一个丰富的插件库,可以很方便安装插件...

2019-02-02 22:14:00 67

转载 从零开始设计对账系统

前言对账系统作为支付系统中的基石系统,处于整个支付环节中的最后一层,主要用来保证我方支付数据与第三方支付渠道或银行的数据一致性。在没有对账系统之前,财务在第二日手工核对前一日的应收与实收。倘若不一致,这就需要一一核对数据,找出不一致的数据。对账系统出现之后,就可减少以这种繁琐手工操作,财务只需要每天关注系统的对账记录,释放了生产力。本文主要结合实际的项目经验,聊聊对账系统的设计方案...

2019-01-23 20:45:00 115

转载 为什么选择 Intellij IDEA 作为日常开发工具

作为一个从事 Java 开发的程序员,每天离不开编辑器的帮助。还记得刚开始学习 Java 编程的时候,使用 Eclipse 作为日常开发工具。后来工作以后,需要使用 Intellij IDEA,刚开始其实并不想怎么用。毕竟 Eclipse 已经足够强大,可以满足日常开发的需求,何必再花时间再去学习其他工具那。刚开始改变是困难的。但是没办法,公司强制使用,不得不去了解去使用。后来用了一段时...

2019-01-13 16:58:00 291

转载 一次慢查询暴露的隐蔽的问题

最近解决了一个生产 SQL 慢查询的问题,排查问题之后发现一些比较隐匿且容易忽略的问题。业务背景介绍最近业务上需要上线一个预警功能,需要查出一段时间内交易,求出当前交易成功率。当成功率低于设定阈值时,短信预警。业务逻辑很简单,测试环境测试也没问题之后,部署上线。实际生产运行时却发现每次 SQL 查询需要花费 60 多秒。系统架构介绍Spring boot + Mybatis ...

2019-01-05 13:32:00 98

转载 聊聊我的 2018 年

2018 年余额仅剩下八九个小时,趁着这几个小时,复盘一下我的 2018 年,顺便也为即将到来的 2019 年立下几个 flag。工作开头先来聊聊工作吧。四月份的时候,成功换了一份工作,开始进入支付领域。这里感谢内推的小伙伴们。进入新公司之后,遇到了更大的挑战。以前开发,碰到数量级最多也就十万级,那时候不会过多考虑性能,随便写写的代码也能实现需求,也能满足性能。但是进入新公司之后...

2018-12-31 17:38:00 71

转载 聊聊我的 Java 自学之路

最近经常在知乎收到类似『没基础,java 如何自学』、『怎么才能掌握编程』等等问题,再加上发现高中同学也在自学。有感而发,讲讲我的自学之路。1.1. 大学高考没正常发挥,考入一所二流的学校,当时分数也只高出录取分数线一两分,只能选择机械专业,当时分数如果高个两三分,或许可以上计算机专业,或许现在基础知识水平可能不一样,可是谁说的准那?说回正题,大学前两年,跟大多数同学一样,基本在...

2018-12-25 14:05:00 113

转载 从源码学习设计模式之模板方法

什么是模板方法模式?摘录 wiki 的介绍。模板方法模式定义了一个算法的步骤,并允许子类别为一个或多个步骤提供其实践方式。让子类别在不改变算法架构的情况下,重新定义算法中的某些步骤。在软件工程中,它是一种软件设计模式,和C++模板没有关连。模板设计方法存在目的在于某些算法逻辑存在一些相同处,而具体细节却不同。这样使用模板方法,可以抽取共用逻辑到父类,在子类实现具体算法细节,这样减...

2018-12-19 22:04:00 59

转载 聊聊分布式事务

这次使用分布式事务框架过程中了学习了一些分布式事务知识,所以本文我们就来聊聊分布式事务那些事。首先我们先回顾下什么是事务。事务什么是事务?这个作为后端开发,日常开发中只要与数据库有交互,肯定就会使用过事务。现在摘抄一段wiki的解释,解释下什么是事务。是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成数据库系统具有事务特性,这是其有别与文件系统重要特性...

2018-12-14 20:49:00 72

转载 数据库相关异常分析

起因最近一段时间,生产系统持续碰到一些数据库异常,导致 sql 执行失败。应用环境Java 1.7 + Mysql 5.6 + spring + ibatis问题排查将各种失败的异常记录了一下,碰到最多下面几种异常。java.net.SocketTimeoutException: Read timed outjava.sql.BatchUpdateException...

2018-12-11 19:48:00 222

转载 小心递归中内存泄漏

小心递归中内存泄漏前段时间由于业务需要,需要从数据库中查询出来所有满足条件的数据,然后导入到文件中。于是随便写了个程序,查询出所有满足条件然后再写入文件。但是实际上线后却发现,程序刚开始运行马上看到部分数据写入到文件,但是后面运行越来越慢,于是对此分析排查了一下。应用环境JDK 1.7 + Spring 4.3 + mybatis + oracle问题排查查询以及写入...

2018-12-11 19:42:00 146

空空如也

空空如也

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

TA关注的人

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