自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

BruceChao5211的博客

http://www.zhaochao.top

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

原创 线上频繁fullgc、oldgc,MybatisPlus踩坑

近期遇到线上出现504报错,查看gc情况发现频繁oldgc,于是尽快回滚线上代码,然后开始排查问题原因。本期需求中优化了一些数据缓存组件,一度怀疑是这里导致的问题,几经排查还是不能确定。于是在运维老师那里启动了一个容器来部署本期最新代码的服务,并把nacos下线,避免线上流量进入。在容器内部查看内存、CPU信息完全正常,定时任务执行也很正常,于是模拟调用线上接口,一段时间后终于发生了oldGC,查看占用cpu较高的线程为GC线程,dump堆内存进行分析,终于发现了问题所在:前四个线程占用内.

2021-08-10 16:58:03 1549 5

原创 SpringCloudGateway实现灰度发布,结合nacos支持不同服务配置不同灰度版本及灰度权重(概率)

网上查看现有的一些实现gateway灰度发布的博客,一般都是使用过滤器、拦截器等,过于复杂,而且不够灵活,索性自己研究一下gateway,发现可以通过 AbstractLoadBalancerRule 实现,下面是我实现的一套灵活一些的灰度发布策略。首先gateway的配置文件如下(可以配置到nacos中):# 服务灰度发布配置server: gray: config: # producer服务 producer: # 需要灰度发布的版本

2021-04-24 11:46:02 2357 5

原创 分布式锁-Redis

摘自 https://www.zhaochao.top/articles线上系统为分布式系统的时候 有一些业务逻辑是不是能并发执行的 需要在相同条件下 实现类似串行的状态 譬如:针对同一个用户的同一个接口操作。通过使用AOP结合Redis可以方便的实现分布式锁。首先编写redis的setNx方法(之后的redis版本会下线原有的setNx方法,所以使用set改写),使用set方法改装,...

2019-05-15 14:54:27 199

原创 AOP实现Redis注解分布式缓存(支持各种配置)

摘自:https://www.zhaochao.top/article/179,更多开发技术请访问https://www.zhaochao.top首先编写@Cached注解import com.common.redis.RedisDBEnum;import org.springframework.core.annotation.AliasFor;import java.lang...

2019-01-28 16:07:44 270 1

原创 Mac配置iTerm2支持lrzsz(M1芯片)

前天买了一台21款的MacBook Pro,为m1pro芯片,与之前的intel架构不同,所以安装各种软件的时候也会有点差异。刚刚安装完lrzsz工具后,在item2配置支持lrzsz的时候,按照网上原有的教程操作是有问题的(网上很多教程,例如:https://wsgzao.github.io/post/lrzsz/)。因为原来的iterm2-*.sh脚本中默认认为sz和rz在/usr/local/bin下,所以需要查看下m1芯片下brew工具安装lrzsz到哪个目录了,果然位置不一样了进入/o

2022-02-09 15:53:20 1457 2

原创 Sentinel规则持久化到Nacos,拉模式实现

sentinel官方提供了NacosDatasource,但是只是支持客户端从nacos读取规则加载到内存; dashboard上修改了配置规则之后,内容中规则生效了,但是未持久化到nacos。 持久化到nacos有两种方案: 一是拉模式,类似官方提供的案例`FileWritableDataSource`; 二是推模式,切断客户端和控制台的连接,客户端不需要修改,控制台dashboard端修改源码,推送和读取规则的时候都操作nacos。 目前采用的是第一种拉模式实现,较.

2021-08-05 11:49:39 890 3

原创 拓展swagger插件,简化字典类属性注释

近期需求中会有如下一部分代码,复杂臃肿且不易维护:@Data@ApiModel("Xxx desc")public class Xxx { @ApiModelProperty(value = "课程状态;取自字典 course_state") private Integer state; @ApiModelProperty(value = "排序字段:startTime 课程开始时间、endTime 课程结束时间、orderIncomeNum 成单数、orderRefun

2021-07-27 17:01:59 888

原创 Spring中具有多个实现类的接口集合是如何自动注入的?(List如何autowired)

与朋友聊到了一个博客上给出的demo,一个接口集合可以自动注入所有实现类,这种spring注入的写法在工作中还不太常见,一般这种我们见框架里使用SPI的形式居多测试代码// 定义接口public interface MultiService {}// 实现类1@Servicepublic class MultiServiceImpl1 implements MultiService {}// 实现类2@Servicepublic class MultiServiceImpl2

2021-04-20 14:17:39 3052

原创 String.intern()方法小记

关于String.intern()方法,源码中有很完善的描述 /** * Returns a canonical representation for the string object. * <p> * A pool of strings, initially empty, is maintained privately by the * class {@code String}. * <p> * When t

2021-01-25 17:52:19 171 2

原创 SpringMVC Controller中成员变量注入HttpServletRequest为何线程安全?

我们在Controller中使用request对象的时候往往会直接Autowired到成员变量中,如下@RestControllerpublic class XController { @Autowired private HttpServletRequest request; @PostMapping("/test") public Object orderInfo() { String o = request.getXxx();

2020-12-21 16:41:31 650

原创 关于spring事务传播行为引发的Transaction rolled back because it has been marked as rollback-only

偶尔博客闲逛发现有人讨论这个问题(我自己没有遇到过),翻了几个帖子没有几个讲清楚的,自己测试下吧测试类:package com.web.service;import com.StudyApplication;import com.web.service.i.TransactionalOuter;import lombok.extern.slf4j.Slf4j;import org.junit.Test;import org.junit.runner.RunWith;import or

2020-12-14 11:41:55 784

原创 一次线上JVM内存泄露的排查解决

问题的发现 听云监控显示JVM堆内存老年代经过多次FullGC仍然无法回收,gc次数过多且STW过长,会影响线上业务,暂时联系运维老师重启了服务器(-Xmx4G -Xms4G) 问题排查 通过导出的dump文件分析了解到占用内存最大的对象是alibaba.fastjson的ParseConfig对象及其内部的IdentityHashMap对象,当前现象与测试环境dump结果一致 ParseConfig及IdentityHashMap对象的作用 项目中在使用fastjson进行反序列化的时候会调用p

2020-09-15 10:57:30 539

原创 关于MapStruct使用expression表达式的小坑

最近项目中使用了mapStruct进行对象属性拷贝,关于原理不做赘述!最近在使用中发现了mapStruct框架的一个小坑,在我们使用expression来指定处理source中的某个属性后设置到target对象的某个属性中的时,会出某种异常现象如:@Override@Mappings({ @Mapping(source = "leaveLesson", target =...

2020-04-10 12:36:28 18551 11

原创 关于分布式系统中微服务之间调用的问题

下面是一道面试题,而且我完全想不到我会卡到这道题上题目:微服务之间的调用路径为 A->B->C,问如果B调用C的时候一直出问题(比如C宕机),我们如何保证数据一致性?解题思路:在我理解,这就是典型的分布式事务问题,所以我考虑如下方案:1. MQ:无论A、B、C监听事件失败消息,并针对不同业务类型和业务id进行回滚操作即可2. TCC:每个服务都开发T、C、C三种类型的接...

2020-02-22 07:13:48 2499 1

原创 重视基础~Java方法(函数)中参数的传递

做了挺长时间开发之后就会陷入一个思维定式,往往喜欢复制某些功能逻辑现有的实现方式比如我们查出来了一个列表放入List之后,有时候需要对列表进行其他属性的填充,一般会写成如下形式List<User> users = ...;fillItems(users);private void fillItems(List<User> users) { // 忽略...

2019-11-25 11:34:43 213

原创 MySQL随机查询N条数据

之前公司的业务需要在同一个列表每个人见到的数据是不一样的 所以就需要按照给定的查询条件随机出现N条记录下面有两种方法: 第一种比较简单,使用mysql自带的rand()函数select ... from table where status = 1 and ... order by rand() limit 0, 10 第二种是借助mysql的多个函数实现sele...

2019-11-06 14:24:24 432

原创 Java细看序列化机制

转载自细看序列化机制概况在程序中为了能直接以 Java 对象的形式进行保存,然后再重新得到该 Java 对象,这就需要序列化能力。序列化其实可以看成是一种机制,按照一定的格式将 Java 对象的某状态转成介质可接受的形式,以方便存储或传输。其实想想就大致清楚基本流程,序列化时将 Java 对象相关的类信息、属性及属性值等等保存起来,反序列化时再根据这些信息构建出 J...

2019-07-13 11:51:53 153

原创 数组翻转 I am a person => person a am I

package com.study.algorithm;public class Demo { public static void main(String[] args) { // 将该数组翻转 输出 person a am I,要求空间复杂度为O(1),不考虑时间复杂度 char[] words = {'I', ' ', 'a', 'm', ' '...

2019-06-28 18:57:37 246 1

原创 两个线程偶数奇数交替连续打印1-20

package com.study.thread;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.ReentrantLock;public class ThreadDemo { /** * 方法一 */ privat...

2019-06-27 16:17:53 272

原创 两个线程分别打印奇数偶数输出1-100

package com.study.thread;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.ReentrantLock;public class ThreadDemo { /** * 方法一 */ private static Reent...

2019-06-27 16:00:04 3406

原创 ThreadPoolExecutor构造参数测试分析

package com.self;import java.util.concurrent.*;public class ThreadPoolExecutorDemo { private LinkedBlockingQueue<Runnable> queue = new LinkedBlockingQueue<>(10); /** * ...

2019-06-27 15:58:17 235

原创 sql删除重复数据

摘自:https://www.zhaochao.top/article/184网上查看了好多删除重复数据的sql无非都是使用in或not in来组合封装,效率不是太好其实我们可以借助join来进行数据删除(查询)。例如: 表明score,sid为学生id,cid为课程id score为分数,status为数据状态(0删除 1可用);我们现在需要将score表中sid和cid都相同的数据...

2019-06-26 22:53:55 1070

原创 Java踩坑之List的removeAll方法

摘自:https://www.zhaochao.top/article/182最近在公司写东西,发现List的removeAll方法报错 Demo代码如下: List<Long> ids1 = Arrays.asList(1L, 3L, 2L); List<Long> ids2 = Collections.singletonList(...

2019-03-28 10:33:34 3335 1

原创 集合工具类(随时补充)

import java.util.*;/** * @author 赵超 */public class ListUtil { private static final Integer INTEGER_ONE = 1; /** * 截取列表list * @param list 待截取列表 * @param size ...

2019-02-25 11:32:37 129

原创 Docker常用命令

摘自 https://www.zhaochao.top/article/180,更多开发技术请访问 https://www.zhaochao.top使用Docker能够很方便快捷的在Linux上面搭建好各种运行环境,特写下一些基本常用命令 docker info 查看docker服务信息docker search imageName 查找镜像docker pull imagen...

2019-02-22 08:46:19 160

原创 mysqldump导出数据或表结构

最近导出线上数据测试定时任务用到了mysqldump,以后用哪里就更新到哪里吧 导出表结构和部分数据: mysqldump -uusername -ppassword --host=hostname dbname tablename --skip-lock-tables --where="status=1 limit 18318" > zhaochao....

2018-10-24 16:11:35 118

原创 负载均衡算法实现代码

/** * Created by 赵超 on 2017/1/17 * 服务器的ip地址 */public class IpAddrUtil { /** * 用于存储各个服务器的ip,key代表ip,value代表该ip的权重 */ public static HashMap<String, Inte...

2018-09-12 17:29:07 558

原创 学习笔记~欧几里得和幂次运算

/** * 欧几里得算法,计算最大公因数,可以理解为数学中的辗转相除法 * @param x * @param y * @return * @desc 时间复杂度为O(logN) */ private static long gcd(long x, long y) { ...

2018-09-11 16:27:19 133

原创 二分法查找

/** * 二分法查找 * @param arr 从小到大排序的数组 * @param num 待查找数值 * @return 待查找数值在数组中的索引值,不存在返回-1 * @desc 二分法也叫折半查找,思路顾名思义 */ private static int findNumber(int[]...

2018-09-11 11:35:08 110

原创 排序算法~快速排序

学习二分法查找的时候为了排序简单写了个冒泡排序,当数据量到达10W级的时候,效率真是低到没朋友了!所以想实现个效率高些的排序,想到了快速排序!快速排序的思维是对半拆分,在一个数组中选取一个临界值,如果小于这个临界值就将该数值前移,形成了初步排序的左右两边,之后递归左右两边即可! 于是写了一个如下排序: private st...

2018-09-11 11:19:53 100

原创 Java数据结构

--摘自菜鸟教程 Java工具包提供了强大的数据结构。在Java中的数据结构主要包括以下几种接口和类: 枚举(Enumeration) ...

2018-09-10 13:54:41 122

原创 Git常用命令

git status 查看当前空间状态,是否有待提交文件等等git branch 查看本地分支状态git branch -a 查看远程分支状态git branch -r 查看远程分支状态git branch -d branchName 删除分支git push [remoteName] -d [branchName] 删除远程分支git add fileName1, fileName...

2018-09-07 22:40:07 174

原创 Spring整合Memcached

<bean id="memcachedClient" class="net.spy.memcached.spring.MemcachedClientFactoryBean"> <property name="servers" value="127.0.0.1:11211" /> ...

2018-09-05 10:35:45 97

原创 Memcached使用

mem存取工具类:import java.io.BufferedWriter;import java.io.FileWriter;import java.io.IOException;import java.io.PrintWriter;import java.io.StringWriter;import java...

2018-09-05 10:21:12 91

原创 数据库优化~慢查询查找并优化

1. 慢查询日志查看基础 1> 查看慢查询日志是否开启 > show variables like 'slow_query_log'; 2> 查看日志相关配置 > show variables like '%log%'; 3> 设置为 “将未使...

2018-08-30 22:59:25 171

原创 抽象工厂模式

1. 创建Shape接口和Color接口 public interface Shape() { void draw(); } public interface Color() { void po(); }2. 分别创建两个接口的实现类 public class S...

2018-08-30 22:48:05 94

原创 工厂模式

1. 创建一个接口 public interface Shape { void draw(); }2. 创建接口的实现类 public class Circle implements Shape { @Override public void draw() { ...

2018-08-30 22:47:37 94

原创 最大子序列和的四种算法

一 穷举法 public int getMax(int[] a) { int maxSum = 0, sum; for (int i = 0; i < a.length; i++) { for (int j = i; j < a.length; j++) { ...

2018-08-27 11:56:00 230

原创 单例模式

1. 懒汉式 public class Singleton { private static Singleton instance; public static synchronized Singleton getInstance() { if (in...

2018-08-21 20:27:33 174 1

原创 HTTP响应头信息

Accept-Charset:浏览器申明自己接收的字符集,如utf-8、gbk等 Accept-Encoding:浏览器申明自己接收的编码方法,通常指定压缩方法,如gzip等 Accept-Language:浏览器申明自己接收的语言,如中文等 Referer:浏览器向服务器表明自己的来路url ...

2018-08-19 20:37:26 108

空空如也

空空如也

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

TA关注的人

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