要在 Java 里实现 redo log(重做日志)的随机写与追加写,核心不在“写文件”本身,而在两件事:一是把 redo 记录变成可定位、可校验、可恢复的二进制格式;二是选择合适的 I/O 原语(FileChannel/RandomAccessFile + 强制落盘语义),并在崩溃恢复时用同一套格...
a == c 的结果取决于 a 的类型与取值,但在常见语境里(a 也是 Integer 且值为 100)结果是 true。 == 在包装类型上的真实含义 在 Java 里,== 对引用类型比较的是引用是否指向同一对象(对象身份),不是数值是否相等。 Integer 是包装类型(wrapper),属于...
漏桶算法(Leaky Bucket)是一类经典的流量整形(Traffic Shaping)与限速(Rate Limiting)模型,用一个“底部有小孔的桶”来比喻:数据包或请求像水一样倒进桶里,桶以恒定速度往外漏水。其核心目标是把突发流量平滑成稳定输出,从而保护下游服务与链路。 漏桶的核心机制:进桶...
爬楼梯问题的核心,是把“走到第 n 阶的方法数”拆成更小台阶的可复用结果,用递推把指数级枚举压成线性计算。典型设定是每次可爬 1 阶或 2 阶。 递推建模:把最后一步当作分解点 设 f(n) 表示到达第 n 阶的方案数。 到达第 n 阶的最后一步只有两类来源: 从第 n-1 阶迈 1 阶上来:贡献 ...
事务的四大特性(ACID:Atomicity、Consistency、Isolation、Durability)不是“更严谨”这么简单,它们分别针对数据库在并发、故障、异常中最常见的四类风险:做了一半、做完了但不对、大家互相踩踏、做完了但丢了。每一项特性都对应一组具体要避免的问题。 原子性(Atom...
@Transactional 用来声明事务边界与事务语义(传播、隔离、回滚规则等)。工程里最常显式设置的属性集中在“事务怎么加入”“读写与性能”“遇到哪些异常回滚”“超时与资源占用”“多事务管理器选择”这几类。 传播行为(propagation) 控制方法被调用时,事务如何“加入或新开”。常见取值来...
inode 是类 Unix 文件系统里的“文件元数据记录”。它不保存文件内容本身,而是保存文件“是什么、放哪儿、怎么访问”等关键信息;文件内容则存放在数据块(data blocks)里。可以把 inode 理解为图书馆里每本书的索引卡:索引卡写着书名、作者、书架位置和借阅规则,但正文在书本里。 in...
ReentrantLock 的线程安全,本质由两件事托底:互斥与内存可见性。互斥保证同一时刻只有一个线程进入临界区(critical section,受保护的共享资源访问区);内存可见性保证临界区内对共享变量的写入,在解锁后对随后获得锁的线程可见。 互斥:基于 AQS 的“独占状态”与 CAS 争用...
消息队列“消息不丢失”本质是把一次消息流转拆成三段来控风险:生产端把消息可靠地交给 Broker(队列服务端),Broker 把消息可靠地落到可恢复介质并可复制,消费端把消息可靠地处理完再确认(ack)。任何一段默认都可能因为进程崩溃、网络闪断、磁盘故障、主从切换而丢。 丢失会发生在三个位置 生产端...
评判召回率(Recall)和精度(Precision)的优劣,本质是在衡量“漏掉多少”和“误报多少”这两类成本,并把它们放回到同一个业务场景、同一套统计口径与决策阈值(threshold)上比较。脱离目标人群、正负样本比例、误判代价与上线约束,任何“高/低”的评价都不成立。 指标含义与最小口径 二者...