自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

猴子哥哥的博客

学习交流

原创 Protobuf序列化

Protobuf是Google出品的一款编解码框架。 1、优点:   1)谷歌内部长期使用,成熟度高   2)跨语言,支持C++、Java、Python、JavaScript、PHP、Ruby、C#、Objective-C等   3)码流小   4)性能高 2、缺点:   1)pojo生成方式增加...

2020-05-17 11:51:02 29 0

原创 使用jclasslib修改字节码/源码
原力计划

  查看源码很简单,一些常用IDE里如idea、eclipse都提供了查看class文件源码的功能,虽然跟源码有些出入(解语法糖等),但功能实现上是一致的,且比源码更贴近于JVM运行时的情况。   有时候我们需要修改源码以满足使用要求,对于java代码生成的字节码重新源码就比较简单了,一种方式是继...

2020-05-05 11:38:31 191 0

原创 虚拟机字节码指令表

本文字节码指令图片来源于《深入理解Java虚拟机》第2版

2020-05-04 10:41:17 46 0

原创 gateway url适配

由于版本迭代,有的时候需要做老接口的兼容适配,有很多种方式,比如在nginx配置路由规则,在网关配置路由规则,本篇通过使用反射的方式在网关层全局过滤器中重写request请求的方式实现url适配。 import lombok.extern.log4j.Log4j2; import org.apac...

2020-05-03 13:28:05 89 0

原创 网关支持跨域

一、zuul跨域:配置方式 application.yml zuul: sensitive-headers: Access-Control-Allow-Origin ignored-headers:Access-Control-Allow-Origin,H-APP-Id,Token,APPTo...

2020-05-03 13:18:14 57 0

原创 java序列化框架码流、性能对比

本文对序列化框架:JDK、Kryo、Hession、FST、Fastjson、Gson进行对比,对比维度包括序列化后码流大小、10w次序列化反序列化性能耗时。 1、依赖jar包 <dependency> <groupId>org.projectlombok<...

2020-04-25 11:57:34 62 0

转载 ChannelPipeline

Netty4 Netty是一个和MINA类似的Java NIO框架,目前的最新版本是4.0.13,这两个框架的主要作者好像都是同一个韩国人。 Channel Channel是Netty最核心的接口,一个Channel就是一个联络Socket的通道,通过Channel,你可以对Socket进行各种操...

2020-04-22 09:37:32 31 0

原创 将微服务运行在Docker上

 将微服务运行在Docker上,首先要把服务制作成镜像,然后将镜像推送到公有仓库或私有仓库(可选步骤),最后像使用其他镜像的方式一样,使用我们的镜像。  本文将展示三种将微服务运行在Docker上的方式:1)通过Dockerfile;2)通过maven插件;3)通过Docker Compose 一...

2020-03-08 17:21:51 60 0

原创 springboot集成rocketmq

  本文是springboot集成rocketmq的入门篇,主要介绍单机环境下安装rocketmq,并集成到springboot框架中,实现字符串类型消息的生产和消费。   1)高可用集群部署方案请参考 待更新。。。   2)更多使用方式请参考 待更新。。。 一、下载、安装、启动 1、下载 ht...

2020-02-17 22:22:07 71 0

转载 使用Docker安装Nginx

本文主要讲述使用docker安装nginx镜像,并将docker内文件挂载到物理机上 1、下载Nginx镜像 docker pull nginx 2、本地创建挂载文件夹 /Users/zhanghao/data/nginx/conf/ /Users/zhanghao/data/nginx/con...

2020-01-30 23:27:45 76 0

原创 工作四年经验总结

  今年的年终总结做的比较迟,这个月发生了好多事:搬家、找工作、带娃过年、肺炎疫情、科比离开,虽然一直坚信唯一不变的是变化,但当很多事情同时发生时,还是需要一点时间来适应。 2019年总结 1、工作上:由于可控和不可控的一些因素,今年的两个小目标都没有实现,不想说太多,尽全力做最好的自己,来年继续...

2020-01-28 01:10:50 243 1

原创 如何设计一个秒杀系统

1、问题抽象:并发读、并发写、稳准快 2、4要1不要:数据要尽量少、请求数要尽量少、路径要尽量短、依赖要尽量少(服务分级)、不要有单点 3、秒杀思路:秒杀系统独立部署、热点数据进缓存、答题环节、动静分离、本地缓存、限流 4、动静分离  1)做法:   a、把静态数据缓存到离用户最近的地方:浏览器、...

2019-11-20 21:54:27 88 0

原创 Kafka安装及使用

本示例使用docker安装,springboot使用 1、安装zookeeper(示例中单点) 1)下载:docker pull wurstmeister/zookeeper 2)安装:docker run -d --name zookeeper -p 2181:2181 wurstmeister...

2019-10-07 11:36:11 96 0

原创 延迟队列浅析

        早期需要延迟处理的业务场景,更多的是通过定时任务扫表,然后执行满足条件的记录,具有频率高、命中低、资源消耗大的缺点。随着消息中间件的普及,延迟消息可以很好的处理这种场景,本文主要介绍延迟消息的使用场景以...

2019-09-23 20:25:58 496 0

原创 Feign实战

1、Feign   是一个声明式、模版化的HTTP客户端,有助于更便捷、优雅地调用HTTP API。在Spring Cloud中自动的为Feign整合了Ribbon和Eureka,使用时创建一个接口并添加@FeignClient即可 2、使用Demo   1)添加Feign依赖 <!-- F...

2019-06-15 09:48:14 289 0

原创 Ribbon实战

1、Ribbon简介 Ribbon是Netflix发布的负载均衡器,配合Eureka使用时,可自动从Eureka Server获取服务提供者地址列表,并基于负载均衡算法,请求其中一个服务提供者实例 2、使用Demo 1)引入Ribbon依赖 <dependency> <gro...

2019-06-10 22:24:17 118 0

转载 ActiveMQ失效转移(Failover)

本文的ActiveMQ都基于5.10版本,参考了ActiveMQ官方文档:http://activemq.apache.org/failover-transport-reference.html。 集群是个比较广泛的概念,它有多种形式,关于消息服务的集群,大概分为Consumer集群(消费者集...

2019-05-13 20:14:34 614 2

原创 ActiveMQ基于JmsTemplate的持久化

持久化需要满足两个条件:   1)消息服务开启了持久化功能;   2)生产者发送持久化消息 注:笔者建议MQ服务开启持久化功能,生产者根据消息内容的重要性、量级来合理使用持久化或不使用持久化 本文主要描述,消息服务的默认持久化功能及存储,不涉及定制存储方式。本文描述JmsTemplate的发送消息...

2019-05-11 11:29:35 304 0

原创 Eureka实战

一、简介 1、微服务架构中关键组件:服务提供者、服务消费者、服务发现组件 2、服务发现组件的功能:   1)服务注册表:用来记录各个微服务的信息   2)服务注册:指微服务在启动时,将自己的信息注册到服务发现组件的过程   3)服务发现:指查询可用微服务列表及其网络地址的机制   4)服务...

2019-05-03 13:07:01 212 0

原创 SpringCloud与SpringBoot版本兼容性

  Spring Cloud是在Spring Boot基础上构建的,用于快速构建分布式系统的通用模式工具集,适合在Docker或PaaS上部署,又叫云原生应用。(云原生指面向云环境的软件架构) 一、SpringCloud版本 1、命名规则:英文单词 RELEASE 或 英文单词 SRX 2、解释...

2019-05-01 14:27:01 781 0

转载 Maven中的SNAPSHOT版本和Release版本

Maven中建立的依赖管理方式基本已成为Java语言依赖管理的事实标准,Maven的替代者Gradle也基本沿用了Maven的依赖管理机制。在Maven依赖管理中,唯一标识一个依赖项是由该依赖项的三个属性构成的,分别是groupId、artifactId以及version。这三个属性可以唯一确定一...

2019-03-09 08:58:55 463 0

原创 Spring Integration

&nbsp;&nbsp;&nbsp;&nbsp;系统集成Spring Integration提供了基于Spring的EIP(Enterprise Integration Patterns,企业集成模式)的实现,主要解决不同系统之间的交互问题,通过异步消息驱动来达到系...

2019-02-16 13:02:45 1251 0

原创 Spring Batch

Spring Batch是用来处理大量数据操作的一个框架,读取大量数据然后进行一定处理后输出成指定的形式。 组成部分: 1)JobRepository:用来注册Job的容器 2)JobLauncher:用来启动Job的接口 3)Job:要实际执行的任务,包含一个或多个Step 4)Step:执行步...

2019-02-16 10:35:22 90 0

转载 package-info类

Java中有一个特殊的类:package-info类,它是专门为本包服务的。 一、特殊性 1、它不能随便被创建 在一般的IDE中,Eclipse、package-info等文件是不能随便被创建的,会报“Type name is notvalid”错误,类名无效。在Java变量定义规范中规定如下字符...

2019-02-13 12:19:57 197 0

原创 Spring Cache

Spring对缓存的支持,org.springframework.cache.CacheManager是Spring提供的各种缓存技术抽象接口,org.springframework.cache.Cache接口包含缓存的各种操作(增删查) 1、spring 定义的CacheManager实现 ...

2019-02-13 11:33:30 80 0

原创 WebSocket

一、双向通信常用解决方案 常用单向通信,前端发出请求,服务端作出响应。很多场景下需要服务端主动向客户端发出通知,常见解决方案: 1、轮询 1)简单轮询:间隔固定时间,向服务端发送请求来刷新页面数据。缺点:建立连接,资源消耗 2)变间隔轮询:间隔不固定,若返回数据无变化,则延长请求间隔时间,反之有变...

2019-02-12 11:28:16 109 0

原创 RSA加密解密

一、简介 RSA加密算法是一种非对称加密算法,基于公钥加密私钥解密和私钥加密公钥解密两种使用方式。 RSA算法基于一个十分简单的数论事实:将两个大质数相乘十分容易,但是想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。 其中:E(Encryption), D(Decryptio...

2019-01-26 09:39:31 549 0

转载 MySQL order by和limit混用的坑

在Mysql中我们常常用order by来进行排序,使用limit来进行分页,当需要先排序后分页时我们往往使用类似的写法select * from 表名 order by 排序字段 limt M,N。但是这种写法却隐藏着较深的使用陷阱。在排序字段有数据重复的情况下,会很容易出现排序结果与预期不一致...

2019-01-23 23:28:24 940 0

原创 scp命令

1、scp -P 远程端口号 本地路径 登录用户@服务器地址:服务器保存路径 例:scp -P 1024 /Users/a.txt zhanghao@server:/Home/data/a.txt 2、chmod 修改文件的权限 3、mv 移动到目标路径 注:若登录用户对目标路径有操作权限,则可省...

2019-01-05 16:09:55 6407 0

原创 工作三年经验总结

一、职业规划 &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbs...

2019-01-01 14:21:10 1181 6

原创 Docker基础

一、Docker简介 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。 Docker可将应用程序和基础设施层隔离,并且能将基础设施当作程序一样进行管理。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何...

2018-12-11 23:35:43 131 0

原创 SpringBoot配置SSL

一、概念 1、为什么要使用证书 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;对数据进行签名(加密)是我们在网络中最常见的安全操作。签名有双重作用,作用一就是保证数据的完整性,证明数据...

2018-11-18 21:00:00 2199 0

原创 类型安全配置:@ConfigurationProperties

@ConfigurationProperties可以看作@Value的升级版,通过该注解可将配置文件中的属性和一个Bean关联,从而实现类型安全的配置 一、添加依赖包 &amp;lt;dependency&amp;gt; &amp;lt;groupId&am...

2018-11-17 08:57:05 382 0

原创 Spring事务详解

一、事务失效原因 1、如使用mysql且引擎是MyISAM,则事务会不起作用,原因是MyISAM不支持事务,可以改成InnoDB 2、如果使用了spring+mvc,则context:component-scan重复扫描问题可能会引起事务失败 3、 @Transactional 注解开启配置...

2018-08-22 17:57:19 159 0

原创 LoadRunner使用总结

一、下载安装 // TODO 待补充 二、主页面说明 三、使用总结 1、测试场景设计(根据自己的需求设计场景:略) 2、清空数据(若不影响也可不清空) 3、初始化数据(根据自己的需求初始化依赖的数据:略) 4、写测试脚本: 1)创建脚本文件 2)编写脚本 Actio...

2018-07-15 17:01:43 465 0

原创 JVM性能监控

一、JDK命令行工具 bin目录下的命令行工具,是jdk/lib/tools.jar类库的一层薄包装。tools.jar只能运行于Hotspot、J9、JRocket等从Sun购买了JDK的源码License的虚拟机。JDK1.6及以上版本,默认开启了”-Dcom.sun.management....

2018-07-15 16:55:48 182 0

原创 BigDecimal

一、引言   float和double类型的主要设计目标是为了科学计算和工程计算。他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的。然而,它们没有提供完全精确的结果,所以不应该被用于要求精确结果的场合。但是,商业计算往往要求结果精确,这时候BigDecima...

2018-07-13 10:24:01 147 0

原创 JVM垃圾收集器

一、常见垃圾收集算法 1、标记-清除算法:首先标记出需要回收的对象,在标记完成后统一回收所有被标记的对象 2、复制算法:将可用内存按容量分为大小相等的两块,每次只使用其中的一块。当这一块的内存用完了,就将还存活着的对象复制到另外一块上面,然后再把已使用过的内存空间一次清理掉 3、标记-整理算...

2018-07-08 10:43:37 926 0

转载 MyBatis choose标签

有时候我们并不想应用所有的条件,而只是想从多个选项中选择一个。而使用if标签时,只要test中的表达式为 true,就会执行 if 标签中的条件。MyBatis 提供了 choose 元素。if标签是与(and)的关系,而 choose 是或(or)的关系。 choose标签是按顺序判断其内部w...

2018-06-29 16:23:48 381 0

原创 SpringDao异常

Spring的DAO框架没有抛出与特定技术相关的异常 例如SQLException或HibernateException,抛出的异常都是与特定技术无关的org.springframework.dao.DataAccessException类的子类,避免系统与某种特殊的持久层实现耦合在一起。Dat...

2018-06-27 20:32:30 387 0

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