- 博客(79)
- 资源 (1)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 dubbo 直连解决方案
要做什么看dubbo官网后发现有dubbo直连这种方式,简化了我们开发环境的流程,不再需要启动注册中心。于是想要应用到自己项目中去。但是各类网站看了很多dubbo直连的案例,基本都和官网一致,一个一个service 指定 url,这样的方式不太符合我们自己项目,我想要的是所有的service 使用 dubbo://127.0.0.1:20880 urldubbo版本:2.7.8源码过程分析这里先创建的一个又Spring 管理的Controller, 其中只有一个属性且被Reference 注解标识
2021-09-29 16:47:00
511
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 dubbo 循环调用本服务
服务AB,A调用服务B,B中出现了调用自己,而这次调用也是通过dubbo调用B调用B,讲道理应该使用spring调用本身,而原来也没有问题,只是这次加个dubbo过滤器,导致本服务抛出的自定义异常被dubbo包装了一下无法识别,抛出意料之外的异常...
2021-06-28 18:50:35
334
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 MySQL oreder by的单路排序和双路排序
innodb存储引擎的排序分为两大类,索引排序和文件排序,索引排序效率肯定是优于文件排序的,所以请尽可能的使用索引排序。如何去查看sql语句是利用了哪种排序方式答案就在explain关键字,查看sql语句的执行计划,我们可以从mysql官网看到If the Extra column of EXPLAIN output does not contain Using filesort, the index is used and a filesort is not performed.If the E
2021-06-03 16:42:02
320
2
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 mysql join原理
MySQL join表共有三种匹配方式,以A left join B为例进行描述,A left join B是以A表为驱动表,B表为匹配表进行连接一、Nested-Loop Join Algorithm(简单的嵌套循环连接)一种简单的嵌套循环连接(NLJ)算法,循环从A表中读取每一行,然后将每一行与B表中的每一行进行匹配,其实就是两层for循环。for each A_row in A { for each B_row in B { if (A_row.fid == B_row.fid)
2021-05-14 11:27:01
68
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 大文件断点续传
public void uploadBySlice(UploadFileReq uploadFileReq) { byte[] bytes = uploadFileReq.getBytes(); if(bytes==null){ throw new ServiceException("请上传文件"); } String base = sysConfig.getStaticArticleAccessPath().sub.
2021-02-20 09:27:13
76
原创 kafka rocketmq rabbitmq相同差异点
而rocketmq,每个主题消息被投递到不同的queue中,而所有消息(整个brocker)存储到commitlog中,每个主题每个队列都会创建一个索引文件,指向commitlog文件。消息存储的结构不同,kafka 每个主题被分成了多个分区(partition),磁盘中按找每个分区来存储,消息存储到一个文件,索引存储到一个文件。生产者投递消息的确认机制不同,kafka 是不等待响应,等待master响应,等待所有响应。rocketmq 支持事务消息,延迟消息,标签过滤。
2024-07-26 16:47:57
100
原创 我觉得我的代码更优雅了
我是一个工作两年半的后端程序员最近在思考如果更好的完成工作,追求效率的同时尽可能使自己的代码内聚,解耦,方便后期自己或是其他同时的维护工作我们业务中某一个对象的属性,但是获取之前需要进行多条件判断, 判断这个属性是否还是有效状态, 因此模仿写了一个包装类AWraaper,实现某个接口在写一个流程接口的时候, 流程分3步骤, 分别对应三个接口,每一步的处理的逻辑有一定的相似度, 逻辑校验, 保存数据, 通知,等等。所以这里选择了模板方法, 定义抽象类, handle 公共方法, 子类 step1,
2024-07-23 16:27:19
189
原创 技术 AI
Sora 基于DALL-E技术的视频生成模型。GPT-4.0 Vision(AI识图)Llama (meta 公司)DALL·E3(AI绘画)Claude (亚马逊)genmini (谷歌)
2024-07-23 16:25:31
104
原创 websocket消息处理失败排查(redis大key)
于是排查websocket + redis问题, 测试发现 redis本身的连接没有问题,只是某次差点寻会有问题。想到大key的问题,在测试环境复现,复制粘贴大量数据走 websocket 确实会出现断连的情况。调用grpc 超时失败, 起初是认为grpc 的问题, 于是开了个python脚本 访问grpc,没有问题, 表示grpc 服务端正常。访问 http://127.0.0.1:9121/ ,显示正常这一步则没有问题。我们本身是有prometheus 和 grafana 的,
2024-04-18 10:51:43
459
1
原创 spring boot自动装配的原理是什么
spring 时代,开启注解需要在xml中配置component-scan,然后触发标签解析,解析时根据标签的annotation-config属性将configrationPostProcesser注册进spring,由其完成注解的解析工作而springboot,在自己的prepareContext 方法中将configrationPostProcesser注册进去...
2022-04-11 20:33:39
493
原创 spring中线程池默认大小(源码)
@ConditionalOnClass(ThreadPoolTaskExecutor.class)@Configuration(proxyBeanMethods = false)@EnableConfigurationProperties(TaskExecutionProperties.class)public class TaskExecutionAutoConfiguration { /** * Bean name of the application {@link TaskExecuto
2021-11-25 17:26:17
1070
原创 ELK日志收集搭建过程中的一些问题
一、es 7.x 版本需要jdk11的支持二、es配置外网访问config/elasticsearch.yml 添加 http.host: 0.0.0.0三、es启动失败 不允许以root用户启动,创建一个新用户启动即可四、logstash启动失败 缺少log4J插件
2021-11-14 15:28:57
1444
原创 mysql 自定义变量使用
set @a = now(), @b = now();SELECT *, @ax, @bx, @mxFROM atestWHERE ( @mx := IF (( @ax := DATE_ADD( af, INTERVAL 48 HOUR )) < ( @bx := DATE_ADD( DATE(bf), INTERVAL "2 8 30" DAY_MINUTE )), 1, 2 )) > 0 af, bf 两个字段都为日期字段写在where条件后的赋值语句 必须
2021-10-19 13:35:56
125
原创 解析rar5压缩文件
public static void unRar5(File rarFile, String outDir) throws Exception { IInArchive archive; RandomAccessFile randomAccessFile; // 第一个参数是需要解压的压缩包路径,第二个参数参考JdkAPI文档的RandomAccessFile //r代表以只读的方式打开文本,也就意味着不能用write来操作文件
2021-10-12 22:39:03
554
2
原创 RequestPart注解实现同时上传json 和 文件
最近要改造一个接口,原本是json传参,现在要加个文件,emmRequestPart 可以帮我们做到,不同的key 以不同的content type解析后端代码@PostMapping("test") @ResponseBody public String test(@RequestPart("customer") Customer customer, @RequestPart MultipartFile file){ System.out.println(file.g
2021-10-11 21:02:13
773
原创 spring 事务传播验证
package com.example.flyway.service;import com.example.flyway.bean.User;import com.example.flyway.mapper.UserMapper;import org.springframework.aop.support.AopUtils;import org.springframework.beans.factory.annotation.Autowired;import org.springframewor
2021-09-11 16:05:33
76
原创 druid部分配置
druid 在1.1.18版本后需要手动配置开启监控,默认监控不开启,可以查看DruidStatViewServletConfiguration的变动1、开启监控spring.datasource.druid.stat-view-servlet.enabled=false2、只有本机能够访问页面#允许外部访问spring.datasource.druid.stat-view-servlet.allow=3、碰到sql监控中没有数据spring.datasource.druid.filters
2021-09-11 14:31:28
609
原创 项目升级mybatis-plus全局查找并替换方法
shareRecordMapper.selectListCustomer(([a-zA-Z.()\n\s]+))// 用 . 的时候获取不到$1shareRecordMapper.selectListCustomer(([a-zA-Z0-9.()\n\s]+)) // 可以匹配到数字, 这个没测shareRecordMapper.selectList(new LambdaQueryWrapper($1))
2021-09-08 18:03:01
450
原创 mysql中,如果单行占用太长的空间,在聚集索引中应该如何存储?
技术交流群中,有人问出了一个这样的问题,如果一行占用空间大于16K,那么是不是就存不进页了。针对这个问题查了一下官网,最终终于查出结果可变长度列太长而不适合 B 树页的可变长度列存储在单独分配的磁盘页上,称为溢出页。此类列称为页外列。页外列的值存储在溢出页的单链接中,每个这样的列都有自己的一个或多个溢出页面列表。根据列长度,可变长度列值的全部或前缀存储在 B 树中,以避免浪费存储空间和读取单独的页面。参考:14.11 InnoDB Row Formats...
2021-09-06 15:56:23
399
原创 重写的finalize方法,每个对象只会被调用一次?
在finalize方法注释上看到了“对于任何给定对象,Java 虚拟机永远不会多次调用finalize方法。”那是不是意味着一个对象只能被复活一次呢?
2021-08-31 17:52:19
756
原创 juc包下的线程间协作用到的类
1、CountDownLatch内部类实现aqs,使用cas修改state值完成同步2、CyclicBarrier内部使用独占锁实现+condition实现,构造函数可以传入回调任务,在屏障被冲破时执行(在冲破屏障的线程中执行)。维护了parties,count两个变量,每有一个线程waite阻塞时,–count,当count == 0时,调用condition的signalAll唤醒所有线程先执行回调任务,然后唤醒所有线程,之后count重置为parties可以重复使用3、Semaphore
2021-08-29 21:44:47
60
原创 线程池是如何线程复用的?
调用方法execute判断是否线程池的当先线程数小于核心线程数如果小于:调用addWorker方法通过线程工厂创建Thread对象并封装成worker对象,且开启线程,先执行本任务,然后循环获取队列中的任务执行如果等于:直接将传入的runnable对象加入的队列中等待执行...
2021-08-29 13:06:36
70
原创 关于aqs疑惑的地方
在调用lock方法时候,可能能为资源竞争, 导致该线程被阻塞加入到aqs等待队列中,在获取锁的线程调用realease方法后, 该线程被唤醒(locksupport),从代码上来看 说白了 阻塞线程 调用lock方法时,,实际上就是被加入到等待队列,然后进行阻塞,那么问题来了 , 被唤醒时候是会直接执行后续代码,还是继续竞争锁呢,从书的第124页上来看是竞争所,但是lock方法已经被执行过了,为什么还会再执行呢?通过debug 发现lock方法阅读不充分,java.util.concurrent.loc
2021-08-28 18:17:48
64
原创 Xorshift 生成随机数
static final int advanceProbe(int probe) { probe ^= probe << 13; // xorshift probe ^= probe >>> 17; probe ^= probe << 5; UNSAFE.putInt(Thread.currentThread(), PROBE, probe); return probe; }
2021-08-28 17:24:37
667
原创 错误开线程的方式导致的bug
1、开线程栈溢出2、使用线程池开线程还同时捕获了异常并向上抛出,且线程池设置了主线程执行的拒绝策略,导致投资者端同时调用接口时候随机出现报错,主线程中执行了这个方法并且被dubbo捕获了异常...
2021-08-27 17:58:57
58
原创 selectById也会出bug?
功能上了生产后,测试给我提了一个bug,导出数据功能报错。马上排查了一下日志,发现一个selectById的sql报错了,马上去查看一下这条数据,由于生产环境,使用审计工具查看数据,并没有发现什么异常,是在没办法,准备将数据迁移到本地debug试试看,在打开数据库时,看到这条数据好像跟刚刚看到的不太一样,仔细对比。审计工具上的结果Navicat 下的结果很明显 00 就是罪魁祸首了,之前没碰过这样的报错信息,一时间也没想到在这里,同时因为审计工具 导致排查花费了更长的时间...
2021-08-09 09:33:15
289
原创 EnumUtils 枚举工具类
public class EnumUtils { public static <T, V, S> S getEnumProperty(T t, Function<T, V> function1, Function<V, S> function2) { return getEnumProperty(t, function1, null, function2); } public static <T, V, S> S ge
2021-08-06 10:16:33
142
原创 pageUtils 工具类
public class PageUtils { public static Page setPageInfo(List list){ PageInfo pageInfo = new PageInfo(list); return setPageInfo(pageInfo); } public static Page setPageInfo(PageInfo pageInfo){ Page page = new Page();
2021-08-06 10:14:57
992
原创 spring invokeBeanFactoryPostProcess 执行流程
一、外部beanFactoryPostProcessors如果是BeanDefinitionRegistryPostProcessor 实现类,立即执行,然后 add registryProcessors如果不是 add regularPostProcessors二、实现BeanDefinitionRegistryPos
2021-08-05 16:03:08
78
原创 java 根据html生成pdf 实现透明度
原项目中有在使用flying-saucer库来生成pdf,奈何不支持css3样式,然后遇到一个需求,客户要求设置透明度,然而百度一波,发现rgba 和 Opacity都是css3的,我当即就说这功能做不了。说是说了,做还是得做,面向百度搜索了一波,发现了WKHtmlToPdf程序,于是开始安装环境:centos7 x86_64wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox-0.12
2021-07-27 18:01:18
191
原创 git revert后再merge
在自己的分支上进行需求的开发1、提交了A,B节点后2、合并到master3、此时因为需求变更等,这个这需求延期到下一个版本4、revert (2)的merge节点5、自己的分支再次提交了C节点6、向master合并的时候发现并没有AB节点的内容。7、reset(6)操作,需要先revert (4)产生的节点8、再次merge...
2021-07-21 14:03:55
835
原创 根据枚举code获取枚举三种方式耗时
package com.example;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.util.function.Function;import java.util.function.Supplier;public class Test { public static void main(String[] args) { lon
2021-07-15 20:02:59
316
原创 2021-07-12
stream.mapstream.mapToIntstream.flatMapstream.flatMapToIntdistinctsortedpeeklimitskipreduceminmaxcount// stream.flatMapCollection<List<Object>> values = map.values();List<Object> collect = values.stream().flatMap(Collection
2021-07-12 15:40:04
28
原创 mysql编辑集导致大小写不敏感
一个批量上传客户的功能导入的时候,抛出了重复键的异常,这是因为mysql的索引导致,然后通过这个key值上去库中查询这条数据,发现并没有这条数据。然后我尝试将这条数据单独放到另一个excel中,可以插入成功,于是猜想是否是mybatis批量插入的bug但想了一下不太可能,因为抛出的异常不同。网上大概搜了一下,搜到了ignore关键字,在程序中加上这个关键字,并且打了下log,发现一共需要插入72条,实际插入成功69,少了三条,嗯??比对了一下,找出插入失败的数据,发现一个共同点,有索引的那个字段都
2021-06-30 16:08:07
55
原创 kafka启动以及整合spring碰到的问题
背景kafka在阿里云服务器上,java客户端在windows上问题问题一:kafka启动失败,The Cluster ID doesn’t match stored clusterId删除log.dirs目录下的meta.properties文件,如果还不行删除zookeeper中kafka相关的目录问题二:kafka正常启动后且命令行可以生产消费消息,客户端连不上kafka打开config/server.properties 配置文件设置listeners=PLAINTEXT://私网i
2021-06-30 11:16:54
190
原创 dubbo 过滤器
一、实现filter二、在META-INF下穿件dubbo文件夹创建com.alibaba.dubbo.rpc.Filter文件xxFilter=全前限定名三、在配置文件中配置dubbo.provider.filter=xxFilter或者在过滤器上加@Activate注解
2021-06-23 10:23:43
184
1
原创 对象转json字符串输出到日志
背景想要将一个对象以json的格式输出到日志中处理使用log,info(JSONObject.toJSONString(invokeLog, true));或者log,info(JSONObject.toJSONString(invokeLog, SerializerFeature.PrettyFormat));第一种实际也是调用的第二种。public class InvokeLog { private int id; private String data;}问题
2021-06-22 18:55:15
1243
2
原创 获取方法返回类型
//如果返回值类型为Result,则不再进行处理 System.out.println("getParameterType" + methodParameter.getParameterType() + "," + methodParameter.getParameterType().equals(ResponseData.class)); System.out.println("getGenericParameterType" + methodParameter.getGe
2021-06-11 11:11:38
440
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人