编辑
2023-11-11
Redis源码阅读
00

Redis的SDS(Simple Dynamic String)是Redis中使用最多的基础数据结构之一。它具有以下特色:

  1. 动态扩展内存:SDS可以动态地扩展内存,允许字符串的内容进行修改和追加。这与其他语言中的字符串类型不同,它们通常分为可变和不可变两种类型。

  2. 二进制安全:SDS可以存储任意二进制数据,而不仅仅是可打印字符。它是二进制安全的,意味着它可以存储任意字节的数据,而不会因为特殊字符而导致数据损坏。

  3. 与传统C语言字符串兼容:SDS与传统的C语言字符串类型兼容,可以在需要传入C语言字符串的地方使用SDS。它的类型定义与C语言字符串相同,都是char*类型。

编辑
2023-11-11
数据库理论基础
00

RUM猜想是一个存储结构开销模型,它考虑了读取(Read)、更新(Update)和内存(Memory)三个因素的开销。根据RUM猜想,当优化其中两项开销时,第三项开销不可避免地会恶化,并且在优化过程中只能以牺牲其中一项为代价[1]

具体来说,RUM猜想指出,在设计存储引擎时,如果我们设定了两项开销的上限,那么第三项开销将会有一个下限,无法进一步减少[3]。这意味着在优化存储引擎时,我们需要在读取、更新和内存开销之间进行权衡和取舍。

编辑
2023-11-11
后端
00

Go语言的init函数是一个特殊的函数

  1. init函数在每个包完成初始化后自动执行,并且执行优先级比main函数高。
  2. 每个包可以有多个init函数,它们按照定义的顺序依次执行。
  3. 同一个包中不同文件的init函数执行顺序是按照文件名字符串比较的顺序执行。
  4. 不同包的init函数执行顺序是按照包导入的依赖关系决定的,先执行被依赖的包的init函数,最后执行main函数。
  5. init函数不能被其他函数调用,它会在main函数执行之前自动被调用。
编辑
2023-11-11
Tomcat源码学习
00

Tomcat中的Listener机制允许我们在Servlet Context生命周期中的特定时间点执行自定义代码。

Tomcat支持以下几种类型的Listener:

  1. ServletContextListener

装配在ServletContext级别。在web应用启动和关闭时触发。

编辑
2023-11-11
Tomcat源码学习
00

在Tomcat中,每个HTTP请求都会通过一系列阶段(Phase)来处理。这些阶段由 Pipeline 组织起来。

Tomcat Pipeline 由多个 Valve 组成,每个 Valve 对应一个阶段。请求在每个阶段中都会执行相应的 valve。

Tomcat 默认 Pipeline 中包含了以下几个重要的 Valve: