自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(96)
  • 资源 (1)
  • 收藏
  • 关注

原创 Excel 工具类

【代码】Excel 工具类。

2025-03-08 15:47:50 78

原创 Filter-Interceptor-ControllerAdvice-Aop各自加载顺序

运行结果图示:环形图图示:区别和应用场景:

2025-01-10 18:00:26 167

原创 定位哪一行代码导致CPU飙高

2、通过top命令,按shift+P 按CPU占用排序,找到飙高的进程ID,即pid;公式:jstack 进程id | grep 16进制线程id -A 20。3、ps H -eo pid,tid,%cpu | grep 进程id。1、死循环飙高CPU,while true打印UUID即可;解读:根据进程id找到导致CPU飙升的线程id,即tid;4、线程都是16进制,将线程id转换为16进制。公式:printf ‘0x%x\n’ 线程id。得到3762的16进制:0xeb2。6、寻找公司包名的问题行。

2025-01-06 12:13:55 129

原创 MongoTemplate的复杂组装条件查询

如下演示了查询类似于这类结构的代码示例。

2024-12-31 15:01:13 188

原创 使用Hutool读取大Excel

先转成excel再读取。

2024-11-26 15:38:56 935

原创 使用Hutool的HttpRequest调接口

【代码】使用Hutool的HttpRequest调接口。

2024-11-26 15:30:49 390

原创 线程池+CountDownLatch并行处理任务

【代码】线程池+CountDownLatch并行处理任务。

2024-11-11 15:16:10 472

原创 前端切换页面时,保存滚动位置

在A页面时滚动到某位置,切到B页面,再切回A页面时保留滚动的位置。原理:切出A页面时记录下高度,切回A页面时恢复高度。

2024-11-04 11:52:07 261

原创 element-ui快速分页代码示例

/ 调后端列表接口。

2024-11-01 11:35:26 295

原创 Spring Boot读取resources目录下文件(打成jar可用),并放入Guava缓存

Guava的缓存类似于redis。比起Redis,Guava的缓存优势在于更轻更快,而Redis的优势在于支持分布式。

2024-10-08 17:51:39 630

原创 Java把文件链接转成流,返回给前端下载

背景:已知Java拿到了一个PDF链接(http://xxx.xxx.pdf),直接把链接返给前端的话,前端是不能点击直接下载的,需要后端先。这样前端一点击,就能。

2024-08-26 16:17:52 1165

原创 优雅处理枚举&前端丢失大Long精度问题

前端传递 枚举code后端响应 枚举code表里存储 枚举code内存处理 枚举对象。

2024-08-21 15:24:55 453

原创 小项目发版的2个基本文件

【代码】小项目发版的2个基本文件。

2024-07-29 14:46:20 314

原创 干货!完全体设计模式!工作中最常用

用于挪去臃肿的业务代码,还可以进一步升级加上模板模式,以及抽取成Starter。首先,抽象的处理业务的Handler,也就是 “模板”用于干掉大量的if-else。其次,模板的一种具体实现。然后,工厂的注册和生产。

2024-05-14 20:08:53 308

原创 批处理任务的通用工具类

1、只要是批处理任务(比如下发几万张优惠券,发京豆),就必定用到线程池、不丢包。2、业务场景:下发五万张优惠券,要求一张都不能少。

2024-05-04 11:08:29 302

原创 扫码登录到底是怎么实现的?

2、接着,APP 扫描这个二维码,把 APP 的 token 信息、二维码 ID 发送给 Server 端,4、于是,用户确认登录后,携带临时 token 给到 server,server 端修改二维码状态。3、此时,网页端展示的二维码状态会提示已扫码,待确认。不难发现,整个实现过程并不难,核心的设计就是一个特定的二维码,去连接了 APP。1、首先,在网页端打开登录页面,展示一个二维码,这个二维码有一个唯一编号是服。5、最后,网页端轮询到状态变化并获取到 token,从而完成扫码授权。提示确认授权的操作。

2024-03-27 11:20:51 591

原创 Mysql相关

B树相对于AVL(平衡二叉树)来说,AVL树每个节点只能有2个子树,而B树允许有多个子树,这样可以大大降低树的高度,树的层数越多,磁盘IO次数就越多,B树的高度低,层数少,所以磁盘IO次数少,适合作为硬盘存储的数据结构;B+树是B树的进一步拓展,B+树只有叶子节点才存储行数据,而每一层存储的数据量有限,这么设计可以进一步降低树的高度,减少磁盘IO次数,加快查找速度。索引的数据结构是B+树,为什么要用这个数据结构?

2024-03-25 16:35:23 237

原创 开发运维小技巧记录

1、查看服务器的内存大小命令是 free -m。2、查看服务器的任务管理器命令是 top,再按shift+M 按内存占用排序。按shift+P 按CPU占用排序。按shift+T 按耗时排序。

2024-03-22 16:47:57 157

原创 TopK问题

堆在Java中的实现是优先级队列:PriorityQueue。(找最大数用小顶堆,找最小数用大顶堆)比如从100万个整数中找出最大的100个整数,如果进行排序,时间复杂度是O(nlogn),代价高昂。可以看到,性能相差了三倍,并且数据量越大,性能差距也越大。来解决,时间复杂度是O(nlogK)TopK问题的解法是:用数据结构。

2023-12-28 10:50:01 476

原创 logback.xml文件例子

【代码】logback.xml文件例子。

2023-11-10 09:31:58 921

原创 线程池里对异常的处理方式

=方式:==重写afterExecute方法, 统一处理线程池里抛出的异常。但是要区分是execute方式提交的,还是submit方式提交的。

2023-10-29 09:11:09 338

原创 多任务并发执行,最终返回的例子

【代码】多任务并发执行,最终返回的例子。

2023-10-11 18:02:29 192

原创 烟花效果,H5+C3+JS实现

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>11

2023-10-09 12:33:00 414 2

原创 Mybatis中的一级缓存与二级缓存

二级缓存是NameSpace级别(Mapper)的缓存,多个SqlSession可以共享,使用时需要进行配置开启。(2)缓存的查找顺序:二级缓存 => 一级缓存 => 数据库。(1)MyBatis的缓存分为一级缓存和 二级缓存。一级缓存是SqlSession级别的缓存,默认开启。

2023-09-13 08:53:35 96

原创 Redis相关知识

整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。官方FAQ表示,因为Redis是基于内存的操作,CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存的大小或者网络带宽。3)采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗。更快,也更不安全的选择。

2023-09-13 08:49:39 260

原创 线上排查定位OOM问题的记录

1、分析快照文件的工具建议用eclipse analyzer,而不是jdk自带的jvisualvm。eclipse analyzer的下载地址:http://www.eclipse.org/mat/downloads.php。整体思路:把机器上的快照文件下载到本地电脑,用eclipse analyzer打开它,找到是哪一行导致oom。因为快照文件很大,eclipse analyzer设置的大小阈值也要调成足够大。把该文件下载到本地电脑,可以借助xftp等工具下载。2、解压缩后,先编辑下这个文件。

2023-08-30 15:18:38 222

原创 对HashMap的value做升序、降序

因为结果要求是有序的,所以返回的类型必须是LinkedHashMap。

2023-08-29 11:08:50 1206

原创 java-并发包中的倒计数闩锁、循环栅栏、信号量

【代码】java-并发包中的倒计数闩锁、循环栅栏、信号量。

2023-08-15 13:08:18 259

原创 用ThreadLocal做链路追踪(初版、升级版、最终版)

于是出现了升级版(InheritableThreadLocal):解决了初版的问题,但是当线程池中开辟线程时,线程复用会残留上一次的trace-id,导致混乱不准。初版(ThreadLocal)的缺点:当new新线程时,子线程获取不到父线程的变量,导致trace-id丢失。2、当我们写的接口接收到其它地方(可能是前端、也可能是其它服务)发来的请求时,此刻,我们的接口所在的服务称作。服务端的日志打印很好做,用过滤器Filter即可,每次请求打过来,记录下请求路径、请求头、参数。

2023-08-14 10:19:50 457

原创 读书之《被讨厌的勇气》

在理解了学习是孩子的课题这个基础上再去考虑能做的事情,具体就是不去居高临下地命令其学习,而是努力地帮助他本人建立“自己能够学习”的自信以及提高其独立应对课题的能力。3、既不可以批评,也不可以表扬。表扬这种行为含有“有能力者对没能力者所做的评价”。人表扬他人的目的就在于“操纵比自己能力低的对方”。“因为不想与父亲和好,所以才搬出被打的记忆”。那么“关系修复之卡”就我在我手里,只要我改变“目的”,事情就能解决。5、“因为被打所以才与父亲不和”,那么只能束手无策了。2、“可以把马带到水边,但不能强迫其喝水” –

2023-07-16 21:31:54 142

原创 Java后端解决跨域的相关配置

跨域、Java

2022-12-28 09:24:45 842

原创 Linux命令卸载JDK并装新JDK

Linux命令方式卸载、安装JDK

2022-08-19 13:55:16 1540

原创 检测死锁的两种办法

Java死锁的检测方式

2022-06-16 12:35:40 2921

原创 八锁现象彻底理解锁

Java JUC 多线程 锁现象

2022-06-16 09:12:55 176

原创 CompletableFuture之线程池运行选择

java的CompletableFuture执行任务时用的什么线程池

2022-06-12 14:43:37 1980

原创 匿名内部类.getClass()结果

匿名内部类是继承了指定的类或实现了指定接口的类,我猜想它的class类型应该和该类(接口)相同,但实际发现不同。public class M15 { public static void main(String[] args) { Runnable runnable = () -> { }; System.out.println(runnable.getClass()); System.out.println(Runnab

2022-05-22 14:49:01 490 1

原创 Rabbit基于插件实现一个延迟队列

前言:基于死信的延迟队列存在漏洞问题,所以要使用基于插件的延迟队列。前者延迟的时机发生在队列,后者则在交换机。插件在官网上下载:https://www.rabbitmq.com/commuinty-plugins.html配置类:@Configurationpublic class DelayedQueueConfig { // 队列 public static final String DELAYED_QUEUE_NAME = "delayed.queue"; //

2022-03-27 17:14:58 1726

原创 线程池中7种阻塞队列的介绍、区别与选择

1. ArrayBlockingQueue(常用)基于数组的阻塞队列实现,在 ArrayBlockingQueue 内部,维护了一个定长数组,以便缓存队列中的数据对象,这是一个常用的阻塞队列,除了一个定长数组外,ArrayBlockingQueue 内部还保存着两个整形变量,分别标识着队列的头部和尾部在数组中的位置。ArrayBlockingQueue 在生产者放入数据和消费者获取数据,都是共用同一个锁对象,由此也意味着两者无法真正并行运行,这点尤其不同于LinkedBlockingQueue

2021-08-15 20:05:12 8817

原创 Postman创建ElasticSearch索引一直在sending状态

解决办法:首次启动elasticsearch.bat需要管理员身份运行。

2021-06-20 23:11:35 1474 11

原创 vi和vim快捷键

拷贝当前行 yy,拷贝当前行向下的5行 5yy,并粘贴(输入p)。删除当前行 dd,删除当前行向下的5行 5dd在文件中查找某个单词[命令模式下/关键字,回车 查找,输入n就是查找下一个]设置文件的行号,取消文件的行号。[命令模式下:set nu和 set nonu]一般模式下,定位到文件的最末行[G]和最首行[gg]撤销操作:修改后回到一般模式,按u一般模式快速定位到某行:20+shift+g老韩视频链接:https://www.bilibili.com/video/BV1Sv411r.

2021-05-05 16:15:43 123

SpringBoot报错.docx

初学SpringBoot遇到报错,反复检查后,反复查阅资料后,才知道是缺少依赖和tomcat版本不对

2019-09-14

空空如也

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

TA关注的人

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