自定义博客皮肤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

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

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

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

2024-04-16 11:13:47 234

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

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

2024-02-02 17:19:09 1144

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

MySQL是如何实现ACID

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

原创 JVM问题排查手册

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

2024-01-25 11:24:56 492

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

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

2024-01-24 15:50:07 1157

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

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

2024-01-19 09:55:27 398

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

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

2024-01-18 11:01:33 1055

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

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

2023-12-27 17:07:49 1372

原创 2023.12面试题汇总小结

2023.12 面试题小结

2023-12-10 13:45:58 1014

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

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

2023-12-06 17:59:30 919

原创 什么是GraalVM

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

2023-12-05 10:13:34 1052

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

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

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

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

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

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

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

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

2023-11-06 16:00:34 404

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

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

2023-09-15 15:59:56 856

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

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

2023-09-14 17:34:33 202

原创 Skywalking Kafka Tracing实现

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

2023-08-23 10:45:05 1600

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

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

2023-07-11 17:08:41 622

原创 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 1269 2

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

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

2023-05-23 16:31:19 76

原创 MySQL慢SQL探究

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

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

原创 深入浅出理解ThreadPoolExecutor

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

2023-01-03 16:55:14 311

原创 为什么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 4358 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 2347

原创 什么是MySQL MVCC的ReadView?

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

2021-06-27 16:02:24 1422

原创 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 313

原创 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 99

原创 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 98

原创 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 291

原创 MySQL InnoDB RR隔离级别是否能够避免幻读?

背景在MySQL的InnoDB引擎中,支持四种事务隔离级别,分别如下:1、READ UNCOMMITED(未提交读):使用查询语句不会加锁,允许脏读,也就是可能读取到其他会话中未提交事务修改的数据。2、READ COMMITED(提交读):只能读取到已经提交的数据,只对记录加记录锁,而不会在记录之间加间隙锁,所以允许新的记录插入到被锁定记录的附近,所以再多次使用查询语句时,可能得到不同的结果(Non-Repeatable Read)。3、REPEATABLE READ(可重复读):多次读取同一范围的

2021-04-09 14:27:01 684

原创 什么是MySQL数据空洞?

背景MySQL的数据存储在表空间中,有的时候我们删除了一张表的一半的数据,但是发现表空间文件的大小并没有减少,这是什么原因呢?MySQL数据空洞当对一条数据执行delete操作时,MySQL将数据删除后,并未将数据占用的空间返还给操作系统,而是将当前空间标记为"可复用",当有新的数据插入时,则不会重新申请空间,而是插入到"可复用"空间中,这种"可复用"空间,称之为数据空洞。MySQL官方文档对此的解释如下:After deleting a large part of a MyISAM or AR

2021-04-06 17:57:09 1735

原创 浅谈JVM GC三色标记算法

浅谈JVM GC三色标记算法“同学,可以讲一下JVM的GC三色标记算法吗?”“额……这个……这是啥……不了解”这几天逛脉脉,有的网友提到面试的时候面试官问到了JVM GC的三色标记算法,好吧,看来Java面试真的已经是卷的飞起来,都开始问这种问题了……那么今天,我们就来简单聊聊JVM的GC三色标记算法。三色标记算法三色标记法是一种垃圾回收法,它可以让JVM不发生或仅短时间发生STW(Stop The World),从而达到清除JVM内存垃圾的目的。三色标记可以简洁地描述回收过程中对象状态的变

2021-03-12 18:59:46 1479

原创 Redis你应该了解的这些——持久化

文章目录前言Redis持久化RDB持久化RDB优点RDB缺点RDB工作原理AOF持久化AOF的优点AOF的缺点AOF工作原理AOF的重写机制RDB VS AOF的选择结语前言Redis在互联网应用服务中已经成为了必不可少的基础设施,我们在日常服务开发中会大量的使用Redis,作为一名开发人员,使用Redis最长使用的就是Redis的各种数据结构的操作,以及分布式锁,而Redis底层偏向运维层面的知识,作为开发人员其实也应该有所了解,本篇,我们就来聊聊Redis的运维相关知识。本篇涉及的知识点如下:R

2021-03-11 22:44:28 194

原创 MySQL B+树如何实现联合索引

MySQL B+树如何实现联合索引“同学,你来画一下MySQL的B+树如何实现联合索引的?”“额,这个嘛……这个……俺不晓得……”之前大言不惭说对MySQL还算了解的我今天被这个问题糊的一脸懵逼,本着对问题的求知和探索精神,今天就来聊一聊这个问题,MySQL B+树如何实现联合索引。MySQL索引的数据结构B+树我们都知道在MySQL的InnoDB引擎中,数据的存储是基于聚簇索引来进行构建的,聚簇索引的数据结构为B+树,关于这部分的内容在之前的文章中已经讲过,这里我们再来回顾一下。传送门:闲聊

2021-03-09 01:10:55 3351 5

原创 kafka+zk docker环境搭建

文章目录背景docker-compose安装构建docker-compose配置文件Kafka命令行测试消息的生产和消费背景本篇主要记录一下使用docker搭建kafka+zk的开发环境的过程。使用工具:dockerdocker-compose环境:CentOS 7.2docker-compose安装安装前需确认已经安装Docker,这里不过多说明Docker的安装。安装docker-composesudo curl -L "https://github.com/docker/comp

2021-01-12 21:29:51 379 2

原创 CentOS7 mysql8.0 国内镜像源安装

本篇记录一下mysql 8.0版本的安装过程,由于mysql官方的地址下载非常慢,因此本篇将使用国内的镜像站下载mysql安装包。

2020-11-11 19:17:21 7575 1

原创 CentOS 访问服务器HTML静态资源页

背景正常情况下,我们希望访问Linux服务器上的静态HTML资源页,是不可以直接访问到的,是需要通过部署服务来进行映射访问,本篇就来介绍一下部署服务的过程。部署环境:CentOS 7.x部署1、安装NodeJS首先,我们需要安装NodeJS,选择一个NodeJS的版本进行安装。Node.js v10.xcurl --silent --location https://rpm.nodesource.com/setup_10.x | bash -Node.js v8.xcurl --sile

2020-10-30 14:53:34 2356

原创 SpringBoot CORS前端请求跨域问题解决方案

前言在前后端分离的项目中,当前后端部署不在同一个地址下的时候,请求服务端接口会出现跨域请求报错的情况,关于浏览器跨域的概念,这里不进行解释,直接给出解决办法。解决方案SpringBoot 1.5.x第一种方法:import java.util.List;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import or

2020-10-28 13:07:27 382

原创 闲谈JVM(八):深入理解JVM GC Roots

文章目录前言GC Roots前言在上一篇中,我们对CMS收集器的工作原理进行了详细分析,在分析CMS执行垃圾回收的过程中,提及到了GC Roots的概念,本篇,我们对GC Roots进行展开,详细分析一下JVM中的GC Roots。GC RootsJVM在进行垃圾回收时,如何判断一个对象是否可以被回收,是通过可达性分析来判定对象是否存活的。如上图所示,JVM通过GC Roots来进行判断一个对象是否可以被进行回收。所谓GC Roots,或者说Tracing GC的“根集合”,就是一组必须活跃的

2020-10-21 16:02:58 1416

原创 闲谈JVM(七):浅谈JVM GC之CMS GC

文章目录前言CMS GCCMS收集执行过程初始标记并发标记并发预清理重标记并发清理并发重置GC ROOTCMS的弊端前言在上一篇中,我们对JVM的垃圾回收机制进行了整体的概述,了解了JVM中GC的种类, 本篇,我们对其中的一个GC收集器进行详细的探讨,即目前使用最为广泛的GC收集器——CMS GC。CMS GCOralce官方对CMS的定义:The Concurrent Mark Sweep (CMS) collector is designed for applications that pr

2020-10-16 16:38:16 573

空空如也

空空如也

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

TA关注的人

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