自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

编码之旅

爱学习,喜欢搞技术,不盲从

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

原创 变更通知在开源SpringBoot/SpringCloud微服务中的最佳实践

1.从数据变化讲起,对比分析了各种数据交互方式,重点突出了变更通知的各种开源消息中间件;2.在微服务架构中,需要业务场景来分析,一般要从已有的业务架构中选取;如果有Redis,建议优选Redis;3.Kafka/RocketMQ/RabbitMQ/ActiveMQ则非常适合可靠性高、消息量大的订阅通知场景;4.如果是SpringCloud架构,则建议基于注册中心来选取配置中心,如:Apollo/SpringCloud-Config/Nacos;

2023-08-18 10:08:35 959

原创 限流在不同场景的最佳实践

网上的很多资料,要么在介绍限流算法、要么就在讲限流实现;要么只关注开源的Sentinel是怎么做限流的,要么只关注业务逻辑中的redis限流是怎么做的……很少有人把各种限流的业务场景讲清楚;前面介绍了熔断降级和限流的开源实践,里面加了太多开源代码的前置条件,阅读起来可能不那么顺畅,现在想抛开开源框架,单独讲讲限流在不同场景的最佳实践。

2023-08-10 20:28:15 285

原创 从单体到SpringBoot/SpringCloud微服务架构无感升级的最佳实践

服务的兼容无感升级是非常常见的现实诉求,因为大多情况下,都是先有了系统,并且在持续迭代中,架构严重腐化,无以为继,不得不升;大多公司的业务都具有相似性,可以采用泛型+业务抽象的方式,把大部分通用能力、公共业务流程给固化下来,可以提升编码质量,同时减少业务开发工作量;上述沉淀的代码架构图中,其组件部分基本上是和业务无关的,有较强的通用性;其微服务部分的架构设计,重点考虑了业务安全和高性能,如:鉴权和认证分离、数据读写分离、缓存及刷新机制等,还考虑了系统后续的升级改造,尽量不把自己绑死在某个中间件上;

2023-07-09 23:53:23 758

原创 异常处理在开源SpringBoot/SpringCloud微服务框架的最佳实践

开源微服务框架基本上涉及到了SpringCloud的大部分技术栈,通过对SpringBoot参数校验异常、Sentinel 3种场景的熔断降级和限流异常、Redis限流异常、Spring-Authorization-Server过滤器认证异常、SpringCloud-Gateway过滤器校验异常,以及SpringBoot全局异常、Spring-Authorization-Server全局异常、SpringCloud-Gateway全局异常的分析和最佳实践,也可以帮助大家站在更高的位置,更好更全面的思考问题。

2023-07-06 22:25:18 1124 1

原创 熔断降级与限流在开源SpringBoot/SpringCloud微服务框架的最佳实践

1.本文从0开始讲解什么是熔断降级与限流,也逐步分析了怎么去做的方法论,介绍了各种场景下的使用,而且还高效优雅地实现落地,内容非常全面;2.对熔断降级和限流Hystrix/Resilience4j/Sentinel/Redis/Guava做了技术选型和业务选型对比,Sentinel做非功能的熔断降级与限流,redis做业务客户和渠道的多维度限流;3.详细介绍了网关和业务服务的熔断限流的实现与验证,还重点介绍了业务服务的客户限流和渠道限流设计、实现与验证;

2023-07-02 08:51:54 1629

原创 Java图片压缩/加密处理实践

1.结合多年的金融场景项目经验,讲解了图片加密、图片压缩、图片转换的业务处理过程;2.重点讲解了基于coobird:thumbnailator的图片压缩实现逻辑,非常实用和高效;

2023-06-26 18:53:14 1388

原创 Java二进制及中文转码和校验

1.结合多年的项目经验,从Java基本数据类型char/byte讲起,介绍了char、二进制之间的关系,尤其是二进制和十六进制、二进制和Base64之间的转换;2.介绍了文件魔数和协议魔数,并提供了相关实现和比较时的注意事项;3.介绍了UTF-8对应的unicode关系;在GB18030-2022国标实行前,重点讲解了中文转换的实现及验证逻辑、中文字符乃至中文名字校验的实现及验证过程;

2023-06-23 21:45:53 1199

原创 OAuth2在开源SpringBoot/SpringCloud微服务框架的最佳实践

1.结合多年项目经验,介绍了Java开源微服务解决方案的OAuth2服务的权限分离设计思路及实现;2.JwtToken是权限分离的非常好的载体,重点阐述了如何对spring-authorization-server/spring-security-oauth2-authorization-server框架做扩展,目的是实现基于接口/web页面账号密码认证的统一JwtToken和刷新JwtToken,既可以用作接口鉴权,又可以达成会话管理的效果,这样开源的认证服务就可以通用于各种业务场景,减少代码开发的工作

2023-06-20 09:46:56 1507 6

原创 链路追踪在开源SpringBoot/SpringCloud微服务框架的最简实践

1.对比了当下主流的链路追踪技术,系统介绍了本开源微服务应用链路追踪技术zipkin的解决方案;2.灵活运用了SpringCloud-seluth框架,通过Netty/Tomcat扩展点解决了Access Log带上TraceId,并通过MDC技术技术丰富了特殊场景下的处理逻辑;3.通过切面,解决了SpringCloud-Gateway 过滤器间链路ID丢失的问题;

2023-06-16 21:30:52 3384 1

原创 加解密在开源SpringBoot/SpringCloud微服务框架的最佳实践

1.结合多年项目经验,介绍了开源加解密算法在开源SpringBoot/SpringCloud接口微服务解决方案中的最佳实践;2.模拟实现了加密机,使用加密机加密Jasypt,Jasypt加密加密器,加密器对业务接口进行加密,同时也考虑并支持了缺失部分链路的情况;3.讲解了加密机数据加密、加密器针对不同用户采用不同秘钥的应用场景及实现,前置网关应该关注安全,业务模块应该关注业务;4.支持商密和三级等保,既确保了安全,又把性能影响降到最低,而且是仅通过注解和配置开箱即用;

2023-06-15 08:58:42 2425 22

原创 Json在开源SpringBoot/SpringCloud微服务框架中的最佳实践

1.本文结合实际项目经验,介绍了各种真实业务场景,并通过springboot框架进行扩展,并全部开源;2.在springboot-web/springboot-webflux中优雅地完成了Json的接口驼峰转换、接口脱敏、日志脱敏等框架设计和代码实现;3.通过案例介绍,使阅读的朋友们不仅可以了解实现原理及过程,还可以借助本代码框架,仅通过配置就可以达成商业应用。

2023-06-12 08:46:02 1498

原创 Java开源接口微服务代码框架

在工作的过程中,总结了一套相对来说比较通用的架构设计思路、一套通用代码框架,该框架经过了团队的不断实践迭代,并逐步形成了一个不错的微服务解决方案。当然这主要是偏向特定领域的微服务解决方案,不可能通用于所有业务场景;本方案的特点是非常关注业务安全和业务的可扩展性;

2023-06-05 00:49:10 1148

原创 6.Java开源SM2非对称加密算法实现

- 支持RSA(1024/2048/3072/4096)/AES(128/192/256)/SHA-1/SHA-256/SHA-512/SHA-3/MD5/PGP/HMAC-SHA256/HMAC-SHA512等国际通用的加密算法;- 支持SM2/SM3/SM4/HMAC-SM3等国密算法;- 还支持国密和国际加密算法的统一抽象与封装,并封装了国际/国密组合使用的一些实践;- 本加解密组件基于BouncyCastle做了二次封装,并已开源,期待着有一天我们也有自己的国产的更优实现;

2023-05-29 09:22:58 1820

原创 5.Java开源RSA非对称加密算法实现

- 支持RSA(1024/2048/3072/4096)/AES(128/192/256)/SHA-1/SHA-256/SHA-512/SHA-3/MD5/PGP/HMAC-SHA256/HMAC-SHA512等国际通用的加密算法;- 支持SM2/SM3/SM4/HMAC-SM3等国密算法;- 还支持国密和国际加密算法的统一抽象与封装,并封装了国际/国密组合使用的一些实践;- 本加解密组件基于BouncyCastle做了二次封装,并已开源,期待着有一天我们也有自己的国产的更优实现;

2023-05-28 09:33:32 886

原创 4.Java开源RSA/SM2非对称加密算法对比介绍

- 支持RSA(1024/2048/3072/4096)/AES(128/192/256)/SHA-1/SHA-256/SHA-512/SHA-3/MD5/PGP/HMAC-SHA256/HMAC-SHA512等国际通用的加密算法;- 支持SM2/SM3/SM4/HMAC-SM3等国密算法;- 还支持国密和国际加密算法的统一抽象与封装,并封装了国际/国密组合使用的一些实践;- 本加解密组件基于BouncyCastle做了二次封装,并已开源,期待着有一天我们也有自己的国产的更优实现

2023-05-26 21:04:23 2245

原创 3.Java开源AES/SM4/3DES对称加密算法的验证说明

1.基于Java的BouncyCastle开源库做了二次封装,已开源。支持AES(256/192/128)/SM4/3DES加密算法;2.支持上述秘钥长度与ECB/CBC/CTR/CFB工作模式以及NoPadding/PKCS5Padding填充算法的组合验证;

2023-05-22 21:39:40 778

原创 2.Java开源AES/SM4/3DES对称加密算法介绍及其实现

1.支持AES(256/192/128)/SM4/3DES对称加密算法,并提供统一抽象设计;2.对称加密算法支持ECB/CBC/CTR/CFB工作模式,并支持与填充模式NoPadding/PKCS5Padding的随机组合;

2023-05-22 19:45:28 1338

原创 1.Java开源RSA/AES/SHA1/PGP/SM2/SM3/SM4加密算法介绍

- 支持RSA(1024/2048/3072/4096)/AES(128/192/256)/SHA-1/SHA-256/SHA-512/SHA-3/MD5/PGP/HMAC-SHA256/HMAC-SHA512等国际通用的加密算法;- 支持SM2/SM3/SM4/HMAC-SM3等国密算法;- 还支持国密和国际加密算法的统一抽象与封装,并封装了国际/国密组合使用的一些实践;- 本加解密组件基于BouncyCastle做了二次封装,并已开源bq-encryptor,期待着有一天我们也有自己的国产的更优实现

2023-05-22 08:18:55 1374

原创 炸金花大小比较算法(Java版)

炸金花大小比较算法,实现算法特点:1)采用面向对象方式实现,分别构造牌面值的对象(枚举)、牌的花色对象(枚举)、玩家三张牌的类型(枚举,如豹子、同花顺等)、一张扑克牌对应的对象(一张牌有一个牌面值属性、一个花色属性)、玩家对象(玩家有3张扑克牌,牌的类型属性);2)主要是通过Java Comparable 接口的compareTo实现比较功能,很方便对玩家手中的牌进行排序(调用Collections.sort方法实现),同事避免了很多if else 比较;

2014-06-17 00:10:07 25928 2

原创 蜂窝小区最短距离实现 (数学归纳法+广度优先算法)

题目描述:如图:由正六边形组成的蜂窝小区中,每个正六边形的编号也如图所示。求任意2点间的距离。(规定最大编号不超过100000)分析:1、求2点间的距离,第一印象就想到了广度优先算法(广度优先算法简单介绍:如图中的1点找编号为9的点时,可以第一次广度优先找到第二圈的所有元素,第二圈的元素再广度优先可以找到了9号点,所以必有一点可以从1点到9点,且距离为2)。但广度优先算

2013-05-28 00:32:21 19849 17

原创 营救公主(Java实现A*算法解决迷宫问题)

很早就听说过A*算法,据说在寻路径时,是一种比较高效的算法。但是一直没有搞清楚原理。这段时间刚好有个营救公主的例子:题描述 :公主被魔王抓走了 , 王子需要拯救出美丽的公主 。 他进入了魔王的城堡 , 魔王的城堡是一座很大的迷宫 。 为了使问题简单化 , 我们假设这个迷宫是一个 N*M 的二维方格 。 迷宫里有一些墙 , 王子不能通过 。 王子只能移动到相邻 ( 上

2013-05-20 01:40:51 8333 4

原创 五子棋落子游戏

题目要求:假设已有15*15的五子棋棋盘(0-14),黑白子对下,现要求能够实现落子接口:1)落子成功时,如果当前颜色的棋子胜利(有5子连成一条线),黑子胜利返回2,白子胜利返回3,没有人胜利时,返回落子成功1;2)黑白子顺序混乱、或者重复落子等异常返回-1;分析:1、需要实现保存所下所有棋子的数据;2、在1前提下,能够判定所下棋子是否有5个子在一条直线上(2条

2013-05-17 01:41:22 9679 21

原创 马拦过河卒(Java实现)

一、问题描述:1、在部分的象棋棋盘(都是方格,大小可从键盘输入)中,假设卒只能向下或者向右移动,且卒在原点A(0,0)位置2、棋盘中有马(初始位置由键盘输入),马可向任意方向移动一步,包括其初始位置都是卒的禁区3、约定B点不同于A点,且不同于马的初始位置;4、求卒移动到棋盘最大的终点位置B(m,n)的所有路径数;如图所示:假设马在其中标注的中心黑点处,则其所有标注的黑点都为

2013-05-15 23:35:24 3021 1

原创 卒的移动问题(JAVA)

一、问题描述:1、在部分的象棋棋盘(都是方格,大小可从键盘输入)中,假设卒只能向下或者向右移动,且卒在原点A(0,0)位置,求卒移动到棋盘最大的终点位置B(m,n)的所有路径数;2、约定B点不同于A点;二、思路:1、通过排列组合方法解题;2、通过面向对象构造模型解;我选择使用Java语言实现第二种。1、第一次直接使用迭代实现,发现效率极其低下,在棋盘较大

2013-05-14 00:21:34 1931

原创 实现二叉树(包括前序、中序、后序遍历算法)

以前没有记笔记的习惯,结果发现曾经实现过的东西居然都忘了,现在又需要花时间去看,去写,虽然又有所收获,但是毕竟在走重复的路。从今天起,开始打路标,为了以后少走回头路:)还请高手多指点,不胜感激!用Java语言实现二叉树:1、首先定义一个二叉树节点类:实现1)向某个节点下面添加节点方法;2)从某个节点前序遍历所有树节点;3)从某个节点中序遍历所有树节点;4

2012-05-21 00:45:54 2023 2

原创 Docker学习(for MacOS)

为了彻底打通微服务各个环节,需要了解并掌握微服务容器化的整个过程。本篇文章从docker环境构建到成功运行应用,分别从最原始到模板方式部署3种方式讲了下操作流程及命令,可以进一步加深理解。另外也补充了下,Mac网络的不同设置,纠正了下前面博客中的一些小错误。

2023-04-02 12:02:43 307

原创 resilience4j使用指南

通过自定义的降级方法去执行try {resilience4j服务降级熔断是一套较完整的方法,适用于SpringWebFlux场景(如:SpringCloud-Gateway)和SpringMvc场景;在SpringCloud-Gateway的使用过程中异常简洁,如果再加上nacos的配置能力,则随时可以在路由中更改服务降级配置;服务降级不限于Rest请求,基本上任意的方法上都可以做服务降级;

2023-03-30 16:15:44 2334

原创 Nacos-Server最新版替换Postgres指导

基于2023.03最新的nacos 2.2.1稳定版替换mysql为postgres数据库

2023-03-26 17:35:40 883

原创 我的书单(持续更新)

我的2020年书单编号书名作者完成度完成次数完成时间1大型网站技术架构:核心原理与案例分析李智慧100%22020/01/252020/03/012Effective JavaJoshua Bloch100%12020/03/053从零开始学架构,照着做,你也能成为架构师李运华80%0-4分布式服务架构原理与实践李林...

2020-03-06 16:46:04 494

原创 Springboot+Shiro优雅实战•加解密_2

springboot + shiro + AES256 + RSA1024

2020-01-17 17:41:56 318

原创 Vue.js实战——开源H5跨移动平台的多媒体API_20

1. 主要功能:获取经纬度、拍照、录音、获取指南针等多媒体功能;2. 支持的平台包括:Mobile Chrome 浏览器、Android App、IOS App(未实现)、微信公众号、微博公众号等平台;

2020-01-14 18:03:26 553

原创 Vue.js实战——Vue+ElementUI bug定位及按需引用压缩优化_19

一、问题使用ElementUI后,相关图标出不来;在项目中部分页面的css中使用了backgroud-image:url(xxx/xxx.jpg),在生产环境中不显示;ElementUI体积过大,导致Webpack打包后的js有1M多;二、目标找出原因,解决该bug;找到替代方案,方便兼容几种类型的图片加载;ElementUI改成按需加载;三、方案在DEV模式下,访问项...

2019-11-15 08:50:20 468

原创 Excel函数解决棘手数据对比问题

一、问题在分析数据的过程中,需要把自测的数据和官方的数据对标。验证发现,有的时间只有官方有数据,有的时间只有我们自测的数据,相当尴尬;官方数据:自验数据:二、思路以前使用过excel处理过表格,对excel函数略有了解;使用vlookup函数可以把两个表格的数据汇总到一起比较;三、步骤编写VLOOKUP函数:=VLOOKUP(A2,Sheet2!A2,Sheet2!A...

2019-10-31 18:20:19 280

原创 Windows下Kafka集群环境搭建及代码验证

导读一、背景二、分析三、步骤四、验证五、总结六、参考一、背景kafka应用场景很多,比如:日志收集、消息系统、大数据流式处理等;项目中刚好需要消息中间件、Spark流式处理,所以非常有必要深入了解下kafka原理与运行机制;二、分析先搞清楚Kafka的部署结构(物理结构):kafka由Kafka中间件(独立安装部署)、生产者、消费者三部分组成;Kafka中间件支持集群安装部署,生...

2019-10-30 15:01:36 908 1

原创 KeyTool证书生成与OpenSSL转换

导读一、证书生成方式二、证书工具安装及使用1. KeyTool安装2. OpenSSL安装三、证书生成过程四、总结一、证书生成方式使用Java JDK自带的KeyTool工具;使用OpenSSL生成;二、证书工具安装及使用1. KeyTool安装JDK自带的KeyTool是随着JDK安装的。只要配置好JDK环境变量,KeyTool就可正常使用;2. OpenSSL安装鉴于...

2019-10-30 08:29:20 635

原创 Windows 10下搭建Hadoop 3.x环境

目录一、背景二、计划三、步骤四、总结五、参考一、背景后续业务可能涉及大数据,虽说Hadoop权威指南书看了大半,但是后续比较多的代码示例,如果不自己亲手搭下环境,就没法去深入理解这些原理和经验,直白点就是看不懂咯;之前其实有搭过CDH环境,但是觉得这样对Hadoop了解不够深入,所以刚好借此机会先把Hadoop的原理和机制搞清楚。二、计划之前的CDH集群是在个人MacPro中虚拟出...

2019-10-24 10:21:44 1761

原创 获取今天0时0分0秒时间戳的方法

一、背景项目中经常会涉及时间的处理及持久化,而时间是有时区和夏令时的;而Web项目中,客户端(浏览器操作系统)有1套时区和夏令时,服务端(操作系统)也有,数据库还有,java也有。他们记录的时间显示出来,与用户想看到的不一定匹配;基于上述2点考虑,时间必须统一到一个地方处理:就在Java后端处理,其它地方全部使用UTC跟后台交互;展示时,再转成对应时区的时间处理。二、问题解决上...

2019-09-30 10:44:42 7869 1

原创 Controller与Filter如何交替使用

Java Web中Url请求(Springmvc/Springboot中一般使用Controller)会被Filter拦截,如果要做Url跳转该怎么办?如果要部分情况下Url跳转,部分情况下响应值该怎么办?如果全部响应值,又需要Url跳转又该怎么办?本文就是讲述如何做上述几种业务场景下的处理过程

2019-09-28 16:11:43 1720

原创 Java Web国际化及乱码解决方案

一、背景项目过程中,难免需要提示中文或者英文提示信息,有了国际化,方便切换;实际项目中,一般都不允许直接把中文提示信息写在代码中,避免其他国家程序猿看不懂(国际化公司和开源项目涉及),也容易招来其他国家的恶意攻击。比如菊花公司把中文写在代码中就算成非常严重的违规。二、目标在项目中引入简单易用的国际化框架,方便同事使用。三、步骤Java SDK自带国际化API:java.uti...

2019-09-27 11:20:23 1938 1

原创 Springboot+Shiro优雅实战•计划概述_1

一、目标使用springboot搭建一个微服务基本框架;使用自定义加解密算法对所有账号密码进行加密存储(包括数据库账号密码、用户密码等);使用shiro作为rbac权限集成框架,同时支持账号密码登录和微信认证登录,且优雅地使用多FormAuthenticationFilter、多Realm分别进行认证;使用自定义操作日志框架,方便日后进一步扩展;给出所有源码,以感谢所有热情分享技术的网...

2019-09-24 23:13:09 131

空空如也

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

TA关注的人

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