![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
比嗨皮兔
主攻java,熟练 .net/c#、spring、spring cloud、dubbo、mybatis等,熟练使用go、shell、python等,其他中间件有tbschedule、xxl-job、consul、apollo、elk、cat、prometheus等,善于大数据、高并发、分布式以及微服务的相关优化和技术框架选型。
专利:CN113282633A CN113239043A CN111861669A CN111429060A
软著:安卓点名软件
展开
-
【MyBatis】拦截查询结果同时动态替换
项目中需要用到响应时替换某些字段的某些值。原创 2023-12-13 22:00:00 · 527 阅读 · 0 评论 -
【SpringBoot】SpringBoot拦截器的配置和注意事项(SDK开发)
【代码】【SDK】sdk拦截器的配置和注意事项。原创 2023-05-31 20:15:00 · 200 阅读 · 0 评论 -
【开源项目 - http-sdk】http响应结果自动反序列化,使用Jackson反序列化
说明你可以理解它为http请求的sdk。很多开源的http请求工具类或者工具包,在调用接口之后,返回的都是字符串或者byte数组等,但是我们在项目中使用的都基本时对象的方式,所以还需要反序列化当前的响应结果,为了减少当前的操作,所以封装了当前的sdk,方便http请求时方便使用。当然项目若是SpringBoot/SpringCloud 等可以使用RestTemplate和FeignClient等工具,当前的工具更多应该在于SDK封装时使用,当然当前的包在所有的项目都可以使用,主要看你喜欢使用哪个方式而原创 2022-09-29 19:43:01 · 330 阅读 · 0 评论 -
【Java】自定义注解和@Profile注解的结合使用
说明与自定义注解结合,验证某个环境是否需要执行满足当然注解的功能,可以验证执行和排除。代码/** * 验证是否执行 * * @param method 方法 * @return false 为不执行, true 为执行 */ private boolean checkProfile(Method method) { Profile profile = method.getAnnotation(Profile.class);原创 2022-09-09 12:41:06 · 307 阅读 · 0 评论 -
【Java】SpringBoot SpEl表达式代码转换的实现
背景框架开发时一般不会使用我们常用的@Value或者@ConfigurationXXXX等注解,可能需要在代码里面使用原生的代码实现。代码实现Environment environment = applicationContext.getEnvironment(); if (environment == null) { return; }environment.resolvePlaceholders("待转换的SpEl表达式")原创 2022-08-26 19:06:15 · 362 阅读 · 0 评论 -
【SpringBoot】运行时代码动态赋值注解的成员变量值
说明开发SDK中,需要启动时动态修改注解的值,不能每次运行转换,这样影响性能,所以改为启动时修改,然后赋为最终的值,然后传递下去,后面不需要修改。代码 /** * 转换注解的成员变量值 * * @param objAnno 注解 * @param memberName 成员变量 */ protected void convertAnno(Object objAnno, String memberName) { Invoca原创 2022-08-26 18:56:30 · 1126 阅读 · 0 评论 -
【Java】CompletableFuture 的使用示例
CompletableFuture 的使用原创 2022-06-16 23:08:46 · 573 阅读 · 0 评论 -
【PPT】互联网高并发实践 之 分布式缓存
互联网高并发应用 之 缓存篇,从浏览器,cdn,后端中间间,数据库都有涉及,基本囊括了缓存的所有使用场景。原创 2022-05-22 14:44:55 · 276 阅读 · 0 评论 -
【PPT】互联网高并发实践 之 分布式锁
当前的PPT总共56页,从锁的介绍,到java锁(lock、synchronor、aqs)到分布式锁 redis、zk、数据悲观乐观锁都有介绍,算比较锁比较完整的介绍,具体看文章。原创 2022-05-20 21:16:48 · 452 阅读 · 9 评论 -
【分布式】Redis分布式之HyperLoglog
说明使用使用示例:package com.demo.redis.hyper;import org.redisson.api.RHyperLogLog;import org.redisson.api.RedissonClient;import org.redisson.client.codec.StringCodec;import org.springframework.stereotype.Component;import org.springframework.util.Assert;原创 2022-03-10 12:43:11 · 1126 阅读 · 0 评论 -
【分布式】Redis分布式之分布式唯一Id
说明Redis生成分布式唯一Id的方式之一。使用示例代码:package com.demo.redis.generate;import org.redisson.api.RIdGenerator;import org.redisson.api.RedissonClient;import org.springframework.stereotype.Component;import org.springframework.util.Assert;import javax.annotati原创 2022-03-10 12:39:50 · 1958 阅读 · 0 评论 -
【分布式】Redis分布式之事务(Transaction)操作
说明Redis事务操作使用示例:package com.demo.redis.transaction;import org.redisson.api.RBucket;import org.redisson.api.RTransaction;import org.redisson.api.RedissonClient;import org.redisson.api.TransactionOptions;import org.redisson.client.codec.StringCodec原创 2022-03-10 12:36:54 · 2114 阅读 · 0 评论 -
【分布式】Redis分布式之PriorityBlockingDeque
使用package com.demo.redis.list;import org.redisson.api.RPriorityBlockingDeque;import org.redisson.api.RedissonClient;import org.redisson.client.codec.StringCodec;import org.springframework.stereotype.Component;import org.springframework.util.Assert;原创 2022-03-10 04:42:06 · 365 阅读 · 0 评论 -
【分布式】Redis分布式之BlockingDeque
使用package com.demo.redis.list;import org.redisson.api.RBlockingDeque;import org.redisson.api.RedissonClient;import org.redisson.client.codec.StringCodec;import org.springframework.stereotype.Component;import org.springframework.util.Assert;import原创 2022-03-10 04:42:15 · 1480 阅读 · 0 评论 -
【分布式】Redis分布式之Deque(双向队列)
使用package com.demo.redis.list;import org.redisson.api.RDeque;import org.redisson.api.RedissonClient;import org.redisson.client.codec.StringCodec;import org.springframework.stereotype.Component;import org.springframework.util.Assert;import javax.an原创 2022-03-10 04:42:24 · 853 阅读 · 0 评论 -
【分布式】Redis分布式之TransferQueue
使用package com.demo.redis.list;import org.redisson.api.RTransferQueue;import org.redisson.api.RedissonClient;import org.redisson.client.codec.StringCodec;import org.springframework.stereotype.Component;import org.springframework.util.Assert;import原创 2022-03-10 04:42:33 · 402 阅读 · 0 评论 -
【分布式】Redis分布式之BoundedBlockingQueue
使用package com.demo.redis.list;import org.redisson.api.RBoundedBlockingQueue;import org.redisson.api.RedissonClient;import org.redisson.client.codec.StringCodec;import org.springframework.stereotype.Component;import org.springframework.util.Assert;原创 2022-03-10 04:42:42 · 690 阅读 · 0 评论 -
【分布式】Redis分布式之Queue(队列)
使用package com.demo.redis.list;import org.redisson.api.RQueue;import org.redisson.api.RQueue;import org.redisson.api.RedissonClient;import org.redisson.client.codec.StringCodec;import org.springframework.stereotype.Component;import org.springframewo原创 2022-03-10 04:42:50 · 1940 阅读 · 0 评论 -
【分布式】Redis分布式之BitSet(BitMap)
使用package com.demo.redis.set;import org.redisson.api.RBitSet;import org.redisson.api.RedissonClient;import org.springframework.stereotype.Component;import org.springframework.util.Assert;import javax.annotation.Resource;/** * RedisBigSet * * @原创 2022-03-09 22:27:02 · 1284 阅读 · 0 评论 -
【分布式】Redis分布式之Set
使用package com.demo.redis.set;import org.redisson.api.RSet;import org.redisson.api.RedissonClient;import org.redisson.client.codec.StringCodec;import org.springframework.stereotype.Component;import org.springframework.util.Assert;import javax.annot原创 2022-03-09 22:25:21 · 756 阅读 · 0 评论 -
【java】读写锁 ReadWriteLock 实现
原理读写锁原理很简单,里面使用AQS来实现读写锁,但是对AQS了解的朋友应该都知道,AQS只有一个互斥(同步)资源state,那怎么实现的呢,其实是使用state类型是int类型,是32位的,所以利用高低16位分别用作读写的标志,而且读写锁是可重入的。总结下来就是:读读不互斥;读写互斥;写写互斥;可重入锁。特别注意读写锁是可以降级的,就是加了读/写锁的功能里面是可以再次加读锁的;反之则不可以,就是读/写锁的功能模块里面,若是锁没有释放,是不可以加写锁的,必须释放之后才能加写锁。示例代码原创 2022-03-08 14:56:02 · 791 阅读 · 0 评论 -
【SpringBoot】RabbitMQ 启动、停止和销毁的注册类(流量隔离)
在SpringBoot中,使用注解@EnableRabbit来配置RabbitMQ的启动配置加载,而真正配置的类为org.springframework.amqp.rabbit.listener.RabbitListenerEndpointRegistry,当前的类里面控制连接终端的启动、停止和注销,可以用来动态的实现RabbitMQ的消费者启动、停止和注销等功能。org.springframework.amqp.rabbit.listener.RabbitListenerEndpointRegistry原创 2022-03-07 18:43:25 · 1896 阅读 · 0 评论 -
java pojo 建造者模式
import lombok.Data;/** * 地址相关配置 * * @author wangmingcong */@Datapublic class UrlConfig { /** * 地址 */ private String host; /** * 端口 */ private Integer port; /** * 路径 */ private String path;原创 2021-07-19 19:46:58 · 218 阅读 · 0 评论 -
获取服务器cpu、内存、磁盘、网络等资源使用率
1、命令public class MachineConstant { /** * tcp 总连接数 */ public static final String TCP_CMD = "netstat -ant | wc -l"; /** * UDP 总连接数 */ public static final String UDP_CMD = "netstat -anu | wc -l"; /** * 全部内存原创 2021-06-17 14:31:22 · 1572 阅读 · 2 评论 -
redis 实现分布式锁(三)
1、引用 <dependency> <groupId>org.redisson</groupId> <artifactId>redisson-spring-boot-starter</artifactId> <version>3.8.2</version> </dependency>...原创 2021-06-17 13:29:25 · 127 阅读 · 0 评论 -
git 提交前验证(文件:.git/hook/pre-receive)
#!/bin/bash# 定义变量host_name="https://www.xxx.com"read oldValue newValue refValueauthor=$(git show "$oldValue" | grep Author | awk '{print $2}')# 验证用户是否存在user=$(curl -u ${username}:${password} https://www.xxx.com/api/v1/users/"$author")echo "$user"#.原创 2021-06-04 21:06:34 · 895 阅读 · 0 评论 -
获取https证书信息
说明: 获取https证书信息包括以下的方法:通过whois命令,使用当前工具类执行,但是需要有whois的命令权限 调用域名获取整数倍相关信息1、测试入口 @Test public void test() { TslDTO tslDTO = TlsUtils.getFirstTlsInfo("https://www.baidu.com"); System.out.println(JSON.toJSONString(tslDTO));...原创 2021-05-17 20:05:43 · 2666 阅读 · 0 评论 -
java 执行 shell 脚本工具类
```java 1. 调用测试代码```javaString shellStr = String.format("%s %s", "curl -v -I -k ", httpsUrl);List<String> resultList = ShellUtils.getInputResult(shellStr); 2. 工具类```javaimport cn.hutool.core.lang.Pair;import org.apache.commons.collectio.原创 2021-05-17 19:34:25 · 1663 阅读 · 0 评论 -
jvm 学习路程
1、jvm 整理的简单流程,后面有时间根据每一点知识点,细节讲解原创 2021-03-31 14:55:12 · 110 阅读 · 0 评论 -
java 之 Stack(栈)
1、介绍 Stack 是一种先进后出的数据结构,它是一种特殊的线性表,只能在一端进行相关入栈和出栈(获取)操作,并且支持存入相同的元素和空对象。2、主要原理 java中的Stack是内部是通过数组实现的,每次操作都是通过对数组的操作,定义的数组为Object的数组(Object[]),所以每次对元素进行入栈、出栈操作都是对当前的Object数组进行操作,而且都是...原创 2021-03-20 13:18:30 · 1728 阅读 · 0 评论 -
dubbo.properties 相关配置和对应的默认值
一、dubbo 配置的优先级:以 timeout 为例:方法级优先,接口级次之,全局配置再次之。(方法 > 接口 > 全局) 如果级别一样,则消费方优先,提供方次之。(消费方 > 提供方)二、主要的参数值包括:legacyProperties.put("dubbo.protocol.name", "dubbo.service.protocol");legacy...原创 2021-03-20 13:17:03 · 1680 阅读 · 0 评论 -
SpringBoot(java)动态短信模板的设计
1、设计思想 通过一定的格式(如:%s#%s),通过查找对应的属性,用对应的值替换。短信模板可以动态读取类及相关的属性在前端的页面上配置、2、静态类示例可以使用静态,也可以使用数据查询返回的实体对象的值import java.time.LocalDateTime;import java.time.format.DateTimeFormatter;import lombok.Data;@Datapublic class SmsTagTemplate { /...原创 2021-03-12 11:14:58 · 4384 阅读 · 0 评论 -
Redis 生成唯一码的方式(一)
1、涉及到的表结构CREATE TABLE `int_item_identity` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID', `name` varchar(255) NOT NULL COMMENT '名称', `alias` varchar(255) NOT NULL COMMENT '别名', `rule` varchar(255) NOT NULL COMMENT '前缀prefix', `length` bi...原创 2021-03-05 17:22:05 · 492 阅读 · 0 评论 -
spring-boot-starter-data-redis 事务 list 批量 pop 数据
1、依赖包<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <version>2.3.8.RELEASE</version></dependency> 2、注入@Auto...原创 2021-02-07 17:58:17 · 1320 阅读 · 2 评论 -
springboot 全局异常处理 @ControllerAdvice和@ExceptionHandler
GlobalException:import lombok.extern.slf4j.Slf4j;import org.springframework.util.StringUtils;import org.springframework.validation.BindException;import org.springframework.validation.BindingResult;import org.springframework.validation.FieldError;i.原创 2020-06-18 20:27:20 · 615 阅读 · 0 评论 -
tk.mybatis 获取当前类泛型对象实体类的表名
随笔,简单记录而已, final ParameterizedType paraType = (ParameterizedType) this.getClass().getGenericSuperclass(); final Type[] types = paraType.getActualTypeArguments(); String tableName = null; for (final Type type : types) { .原创 2020-05-15 21:44:41 · 3562 阅读 · 0 评论 -
通用的统一返回结果
import lombok.Data;import org.apache.commons.lang3.StringUtils;@Datapublic class Result<T> { /** * 状态值 */ private Boolean status; /** * 状态码 */ private String code; /** * 状...原创 2020-04-23 13:39:54 · 902 阅读 · 0 评论 -
分布式全局唯一ID(三)
实现分布式唯一ID的方式很多,其实也可以使用ZK的有序节点来实现,由于ZK的有序节点是有序的,而且也是唯一的,所以其实可以使用其实现,具体代码后面有时间补上。...原创 2020-04-13 19:44:49 · 123 阅读 · 0 评论 -
分布式全局唯一ID(二)
redis 实现分布式唯一ID,其实这个也很简单,主要使用redis String数据结构的 increment 方法。原理:使用increment方法,每次自加1,主要使用redis的高性能和单线程。实现方式:核心代码如下,若是为了保证长度一致,其实可以预先初始化值。现在的这个是从1,2.....逐渐递增的 /** * 注入Redis字符串模板 */ @Auto...原创 2020-04-13 19:41:44 · 153 阅读 · 0 评论 -
redis 实现分布式锁(二)
1、依赖包 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <v...原创 2020-04-13 19:26:37 · 221 阅读 · 0 评论