- 博客(208)
- 收藏
- 关注
原创 亿级排行榜设计
假如有10亿的用户,每个用户有自己的分数(score),请你设计一个排行榜,可以根据用户的分数进行排名,每个用户可以知道自己在排行榜中的排名情况。
2024-11-01 15:26:47 540
原创 数组中的第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 407
原创 Leetcode Hot100 跳跃游戏
本题是一道典型的贪心算法,思路是遍历数组中每一个元素,尝试找到第一个可以跳过终点的元素。每一位元素的跳跃距离就是他自身的数值。可以跳到的最远距离,就是。
2024-06-04 10:51:07 173
原创 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 247
原创 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 195
原创 Leetcode Hot100 最长回文子串
给你一个字符串 s,找到 s 中最长的回文子串。最容易理解的中心扩散法,我们记忆这一种解法。解释:“aba” 同样是符合题意的答案。输入:s = “babad”输入:s = “cbbd”
2024-05-30 16:46:35 307
原创 Leetcode 从中序与后序遍历序列构造二叉树
1、根据后序结果,可以确到root节点的位置,即后序的最后一个元素。3、确认递归退出条件,当不满足左闭右开,说明没有元素,返回空树。● 中序遍历 inorder = [9,3,15,20,7]2、找到了root节点,去中序就可以确认左子树和右子树。根据一棵树的中序遍历与后序遍历构造二叉树。注意: 你可以假设树中没有重复的元素。
2024-05-15 17:17:09 235
原创 浅析Redis④:字典dict实现
在 Redis 中,dict 是指哈希表(hash table)的一种实现,用于存储键值对数据。dict 是 Redis 中非常常用的数据结构之一,用于实现 Redis 的键空间。在 Redis 源码中,dict 是一个通用的、高性能的哈希表实现,它采用开放寻址法(open addressing)作为冲突解决方案,并且具有良好的性能特征。在 Redis 的源码中,dict 被用于实现 Redis 中的数据库、哈希键(hash key)等数据结构。
2024-04-16 11:13:47 824
原创 JVM问题排查手册
内存使用率不断上升,甚至开始使用 SWAP 内存,同时可能出现 GC 时间飙升,线程被 Block 等现象。中添加VM参数(在生产环境请谨慎!top发现JAVA实际占用的RES。
2024-01-25 11:24:56 575
原创 Dubbo3在k8s下网卡地址注册时引发的问题
在k8s host网络模式下,dubbo3在注册zk时,偶现注册地址IP来回变化的情况,有可能获取的是宿主机IP,有可能获取的是Docker的虚拟IP,host网络模式正常情况下,应该是获取宿主机IP,而不应该获取docker虚拟IP。
2024-01-19 09:55:27 501
原创 浅析Redis①:命令处理核心源码分析(上)
毫无疑问,Redis已经成为我们日常开发中最长使用的缓存数据库,Redis如此高效的原因,是因为采用了非阻塞I/O模型来处理命令请求,这是我们耳熟能详的事情了,那么Redis具体是如何实现非阻塞I/O的呢?Redis是如何接收命令请求,并执行命令,再返回给客户端的呢?我们来一起探究。本篇是Redis源码分析系列的第一篇,我们来一起看一下Redis处理命令的核心实现机制。
2024-01-18 11:01:33 1135
原创 Redis6.0 Client-Side缓存是什么
Redis在其6.0版本中加入了Client-side caching的支持,开启该功能后,Redis可以将指定的key-value缓存在客户端侧,这样当客户端发起请求时,如果客户端侧存在缓存,则无需请求Redis Server端。
2023-12-27 17:07:49 1582
原创 Redis key过期删除机制实现分析
当我们创建Redis key时,可以通过expire命令指定key的过期时间(TTL),当超过指定的TTL时间后,key将会失效。那么当key失效后,Redis会立刻将其删除么?如果不会,那么何时Redis才将其真正的删除呢?我们来一起一探究竟。
2023-12-06 17:59:30 1168
原创 什么是GraalVM
需要注意的是,GraalVM 的预编译器只适用于一些特定的应用程序场景,例如无状态的函数式服务或命令行工具等,而不适用于那些需要动态修改代码或依赖于动态加载模块的应用程序。需要注意的是,由于每个应用程序都是独特的,因此需要根据具体的应用程序进行评估和调整,以实现最佳的迁移方案。避免使用反射:在 OpenJDK 中,使用反射可以访问或修改私有字段和方法,但是在 GraalVM 中,由于它的 AOT 编译器需要知道所有的代码路径,因此无法动态解析反射调用,这也可能会导致兼容性问题。
2023-12-05 10:13:34 1418
原创 SpringBoot Logback配置文件引入子配置文件
根据子项目中Logback的配置,通过LogPrint类打印的日志,都会打印到指定的文件中,不会打印到主项目的日志文件。核心需要注意的是,子项目的Logback.xml中的配置,需要使用 标签才可以被主项目引入成功。子项目Logback。
2023-12-05 10:09:42 617 1
原创 Apache Druid连接回收引发的血案
minEvictableIdleTimeMillis:最小空闲时间,默认30分钟,如果连接池中非运行中的连接数大于minIdle,并且那部分连接的非运行时间大于minEvictableIdleTimeMillis,则连接池会将那部分连接设置成Idle状态并关闭;那也就是说,如果按照缺省配置,minEvictableIdleTimeMillis 30分钟,maxEvictableIdleTimeMillis 7天,确实可能会出现Druid认为连接还存活着,但MySQL判断空闲时间超过配置,将会回收连接。
2023-11-09 15:52:10 1232 1
原创 每天学一个MySQL函数(二):CONCAT_WS
MySQL CONCAT_WS() 函数用来通过指定的分隔符按顺序拼接指定的 2 个或多个字符串,并返回拼接后的字符串。如果拼接的参数中一个为 NULL, CONCAT_WS() 函数会忽略 NULL 值,如果只有一个参与拼接的字符串参数,则原样返回此字符串。
2023-09-15 15:59:56 1653
原创 每天学一个MySQL函数(一):CONCAT
MySQL CONCAT() 函数用来按顺序拼接指定的 2 个或多个字符串,并返回拼接后的字符串。如果您需要使用分隔符连接多个字符串,请您使用 CONCAT_WS() 函数。如果拼接的参数中一个为 NULL, 则返回 NULL。
2023-09-14 17:34:33 389
原创 Skywalking Kafka Tracing实现
Skywalking默认场景下,Tracing对于消息队列的发送场景,无法将TraceId传递到下游消费者,但对于微服务场景下,是有大量消息队列的业务场景的,这显然无法满足业务预期。
2023-08-23 10:45:05 2001
原创 MySQL主键自增有几种模式?
在大多数的业务场景下,我们的数据表的一般会默认使用主键自增长()模式,在执行语句时,MySQL会自动为数据行生成主键ID,保证其单调递增和不重复的。一般情况下,我们很少会关注的策略模型,事实上,InnoDB提供了一个可配置的自增长模型机制,可以显著提高向带有列的表添加记录的SQL语句的可扩展性和性能。本篇,我们就来简要了解一下MySQL InnoDB的主键自增长策略模式。MySQL将操作分为三类:1、插入的记录行数是可以事先确定的。包括最常见的单条、,但不包括2、插入的记录行数是无法事先确定的。包括 ,,
2023-07-11 17:08:41 1196
原创 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 2123 3
原创 MySQL慢SQL探究
我们在日常开发中,一定遇见过某些SQL执行较慢的情况,我们俗称“慢SQL”,如果你对系统的接口性能要求较高的话,一定不会放过这种SQL,肯定会想办法进行解决,那么,导致慢SQL出现的原因,究竟可能都有哪些呢?这是一道经典的面试题,就此我们来研究一番,下面,我们就来好好看一下,原因可能出在哪里。本篇我们将从如下几个方面进行讨论:1、慢SQL捕获2、执行计划分析3、引擎参数配置分析让我们就此开启本次慢SQL分析之旅,Let’s go!
2023-01-05 09:53:22 2601 2
原创 深入浅出理解ThreadPoolExecutor
在互联网的开发场景下,很多业务场景下我们需要使用到多线程的技术,从 Java 5 开始,JDK中 提供了线程池的实现,线程池就是一个线程的容器,每次只执行额定数量的线程。java.util.concurrent包中提供了线程池类ThreadPoolExecutor类来管理线程,同时提供了工厂类Executors简化线程池的使用。本篇,我们将来详细的理解一下ThreadPoolExecutor的使用方式及其内部核心实现机制,让你明明白白的使用好线程池,Let’s do it!
2023-01-03 16:55:14 337
原创 为什么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 5030 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 2450
原创 什么是MySQL MVCC的ReadView?
背景MySQL InnoDB RR隔离级别是否能够避免幻读?我们都知道,在MySQL InnoDB中,支持四种事物隔离级别,分别为:1、READ UNCOMMITED(未提交读):使用查询语句不会加锁,允许脏读,也就是可能读取到其他会话中未提交事务修改的数据。2、READ COMMITED(提交读):只能读取到已经提交的数据,只对记录加记录锁,而不会在记录之间加间隙锁,所以允许新的记录插入到被锁定记录的附近,所以再多次使用查询语句时,可能得到不同的结果(Non-Repeatable Read)。3
2021-06-27 16:02:24 1623
原创 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 369
原创 Leetcode Hot100题解——03
5、三数之和(Leetcode 15)题目描述:给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]输入:nums = []输出:[]代码:class Solution { public List<List<Inte
2021-05-23 17:29:40 131
原创 Leetcode Hot100题解——02
3、无重复字符的最长子串(Leetcode 03)题目描述:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例:输入: s = “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。输入: s = “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。代码:class Solution { public int lengthOfLongestSubString(String s) {
2021-04-23 18:21:22 131
原创 Leetcode Hot100题解——01
一、两数之和题目描述:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。代码:class Solution { public i
2021-04-22 22:20:09 394
原创 MySQL InnoDB RR隔离级别是否能够避免幻读?
背景在MySQL的InnoDB引擎中,支持四种事务隔离级别,分别如下:1、READ UNCOMMITED(未提交读):使用查询语句不会加锁,允许脏读,也就是可能读取到其他会话中未提交事务修改的数据。2、READ COMMITED(提交读):只能读取到已经提交的数据,只对记录加记录锁,而不会在记录之间加间隙锁,所以允许新的记录插入到被锁定记录的附近,所以再多次使用查询语句时,可能得到不同的结果(Non-Repeatable Read)。3、REPEATABLE READ(可重复读):多次读取同一范围的
2021-04-09 14:27:01 782
原创 什么是MySQL数据空洞?
背景MySQL的数据存储在表空间中,有的时候我们删除了一张表的一半的数据,但是发现表空间文件的大小并没有减少,这是什么原因呢?MySQL数据空洞当对一条数据执行delete操作时,MySQL将数据删除后,并未将数据占用的空间返还给操作系统,而是将当前空间标记为"可复用",当有新的数据插入时,则不会重新申请空间,而是插入到"可复用"空间中,这种"可复用"空间,称之为数据空洞。MySQL官方文档对此的解释如下:After deleting a large part of a MyISAM or AR
2021-04-06 17:57:09 1969
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人