自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

G0_hw

路漫漫其修远兮,吾将上下而求索

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

原创 基于Redis生成递增序号

一. Spring Boot + Redisson 生成运单号 <!--整合redission框架start--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </de

2021-07-31 09:42:03 4159

原创 注解+反射实现动态调用

一. 业务场景说明    微服务开发,有两个独立的应用服务:a 和 b,a是聚合入口服务,单向调用关系,即 a -> b。又有一个开放平台服务c,需要先调用a,然后再a中回调通知b。但开发平台回调通知的时间有很多,在a中不想对每一个通知时间都写一个方法rest接口来接收,而是想用一个rest方法统一收归开放平台的各种通知,然后根据通知类型分派到b中不同的api里,这样保证了a作为聚合入口服务的纯粹性,开放平台也只需要和a的这一个统一收归的接口交互,真正的业务处

2021-07-30 16:49:32 357

原创 策略模式与模板方法模式的结合

/*** 场景示例说明:删除提货单 和 删除任务单 存在共有的逻辑(可以定义在抽象父类的模板方法中),* 后端rest分别提供删除提货单和删除任务单接口,在接口中根据操作标识选择 删除提货单 还是 删除任务单 的策略逻辑*/// 0. 定义操作策略接口public interface OperateStrategy { String operateType(); void operateHandle(TransTaskOperateRequestDto transTaskOper

2021-07-30 15:47:36 1437

原创 windows下bat脚本git pull批处理

一. 场景说明    公司有很多项目,我把它们都放在本地同一个磁盘目录下,使用bat脚本,批量git pull拉取每一个项目的最新代码。二. git_pull.bat脚本@echo off start cmd /K for /D %%i in (F:\zzxypm\Cloud\dmp,F:\zzxypm\Cloud\pass,F:\zzxypm\Cloud\server,F:\zzxypm\Cloud\web,F:\zzxypm\Credit\reac

2020-08-15 15:35:06 3119 1

原创 线程安全之CAS

反编译:多线程下的i++操作:

2020-06-16 23:38:18 292

原创 List 如何一边遍历,一边删除?

一. 第一时间想到的错误方式

2020-06-12 15:33:16 549

原创 RPC实践

一. RPC是什么?remote procedure call,远程过程调用。其中远程表示不同应用间的调用,过程就是业务处理,计算任务,更直白理解,就是程序(像调用本地方法一样调用远程的过程)。RPC采用Client-Server结构,通过request-response消息模式实现。RPC和RMI有什么区别?RMI(remote method invocation) 远程方法调用时oop领域中RPC的一种具体实现。我们熟悉的webservice,restful接口调用是RPC吗?

2020-06-05 22:53:15 253

原创 基于Spring Boot + Redis实现接口幂等性

https://mp.weixin.qq.com/s/2vycQljbC-DZYZgUtAQiXQhttps://mp.weixin.qq.com/s/v_iyZVd5ldixnhaxkdSArAhttps://mp.weixin.qq.com/s/xy4Jg3LrK0dpYy5q4rAAawhttps://mp.weixin.qq.com/s/8t8eNRSMLBgjeQBfnfxZIQ

2020-05-26 23:10:21 573

转载 FastDFS集群搭建 + Spring Boot集成

    FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题,同时也能做到在集群环境下一台机子上传文件,同时该组下的其他节点下也备份了上传的文件。做分布式系统开发时,其中要解决的一个问题就是图片、音视频、文件共享的问题和数据备份,分布式文件系统正好可以解决这个需求。FastDFS的服务主要有两个角色Tracker和Storage,Tracker服务用于负责调度

2020-05-20 23:11:48 882

原创 HttpServletRequestWrapper的应用

    最近的一个项目前后端分离,然后后端自定义Filter,通过继承org.springframework.web.filter.OncePerRequestFilter实现在请求到达Controller层之前进行统一的参数验签(MD5+盐)和token验证。其中,在进行验签时,需要获取body中的JSON数据,这时想着直接通过HttpServletRequest#getInputStream() 获取到请求的输入流,从该输入流中可以读取到请求体。但这里就有个坑了,

2020-05-19 10:44:45 1519

原创 生产环境不同问题定位及分析

一. 生产环境服务器变慢,诊断思路和性能评估谈谈JVMGC结合SpringBoot微服务优化简介微服务启动的时候,同时配置我们的JVM/GC调优参数。java -server jvm的各种参数 -jar 自己的jar/war包名Linux命令之top系统的平均负载值:Linux命令之cpu查看vmstatLinux命令之cpu查看pidstatLinux...

2020-05-10 18:00:42 768

原创 GitHub的骚操作

GitHub操作之常用词如何找到优秀的源码 + 进行深度的框架解读GitHub操作之in搜索in:关键词 限制搜索范围GitHub操作之stars和fork范围搜索stars 或 fork 数量关键词 查找GitHub操作之awesome加强搜索GitHub操作之#L数字高亮显示某一行代码。GitHub操作之T搜索:项目内搜索...

2020-05-09 21:46:51 376

原创 基于RabbitMQ的分布式事务解决方案

一.分布式事物场景的一个错误示例二.了解RabbitMQ三.前言 - 分布式事物的几种解决方案四.基于RabbitMQ的通用解决方案整体设计思路step1 - 可靠消息生产 - 记录消息发送step2 - 可靠消息生产 - 修改消息发送状态 step3 - 可靠消息处理 - 正常处理step4 - 可靠消息处理 - 消息重发优缺点 ...

2020-03-29 23:00:27 284

原创 Docker:安装RabbitMQ

一. 拉取RabbitMQ官方镜像docker search rabbitmq#该版本包含了web控制页面docker pull rabbitmq:management二. 运行镜像,创建容器在这里插入代码片

2020-03-29 09:36:07 124

原创 排序(七):堆排序

一. 堆是什么堆树的定义如下:(1)堆树是一颗完全二叉树;完全二叉树:除了最后一层,其他层的节点个数都是最大值,即 2^N,N为层数,根节点为0;且最后一层自左向右的节点是连续的(2)堆树中某个节点的值总是不大于或不小于其孩子节点的值;(3)堆树中每个节点的子树都是堆树。当父节点的键值总是大于或等于任何一个子节点的键值时为最大堆。当父节点的键值总是小于或等于任何一个子节点的键值时为最...

2019-11-27 18:17:58 192

原创 排序(五):归并排序法

一. 基本思想二. 版本1package com.hong.sort;import java.util.Arrays;/** * 归并排序 O(Nlog(N)) * 需要将当前的数组拷贝一份出来,因此相比之前的排序,需要更多的存储空间 */public class MergeSort { /** * 将arr[l...mid]和arr[mid+1......

2019-11-20 22:10:46 313

原创 排序(六):快速排序法

一. 基本思想在归并排序中,不管数组的内容是什么,直接将数组一分为二,不断归并;而快速排序则每次从当前数组中选择一个元素作为标定点,然后想办法将这个标定点挪到合适的位置,使其满足上图中所示的排列,然后再从两端继续进行上述操作,直到整个数组有序。快速排序中的核心操作就是对数组进行分区。假设我们每次选择数组的首元素作为标定点,即上图中的 l 位置对应的元素 v,j 是 <v 部分的末尾...

2019-11-19 23:11:48 261

原创 排序(四):希尔排序法

    希尔排序是插入排序的改进版,实现简单,对于中等规模数据集的性能表现还不错。基本思想首先它把较大的数据集合分割成若干个小组(逻辑上分组),然后对每一个小组分别进行插入排序,此时,插入排序所作用的数据量比较小(每一个小组),插入的效率比较高。时间复杂度希尔排序的复杂度和增量序列是相关的。{1,2,4,8,…}这种序列并不是很好的增量序列...

2019-11-06 22:09:58 221

原创 排序(三):插入排序法

/** * <br>插入排序</br> * 对比选择排序 com.hong.sort.SelectionSort * 插入排序可以提前终止比较,而选择排序为了每次在剩下的元素中找到最小值, * 不得不把当前元素与剩下未排序的元素挨个比较,没有提前终止的机会, * 所以理论上插入排序的效率要高于选择排序。 */public class InsertionSort...

2019-11-06 21:20:01 212

原创 排序(二):冒泡排序法

/** * <br>冒泡排序</br> */public class BubbleSort { /** * 外层循环控制比较的轮数,内层循环进行依次相邻元素的比较 * 在第一轮比较中,最大的元素冒泡到了最后的位置; * 在第二轮比较中,第二大的元素冒泡到了倒数第二个位置; * 依此类推。 * @param a...

2019-11-05 23:25:02 158

原创 排序(一):选择排序法

/** * <br>选择排序</br> * O(n^2) */public class SelectionSort { /** * 选择排序思想: * 从第一个位置开始,找到后面最小的元素,然后与第一个位置的元素交换, * 这样,第一个位置的元素就是最小的元素了; * 然后从第二个位置开始,依次重复上面的步骤。 ...

2019-11-05 22:26:25 200

原创 ElasticSearch入门

一. 简介    ElasticSearch是一个分布式、可扩展、实时的搜索与数据分析引擎,它能从项目一开始就赋予你的数据以搜索、分析和探索的能力。二. Elasticsearch安装Elasticsearch的安装可以分为 单实例安装和分布式安装。参考链接:https://blog.csdn.net/G0_hw/article/detail...

2019-11-03 17:13:16 226

原创 MySQL(十一):MySQL主从复制

一. 复制的基本原理slave会从master读取binlog来进行数据同步。复制过程分为以下三步:(1) master将改变记录到二进制日志(binary log)。这些记录过程叫做二进制日志事件,binary log events。(2) slave将master的binary log events拷贝到它的中继日志(relay log)。(3) slave重做中继日志中的事件,将改...

2019-10-12 23:02:12 103

原创 MySQL(十):MySQL锁机制

一. 概述    锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。二. 数据...

2019-10-12 22:06:12 233

原创 MySQL(九):查询截取分析

一. 慢查询日志    MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。 long_query_time的默认值为10,意思是运行10秒以上的语句。由他来查看哪些SQL超出了我们的最大忍耐时间值,比如一条sql执行超...

2019-10-11 21:53:50 156

原创 MySQL(八):慢查询优化

一. 小表驱动大表类比:Java中嵌套循环应该内大外小,还是内小外大?https://www.cnblogs.com/gougouyangzi/articles/8858412.html二. ORDER BY子句尽量使用Index方式排序,避免使用FileSort方式CREATE TABLE tblA( id int primary key not null auto_increm...

2019-10-11 20:50:01 147

原创 一道索引分析题

create table test03( id int primary key not null auto_increment, c1 char(10), c2 char(10), c3 char(10), c4 char(10), c5 char(10));insert into test03(c1,c2,c3,c4,c5) values('a1','a2','a3','a4'...

2019-09-24 23:42:15 153

原创 MySQL(七):索引优化

一. 索引单表优化案例CREATE TABLE IF NOT EXISTS article(id INT(10) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,author_id INT(10) UNSIGNED NOT NULL,category_id INT(10) UNSIGNED NOT NULL,views INT(10) UNSIG...

2019-09-23 23:07:30 104

原创 MySQL(六):性能分析

一. MySQL常见瓶颈CPUSQL中对大量数据进行比较、关联、排序、分组。IO实例内存满足不了缓存数据或排序等需要,导致产生大量物理 IO。查询执行效率低,扫描过多数据行。锁不适宜的锁的设置,导致线程阻塞,性能下降。死锁,线程之间交叉调用资源,导致死锁,程序卡住。服务器硬件的性能瓶颈top,free, iostat和vmstat来查看系统的性能状态......

2019-09-23 22:28:41 292

原创 MySQL(五):索引

一. 索引是什么    MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。可以得到索引的本质:索引是数据结构。你可以简单理解为“排好序的快速查找数据结构”。    索引的目的在于提高查询效率,可以类比字典,如果要查“mysql”这个单词,我们肯定需要定位到m字母,然后从下往下找...

2019-09-22 17:28:46 166

转载 MySQL(三):存储引擎

一. 查看命令#看你的mysql现在已提供什么存储引擎:mysql> show engines;#看你的mysql当前默认的存储引擎:mysql> show variables like '%storage_engine%';二. 各个引擎简介1、InnoDB存储引擎    InnoDB是MySQL的默认事务型引擎,它被设计用...

2019-09-21 23:28:42 161

原创 MySQL(二):逻辑架构

一. 总体概览二. MySQL的分层架构说明    和其它数据库相比,MySQL有点与众不同,它的架构可以在多种不同场景中应用并发挥良好作用。主要体现在存储引擎的架构上,插件式的存储引擎架构将查询处理和其它的系统任务以及数据的存储提取相分离。这种架构可以根据业务的需求和实际需要选择合适的存储引擎。连接层最上层是一些客户端和连接服务,包含本地so...

2019-09-21 18:48:46 172

原创 MySQL(一):Linux下的RPM方式安装

一. 准备工作官网下载地址:https://dev.mysql.com/downloads/mysql/下载server包和client包,我这边是通过ftp上传到Linux服务器的/opt目录下。检查工作检查当前系统是否安装过mysql-- 执行安装命令前,先执行查询命令rpm -qa|grep mysql-- 如果存在mysql-libs的旧版本包如下:-- ...

2019-09-21 17:37:33 192

原创 封装自己的Mybatis插件

import com.baomidou.mybatisplus.annotation.IdType;import com.baomidou.mybatisplus.annotation.TableId;import com.baomidou.mybatisplus.annotation.TableName;import com.zzxypm.base.BaseEntity;i...

2019-09-20 10:59:51 236

原创 MySQL(四):JOIN查询

一. 七种JOIN图解二. 数据模拟测试CREATE TABLE `t_dept` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `deptName` VARCHAR(30) DEFAULT NULL, `address` VARCHAR(40) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=INNODB AUT...

2019-09-19 23:54:53 195

原创 深度剖析池化技术内幕---高性能底层组件探秘

没有用到连接池组件:

2019-08-18 17:38:37 165

原创 设计模式---策略模式

一. 概述策略模式(Strategy Pattern)中,定义算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。这算法体现了几个设计原则:第一、把变化的代码从不变的代码中分离出来;第二、针对接口编程而不是具体类(定义了策略接口);第三、多用组合/聚合,少用继承(客户通过组合方式使用策略)。原理类图:从上图可以看到,客户context 有成员...

2019-07-21 17:27:53 162

原创 设计模式---状态模式

一. 概述状态模式(State Pattern):它主要用来解决对象在多种状态转换时,需要对外输出不同的行为的问题。状态和行为是一一对应的,状态之间可以相互转换。当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类。原理类图:Context 类为环境角色, 用于维护State实例,这个实例定义当前状态State 是抽象状态角色,定义一个接口封装与Conte...

2019-07-21 16:42:49 168

原创 设计模式---解释器模式

一. 概述在编译原理中,一个算术表达式通过词法分析器形成词法单元,而后这些词法单元再通过语法分析器构建语法分析树,最终形成一颗抽象的语法分析树。这里的词法分析器和语法分析器都可以看做是解释器。解释器模式(Interpreter Pattern):是指给定一个语言(表达式),定义它的文法的一种表示,并定义一个解释器,使用该解释器来解释语言中的句子(表达式)。应用场景• 应用可以将一个需要解...

2019-07-20 19:39:48 172

原创 设计模式---备忘录模式

一. 概述备忘录模式(Memento Pattern)在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。可以这样理解备忘录模式:现实生活中的备忘录是用来记录某些要去做的事情,或者是记录已经达成的共同意见的事情,以防忘记了。而在软件层面,备忘录模式有着相同的含义,备忘录对象主要用来记录一个对象的某种状态,或者某些数据,当要做回...

2019-07-20 16:06:19 261

空空如也

空空如也

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

TA关注的人

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