自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(247)
  • 收藏
  • 关注

原创 apisdk-starter自动装配的思路与应用

首先定义开发者定义的开放接口声明为原始类,javassist生成的类是增强类。有了原始类和增强类的映射关系后,接下来要解决运行时,如何查找增强类的代理对象,如何构建SdkContext请求上下文的问题。要解决这个问题,就要在原始类的代理对象着手。以上就是apisdk-starter的整体思路,其中抽取spring aop源码是为了脱离spring容器,apisdk-starter仍然可以运行。

2023-05-12 21:12:43 600 1

原创 16进制字符串和ascii字符串转换

16进制字符串和ascii字符串转换。

2023-04-27 11:37:18 474

原创 java二方包Maven脚本

如果需要账号密码,并且配置在了settings.xml中,如下,确保id标签与-DaltDeploymentRepository第一个参数保持一致,本例中配置的isv。或者在mvn deploy后指定账号与密码。-s:使用 -s 或 --settings 参数来指定要使用的 Maven settings.xml 文件。如下图,mvn-deploy.sh就是脚本文件,把脚本放到项目的目录下。

2023-03-17 17:50:54 833

原创 设备数据包解析带小数的字节流

设备协议的燃气价格是4字节,2字节整数,2字节小数,低位在前,它的16进制数据如何表示?以数据2.06为例,说明下如何转16进制数据、如何解析16进制数据。

2023-03-16 11:17:39 463

原创 java有符号和无符号右移

在这个例子中,c是一个正数(其二进制表示的最高位是0),将c进行无符号右移操作时,高位会被填充为0,得到的结果是一个正数,其二进制表示的最高位仍然是0。在这个例子中,a是一个负数(其二进制表示的最高位是1),将a进行无符号右移操作时,高位会被填充为0,得到的结果是一个正数,其二进制表示的最高位是0。在这个例子中,c是一个正数(其二进制表示的最高位是0),将c向右移动2位时,高位会被填充为0,得到的结果是一个正数,其二进制表示的最高位仍然是0。

2023-03-13 09:37:23 1150

原创 Spring Environment拓展点

有时候,开发者需要在系统的bean初始化前,内置环境变量到Spring的Environment,下面就介绍三种环境变量生效方式。介绍前,先提供下内置环境变量到Environment的公共代码。

2023-02-27 15:34:13 144

原创 apisdk-starter自动装配组件之Spring Aop源码拓展

看这个分享的应该都用过Spring Aop,这里就不再过多介绍了它是什么了。我抽取了Spring Aop的部分源码,通过它实现请求参数可变拦截,同时apisdk离开Spring框架,仍然可以正常运行。讲拦截也好,通知也罢,大家知道是什么意思就行了,不需要纠结这个叫法。

2023-02-25 19:43:25 425

原创 apisdk-starter自动装配组件之javassist字节码

Javassist是一个开源的分析、编辑和创建Java字节码的类库,主要优点是简单,不需要了解虚拟机指令,就能动态改变类的结构,或者动态生成类。

2023-02-25 19:40:26 679

原创 apisdk-starter自动装配组件之Spring拓展点

自动装配是与Spring整合的入口Spring自定义扫描开发者声明的OpenAPIBeanDefinition修改OpenAPI声明FactoryBean用于初始化OpenAPI实例,并注册到Spring容器中

2023-02-25 19:37:38 420

原创 apisdk-starter自动装配组件简介

二次封装涉及到的技术:自定义自动装配、自定义Spring扫描、Spring IoC(FactoryBean)、JDK动态代理、aop源码拓展、javassist字节码技术等。下面简单的介绍下二开的思路及相关的技术点。自研boot启动器,主要是@Import的应用,在apisdk中是Spring自定义扫描的入口。利用Spring扫描,把开放接口的声明解析成BeanDefinition,随后由Spring进行Bean的实例化。

2023-02-25 19:26:59 669

原创 OpenFaaS介绍

云计算时代出现了大量XaaS形式的概念,从IaaS(Infrastructure as a Service)、PaaS(Platform as a Service)、SaaS(Software as a Service)到容器云引领的CaaS(Containers as a Service),再到火热的微服务架构,它们都在试着将各种软、硬件资源等抽象为一种服务提供给开发者使用,让他们不再担心基础设施、资源需求、中间件等等,在减轻心智负担的同时更好地专注于业务。

2023-02-17 17:34:55 2032

原创 Java无符号数

要将其转换为无符号 long 类型,可以使用按位与运算符和0xFFFFFFFF掩码,这将截断有符号数的符号位并将其转换为无符号数。要将其转换为无符号 int 类型,可以使用按位与运算符和0xFFFF掩码,这将截断有符号数的符号位并将其转换为无符号数。可以看出,short类型是2个字节,转无符号数时,&操作的也是2个字节的&FFFF,返回是4字节的int类型;int类型是4个字节,转无符号数时,&操作的也是4个字节的&FFFFFFFF,返回是8字节的long类型;

2023-02-16 14:25:41 4600

原创 Java的大端小端字节序

在进行网络传输时,需要进行字节序转换,将大端字节序转换成小端字节序,或将小端字节序转换成大端字节序。在计算机中,内存地址通常是按照地址递增的方式分配的,也就是说,低地址是指内存的起始位置,高地址是指内存的末尾位置。小端字节序:在小端字节序中,一个多字节数据的低位字节存储在低地址处,而高位字节存储在高地址处。也就是说,字节的排列顺序是从左到右,低位字节在前,高位字节在后。大端字节序:在大端字节序中,一个多字节数据的高位字节存储在低地址处,而低位字节存储在高地址处。这两个概念的区别在于字节存储的顺序。

2023-02-16 14:21:16 1794 1

原创 有符号二进制加减法

为了解决原码减法出现的问题,出现了反码计算减法,虽然反码的结果是正确的,但问题出现在“0”这个特殊值,例如 1-1=[0000 00001]反 + [1111 1110]反 = [1000 0000]原 = -0。使用二进制原码进行加法是OK的,但是原码在做减法运算时,要比较两个数的绝对值,判断最终的符号,以绝对值大的数 减去 绝对值小的数,最终得到结果,过程太复杂。虽然+0和-0是一样的,但带符号的0是没有意义的,而且会出现[0000 0000]原和[1000 0000]原 两个编码表示0。

2023-01-09 15:00:15 5359 3

原创 Spring整合Apollo的原理

Spring和Apollo源码涉及的类。

2022-12-08 21:28:19 1015

原创 微信扫码授权登录手游的原理和问题(你使用的浏览器暂不支持微信登录)

这个问题是因为微信服务器会校验请求是否有特定的请求头。

2022-11-16 21:07:33 1029 2

原创 Maven编译Freemarker源码及二开

没有改动解析#{}占位符的源码,这是因为,freemarker.core.FMParser这个类是通过FTL.jj文件进行编译的,你可以看freemarker的github源码,里面是找不到这个类的,这个类是在编译时,将FTL.jj文件编译成了class文件。是gradle编译的,部分源码是在编译后自动生成class文件的,如:src/main/javacc/FTL.jj文件,此文件就是在编译时,生成FMParser.class文件。是maven编译的,并且自己做了简单的二开。

2022-10-02 10:44:58 651

原创 Freemark在springboot下配置模板路径

【代码】Freemark在springboot下配置模板路径。

2022-09-25 11:55:43 914

原创 进制转换随手记

3位2进制可以表示1位8进制数,因为000~111=0~7,当一个8进制数转2进制时,只需要把每一位8进制数转成三位2进制数即可,即三位2进制数为1组;16进制,F+1=1111+0001=10000,每4位看成1位16进制数,那么10000=0001 0000=10,10中的高位表示16的1次幂。8进制,7+1=111+001=1000,每3位看成1位8进制数,那么1000=001 000=10,10中的高位表示8的1次幂。4位2进制可以表示1位16进制数,因为0000~1111=0~F。

2022-09-17 14:39:40 393

原创 Springboot自定义@Import自动装配

学习Springboot,一定会了解一些自动装配的注解,但很少有机会自己去搞一些自动装配的东西。有一些公司会封装自己的boot开发组件,例如公司封装了对数据的管控、对开源框架的二开等,新员工在使用时,会花大量的时间学习这些组件,浪费大量的资源,但是这些组件通常情况下,配置参数都是默认即可。如何去屏蔽这些内容,让开发者仅关注业务即可?我给三个方案,1.封装这些组件的时候,仅可能的简化配置;2.将这些组件做成模板化,通过脚手架生成项目的方式,屏蔽这些配置;3.封装自动配置,开发者仅用一个注解即可完成自动装配。

2022-06-22 22:28:35 347

原创 OpenFaas自定义Springboot模板

思路创建文件夹,如下,这样通过faas-cli new --list命令就可以看到springboot模板mkdir -p template/springbootfaas-cli new --listcd template/springboottouch Dockerfilemkdir functiontouch template.yml下面着重介绍template.yml、function、Dockerfile的内容。template.yml当使用faas

2022-06-22 21:41:52 302

原创 Redis4.0源码编译和启动

环境系统:MacBook-ProIDE:Clion源码下载本博客下载的版本是Redis 4.0GitHub - redis/redis at 4.0编译准备下载完源码后,不要立即导入到IDE中,首先在下列文件夹下创建CMakeLists.txt。redis-4.0/CMakeLists.txtcmake_minimum_required(VERSION 3.15)project(redis-4.0)set(CMAKE_BUILD_TYPE "Debug")get_filename

2022-06-22 21:40:35 336

原创 SpringBoot自定义Environment属性及属性绑定

有时候我们需要在spring bean的生命周期开始前,初始化一些环境变量到Environment中,在bean生命周期的过程中,可以动态的注入这些环境变量。下面就介绍3种方式,配置环境变量。自定义Environment属性有常用的3种方式,属性绑定有手动绑定和注解自动绑定2种方式。...

2022-06-21 23:21:38 2942 1

原创 idea插件开发实战基础

新建项目

2022-01-20 15:17:18 2879 2

原创 java字段数据转义为mysql字段数据

package com.idea.plugin.ext.jdbc;import java.nio.ByteBuffer;import java.nio.CharBuffer;import java.nio.charset.CharsetEncoder;/** * sql转义 * * @author yanzhao * @date 2021/12/29 16:05 * @since 1.0.0 */public class SQLEscape { /** * @

2022-01-16 00:34:25 695

原创 Mybatis-plus分页、自动填充时间戳配置

git项目地址码云项目地址配置分页插件配置自动填充新增数据时的创建时间、更新时间配置自动填充更新数据时的更新时间依赖<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.0</version></dependency

2022-01-16 00:29:51 590

原创 Java范型

import java.lang.reflect.AnnotatedType;import java.lang.reflect.GenericDeclaration;import java.lang.reflect.ParameterizedType;import java.lang.reflect.Type;import java.lang.reflect.TypeVariable;import java.util.ArrayList;import java.util.stream.Strea

2021-11-30 23:18:21 285

原创 Mybatis解析占位符源码工具

TokenHandlerpublic interface TokenHandler { String handleToken(String content);}ParameterMappingTokenHandlerimport java.util.ArrayList;import java.util.List;public class ParameterMappingTokenHandler implements TokenHandler { private List<P

2021-11-27 14:43:40 538

原创 分布式唯一id:snowflake雪花算法

小知识当前时间毫秒值的10进制长度是13位,换算2进制长度是41位。12个bit,可以表示最大的10进制数字是4095。雪花算法定义64bit,64 = 1+41+10+12,符号位,始终是0;10进制时间戳转换为2进制,恰好是41个bit;10bit的机器id;12bit是序列号,取值范围是0~4095。结合起来:一台机器,同一个时间戳,最大可以生成4096个不同的正数序列号。...

2021-11-18 23:02:08 416

原创 一致性hash算法

普通hash算法以客户端连接服务器为例,假设有3台tomcat,编号为tomcat0、tomcat1、tomcat2,N个客户端连接,此时要使用hash算法路由客户端连接的服务器。路由计算假设每个客户端都有唯一的id,例如客户端id分别为5、6、7、8,一共4个客户端,计算路由如下:客户端id=5,计算路由:5%3=2,连接服务器为tomcat2客户端id=6,计算路由:6%3=0,连接服务器为tomcat0客户端id=7,计算路由:7%3=1,连接服务器为tomcat1客户端id=8,计算路

2021-11-17 22:52:39 797 1

原创 LocalDateUtils

package com.tuya;import org.apache.commons.lang3.StringUtils;import java.time.LocalDate;import java.time.format.DateTimeFormatter;import java.time.temporal.ChronoUnit;/** * 本地日期工具类 */public class LocalDateUtils { public static final String

2021-10-16 14:25:16 288

原创 不同contentType的数据类型

Server代码package com.test.tomcat.servlet;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.net.InetSocketAddress;import java.net.ServerSocket;import java.net.Socket;import java.net.SocketAddress;

2021-08-18 19:37:14 256 1

原创 Springboot配置输出RequestMapping等日志

Springboot从2.1的某个版本,日志的判断改为Trace判断,如下:if (logger.isTraceEnabled()) { logger.trace(formatMappings(userType, methods));}想要打印Springboot相关日志,又不想看到多余的日志(例如:Tomcat链接日志),就要配置日志的输出。在Springboot中,可以通过yaml文件配置,也可以配置logback-spring.xml,这里使用配置文件的方式,方便说明。注:logback-

2021-07-03 11:33:46 1096

原创 k8s部署metrics-server资源统计模块(kubectl top)

安装K8S参见centos安装kubernetes,早期的这篇博客,没有部署统计模块,在这里补充。拉取metrics-server镜像由于google的镜像仓库需要翻墙,拉取速度才会变快,因此这里使用阿里的镜像。docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6docker tag registry.cn-hangzhou.aliyuncs.com/google_co

2021-06-12 18:10:18 509

原创 低代码之基于OpenFaas的低代码平台设计与实现

基于OpenFaas的低代码平台正在开发,随后将在我的github和码云上公开。平台性质:PAAS开发语言:Java/Node部署依赖:OpenFaas/K8S/Docker

2021-05-31 19:13:37 935

原创 SpringBoot ClassPathResource获取文件(包含一个坑,两个知识点)

问题SpringBoot项目,在Idea中无论怎么运行,都是正常的,通过maven打包的jar包运行时,ClassPathResource#getFile()方法,始终报错,找不到文件。代码如下:配置Freemarker的模板路径报错如下:不论是文件还是文件夹,都会报错13:52:12.405 ERROR [main] com.edu.compile.parse.FreemarkerParse:35 - freemarker init failed: class path resource [te

2021-05-18 16:50:44 8742 2

原创 springboot整合mybatis打印sql(包含一个坑)

maven依赖<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.1</version></dependency>整合Mybatis的两种方式手动装配SqlSessionFactoryBea

2021-05-12 23:24:52 928 3

原创 LRUCache:双向链表+Map

import java.util.HashMap;import java.util.Map;public class LRUCache<K, V> { public static void main(String[] args) { // 1 -1 -1 3 4 test1(); System.out.println("-------------------------"); // 1 -1 2 te

2021-04-07 22:07:16 207

原创 低代码平台之helm安装openfaas支持动态添加命名空间

简介在openfaas构建Serverless事件驱动的低代码平台之安装openfaas及基本操作博客中,介绍了openfaas的安装以及基本操作,也介绍了一点基于命名空间做资源配额的内容,但是上篇博客说到,默认情况下,所有OpenFaaS函数和服务都部署到OpenFaaS和OpenFaaS fn名称空间。要更改名称空间,请使用helm。本博客就来说明如何使用helm安装openfaas,并添加自定义命名空间。移除faas-netes安装的openfaas如果没有使用faas-netes安装,直接

2021-02-23 21:07:23 949

原创 低代码平台之部署openfaas及基本操作

简介OpenFaaS是打包源代码、二进制文件或者容器作为Serverless函数编程的框架,可以在windows、linux等平台上运行。使用它构建函数的流程如下:通过模板new创建函数build函数为docker镜像push镜像到docker registrydeploy函数invoke函数其实这些步骤对应的是faas-cli客户端的几个命令,下面会提到,同时,我也围绕这几个流程来扩展它的实际应用。本博客是基于k8s、dockers、openfaas。k8s和docker的版本及安装

2021-02-21 16:38:52 3577 9

空空如也

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

TA关注的人

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