自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(87)
  • 资源 (9)
  • 问答 (1)
  • 收藏
  • 关注

原创 Spring+策略模式+反射+泛型=无策略模式?

为什么要用策略模式?何时用策略模式?策略模式根据教科书式中的介绍为定义一系列算法,把它们一个个封装起来,并且使它们之间可互相替换,从而让算法可以独立于使用它的用户而变化。在实际业务开发中,算法一般表现为一系列特定的业务操作,根据特定的业务策略执行相应的“算法”。一般在以下场景可以考虑使用策略模式:选择语句(如if/else、switch)的多,选择执行块中操作各不相同且之后可能会进行业务扩展避免选择语句导致的难以维护想提高代码逼格自定义式的策略模式演变策略模式1.0 - 教材式的使用过程

2020-11-27 17:45:34 1057 2

原创 吐血整理各种二叉树(BST、AVL、Red Black、B、B+)

平衡二叉查找树、红黑树、B树与B+树的区别等各种二叉树简介

2020-07-01 11:46:24 2689 3

原创 实战:RocketMQ削峰,这一篇就够了

文章目录前言rocketmq-spring-boot-starter 用法简介业务案例环境配置添加maven依赖application.yml配置点赞接口PraiseListener:点赞消息消费者上线了但消费效率预估失误如何动态更改消费效率 ?如何使用RocketMQ批量消费 ?附本文相关信息前言MQ的主要特点为解耦、异步、削峰,该文章主要记录与分享个人在实际项目中的RocketMQ削峰用法...

2020-04-23 17:10:44 7410 5

原创 程序员Markdown编辑器软件Boostnote使用教程

程序员笔记软件Boostnote详细教程(Wiki文档)T1 - 简介Boostnote是一款作者生成永久开源的笔记软件,有很好的目录树与多种文本皮肤,支持Markdown、html语法,很适合程序员的知识系列总结,通过Dropbox,GoogleDrive或其它基于云端服务进行备份同步(如果嫌弃翻墙也可通过github同步,文末讲解)。下载地址如下:官方下载地址github下载地址...

2019-04-21 20:05:36 21553 11

原创 swagger2-spring-boot-starter自动化配置框架使用简介

swagger2-spring-boot-starter集成框架使用简介简介该框架基于swagger2-2.9.2与SpringBoot-2.0.1版本进行搭建,兼容SpringBoot2.x以上版本,不兼容1.x版本,maven依赖如下: <dependency> <groupId>

2018-11-17 14:38:11 19004 2

原创 全网最骚SpringBoot国际化配置

全网最骚的SpringBoot国际化i18n配置,无需SprinBoot i18n配置,只需进行简单的属性配置与注入。

2021-06-17 16:38:30 469 2

原创 SpringBoot使用flyway优雅的初始化数据库

概述Flyway这款数据库版本工具就算大家没有使用过但也略有耳闻了,SpringBoot对该款工具进行集成的框架可以让我们在启动SpringBoot应用时自动去找SQL版本文件进行比对执行,但在迁移或初始化时往往还是需要先手动进行下数据库的初始化配置,否则会把Unknown database的异常。为了减少这一步所以个人就以SpringBoot的方式编码在项目的启动时自动进行数据库的初始化,然后再执行版本文件。自动建库实现步骤具体思路SpringBoot的配置项都会有相应的Properties属

2021-03-03 17:17:26 1887 1

原创 SpringBoot集成Flyway进行数据库版本迁移管理

Flyway简介Flyway中的迁移(migrations)模式Flyway对数据库的所有更改都称为 migrations(迁移) 。 migrations(迁移) 分为版本控制(Versioned)迁移与可重复(Repeatable)的迁移两种,而版本控制又分为regular(常规)和undo(撤销)两种形式。版本控制迁移:具有版本号、描述和校验和,且版本是唯一的。描述用于简单记录迁移的内容,校验和用于检测意外更改。版本控制迁移通常用于以下用途:创建|更新|删除:表、索引、外键、枚举、UD

2021-01-13 14:35:28 619

原创 上手Swagger3.0,踩了两个坑

踩坑前言Swagger3.0出来一段时间了,虽然简化了基础的配置,但作为一个大版本的升级肯定存在不少问题,不少2.x版本的类都被标记为过时了,大部分类的构造与属性设置依旧都交给了对应的Buidler处理,但不少配置上都引入了函数式接口去处理,对于对函数式编程不太了解的开发者而言可能有一定的配置难度。目前国内较少对3.0版本的配置介绍,所以自己在项目里将Swagger升级到3.0后看了下替代了标记过时(@Deprecated)相应功能的源码进行相应的配置,结果踩了2个坑,所以分享下踩坑记录与3.0的通用配置

2021-01-07 15:44:08 7336 2

原创 月更干货:基于netty的websocket策略消息路由

该文主要写个人的例子设计实现思路,如觉得部分知识讲得不够细得建议自行搜索,也可参考个人之前的Web体系结构之Reactor线程模型知识整理文章。前言又到了月更时间了,本来想再把Websocket拖一拖看看能不能写其它内容的,但烂大街的内容不想写,觉得烂大街的内容学习知识梳理写到自己的静态博客上就行了,拖到现在实在想不到有什么好的其它内容可以写,只好接上月底的策略模式续写WebSocket聊天室例子了。该文章干货为主,湿货为辅,本年度本搬砖工最后一篇文章,用于这万恶的一年里最后一个工作日的工作收尾(摸.

2020-12-31 14:49:25 1092 1

原创 Web体系结构之Reactor线程模型知识整理

Web请求处理体系结构thread-based architecture(基于线程)基于线程的体系结构通常会使用多线程来处理客户端的请求,每当接收到一个请求,便开启一个独立的线程来处理。event-driven architecture(事件驱动)事件驱动体系结构是目前比较广泛使用的一种。这种方式会定义一系列的事件处理器来响应事件的发生,并且将服务端接受连接与对事件的处理分离。其中,事件是一种状态的改变。比如,TCP中socket的new incoming connection、ready

2020-12-28 17:15:46 321

原创 了解官方Swagger Starter后再回顾Spring Boot

springfox终于给Swagger做了个Spring Boot Starter了,看来我自己写的swagger starter可以在不久后可以退役了。为什么之前官方不出相应的Spring Boot Starter刚开始接触到Spring Boot时,很疑惑为什么Swgger作为一款流行的文档框架却没有自己的Spring Boot Starter。后来为了自己的方便,手撸了一套给自己用的starter,当时也因此了解了Spring Boot是如何进行自动化配置的,配置文件里的配置提示是读取哪个文件.

2020-10-09 17:06:40 414

原创 从Java代理到AOP

title: 从Java代理到AOPtags:springcategories: springurl: /spring/aop简介Java代理与AOP都有那么多文章了,为什么我还要写呢?因为我是写给自己看的,不是写给你们看的,不过对读者来说应该是又有作者拿AOP鞭尸了,烂熟于心的建议继续出去逛街吧,发博只是顺手而为罢了言归正转,Java中的代理分为静态代理与动态代理两种:动态代理:程序运行时动态调用和扩展目标对象方法,代理类在运行时确定,如生成的代理类带有随机值的后缀。静态.

2020-09-28 09:36:31 191

原创 JUC中常见队列介绍及实现原理

本文纯粹为了解AQS框架与线程池后对队列知识原理的随手补充笔记。前言Java并发编程中总离不开线程池的管理和使用,而线程池的线程执行与阻塞机制只要依赖于其使用的队列。Java并发包JUC下的队列主要分为以下两种:单端队列:队列只有一个入口一个出口,单端队列类直接实现Queue接口,常见的线程池都会使用单端队列作为其线程队列双端队列:支持在两端插入和删除元素的队列,继承了Queue接口,双端队列类直接实现该接口JUC下常见的队列相关类简介如下:BlockingQueue接口:阻塞队列的.

2020-08-21 18:11:23 1109

原创 Java中的线程池详解与SpringBoot线程池扩展

title: Java线程池tags:Java并发编程categories: Java并发编程url: /java/concurrent/ThreadPool部分内容摘自《Java并发编程的艺术》池化技术池化技术的主要目的在应用启动时预先保存一些资源放到池中管理,当需要获取资源时可以直接从池中获取,使用完毕后重新放回池中,从而减少资源创建与销毁的消耗。常见的池化技术实现有线程池、连接池、内存池等,线程池中的资源便是线程,连接池中的资源便是连接,内存池中的资源便是内存。线程池的优点.

2020-08-08 23:20:12 559 2

原创 简单介绍Java中的Unsafe类

概述sun.misc.Unsafe类旨在仅由核心Java库(JUC包下的类)而非标准用户使用的底层机制,即不推荐开发者使用,但并不妨碍我们对该类的了解。Unsafe可以使Java直接进行内存的操作、实例化类与对实例进行属性操作、提供CAS操作等底层操作,下文将对这些功能进行简单的案例演示,实际开发中依旧不推荐使用,只作为Java体系中的一个知识点了解即可。Unsafe实例构建内部类创建Unsafe类实例时都是调用其静态方法getUnsafe(),具体源码如下:public static Unsafe

2020-07-31 17:43:05 249

原创 Java对象内存布局(JOL)

前言Java对象的内存布局主要由对象头(Object Header)、实例数据(instance data)、对齐填充(padding)三部分组成。对象头:存储对象的基础信息(如锁状态、GC状态、元数据等),12byte实例数据:存储对象实例数据对齐填充:如果对象存储的字节数并非8的倍数,则将存储字节数填充到8的倍数以便对象的查找HotSpot JVM使用称为oops(Ordinary Object Pointers-普通对象指针)的数据结构来表示指向对象的指针,这些oop相当于本机C指针,

2020-07-21 17:56:56 1132 2

原创 HashMap源码透析,结构验证

简介HashMap在1.8之后通过数组(table)属性使用单向链表 + 红黑树的结构组合提高查找效率,于是我大致的画了下图:后来写着写着发现我还是太年轻了,有什么比亲手实践更值得让人信服呢?类图分析(只标注主要属性方法)Map<K,V>:键值映射的基础接口,提供常用的键值映射操作方法的抽象Map.Entry<K,V>:键值对条目(单个键值)抽象接口AbstractMap<K,V>: 简单实现了Map接口的部分方法HashMap<K,V>:

2020-05-25 17:38:33 216

原创 简单的解剖了下ArrayList

简介ArrayList是一个可动态调整数组大小的集合类,其类图关系如下:List:声明是一个有序的集合,可以控制元素位置并索引访问。RandomAccess:声明支持快速随机访问的标记接口,常用于列表类实现。该接口的主要目的是允许通用算法更改其行为,即必要时选择更好的算法进行性能上的提高,实现了该接口的列表使用for遍历比迭代器Iterator遍历效率高。Serializa...

2020-04-14 15:32:03 147

原创 分享一个linux各软件安装教程网站linuxize

前言相信有很多开发者安装linux系统软件时都会根据不同的发行版本去百度不同软件的安装步骤,但有时候可能会出现读者根据博主的安装步骤进行却出现了无法安装成功的情况,其实我作为一名读者有时也会出现这样的情况,一般都会再去参考其它文章对比是不是自己哪里漏了(事实这样情况经常发生)。后来发现了一个linux网站有不同发行版(ubuntu、centos、debian)的安装流程,且步骤也很详细,所以今天...

2020-04-01 10:01:47 534

原创 分享使用github开源框架遇到问题的解决方式

前言以前学习时遇到问题的主要解决方式都是百度,但现在除了百度之外目前知识框架遇到问题时还会去框架的官网或github issues中寻找解决方式,该文章主要的介绍内容为github issues的使用。issues过滤查询语法(参考自官网文档)上图是携程的apollo在github的Issues页面,以下是比较常用的搜索语法:搜索栏直接输入内容查找,会自动从所有issues中搜索标题...

2020-03-23 20:08:32 379

原创 问我Java基本数据类型?我可以把字节码也扯上了

Java中的8个基本类型数据类型booleanbytecharshortintlongfloatdouble包装类型BooleanByteCharacterShortIntegerLongFloatDoublebit18161632646464基本类型的两条准则:对整型数据不指定类型默认为int类型,浮点数默认为d...

2020-03-19 16:26:24 277

原创 Mysql set字段类型剖析

set类型简介最近项目中使用了set类型去定义一个常量集合字段,为了深入了解该类型用法去官方文档学习了一下并进行了一些用法的尝试。set是可以具有0到64个值的字符串对象类型(可当集合使用),set列中的值都必须在定义时指定的值列表中选取。set中的每个字符串成员值之间用逗号(,)分隔,所以成员值中不能包含逗号(,)字符串(实质即Mysql把成员值通过逗号拼接成一个完整的字符串)。注意事项与...

2020-03-18 16:39:09 4305

原创 分享一下自己通过hexo+gitee/github搭建个人博客的流程

选择该方式搭建的理由和要做的准备每个项目在开始之前,都需要先清楚项目的目的、主要的需求和核心点在哪。我在选择搭建的方式之前,根据个人状况确认了博客的搭建需要满足以下需求:无需自备服务器,静态网站也没关系不错的分类归档方便文章追溯简洁的排版不用了解或使用太多前端知识(排版是我的痛)根据自行百度了解,在github/gitee上搭建的Pages博客最起码是满足第1点要求的,选用哪种方...

2020-03-13 16:02:49 6456 3

原创 聊聊MQ与基于Spring Boot RocketMQ搭建一个消息中心的过程

前言在引入一项技术之前,首先必须清楚的是该技术可以为项目解决什么问题。个人在了解消息队列(Message Queue)之前,以为消息队列主是用于发送短信、邮件等消息发送(异步解耦),但深入理解才发现自己的理解错了,MQ的作用不止体现在一些用户接收到的具体消息里,还可用于其它应用的数据发送、通用的业务处理等。消息队列从字面上意思解读就是将消息存放到队列里,根据队列FIFO(先入先出)的特性进行...

2020-03-09 13:17:23 1522

原创 SpringBoot属性注入的各种姿势(含2.2.0版本最新方式)

常见的spring boot属性注入相关注解常见的SpringBoot属性注入使用的注解类含以下几种:@Value:常用于字段上,将Spring加载到的属性匹配注入到当前实例字段,可通过冒号:设置属性默认值。@Configuration:作用于类上,声明一个类作为配置类并生成单例到Spring容器中。@PropertySource:作用于类上,读取指定资源文件属性,常与@Configur...

2020-02-26 16:59:28 460 1

原创 通过JDK函数式遍历列表设置父子关联(如菜单、分类等)

前言该文章主要续上一篇文章JDK函数式编程的认知与使用中的例子补充,通过一个简洁的函数式方法将含父子关系的类列表(如分类、菜单等)进行树状排序且无需递归设置,当含需要从数据库中获取所有此类数据对象并树状排序业务时可使用该方法。范例代码Classify.java:@Dataimport lombok.Data;import java.util.List;/** * Classif...

2020-02-11 16:54:12 400

原创 谈谈个人对JDK函数式编程的认知与使用

前言该文章主要介绍JDK中各种常见的函数式接口,并会附上一些个人对函数式编程的一些扩展思考与实际用法。常见的函数式接口介绍jdk1.8的函数式接口都在rt.jar中java.util.function包下,以下以jdk集合类与个人常用的接口进行介绍:Function<T,R>:传入类型为T的对象并执行含返回值(返回值为R-return类型)的指定方法,方法可临时实现。常见于...

2020-02-06 14:31:19 390

原创 Docker配置SpringBoot+ShardingJDBC+MybatisPlus项目实现分库分表与读写分离

SpringBoot+ShardingJDBC+MybatisPlus环境集成并实现分库分表读写分离

2020-01-19 10:11:17 1180

原创 Docker搭建基于binlog的Mysql主从同步

MySQL binlog主从同步简介传统的MySQL提供了一种简单的主从同步方法,主机数据库执行并提交事务,然后将事务异步发送到从数据库,使从机数据库执行相同的语句(如DDL、DML),默认情况下所有服务器均具有数据的完整副本。主要流程图如下:主机Mysql通过Binlog Dump线程将日志发送到从机Mysql的IO线程,I/O线程获取到事件数据后更新到从库的中继日志(relay log)...

2020-01-15 15:47:59 452

原创 TCP三次握手与四次挥手(TCP报文)

TCP三次握手握手流程第一次握手:客户端(client)发送数据包(syn=1,随机序列号seq)到服务器,并进入SYN_SEND状态,等待服务器(server)确认(目的:确保服务端接收功能正常)第二次握手:服务器收到报文并根据标志(ACK=1,SYN=1)确认客户端是否准备好,确认后发送报文(SYN=1,ACK=1,ack=client.seq+1,随机序列号sql),此时服务器进入...

2020-01-10 11:14:55 1709

原创 Centos安装Docker并使用IDEA插件一键发布SpringBoot项目

Centos安装Docker并使用IDEA插件一键发布SpringBoot项目

2020-01-07 15:10:39 267

原创 Docker+Jenkins+Nginx+SpringBoot自动化部署项目

使用Docker与jenkins部署SpringBoot项目,并通过Docker Nginx容器进行反向代理

2020-01-07 15:08:15 1288

原创 推荐一款有理想的国产SSH工具-FinalShell

前言你还在为上传文件到服务器烦恼吗?还在为服务器的文件管理感到烦恼吗?如果是,来了解下这款优秀的国产SSH工具吧;如果不是,来了解下现在的国产SSH工具发展到什么程度吧。作为一款使用Java开发的SSH面板工具,它不仅仅只进行SSH连接与指令管理,它还可以显示服务器的CPU、内存、交换空间等信息,进行文件的上传和下载,全文关键字搜索,历史指令提示等等…很明显,这是一款很有理想的SSH工具,而...

2019-12-26 15:26:41 563 1

原创 Jenkins安装并部署Java项目完整流程

Centos上安装Jenkins并部署SpringBoot项目,并通过github Webhooks使Jenkins自动接收项目更新并重新部署项目

2019-12-26 13:54:41 4247 1

原创 MySQL explain详解

前言select语句之前增加explain关键字,MySQL会在查询上设置一个标记,使语句执行时只会返回select语句的执行计划,但不执行select语句,使开发者可以根据执行计划开发者可特定策略提高SQL语句性能。该文总结自MySQL官方文档EXPLAIN Output Format。explain返回结果列解析id:标识SQL中的select执行顺序id相同时,查询语句从上往下...

2019-12-16 16:20:42 203

原创 java传输Long类型精度损失

起因在使用Mybatis Plus的雪花算法生成Long类型id时发现Swagger返回id与数据库的id不一致,但直接访问URL接口时返回的id却是正确的,即数据库id与URL访问返回的id一致,仅Swagger不一致,也许这就是买家秀(Swagger)与卖家秀(数据库,接口URL),至于原因嘛…百度一下,结论总结为:js的number最大值为9007199254740992,所以swag...

2019-12-12 16:02:55 1028

原创 本地测试搭建RocketMQ控制台

RocketMQ官方提供了一个SpringBoot控制台管理操作MQ信息的项目,文章主要简单记录本地搭建该控制台流程。环境准备下载对应版本的RocketMQ,配置环境变量(各版本下载地址)到git将控制台项目拉到本地IDEA打开rocketmq-console项目,更改resources/application.properties文件rocketmq.config.namesrvA...

2019-12-12 15:00:01 446

原创 RocketMQ集成Spring Cloud Config

前言前言项目运行前需安装好RocketMQ与环境变量配置,对Rocket相关知识不熟悉的可按照以下文章顺序后再阅读该文:RocketMQ安装配置RocketMQ概念模型RocketMQ快速集成SpringBoot...

2019-12-12 10:29:54 583

原创 RocketMQ集成SpringBoot

RocketMQ的消息流转流程是Producer->Broker->Consumer,NameServer在其中负责Borker的相关信息路由,在RocketMQ中Borker与NameServer是作为客户端运行,所以代码层只需负责Producer与ConsumerProducer配置Demo...

2019-12-11 20:50:43 688 1

rocketmq-console-ng-1.0.1.jar

RocketMQ Dashboard应用,默认端口号更改为9999,nameserver地址为127.0.0.1:9876,直接java -jar rocketmq-console-ng-1.0.1.jar启动后访问http://localhost:9999/#/topic即可

2020-04-23

SpringMVC纯注解配置

通过注解配置完全代替web.xml、Spring的xml文件配置,jquery递归遍历后台返回的json对象并进行拼接

2017-05-22

thymeleaf整合spring所需包

博客里有对应入门程序,可用于参考

2017-01-14

jackson2.x主要jar包

jackson-annotations-2.8.5,jackson-core-2.8.5,jackson-databind-2.8.5的jar包及source、doc的jar包

2017-01-07

深入浅出MyBatis技术原理与实战 源码下载

杨开振的《深入浅出MyBatis技术原理与实战》第四章源码,导入工程后记得把数据库改为自己的,sql文件在src/main/resources下,copy到mysql数据库执行后即可在src/main/test进行单元测试,大部分功能测试代码本人已写好,我博客里对应的第四章文章也会写一些书上没有提到的知识细节!初学者,如有错误,敬请指出

2017-01-03

mysql5.6 jdbc jar下载

支持MySQL4.0版本以上(mysql-connector-java-commercial-5.1.25-bin.jar)

2017-01-01

JBOSS Visual Editor

该资源是JBOSS可视化页面编辑插件,使用前请看我博客“Eclipse编辑jsp、html的preview、Design/Source视图出错”文章,若发现无效会删除。该文件只适合Luna及其值后的版本使用(即Luna、Mars、Neon)

2016-12-16

struts+js,struts+jquery示例

struts+js整合示例,struts+jquery整合示例

2016-12-05

Spket1.6.23.jar破解包

怎么覆盖原文件安装在我博客有详解,不会的可以去看看,我也只是个菜鸟,希望能记下想法提升自己和进阶的过程。eclipse的Install New Software安装的就是这个版本,已是最新,不用担心版本问题

2016-09-18

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

TA关注的人

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