自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(241)
  • 问答 (2)
  • 收藏
  • 关注

原创 简单分享下文件下载中心的实现和代码

业务中很常见的场景,就是下载. 而随着业务数据越来越大, 下载的负担也越来越重, 时间越来越久因此经常会将其做成异步的, 先给前端返回,然后开一个线程去处理. 然后等处理完用户到一个专门的页面下载.

2024-04-19 11:42:00 131

原创 【mysql8的一个利器, CTE查询】

今天因为一个比较头疼的mysql查询问题, 去Stack Overflow提问, 然后底下有人答复说既然用了mysql8, 不要用子查询, 直接用. CTE查询是啥, 我直接百度了下, 然后发现, 这玩意太好用了, 但是说实话, 我可以肯定大多数人基本都不会去了解这些新出的功能,毕竟经手的项目大多数几年前的项目了,版本低. 但是说不定也有和我一样正在用mysql8版本的朋友, 所以分享出来1、MySQL8.0之前,进行复杂查询时需要使用子查询来实现,SQL语句不仅语句复杂性能低,而且不够清晰。

2023-12-18 20:41:45 675

原创 导出Excel需要增加一个错误列, 通用类SheetWriteHandler

常见的做法是在导出的方法中, 加一个字段然后在list中, 然后sheet写到返回流中. 但是如果需要统一样式就比较麻烦, 且每次都需要写这么一串代码.在业务中经常遇到这样的需求, 上传excel后对数据进行校验, 如果校验不通过, 需要提供excel下载, 并在后面一列提供错误原因.. 它提供了一个处理器来处理sheet, 相当于拦截器。方法中做文章, 统一做处理, 包括实现其他的功能。写一个类来实现这个处理器。

2023-12-06 15:33:13 518

原创 【踩坑】hive脚本笛卡尔积严重降低查询效率问题

前一阵子查看我们公司的大数据平台的离线脚本运行情况, 结果发现有一个任务居然跑了, 要知道这还只是几千万量级的表, 且这个任务是每天需要执行的于是我把hive脚本捞出来看了下, 发现无非多join了几个复杂的子查询, 应该不至于这么久, 包括我又检查了是不是没有加上每日分区的筛选条件比如t1,t2,t3表都是1000, 彼此关联的是10条, 则按常理应该是t1和t2筛选和关联后得到临时表10条, 然后这10条再和t3进行10*1000筛选和关联.

2023-10-10 10:47:46 946

原创 从ScheduledThreadPoolExecutor的任务突然不再跑了, 再看线程池ThreadLocalPool基本原理

要搞清楚为啥FixedThreadPool可以间隔一段时间跑一次, 之前看线程池源码可知, 对于线程池重要的两个方法, 一个是take一个poll, 分别表示是否允许淘汰worker, 来从等待队列获取任务, poll的情况表示允许淘汰worker。但是发现有些时候跑着跑着, 就没有执行的日志继续打印出来了,也就是不知道为什么线程池突然挂了, 猜测是因为异常了导致的.其实应该想到, 线程池对于线程的异常处理, 其实是有坑的, 比如常常见到的。方法, 可以看到调用了父类的run方法, 同样的是。

2023-06-05 15:33:30 1502

原创 lua脚本实现滑动窗口的分布式全局限流器, 控制api接口qps

限流器, 从算法实现的角度来说, 就我知道的常见的有 滴漏桶, 令牌桶, 滑动窗口计数,固定窗口计数法从实现的工具来说, 常见的有 guava的 RateLimiter (令牌桶)redis的每秒或者每一分钟过期时间的incr(固定窗口计数)但是这些大多数时候都被我们用来当做单个机器上的限流措施, 尤其是guava这种单体框架. redis的incr虽然能控制全局, 但是还是有问题.

2023-04-10 21:02:01 1013 1

原创 【踩坑】AES256解密失败,jasypt解密失败 最简单解决办法(本地环境)

3.AES加解密时,会使用到Java.security.*包,即jdk security,其中使用的jar包%JAVA_HOME%/jre/lib/security/local_policy.jar和%JAVA_HOME%/jre/lib/security/US_export_policy.jar有对技术出口的限制(因为美国的出口限制,Sun通过权限文件local_policy.jar、US_export_policy.jar做了相关限制),加密只有128bit,而没有限制的则有256bit。

2023-02-24 10:31:38 1064

原创 【踩坑】记录几个踩坑经过,升级框架,for update和批量导入

最后看源码发现原因是28版本解析address的时候,多解析一个斜杆,在com.dtflys.forest.http.ForestURL#toURLString 方法里多拼接了一个斜杆。forest是一个轻量级的http请求框架,有一天闲来无事看到idea的升级依赖功能就随便点了几个,将其升级到1.5.28版本。最后分析可能是主从同步延迟的原因,批量写主表, 从表即刻查询到一部分还未同步到的数据当作需要处理的返回, 导致重复插入。最后出现了重复的序列编码,甚至数据库出现重复的序列记录。

2023-02-02 19:36:57 511

原创 【看源码】@Cacheable和@CacheEvict的原理, 批量key过期失效的原因分析

最近发现自己搭的一个项目返回的数据不太准确, 第一时间想到了是缓存的问题, 缓存代码如下}有个困扰我很久的问题就是allroom的evict是否生效.类似上面这个场景, 我们经常有list()方法没指定key缓存了全部数据, 以及指定了key是id缓存了单个数据, 最后我们在方法想evict过期上面两种缓存众所周知 @Cacheable 和 @CacheEvict 的使用要求其中之一就是value和key一样, 以及方法参数要一样. 因此单个的evict肯定没问题, 问题是所有的如何过期呢。

2022-12-19 18:46:43 1739

原创 【记录】服务器搬家记录

首先最好列下要拷贝的文件, 一些能重新下的容器和程序就可以不管了。

2022-12-17 02:04:11 581

原创 【踩坑】double和BigDecimal的精度问题

其实double有精度问题,这个是大家都知道的. 解决精度问题用BigDecimal也是很常见的手段, 但是这里不知道为什么controller的接口使用了double来接收.double有精度问题使用BigDecimal最好用string来转化最坑是在debug的时候, 由于代码是第一个balanceFee是字符串转化计算而来的,是准确的, 第二个amt是double, 在debug模式下浮窗显示的值也是精准的, 然而最重要的却没有浮窗显示出值.

2022-12-01 22:07:34 902

原创 【踩坑】parallel并发流导致数据异常

慎用parallel和parallelStream如果非要用, 确保里面不会对同一个元素修改如果非要修改, 确保元素是有同步修饰的, 或者Atomic类的对于数据量不大的, parallel可能更耗时间, 因为线程的切换,以及parallel是先切分list再合并, 切分合并也需要时间parallel后会导致list无序。

2022-11-25 19:44:22 976

原创 【踩坑】慎用线程池,导致生产环境假死

线程池最好统一管理起来,不要随便new,或者new了用完记得关闭,或者使用jdk提供的ForkJoinPool等框架自带的,或者写单例线程池的线程数,队列大小需要考虑,不同的场景(IO密集和CPU密集)应该用不同的线程池。队列太长,可能难以触发增加线程数到maxThread,导致在等待时间过长,超时。队列太小,则需要考虑maxThead大小,避免线程不够用。

2022-11-22 18:52:24 943

原创 【踩坑】mysql工作中真实踩坑系列(持续更新),一个or让sql变慢100倍,带子查询的update很慢

mysql真实踩坑, 主要是针对慢sql. 包括:1.一个or导致sql性能下降10倍2.有子查询的update很慢但是select很快

2022-11-22 16:39:38 1282

原创 spring缓存注解@Cacheable和@CacheEvict,设置过期时间和批量模糊删除

spring-data-redis高版本的话, 直接在yaml配置即可,但是我的是2.1.18,不知道为什么没生效,看了下两个版本设置前缀的方法也不一样,应该是版本问题。或者直接在配置类中设置,如下配置computePrefixWith()

2022-09-08 18:37:28 2680

原创 【工具类】发送邮件表格html生成类

发送邮件html表格的java生成类

2022-08-26 10:12:56 620

原创 【工具类】比较优雅的在工具类中,用泛型方法获取枚举的值

一个数组,其中包含组成此 Class 对象表示的枚举类的值,按声明的顺序排列;然后枚举实现这个接口,相当于一个标准能保证枚举类都能有这样的of方法可以用。但是实际问题还是没解决,代码在每个枚举都要复制。怎么告诉编译器我这个方法需要的是一个枚举,我要调用它的values方法,毕竟其他类又没这个静态方法。其实这个也不难想,把这些of方法通通抽取出去在一个工具类中,采用。要根据某个code,得到枚举以及对应的msg,调用。来匹配各种枚举类,但是问题在于,怎么调用。方法,它是Object类里的。.........

2022-08-09 18:21:19 659

原创 关于\n,\\\n,\\\\\n在java中的split()正则中的理解

这里split用Pattern.compile是一样的,split方法里面有一些优化,对一些regex进行了处理。,因此对于正则来说,给我一个斜杆+回车,无法组成一个正则表达式,所以无视第一个斜杆,结果和第一个一样。顺便说下,startWith,只收到jvm编译的转义影响,不受转义的影响。(-表示普通的斜杆),自然也就是四个斜杠才能split了。两个斜杆在一起,会视为一个普通的斜杆,无转义效果。,正则无视第一个斜杆,并且编译器提示。---->正则识别到。......

2022-07-29 22:22:01 1271 2

原创 【工具】推荐一个开源小巧的pdf分析工具

pdf工具

2022-06-14 14:42:19 1031 1

原创 mybatisplus分页VO类型转换及自定义xml使用wrapper

使用mybatisplus分页的方式有两种, 一种是service提供的接口:这种比较常用, 如:但是这种的话返回分页结果是和service类指定的一样的实体. 很多场景下不符合我们返回给前端的xxxVo类, 还需要手动转一次.分页方法2(支持vo)其实mp还有另一种自定义xml的分页写法(配上分页插件后), 只不过以前没怎么用过这种写法, 也不确定是不是也限定了model类型返回官网介绍分页插件这种只要我们写的vo能在xml里sql查询字段对得上(用as别名), returnType指定为vo

2022-06-07 16:56:44 6128

原创 关于idea上LeetCode插件, java.lang.NoSuchMethodError: ‘ListNode ListNode.deserialize(java.lang.String)‘ 问题

如题, 刷到链表的题的时候, 遇到这个问题.它自动生成的代码模板里有这个注释: //leetcode submit region begin(Prohibit modification and deletion)/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } *

2022-05-18 15:46:03 2504 5

原创 【踩坑】mybatisplus3.x 和 pagehelper 结合,分页失效的问题

pagehelper和mybatis plus 的冲突

2022-04-28 17:01:34 3152 1

原创 【踩坑】解决maven的编译报错Cannot connect to the Maven process. Try again later

annot connect to the Maven process. Try again later. If the problem persists, check the Maven Importing JDK settings and restart IntelliJ IDEA

2022-04-28 10:47:29 18260 6

原创 【笔记】CMS和G1收集器

CMS和G1收集器CMS和G1区别三色标记-漏标jdk9以后官方就推荐使用G1收集器来替代CMS了CMS和G1区别CMSG1作用范围老年代整个堆基本概念将老年代分为一个个cardTable,用于并发标记的时候标记那些对象引用变化的table把堆区分成一个个region区域划分严格划分新生代(edan区,survivor区),老年代,区域之间大小比较固定,物理上是连续的仍然有老年代,新生代概念,每个region都能灵活的扮演Eden空间、Survivor

2022-04-24 18:17:02 341

原创 和布隆过滤器相比

简单记下两种过滤器简单记下两种过滤器布隆过滤器原理缺点布谷过滤器原理和布隆过滤器相比简单记下两种过滤器在使用缓存时, 可能会出现的一个问题就是缓存穿透, 就是请求不存在的数据, 没命中缓存, 直接落到数据库.为了解决这个问题, 可以采取的一个措施就是引入过滤器布隆过滤器原理这个应该都比较熟悉, 它是一个bitmap, 通过对key进行多次hash计算出多个hash值, 然后得到不同的哈希桶的下标, 然后将这些下标设置为1.如果这个key再一次请求过来, 再根据之前的几个hash函数, 得到哈希桶

2022-01-27 16:19:23 857

原创 【笔记十一】一些场景设计

【笔记十一】一些场景设计大量数据和高并发下点赞设计总体思路几种方案bitmap大量数据和高并发下点赞设计总体思路数据量大, 并发高, 优先需要考虑使用redis+消息中间件.收到点赞请求后, 先丢到消息中间件中, 进行削峰和异步, 直接返回点赞成功然后再根据业务量, 开多个消费者消费队列, 处理点赞请求. 放到redis中再通过定时任务, 在晚上的时候将redis中的数据保存到数据库, 需要考虑redis的可用性和持久化避免数据丢失.几种方案bitmapbitmap位图, 在redis

2021-12-30 21:05:39 513

原创 Ftpclient调用retrieveFileStream返回null, docker中下载失败问题

如题, 最近在弄容器化部署, 将项目都上线到k8s上, 就在验证功能是否已正常的时候, 发现ftp下载都失败了.和运维一起定位问题花了一天起初以为是因为容器所在服务器连不上ftp server, 后面发现并不是这样, 后面自然又看了下是否由于代码原因, 但是在普通机器上跑的服务下载正常, 这就基本能断定是因为docker容器导致的问题.下面是定位问题的过程, 写的比较啰嗦, 关注解决方法的看最后定位问题过程确定是偶发还是必然首先反复在docker容器和普通机器上测试, 确定这不是偶发性.

2021-12-14 21:02:37 2898

原创 mysql中字符串的逻辑运算和比较运算

mysql中字符串的逻辑运算和比较运算一. 数字和数字运算二. 那数字和字符串之间呢?1. 字符串是数字的逻辑运算2. 字符串是英文的逻辑运算3. 各种情况3.1 = 比较运算3.2 and逻辑运算三. 整理总结3.1 比较运算3.2 逻辑运算字符串转数字一. 数字和数字运算mysql的逻辑运算, and, or, xor, not等比如:select 1 and 2;select 1 and 0;这个相信大家都知道, mysql里面, 数字0表示false, 除了0外的数字表示true. 所

2021-12-03 18:43:55 1747

原创 试玩RocketMQ, 事务消息, 以及NOT_CONSUME_YET消息不能被消费等问题

试玩RocketMQ, 事务消息, 以及NOT_CONSUME_YET消息不能被消费等问题一. 代码生产者代码消费者代码二. 笔记2.1 生产者2.1.1 事务消息2.1.1.1 事务消息回查2.1.1.2 消息重复问题2.2 消费者2.2.1 消费重试2.2.2 批量拉取2.2.3 无法消费消息, 消息的状态是`NOT_CONSUME_YET`rocketmq版本是4.9.2, rocketmq-spring-boot-starter版本是2.2.1一. 代码生产者代码App类package

2021-11-26 18:55:45 7488

原创 再看看幻读

今天在回顾数据库隔离级别的时候, 仔细一想好像一直没清除搞清楚幻读是怎么样的, 或者用sql复现一下, 所以特地查了下幻读的资料.回顾下四大隔离级别:隔离级别脏读不可重复读幻读情形读未提交是是是A写,B去读读已提交否是是A读,B写了提交,A再读可重复读否否是A读,B插一条,A同样插一条发现id重复序列号否否否看到其他博客对幻读的解释是:A事务查询得到一个结果, B事务插入了符合A查询条件的数据, A事务无法感知但是真实

2021-11-07 18:34:57 140

原创 重看聚簇索引,非聚簇索引,索引覆盖,索引下推

重看聚簇索引,非聚簇索引,索引覆盖,索引下推1. 聚簇索引和非聚簇索引2. 覆盖索引和下推索引索引覆盖索引下推1. 聚簇索引和非聚簇索引聚簇索引, 叶子节点上就是数据行. 非聚簇索引, 叶子节点仍然是索引, 但是有指针指向数据聚簇索引非聚簇索引叶子节点直接放了数据行数据块的指针插入顺序数据行在物理存储空间的顺序和插入的主键顺序一致数据行存储无序存储引擎适用于innodb适用于myisam每个表几个因为和数据行的物理存储顺序相关, 所以只能有一个可

2021-11-02 21:07:47 274

原创 链表的倒转, K个一组倒转问题

链表的倒转, K个一组倒转问题准备工作准备好节点:public class Node<T> { public Node next; public T value;}以及初始化一个链表的代码public class NodeUtil { /** * 准备工作 准备一个链表 * @param n * @return */ public static Node<Integer> prepare(int n) { No

2021-11-01 14:47:06 264

原创 ConcurrentHashMap的jdk1.7和1.8区别整理

ConcurrentHashMap的jdk1.7和1.8区别整理初始化jdk1.7Segment个数HashEntry个数jdk1.8put()方法jdk1.7jdk1.8get()方法jdk1.7jdk1.8size()方法jdk1.7jdk1.8resize()方法jdk1.7jdk1.8主要区别:1.7 采用的是分段加锁, Segment(区段) + HashEntry + Unsafe1.8 撇弃了Segment, 锁的粒度细化到具体每个桶上的头结点, 并加上CAS和Synchronize加

2021-10-29 17:25:42 445

原创 java实现 算法-n皇后

什么是n皇后n皇后是一个经典的算法问题, 即一个 n × n的棋盘上, 每一行放置一个皇后棋子. 这个棋子的竖行, 横行, 斜行都没有其他的皇后冲突如图思路先说思路, 这里采用的是回溯法, 即先采用一种可能性, 然后将这个可能性进行判断是否可行, 可行的话继续采用下一种可能性, 串起来就是一个正确的解....

2021-10-28 11:34:04 1054

原创 简单总结jdk1.7HashMap扩容死循环和jdk1.8优化

简单总结jdk1.7HashMap扩容死循环和jdk1.8优化jdk1.7 HashMap死循环原因扩容步骤死循环总结jdk1.8的改进jdk1.8仍然存在的问题网上很多关于jdk1.7HashMap扩容死循环的博客, 但是很多都是贴了大量的代码和图, 这里只进行简单概括总结, 详细的还是需要自己看源码.jdk1.7 HashMap死循环原因首先贴代码 (这个必要的还是要贴) void resize(int newCapacity) { .... transfer(ne

2021-10-27 12:17:31 690

原创 笔记总结目录

笔记目录【笔记一】java底层原理源码【笔记二】java并发原理【笔记三】jvm底层和调优【笔记四】开发框架【笔记五】分布式场景【笔记六】分布式开发【笔记七】redis底层【笔记八】mysql底层【笔记九】消息队列底层【笔记十】网络底层...

2021-10-26 19:56:36 121

原创 【笔记十】网络底层

【笔记十】网络底层浏览器发出请求到收到响应经历哪些步骤网络的7层协议TCP是什么, 三次握手和四次挥手Netty的高性能体现在哪零拷贝是什么什么是NIO和BIO, 两者从底层的区别浏览器发出请求到收到响应经历哪些步骤网络的7层协议TCP是什么, 三次握手和四次挥手Netty的高性能体现在哪零拷贝是什么什么是NIO和BIO, 两者从底层的区别...

2021-10-14 12:14:21 141

原创 【笔记九】消息队列底层

【笔记九】消息队列底层死信队列是什么, 怎么实现延时队列rocketmq消息队列如何保证消息可靠性rocketmq如何保证顺序消费rocketmq事务消息如何实现kafka为何吞吐量高死信队列是什么, 怎么实现延时队列rocketmq消息队列如何保证消息可靠性rocketmq如何保证顺序消费rocketmq事务消息如何实现kafka为何吞吐量高...

2021-10-14 12:11:26 190

原创 【笔记八】mysql底层

【笔记八】mysql底层mysql的innodb引擎底层数据结构为什么id自增效率比不自增高id手动复制自增和本身自增哪种好mysql锁有哪些哪些情况会导致索引失效分库分表的实现为什么最好设置非null的默认值mysql的innodb引擎底层数据结构为什么id自增效率比不自增高id手动复制自增和本身自增哪种好mysql锁有哪些哪些情况会导致索引失效分库分表的实现为什么最好设置非null的默认值...

2021-10-14 12:09:34 145

原创 【笔记七】redis底层

【笔记七】redis底层redis有哪些数据结构, 应用场景redis为什么吞吐量大性能强redis持久化方式和区别redis主从复制原理缓存穿透, 击穿, 雪崩分别是什么缓存和数据库如何保证数据一致性redis有哪些数据结构, 应用场景redis为什么吞吐量大性能强redis持久化方式和区别redis主从复制原理缓存穿透, 击穿, 雪崩分别是什么缓存和数据库如何保证数据一致性...

2021-10-14 12:07:20 121

空空如也

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

TA关注的人

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