1.5k 1 分钟

# Redis 持久化 # RDB RDB 全程 Redis Database Backup file (Redis 数据备份文件), 也被叫做 Redis 数据快照。简单来说就是把内存的所有数据都记录到磁盘中。当 Redis 实例故障重启后,从磁盘读取快照文件,恢复数据. Redis 内部有触发 RDB 的机制,可以在 redis.conf 文件中找到,格式如下 : 1234# 900秒内, 如果至少有一个key被修改, 则执行bgsave, 如果是sava "" 则表示禁用RDBsave 900 1save 300 10save 60...
2.1k 2 分钟

# 字节码指令 # 局部变量压栈指令 局部变量压栈指令是将给定的局部变量表中的数据压入操作数栈 这类指令大体可以分为 : x_load_<n> (x 为 i, l, f, d, a n 为 0, 1, 2, 3) xload (x 为 i, l, f, d, a) 指令 xload_n 标识将第 n 个局部变量压入操作数栈,比如 iload_1, fload_0, aload_0 等指令。其中 aload_n 标识将一个对象引用压栈 指令 xload 通过指定参数的形式,把局部变量压入操作数栈,当使用这个命令时,表示局部变量的数量可能超过了 4 个。比如...
4.6k 4 分钟

# 虚拟机栈 Java 虚拟机栈早期也叫 Java 栈,每个线程在创建时都会创建一个虚拟机栈,其内部保存一个个的栈帧,对应着一次次的 Java 方法调用 Java 虚拟机栈生命周期和线程一致 Java 虚拟机栈主管 Java 程序的运行,它保存方法的局部变量,部分结果,并参与方法的调用和返回 # 栈的存储结构和内部原理 # 栈的存储结构 每个线程都有自己的栈,栈中的数据都是以栈帧的格式存在 在这个线程上正在执行的每个方法都各自对应一个栈帧 栈帧是一个内存区块,是一个数据集,维系着方法执行过程中的各种数据信息 # 栈的内部原理 JVM 直接对 Java...
435 1 分钟

# javap 操作 # javac -g 操作 解析字节码文件得到的信息中,有些信心 (局部变量表,指令和代码行偏移量映射表,常量池中方法的参数名称等等) 需要在使用 javac 编译成 class 文件时,指定参数才能输出 # javap 参数说明 -version 版本信息,就是当前 javap 所在的 jdk 的版本信息,不是 class 在哪个 jdk 下生成的 -public 仅显示公共类和成员 -protected 显示受保护的 / 公共类和成员 -p -private 显示所有类和成员 -package 显示程序包 / 受保护的 / 公共类和成员...
4.1k 4 分钟

# Class 文件解析 (下) # 类索引,父类索引,接口索引集合 在访问标记后,会指定该类的类别,父类类别以及实现的接口,格式如下 : 长度 含义 u2 this_class u2 super_class u2 interfaces_count u2 interfaces[interfaces_count] 这三项数据来确定这个类的继承关系 类索引用于确定这个类的全限定名 父类索引用于确定这个类的父类的全限定名。由于 Java 语言不允许多重继承,所以父类索引只有一个,除了 java.lang.Object 之外,所有的 Java 类都有父类。因此除了...
7.2k 7 分钟

# Class 文件解析 (上) # Class 文件本质和内部数据类型 Class 类的本质 任何一个 CLass 文件都对应着唯一一个类或接口的定义信息,但反过来说,Class 文件实际上并不一定以磁盘文件的形式存在. Class 文件是以 8 位字节为基础单位的二进制流 Class 文件格式 Class 的结构不像 XML 等描述语言,由于它没有任何分隔符号,所以在其中的数据项,无论是字节顺序还是数量,都是被阉割限定的,哪个字节代表什么含义,长度是多少,先后顺序如何,都不允许改变. Class 文件格式采用一种类似于 C 语言结构体的方式进行数据存储,这种数据结构中只有两种数据类型...
2.5k 2 分钟

# Redis 基础 # Redis 数据结构介绍 Redis 是一个 key-value 的数据库,key 一般是 String 类型,不过 value 的类型多种多样 value 类型 示例 String hello world Hash List [A -> B -> C -> C] Set SortedSet GEO BitMap 01101100101011011 HyperLog 01010101101001101 # Redis 通用命令 通用命令是部分数据类型的,都可以使用的命令,常见的有 : KEYS:...
3.2k 3 分钟

# Redis 实战 # 缓存更新策略 内存淘汰 超时剔除 主动更新 说明 不用自己维护,利用 Redis 的内存淘汰机制,当内存不足时自动淘汰部分数据,下次查询时更新缓存 给缓存添加 TTL 时间,到期后自动删除缓存,下次更新时更新缓存 编写业务逻辑,在修改数据库时,更新缓存 一致性 差 一般 好 维护成本 无 低 高 业务场景 : 低一致性需求:使用内存淘汰机制,例如店铺类型的查询缓存 高一致性需求:主动更新,并以超时剔除作为兜底方案。例如店铺详情查询的缓存 # 主动更新策略 Cache Aside Pattern :...
618 1 分钟

# 设计模式与原则满足情况 工厂方法模式: 单一职责原则 开放 - 封闭原则 里氏替换原则 抽象工厂模式: 单一职责原则 开放 - 封闭原则 里氏替换原则 单例模式: 单一职责原则 开放 - 封闭原则 建造者模式: 单一职责原则 开放 - 封闭原则 里氏替换原则 依赖反转原则 原型模式: 单一职责原则 开放 - 封闭原则 依赖反转原则 适配器模式: 单一职责原则 开放 - 封闭原则 依赖反转原则 接口隔离原则 桥接模式: 单一职责原则 开放 - 封闭原则 里氏替换原则 依赖反转原则 合成复用原则 装饰模式: 单一职责原则 开放 -...
3k 3 分钟

# 设计模式概述 # 设计模式分类 创建型模式 用于描述 “怎样创建对象”, 它的主要特点是 “将对象的创建与使用分离”. 有单例,原型,工厂方法,抽象工厂,建造者等 5 中创造性模式 结构型模式 用于描述如何将类或对象按某种布局组成更大的结构,有代理,适配器,桥接,装饰,外观,享元,组合等 7 中结构性模式 行为型模式 用于描述类或对象之间怎样相互协作共同完成单个对象无法单独完成的任务,以及怎样分配职责,有模板方法,策略,命令,职责链,状态,观察者,中介者,迭代器,访问者,备忘录,解释器等 11 种行为模式 # 类与类之间关系的表示方式 #...