草庐IT

这一次,吃了Redis的亏,也败给了GPT

关注【离心计划】,一起离开地球表面 背景组内有一个系统中有一个延迟任务的需求,关于延迟任务常见的做法有时间轮、延迟MQ还有RedisZset等方案,关于时间轮,这边小苏有一个大学时候做的demo:https://github.com/JAYqq/GoDelayTasks该系统采用的是zset的方案,在系统稳定运行了三年多后,这周出现了一个大面积故障,背后的原因居然是zscan的问题,我们今天就简单复盘一下这次的故障,好好盘一盘zset。 zset实现延时任务队列关于zset的底层数据结构和基本操作,在之前的文章就已经阐述过了,简单来说就是底层由ziplist组织,超过一定阈值(默认128)就改

【超用心整理】Markdown常用语法介绍,看这一个就够了

Markdown常用语法介绍Markdown是一种使用一定的语法将普通的文本转换成HTML标签文本的编辑语言,它的特点是可以使用普通的文本编辑器来编写,只需要按照特定的语法标记就可以得到丰富多样的HTML格式的文本。本文就来介绍一些常用的Markdown语法以及推荐几款方便又实用的Markdown编辑器。换行问题换行是markdown最基本的语法规则,也是它不同于普通文本的地方,想要在某一行之后进行换行只按常规的Enter键是不行的。换行有3种方式:在行的末尾添加至少两个空格,然后再接Enter另起一行;第2种方式是在需要换行的两行内容之间空一行;第3种方式是在需要换行的内容末尾添加一个换行标

【超用心整理】Markdown常用语法介绍,看这一个就够了

Markdown常用语法介绍Markdown是一种使用一定的语法将普通的文本转换成HTML标签文本的编辑语言,它的特点是可以使用普通的文本编辑器来编写,只需要按照特定的语法标记就可以得到丰富多样的HTML格式的文本。本文就来介绍一些常用的Markdown语法以及推荐几款方便又实用的Markdown编辑器。换行问题换行是markdown最基本的语法规则,也是它不同于普通文本的地方,想要在某一行之后进行换行只按常规的Enter键是不行的。换行有3种方式:在行的末尾添加至少两个空格,然后再接Enter另起一行;第2种方式是在需要换行的两行内容之间空一行;第3种方式是在需要换行的内容末尾添加一个换行标

深度优先搜索(DFS),看这一篇就够了。

一,定义:深度优先搜索的思路和树的先序遍历很像,下面是百度百科上的定义:深度优先遍历图的方法是,从图中某顶点v出发:(1)访问顶点v;(2)依次从v的未被访问的邻接点出发,对图进深度优先遍历;直至图中和v有路径相通的顶点都被访问;(3)若此时图中尚有顶点未被访问,则从一个未被访问的顶点出发,重新进行深度优先遍历,直到图中所有顶点均被访问过为止。 当然,当人们刚刚掌握深度优先搜索的时候常常用它来走迷宫.事实上我们还有别的方法,那就是广度优先搜索(BFS). 对于定义的理解,可以结合斐波那契数列(虽然用递归来写斐波那契是一种很糟糕的写法)来进行理解,如下图:​其中,右边这个树上的顺序是这样的:​ 

深度优先搜索(DFS),看这一篇就够了。

一,定义:深度优先搜索的思路和树的先序遍历很像,下面是百度百科上的定义:深度优先遍历图的方法是,从图中某顶点v出发:(1)访问顶点v;(2)依次从v的未被访问的邻接点出发,对图进深度优先遍历;直至图中和v有路径相通的顶点都被访问;(3)若此时图中尚有顶点未被访问,则从一个未被访问的顶点出发,重新进行深度优先遍历,直到图中所有顶点均被访问过为止。 当然,当人们刚刚掌握深度优先搜索的时候常常用它来走迷宫.事实上我们还有别的方法,那就是广度优先搜索(BFS). 对于定义的理解,可以结合斐波那契数列(虽然用递归来写斐波那契是一种很糟糕的写法)来进行理解,如下图:​其中,右边这个树上的顺序是这样的:​ 

linux内核I2C子系统详解——看这一篇就够了

1、I2C通信协议参考博客:《I2C通信协议详解和通信流程分析》;2、通过KXTF9-2050芯片分析I2C协议参考博客:《通过KXTF9-2050芯片分析I2C协议》;3、I2C子系统框架(1)I2C子系统分为三层:I2C核心层、I2C适配器驱动、I2C设备驱动;(2)I2C核心层:管理I2C驱动和I2C设备的注册、匹配,实现I2C的通信方法,是对I2C通信的抽象框架,不和具体硬件相关;(3)I2C适配器驱动:对应Soc的I2C控制器,把I2C控制器看做一个设备,实现I2C控制器的驱动代码,和具体的Soc相关;(4)I2C设备驱动:和具体I2C接口的外设相关,每种外设都有自己的专属I2C驱动

linux内核I2C子系统详解——看这一篇就够了

1、I2C通信协议参考博客:《I2C通信协议详解和通信流程分析》;2、通过KXTF9-2050芯片分析I2C协议参考博客:《通过KXTF9-2050芯片分析I2C协议》;3、I2C子系统框架(1)I2C子系统分为三层:I2C核心层、I2C适配器驱动、I2C设备驱动;(2)I2C核心层:管理I2C驱动和I2C设备的注册、匹配,实现I2C的通信方法,是对I2C通信的抽象框架,不和具体硬件相关;(3)I2C适配器驱动:对应Soc的I2C控制器,把I2C控制器看做一个设备,实现I2C控制器的驱动代码,和具体的Soc相关;(4)I2C设备驱动:和具体I2C接口的外设相关,每种外设都有自己的专属I2C驱动

MySQL 8.0 安装详细教程,看这一篇就够了

同学大家从今天开始我们就开始了,为期三个月的MySQL,中高级篇幅的学习,欢迎大家持续关注,今天我们首先传授大家mysql软件的安装,以及8.0版本和5.7版本之间同步教学,(我也是名学生,哪里不理解,欢迎同学们及时与我沟通)MySQL8.0安装:访问网址:MySQL官网  http://www.mysql.com第二步:(点击DOWNLOADS) 第三步(进入,Downloads向下滑动,到最低层,找到MySQLcommunity(GPL)Downloads,单击进入),社区版对于大部分开发者就足够使用了 第四步(找到MySQL,Communityserver点击进入)MySQL社区服务器 

MySQL 8.0 安装详细教程,看这一篇就够了

同学大家从今天开始我们就开始了,为期三个月的MySQL,中高级篇幅的学习,欢迎大家持续关注,今天我们首先传授大家mysql软件的安装,以及8.0版本和5.7版本之间同步教学,(我也是名学生,哪里不理解,欢迎同学们及时与我沟通)MySQL8.0安装:访问网址:MySQL官网  http://www.mysql.com第二步:(点击DOWNLOADS) 第三步(进入,Downloads向下滑动,到最低层,找到MySQLcommunity(GPL)Downloads,单击进入),社区版对于大部分开发者就足够使用了 第四步(找到MySQL,Communityserver点击进入)MySQL社区服务器 

springboot+proguard+maven 实现代码混淆 看这一篇就够了

使用proguard混淆代码只能增加阅读和理解的难度,并不能百分百保证代码安全。常用的应用场景是项目需要部署到客户机器上,一定程度上防止代码泄露。proguard简介ProGuard是一个混淆代码的开源项目,它的主要作用是混淆代码,ProGuard包括以下4个功能:压缩(Shrink):检测并移除代码中无用的类、字段、方法和特性(Attribute)优化(Optimize):对字节码进行优化,移除无用的指令混淆(Obfuscate):使用a,b,c,d这样简短而无意义的名称,对类、字段和方法进行重命名预检(Preveirfy):在Java平台上对处理后的代码进行预检,确保加载的class文件是