自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小大虽差,各任其性,苟当其分,逍遥一也。

  • 博客(564)
  • 论坛 (1)

原创 从零开始手写 mybatis(一)MVP 版本
原力计划

什么是 MyBatis ?MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。(这是官网解释)MyBatis 运行原理当框架启动时,通过configuration解析config.xml配置文件和

2020-07-13 22:52:46 7289

原创 lombok-ex 编译时注解框架,性能完爆 AOP

lombok-exlombok-ex 是一款类似于 lombok 的编译时注解框架。主要补充一些 lombok 没有实现,且自己会用到的常见工具。编译时注解性能无任何损失,一个注解搞定一切,无三方依赖。创作目的补充 lombok 缺失的注解,便于日常开发使用。lombok 的源码基本不可读,应该是加密处理了。为其他注解相关框架提升性能提供基础,后期考虑替换为编译时注解。特性@Serial 序列化@Util 工具类@ToString toString@S

2020-06-05 21:43:12 11710

原创 分布式 id 的四种写法,你会吗?

引言我们在生活中,id 与我们的生活实际上是形影不离的。身份证号,QQ 号,手机号,银行卡号,学生时代的学号,甚至是躺在你硬盘里的番号。这些 id 标识是如此的重要,乃至每一个后台程序员都要去思考这个问题—— id 的有几种写法?都有哪些利弊?本文就带你深入浅出学习几种常见的 id 的生成策略。入门学习由于篇幅优先,建议阅读下面的文章内容。分布式 id 生成需求uuid 策略讲解random 生成策略snowflake 算法讲解开源工具id 是一款为 java 设计常见 ID 实现策

2020-05-14 23:30:15 12143

原创 java 支持分词的拼音转换高性能工具,速度是 pinyin4j 的两倍

pinyinpinyin 是 java 实现的高性能中文拼音转换工具。变更日志创作目的想为 java 设计一款便捷易用的拼音工具。如何为 java 设计一款高性能的拼音转换工具 pinyin4j特性性能是 pinyin4j 的两倍极简的 api 设计支持转换长文本支持多音字支持多种拼音标注方式支持中文分词快速开始准备jdk 1.7+m...

2020-01-18 22:40:14 326

原创 结巴分词 java 高性能实现,优雅易用的 api 设计,性能优于 huaban jieba 分词

SegmentSegment 是基于结巴分词词库实现的更加灵活,高性能的 java 分词实现。变更日志创作目的分词是做 NLP 相关工作,非常基础的一项功能。jieba-analysis 作为一款非常受欢迎的分词实现,个人实现的 opencc4j 之前一直使用其作为分词。但是随着对分词的了解,发现结巴分词对于一些配置上不够灵活。有很多功能无法指定关闭,比如 HMM 对于繁简体转换...

2020-01-14 20:51:00 14122

原创 一键自动生成 java junit 测试代码神器 gen-test-plugin 入门介绍

gen-test-plugin我们日常编写代码的过程中,经常需要为代码编写测试案例。随着对代码质量的要求越来越高,很多公司开始通过代码的测试覆盖率作为 QA 的一个评定指标。本框架可以一键生成所有代码对应的 junit 测试案例,为你的人生节约宝贵的时间。特性支持生成 junit4/junit5支持 jdk7支持自定义生成模板更新记录更新记录gen-test...

2019-12-28 16:06:26 14226 2

原创 ASM 系列详细教程-01-ASM 入门案例详细教程

ASMASM 是一个通用的Java字节码操作和分析框架。它可以用来修改现有的类或动态地生成类,直接以二进制形式。ASM提供了一些通用的字节码转换和分析算法,可以从这些算法中构建自定义复杂的转换和代码分析工具。ASM提供与其他Java字节码框架类似的功能,但主要关注性能。因为它的设计和实现都尽可能地小和快,所以非常适合在动态系统中使用(当然也可以以静态的方式使用,例如在编译器中)。特性...

2019-12-22 18:22:52 15268

原创 基于 asm 实现比 spring BeanUtils.copyProperty 性能更好的属性拷贝框架

Bean-Mapping日常开发中经常需要将一个对象的属性,赋值到另一个对象中。常见的工具有很多,但都多少不够简洁,要么不够强大。我们经常使用的 Spring BeanUtils 性能较好,但是特性不足。Bean-Mapping 提供了很多丰富的特性,便于日常开发。如果你追求更加极致的性能,可以考虑使用 asm 实现的模块,该实现性能优于 spring BeanUtils 35% 左右。...

2019-12-17 19:46:23 13977

原创 java 反射 借助 asm 获取参数名称最优雅简单的方式

背景说明最近写反射相关的代码,想获取对应的参数名称,却发现没有特别好的方式。jdk7 及其以前,是无法通过反射获取参数名称的。jdk8 可以获取,但是要求指定 -parameter 启动参数,限制较多。期间尝试过类似于 Mybatis 使用 @Param 的方式,但是感觉不够优雅,后来发现了下面的这个工具。asm-tool 是基于 asm 构建的常见工具类。下面简单介绍下使用方式。快...

2019-12-13 17:25:16 13818

原创 xml-mapping xml 与 java 对象转换映射框架,像 XStream 一样优雅地读写xml

xmlxml 是 java 实现的 xml 框架。希望以最优雅的方式进行 xml 和 java 之间的转换处理,一行代码搞定一切。特点对象的和 xml 的互相映射支持注解 @Alias 指定别名快速开始准备jdk 1.7+maven 3.x+maven 引入<dependency> <groupId>com.github.houbb...

2019-12-03 13:42:27 13879 1

原创 从零开始手写 spring ioc 框架

IoCIoc 是一款 spring ioc 核心功能简化实现版本,便于学习和理解原理。创作目的使用 spring 很长时间,对于 spring 使用非常频繁,实际上对于源码一直没有静下心来学习过。但是 spring 源码存在一个问题,那就是过于抽象,导致学习起来成本上升。所以本项目由渐入深,只实现 spring 的核心功能,便于自己和他人学习 spring 的核心原理。spring 的...

2019-12-01 19:38:54 13947

原创 java property 配置文件管理工具框架,避免写入 property 乱序

propertyproperty 是 java 实现的 property 框架。特点优雅地进行属性文件的读取和更新写入属性文件后属性不乱序灵活定义编码信息使用 OO 的方式操作 property 文件支持多级对象引用变更日志ChangeLog快速开始环境依赖Maven 3.xJdk 1.7+Maven 引入依赖<dependency&...

2019-11-20 22:51:08 14315

原创 从零开始手写 dubbo rpc 框架-00-序章

rpcrpc 是基于 netty 实现的 java rpc 框架,类似于 dubbo。主要用于个人学习,由渐入深,理解 rpc 的底层实现原理。前言工作至今,接触 rpc 框架已经有很长时间。但是对于其原理一直只是知道个大概,从来没有深入学习过。以前一直想写,但由于各种原因被耽搁。技术准备Java 并发实战学习TCP/IP 协议学习笔记Netty 权威指南学习这些技术的准备阶...

2019-11-01 13:36:53 13880

原创 java bean 属性验证框架 valid

项目介绍java 开发中,参数校验是非常常见的需求。但是 hibernate-validator 在使用过程中,依然会存在一些问题。特性支持 fluent-validation支持 jsr-303 注解支持 i18n支持用户自定义策略支持用户自定义注解开源地址valid创作目的hibernate-validator 无法满足的场景如今 java...

2019-10-13 18:22:31 13875

原创 java 编译时注解框架 lombok-ex

lombok-exlombok-ex 是一款类似于 lombok 的编译时注解框架。编译时注,拥有运行时注解的便利性,和无任何损失的性能。主要补充一些 lombok 没有实现,且自己会用到的常见工具。创作目的补充 lombok 缺失的注解,便于日常开发使用。lombok 的源码基本不可读,应该是加密处理了。为其他注解相关框架提升性能提供基础,后期考虑替换为编译时注解。...

2019-10-03 13:32:18 13795

原创 java压缩归档算范开源框架工具 compress

compressThe compress algorithm tool.(常见压缩算法工具类)创作背景压缩是很常见的一个需求,但是使用 apache 的工具类进行压缩,需要自己处理很多事情。比如文件是否存在,不存在则需要创建,还要循环处理各种信息,这一点也不优雅。于是,就基于 apache common-compress 进行封装,便于后期使用。特性支持常见归档压缩算法fl...

2019-09-28 17:17:48 13901

原创 从零手动实现 java json 序列化框架

jsonjson 是 java 实现的序列化 json 框架。特性8 大基本类型支持基本类型/对象数组/集合/枚举/对象 支持极简的 API后续特性@Field 注解的支持反序列化对象的完整性支持,目前只支持基础的反序列化。为何创作解决 fastJson 中的不足FastJSON 在序列化本身存在一定限制。当对象中有集合,集合中还是对象时,结果...

2019-09-12 13:40:47 13830

原创 基于 java 注解的 csv 读写框架更加简单灵活,java 对象转 csv

CSV基于 java 注解的 csv 读写框架。相关框架Apache commons-csvsuper-csv简单看了下,这两个框架提供的特性都非常的基础。创作原由以前觉得 csv 文件的读写非常简单,就懒得封装。最近一个月写了两次 csv 文件相关的东西,发现要处理的细节还是有的,还浪费比较多的时间。比如:UTF-8 中文编码使用 excel 打开乱码,因为缺少 BOM ...

2019-06-20 20:16:31 15664

原创 基于 java 注解的 csv 文件读写框架

csv基于 java 注解生成加签验签 csv。开源地址: github csv创作原由以前觉得 csv 文件的多写非常简单,就懒得封装。最近一个月写了两次 csv 文件相关的东西,发现要处理的细节还是有的,还浪费比较多的时间。比如:UTF-8 中文编码使用 excel 打开乱码,因为缺少 BOM 头。不同类型字段转化为字符串,顺序的指定,head 头的指定,如果手写都会很...

2019-06-03 19:11:14 19679

原创 基于注解的 java 加签验签框架 checksum

checksum基于 java 注解生成加签验签 checksum。开源地址:github checksum创作缘由原来的代码中,checksum 的生成是用的工具类方法。后来发现如下的问题:有些字段太大,不想参与验签,但是无法方便的调整。不同系统的 checksum 字段不同,只好把工具方法 copy 过去,改来改去。感觉这样有很大的弊端,完全失去了灵活性。特性...

2019-05-29 21:06:30 21972

原创 Git 学习汇总-00-目录

目录为什么要学习这个系列使用 git 已经很久了,但是仅仅停留在使用的层面。遇到问题就跑去查一下,没有完整的学习历程。当然只是系统的学习一遍,还是会很快就忘记。所以记录成博客,便于以后查阅。希望系统学习一遍之后,遇到问题知道怎么排查。...

2019-03-12 13:09:48 16686

原创 java bean 对象属性复制框架BeanMapping-01-入门案例

项目简介Bean-Mapping 用于 java 对象属性赋值。项目中经常需要将一个对象的属性,赋值到另一个对象中。常见的工具有很多,但都多少不够简洁,要么不够强大。特性支持对象属性的浅拷贝变更日志变更日志快速开始准备JDK1.8 及其以上版本Maven 3.X 及其以上版本maven 项目依赖<dependency> <groupId&...

2019-02-23 10:37:06 14226

原创 java 日志脱敏框架 sensitive,优雅的打印脱敏日志

问题为了保证用户的信息安全,敏感信息需要脱敏。项目开发过程中,每次处理敏感信息的日志问题感觉很麻烦,大部分都是用工具类单独处理,不利于以后统一管理,很不优雅。于是,就写了一个基于 java 注解的日志脱敏工具。github sensitive项目介绍日志脱敏是常见的安全需求。普通的基于工具类方法的方式,对代码的入侵性太强。编写起来又特别麻烦。本项目提供基于注解的方式,并且内置了常...

2019-01-03 11:05:56 17752 11

原创 MongoDB 入门教程实战学习笔记-00-目录

目录文章目录目录写作目的代码下载地址写作目的工作中用到 mongoDB,后期要针对大量的数据进行优化。所以先浅显的学习一遍基础知识,本系列博客直接参考官方博客。当做日后参考翻阅的用途。因为没有看到特别系统的中文系列博客。代码下载地址mongodb-learn 后续的代码会放在这里...

2018-12-17 20:44:25 16940

原创 java 内存模型入门系列教程-00

目录java 内存模型JSR 133-01java 内存模型数据结构-02java 内存模型缓存和重排序-03java 内存模型顺序一致性-04java 内存模型volatile关键字-05java 内存模型happens before,as-if-serial,synchronization-06java 内存模型 java 锁 ReentrantLock-07java 内存模型...

2018-12-12 21:08:43 18013

原创 java 导出 excel 最佳实践,java 大文件 excel 避免OOM(内存溢出) excel 工具框架

产品需求产品经理需要导出一个页面的所有的信息到 EXCEL 文件。需求分析对于 excel 导出,是一个很常见的需求。最常见的解决方案就是使用 poi 直接同步导出一个 excel 文件。客户体验 & 服务性能客户体验如果导出的文件比较大,比如几十万条数据,同步导出页面就会卡主,用户无法进行其他操作。服务性能导出的时候,任务比较耗时就会阻塞主线程。如果导出的服务...

2018-11-26 21:52:07 28489

原创 logback 入门教程系列-00-导航

导航创作缘由logback、log4j、log4j2 等常用日志框架都接触过。但是没有系统地去学习,所以本系列就简单的按照官方教程学习一遍。源码本系列的源码,你可以在 logback-learn拓展阅读log4j2slf4j日志最佳实践...

2018-11-20 22:15:32 26553

原创 Java Servlet 实战入门教程-00-Servlet 系列教程汇总

系列文章汇总写作缘由原来学习过多次 servlet,但是平时工作中一直使用 spring mvc 等框架。使用的时候写几个注解,实际原理并不知晓。此系列文章,意在知其然,知其所以然。学习之路,就是保持一颗好奇之心。Servlet概念servlet是用于扩展和增强Web服务器的Java平台技术。servlet提供了一种基于组件的、独立于平台的方法来构建基于web的应用程序,而不受CG...

2018-10-06 16:01:47 27451

原创 java 内存模型-01-JSR 133

Java Memory Model简介在多处理器系统中,处理器通常有一个或多个内存缓存层,通过加速对数据的访问(因为数据离处理器更近)和减少共享内存总线上的流量(因为许多内存操作可以由本地缓存来满足),提高性能。内存缓存可以极大地提高性能,但是它们带来了许多新的挑战。例如,当两个处理器同时检查相同的内存位置时,会发生什么?在什么条件下它们会看到相同的值?在处理器级别,内存模型定...

2018-09-14 12:12:06 17885

原创 java 异步查询转同步多种实现方式:循环等待,CountDownLatch,Spring EventListener,超时处理和空循环性能优化

异步转同步业务需求有些接口查询反馈结果是异步返回的,无法立刻获取查询结果。正常处理逻辑触发异步操作,然后传递一个唯一标识。等到异步结果返回,根据传入的唯一标识,匹配此次结果。如何转换为同步正常的应用场景很多,但是有时候不想做数据存储,只是想简单获取调用结果。即想达到同步操作的结果,怎么办呢?思路发起异步操作在异步结果返回之前,一直等待(可...

2018-08-10 23:51:57 16238

原创 java retry(重试) spring retry, guava retrying 详解

系列说明java retry 的一步步实现机制。 java-retry 源码地址情景导入简单的需求产品经理:实现一个按条件,查询用户信息的服务。小明:好的。没问题。代码UserService.javapublic interface UserService { /** * 根据条件查询用户信息 * @par...

2018-08-08 18:01:54 15990

原创 js 系统教程-00-什么是 JavaScript 语言

目录导航目录目录导航目录本系列目的JavaScript 教程什么是 JavaScript 语言为什么学习 JavaScript?操控浏览器的能力广泛的使用领域易学性强大的性能开放性社区支持和就业机会实验环境原文地址本系列目的JS 入门教程 中将 js 的基础知识简单的讲述了一遍,讲述的较为浅显。javascript 教程 相对讲述的...

2018-07-14 14:06:47 35272 1

原创 深入浅出 java 注解-01-java 注解简介

目录目录Java 注解参考文档系列导航Java 注解注解,元数据的一种形式,提供了程序本身之外的数据。注释对注释的代码的操作没有直接影响。注解有许多用途,其中包括:编译器的信息—编译器可以使用注释来检测错误或抑制警告。编译时和部署时处理——软件工具可以处理注释信息来生成代码、XML文件等等。运行时处理——可以在运行时检查一些注释。这节课,还可以使...

2018-07-02 22:53:00 35762

原创 junit5 入门系列教程-01-junit5 简单入门例子

目录目录Junit5简介JDK 支持快速开始Maven 导入测试案例变化文档参考Junit5JUnit5 is the next generation of JUnit. 目标是为JVM上的开发人员端测试创建一个最新的基础。这包括关注Java 8和以上版本,以及支持多种不同的测试风格。JUnit 5是JUnit Lambda和它在Indie...

2018-06-24 16:36:15 46016 2

原创 QLExpress 系列入门教程-00-QLExpress 序章

系列导航目录系列导航目录QLExpress应用场景编写此系列博客的目的QLExpressQLExpress is a powerful, lightweight, dynamic language for the Java platform aimed at improving developers’ productivity in differen...

2018-06-12 09:00:51 42985 2

原创 Redis 入门系列-redis-redis 是什么,redis 的优点

导航Redis 入门系列-redis-redis 是什么,redis 的优点Redis 入门系列-redis-redis 和 memcached 的区别(总结)Redis 入门系列-redis-redis 配置命令行, redis 配置详解Redis 入门系列-redis-redis 数据类型 字符串、散列、列表、集合、有序集合、bitmaps、hyperloglogs、geosp...

2018-05-08 19:07:25 41948 1

原创 java 23 种设计模式-00-java 设计模式入门

系列导航索引java 23 种设计模式-00-序章java 23 种设计模式-01-工厂模式(factory)java 23 种设计模式-02-抽象工厂模式(abstract factory)目录系列导航索引目录设计模式写在前面创作缘由谁适合阅读本系列教程基础初学者一定经验开发者代码地址各种设计模式的关系鸟瞰优秀资源推荐目录导航...

2018-05-06 15:11:50 43085 3

原创 手写 Hibernate ORM 框架-00-环境准备

导航手写 Hibernate ORM 框架-00-环境准备手写 Hibernate ORM 框架-01-注解定义、常量定义手写 Hibernate ORM 框架-02-实体 Bean 定义,建表语句自动生成手写 Hibernate ORM 框架-03-Hibernate 配置文件读取, 数据库连接构建手写 Hibernate ORM 框架-04-数据库交互,数据持久化目录...

2018-05-02 21:24:36 42824 1

原创 英文单词拼写纠正(错误检查)的java实现-word-checker

问题引入平时工作学习中,对于单词拼写检查也是很常见的需求。 一直没找到特别好用的版本,就自己写一个。方便以后拓展和他人使用。项目简介本项目用于英文单词拼写检查。 word-checker快速开始JDK 版本JDK1.7 及其以后入门例子maven 引入本项目已经上传到 maven 仓库,直接引入即可<dependency...

2018-05-02 19:40:41 46683

原创 Quartz 入门系列教程-00-序章

Quartz任务调度是我们平时的业务开发中很常见的需求之一。Quartz 又是其中十分优秀的框架。本系列主要是将 Quartz 的官方文档进行简单整理。希望帮助大家入门。后续如果有时间,再写一点关于 Quartz 的使用心得。目录导航Quartz 入门系列教程-00-序章Quartz 入门系列教程-01-入门案例Quartz 入门系列教程-02-Jobs 和 T...

2018-04-02 20:40:51 43123

空空如也

叶止水的留言板

发表于 2020-01-02 最后回复 2020-01-02

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