自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

wtopps的专栏

当你的才华满足不了你的野心时,你应该滚去学习 https://wtopps.github.io

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

原创 CompletableFuture你需要知道的事情

CompletableFuture 是 Java 8 引入的一个强大的异步编程工具,它实现了 Future 和 CompletionStage 接口,提供了丰富的异步操作和组合能力。支持显式完成(手动设置结果)提供丰富的回调机制支持链式调用和组合操作内置异常处理机制支持多个 CompletableFuture 的组合回到上面的问题,如果使用CompletableFuture如何实现?下面我们来一起了解一下CompletableFuture的细节。

2025-03-26 16:14:55 782

原创 SQL小菜之TOP N查找问题

本篇,我们简单的探讨了SQL问题中非常经典的TOP N查找问题,学习了关于该种问题的几种解法,希望对你有所帮助。

2025-03-26 16:12:46 699

原创 Excel读取图片工具类

【代码】Excel读取图片工具类。

2025-03-14 09:29:20 224

原创 Redis分布式锁实现指北

0-1实现Redis分布式锁

2025-01-23 15:37:03 909

原创 记一次线上MySQL死锁case

existsAuditingRecordInLock的实现可以看到,使用了共享锁查询audit_process_record的行数,线上MySQL的事务级别使用RR,使用共享锁的目的,应该是希望避免快照读,而是使用当前读,并发场景下,可以查询到其他线程的最新数据,但问题也恰恰出在这里。线程A先获得记录1的排他锁,然后要获取所有记录(包括记录2)的共享锁。线程B先获得记录2的排他锁,然后要获取所有记录(包括记录1)的共享锁。使用其他的分布式锁,例如Redis或者ZK,代替MySQL的锁操作。

2025-01-17 17:23:35 280

原创 亿级排行榜设计

假如有10亿的用户,每个用户有自己的分数(score),请你设计一个排行榜,可以根据用户的分数进行排名,每个用户可以知道自己在排行榜中的排名情况。

2024-11-01 15:26:47 752

原创 SpringJPA+Druid配置多数据源

SpringJPA配置多数据源

2024-08-07 17:21:25 531

原创 RestTemplate配置绕过HTTPS SSL证书校验

【代码】RestTemplate配置绕过HTTPS SSL证书校验。

2024-06-19 16:27:11 1407

原创 数组中的第K个最大元素

给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。示例 1:输入: [3,2,1,5,6,4], k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6], k = 4输出: 4。

2024-06-11 17:51:36 434

原创 Leetcode Hot100 跳跃游戏

本题是一道典型的贪心算法,思路是遍历数组中每一个元素,尝试找到第一个可以跳过终点的元素。每一位元素的跳跃距离就是他自身的数值。可以跳到的最远距离,就是。

2024-06-04 10:51:07 207

原创 Leetcode Hot100 无重复字符的最长子串

随着 end 不断遍历向后,会遇到与 [start, end] 区间内字符相同的情况,此时将字符作为 key 值,获取其 value 值,并更新 start,此时 [start, end] 区间内不存在重复字符。定义一个 map 数据结构存储 (k, v),其中 key 值为字符,value 值为字符位置 +1,加 1 表示从字符位置后一个才开始不重复。解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。我们定义不重复子串的开始位置为 start,结束位置为 end。

2024-05-30 17:42:59 271

原创 Leetcode Hot100 下一个排列

例如,arr = [1,2,3] ,以下这些都可以视作 arr 的排列:[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1]。而 arr = [3,2,1] 的下一个排列是 [1,2,3] ,因为 [3,2,1] 不存在一个字典序更大的排列。1、我们需要将一个左边的「较小数」与一个右边的「较大数」交换,以能够让当前排列变大,从而得到下一个排列。类似地,arr = [2,3,1] 的下一个排列是 [3,1,2]。例如,arr = [1,2,3] 的下一个排列是 [1,3,2]。

2024-05-30 17:04:02 213

原创 Leetcode Hot100 最长回文子串

给你一个字符串 s,找到 s 中最长的回文子串。最容易理解的中心扩散法,我们记忆这一种解法。解释:“aba” 同样是符合题意的答案。输入:s = “babad”输入:s = “cbbd”

2024-05-30 16:46:35 344

原创 Leetcode 从中序与后序遍历序列构造二叉树

1、根据后序结果,可以确到root节点的位置,即后序的最后一个元素。3、确认递归退出条件,当不满足左闭右开,说明没有元素,返回空树。● 中序遍历 inorder = [9,3,15,20,7]2、找到了root节点,去中序就可以确认左子树和右子树。根据一棵树的中序遍历与后序遍历构造二叉树。注意: 你可以假设树中没有重复的元素。

2024-05-15 17:17:09 250

原创 浅析Redis④:字典dict实现

在 Redis 中,dict 是指哈希表(hash table)的一种实现,用于存储键值对数据。dict 是 Redis 中非常常用的数据结构之一,用于实现 Redis 的键空间。在 Redis 源码中,dict 是一个通用的、高性能的哈希表实现,它采用开放寻址法(open addressing)作为冲突解决方案,并且具有良好的性能特征。在 Redis 的源码中,dict 被用于实现 Redis 中的数据库、哈希键(hash key)等数据结构。

2024-04-16 11:13:47 927

原创 浅析Redis③:命令处理之数据返回Client(下)

Redis是如何将数据写回Client端的?

2024-02-02 17:19:09 1271

原创 MySQL InnoDB是如何实现ACID的?

MySQL是如何实现ACID

2024-01-31 16:00:33 1065 1

原创 JVM问题排查手册

内存使用率不断上升,甚至开始使用 SWAP 内存,同时可能出现 GC 时间飙升,线程被 Block 等现象。中添加VM参数(在生产环境请谨慎!top发现JAVA实际占用的RES。

2024-01-25 11:24:56 627

原创 浅析Redis②:命令处理之epoll实现(中)

Redis的非阻塞的核心epoll是如何实现的?

2024-01-24 15:50:07 1402

原创 Dubbo3在k8s下网卡地址注册时引发的问题

在k8s host网络模式下,dubbo3在注册zk时,偶现注册地址IP来回变化的情况,有可能获取的是宿主机IP,有可能获取的是Docker的虚拟IP,host网络模式正常情况下,应该是获取宿主机IP,而不应该获取docker虚拟IP。

2024-01-19 09:55:27 575

原创 浅析Redis①:命令处理核心源码分析(上)

毫无疑问,Redis已经成为我们日常开发中最长使用的缓存数据库,Redis如此高效的原因,是因为采用了非阻塞I/O模型来处理命令请求,这是我们耳熟能详的事情了,那么Redis具体是如何实现非阻塞I/O的呢?Redis是如何接收命令请求,并执行命令,再返回给客户端的呢?我们来一起探究。本篇是Redis源码分析系列的第一篇,我们来一起看一下Redis处理命令的核心实现机制。

2024-01-18 11:01:33 1218

原创 Redis6.0 Client-Side缓存是什么

Redis在其6.0版本中加入了Client-side caching的支持,开启该功能后,Redis可以将指定的key-value缓存在客户端侧,这样当客户端发起请求时,如果客户端侧存在缓存,则无需请求Redis Server端。

2023-12-27 17:07:49 1710

原创 2023.12面试题汇总小结

2023.12 面试题小结

2023-12-10 13:45:58 1059

原创 Redis key过期删除机制实现分析

当我们创建Redis key时,可以通过expire命令指定key的过期时间(TTL),当超过指定的TTL时间后,key将会失效。那么当key失效后,Redis会立刻将其删除么?如果不会,那么何时Redis才将其真正的删除呢?我们来一起一探究竟。

2023-12-06 17:59:30 1335

原创 什么是GraalVM

需要注意的是,GraalVM 的预编译器只适用于一些特定的应用程序场景,例如无状态的函数式服务或命令行工具等,而不适用于那些需要动态修改代码或依赖于动态加载模块的应用程序。需要注意的是,由于每个应用程序都是独特的,因此需要根据具体的应用程序进行评估和调整,以实现最佳的迁移方案。避免使用反射:在 OpenJDK 中,使用反射可以访问或修改私有字段和方法,但是在 GraalVM 中,由于它的 AOT 编译器需要知道所有的代码路径,因此无法动态解析反射调用,这也可能会导致兼容性问题。

2023-12-05 10:13:34 1774

原创 SpringBoot Logback配置文件引入子配置文件

根据子项目中Logback的配置,通过LogPrint类打印的日志,都会打印到指定的文件中,不会打印到主项目的日志文件。核心需要注意的是,子项目的Logback.xml中的配置,需要使用 标签才可以被主项目引入成功。子项目Logback。

2023-12-05 10:09:42 672 1

原创 Apache Druid连接回收引发的血案

minEvictableIdleTimeMillis:最小空闲时间,默认30分钟,如果连接池中非运行中的连接数大于minIdle,并且那部分连接的非运行时间大于minEvictableIdleTimeMillis,则连接池会将那部分连接设置成Idle状态并关闭;那也就是说,如果按照缺省配置,minEvictableIdleTimeMillis 30分钟,maxEvictableIdleTimeMillis 7天,确实可能会出现Druid认为连接还存活着,但MySQL判断空闲时间超过配置,将会回收连接。

2023-11-09 15:52:10 1537 1

原创 Java判断文件是否是图片

【代码】Java判断文件是否是图片。

2023-11-06 16:00:34 602

原创 每天学一个MySQL函数(二):CONCAT_WS

MySQL CONCAT_WS() 函数用来通过指定的分隔符按顺序拼接指定的 2 个或多个字符串,并返回拼接后的字符串。如果拼接的参数中一个为 NULL, CONCAT_WS() 函数会忽略 NULL 值,如果只有一个参与拼接的字符串参数,则原样返回此字符串。

2023-09-15 15:59:56 1786

原创 每天学一个MySQL函数(一):CONCAT

MySQL CONCAT() 函数用来按顺序拼接指定的 2 个或多个字符串,并返回拼接后的字符串。如果您需要使用分隔符连接多个字符串,请您使用 CONCAT_WS() 函数。如果拼接的参数中一个为 NULL, 则返回 NULL。

2023-09-14 17:34:33 456

原创 Skywalking Kafka Tracing实现

Skywalking默认场景下,Tracing对于消息队列的发送场景,无法将TraceId传递到下游消费者,但对于微服务场景下,是有大量消息队列的业务场景的,这显然无法满足业务预期。

2023-08-23 10:45:05 2257

原创 MySQL主键自增有几种模式?

在大多数的业务场景下,我们的数据表的一般会默认使用主键自增长()模式,在执行语句时,MySQL会自动为数据行生成主键ID,保证其单调递增和不重复的。一般情况下,我们很少会关注的策略模型,事实上,InnoDB提供了一个可配置的自增长模型机制,可以显著提高向带有列的表添加记录的SQL语句的可扩展性和性能。本篇,我们就来简要了解一下MySQL InnoDB的主键自增长策略模式。MySQL将操作分为三类:1、插入的记录行数是可以事先确定的。包括最常见的单条、,但不包括2、插入的记录行数是无法事先确定的。包括 ,,

2023-07-11 17:08:41 1387

原创 MySQL为什么有了redolog还需要double write buffer?

我们知道MySQL InnoDB引擎使用redolog作为异常容灾恢复的机制,当MySQL进程发生异常退出、机器断电等,在重新启动时,使用redolog恢复。OK,redolog是被MySQL设计为异常崩溃恢复的,double write buffer同样是为了保证数据完整性,那么既然已经有了redolog,为什么还需要double write buffer(双写缓冲区)呢?

2023-06-09 11:24:16 2431 5

翻译 Redis为什么使用SkipLists实现SortedSets

Redis作者Antirez的解释:id=1171423。

2023-05-23 16:31:19 130

原创 MySQL慢SQL探究

我们在日常开发中,一定遇见过某些SQL执行较慢的情况,我们俗称“慢SQL”,如果你对系统的接口性能要求较高的话,一定不会放过这种SQL,肯定会想办法进行解决,那么,导致慢SQL出现的原因,究竟可能都有哪些呢?这是一道经典的面试题,就此我们来研究一番,下面,我们就来好好看一下,原因可能出在哪里。本篇我们将从如下几个方面进行讨论:1、慢SQL捕获2、执行计划分析3、引擎参数配置分析让我们就此开启本次慢SQL分析之旅,Let’s go!

2023-01-05 09:53:22 2693 2

原创 深入浅出理解ThreadPoolExecutor

在互联网的开发场景下,很多业务场景下我们需要使用到多线程的技术,从 Java 5 开始,JDK中 提供了线程池的实现,线程池就是一个线程的容器,每次只执行额定数量的线程。java.util.concurrent包中提供了线程池类ThreadPoolExecutor类来管理线程,同时提供了工厂类Executors简化线程池的使用。本篇,我们将来详细的理解一下ThreadPoolExecutor的使用方式及其内部核心实现机制,让你明明白白的使用好线程池,Let’s do it!

2023-01-03 16:55:14 355

原创 为什么MySQL 8.0删除了查询缓存

MySQL在其最新的8.0版本中,删除了查询缓存(`Query Cache`)区域,就此,MySQL的`Query Cache`彻底的退出了历史舞台。在5.7版本中,MySQL已经将`Query Cache`的选项(`query_cache_type`)的缺省值设为了关闭,并在5.7.20版本中,将该配置标记为了`Deprecated`。那么MySQL经历这么多个版本的迭代后,为什么会取消该区域?`Query Cache`设计的初衷是什么?

2022-11-07 20:42:03 5353 1

原创 Java判断日期在指定时间段中的第几周

/** * 给定开始时间和结束时间,判断当前时间是第几周,七天为一周,按照自然周进行计算 * * @param startTime * @return */public static int getWeek(long startTime, long currentTime, long endTime) { if (currentTime < startTime || endTime < startTime) { return 0; } Cal

2021-07-28 15:33:26 2487

原创 什么是MySQL MVCC的ReadView?

背景MySQL InnoDB RR隔离级别是否能够避免幻读?我们都知道,在MySQL InnoDB中,支持四种事物隔离级别,分别为:1、READ UNCOMMITED(未提交读):使用查询语句不会加锁,允许脏读,也就是可能读取到其他会话中未提交事务修改的数据。2、READ COMMITED(提交读):只能读取到已经提交的数据,只对记录加记录锁,而不会在记录之间加间隙锁,所以允许新的记录插入到被锁定记录的附近,所以再多次使用查询语句时,可能得到不同的结果(Non-Repeatable Read)。3

2021-06-27 16:02:24 1841

原创 Leetcode Hot100题解——04

7、删除链表的倒数第 N 个结点(Leetcode 19)题目描述:给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]代码:class Solution { public ListNode removeNthFromEnd(ListNode head, int n) { ListNode pre = new ListNode(0); pre.next = h

2021-05-23 21:25:49 386

空空如也

空空如也

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

TA关注的人

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