Java学习随笔:HashMap 扩容时到底发生了什么(2026-10-09)
HashMap 是我平时用得最多的集合之一,但很长一段时间里,我对它的理解只停留在“键值对、查询快”这一层。直到认真看了它的扩容逻辑,我才发现这个看似简单的容器背后有不少精心的设计。 先说容量。HashMap 的容量并不是随便一个整数,而是始终保持为 2 的幂。这样做的原因藏在它定位数组下标的方式里 ...
keycloak~安全防护-暴力检查的支持
结合您提供的 Keycloak 14.0.0 截图,我先为您逐一解释这些安全防御(Brute Force Detection)配置项的作用,然后针对您的需求给出具体的配置方案。 一、配置项作用详解 Enabled (启用):ON 开启或关闭暴力破解检测功能。 Permanent Lockout (永 ...
别再瞎装 RabbitMQ 了!从 0 到 1 部署到 Spring Boot 全链路实战,生产级坑全填平
RabbitMQ 从 0 到 1 生产级实战:RPM 单机部署、生产配置避坑、Spring Boot 全链路集成,含 Confirm/Return、手动 ACK、幂等消费、死信队列、镜像集群与 Prometheus 监控。命令代码可直接落地,7 大可靠性难题速查。建议收藏,关注后续延迟队列实战。 ...
Java学习随笔:String 为什么被设计成不可变(2026-10-08)
刚开始学 Java 时,我知道 String 是不可变的,但并不知道“不可变”到底意味着什么。真正让我有感觉的,是一次给字符串拼接之后重新赋值,原来的变量看起来“变了”。其实变的只是引用,字符串对象本身从头到尾都没有被修改过。理解这一点,是理解 String 很多特性的起点。 String 内部用一 ...
Learning C++ (Day 1)
1. 指针与引用 对比项 指针 T* 引用 T& 可否为空 可以,nullptr 合法 必须绑定对象,无空引用 能否重新绑定 可以指向别的对象 绑定后终身不变 是否占内存 占 8 字节(64 位系统) 语义上是别名,通常不占;作类成员或数组元素时占位 算术运算 支持 p+1、p[i] 不支持 多级 ...
rust的所有权以及所有权转移机制
Rust 所有权与所有权转移机制拆解 一句话本质 Rust 的所有权是一套编译期内存管理规则:每个值都有一个“所有者”,所有者负责在离开作用域时释放这个值。所谓“所有权转移 / Move”,就是把这个释放责任从旧所有者转交给新所有者,旧所有者随后失效。 一、三条核心规则 每个值都有且只有一个所有者 ...
什么是范数?用 NumPy 动手算一遍就明白了
做数据科学和机器学习,范数(Norm)这个东西你迟早会碰到。 损失函数正则化、向量相似度计算、矩阵分解——这些场景背后都有范数的影子。 但很多同学对范数的理解停留在"好像是个求长度的东西"这个层面,具体怎么算、不同范数之间有什么区别,一问就含糊了。 其实范数没那么抽象,用 NumPy 的 linal ...
我劝你别再无脑用 MySQL:PostgreSQL 这 5 个底层能力,正在拉开架构师差距
深挖MySQL与PG核心底层差异,不盲目站队!拆解两者架构、MVCC机制、索引体系核心区别,详解PG的JSONB、GIN索引、递归CTE等独家实战能力。盘点6个MySQL迁PG生产级大坑及解决方案,搭配Java实战代码,提供可落地的数据库选型指南,适配面试、架构选型、业务迁移场景。 ...
Java学习随笔:自动拆装箱藏着哪些坑(2026-10-07)
写 Java 的时候,基本类型和包装类型之间的转换看起来是最不需要动脑子的部分:需要一个 int,就给它一个 Integer;需要一个 Integer,就丢一个 int 过去,编译器会默默帮你转换。这种自动转换就是自动装箱和自动拆箱。平时用起来很顺手,可一旦放进循环、放进判等、放进集合,它就可能变成 ...
从手动检查到自动监控:一个数据质量工作流的实现
做数据工程的人大概都有过这样的经历:每天到工位第一件事,打开终端敲几条 SQL,看看关键表的行数是不是正常、最新数据更新到几点了、字段空值有没有突然飙高。 这套检查做完,可能半个小时就过去了。 如果某天查出来有问题,还得翻日志、查上下游、挨个通知相关的人。 这些任务虽然不复杂,但琐碎且需每天重复。 ...
面向数据工程师的正则表达式:从日志清洗到字段提取
数据工程师每天打交道的东西,很大一部分是文本: 应用日志 Nginx access log CSV 里混着脏数据的字段 API 返回的 JSON 片段 配置文件 爬下来的 HTML 这些文本往往不是完全结构化的,或者格式五花八门,用传统的 split、replace 处理起来很累,写一堆条件判断也不 ...
Node.js和JVM在任务模型和性能方面的差异
Node.js vs JVM:任务模型与性能差异全解析 TL;DR——Node.js 和 JVM 代表了两种截然不同的并发哲学。Node.js 以单线程事件循环为核心,在 I/O 密集型场景下以极低的内存开销和快速启动见长,但在 CPU 密集型任务中事件循环会成为硬瓶颈。JVM 传统上依赖平台线程的 ...
时间序列分解:从噪声中提取有效信号
时间序列数据里,趋势、周期和随机波动经常是混在一起的。 直接看原始曲线,很容易被短期波动带偏,比如把一次促销当成长期增长,或者把季节性回落当成业务衰退。 时间序列分解要解决的就是这个问题,把一条看起来乱七八糟的曲线拆成几个更有解释性的部分,让我们分别看: 长期方向 重复周期 剩下的随机噪声。 本文的 ...
用了 Decimal 金额还是算错:Python 金额计算的八个坑(舍入、精度、JSON、入库)
前阵子对账,一笔订单 3 件、单价 19.99,脚本算出来的应收是 59.96999999999999531041794398。写这段代码的人其实已经"用了 Decimal",问题出在 Decimal(19.99) 少了一对引号。 金额计算换成 Decimal 只是第一步,后面还有舍入、精度、序列化 ...
并发编程(七):volatile——从语言规则到 CPU
沿用 counter + ready 的例子,从 Java 内存模型一路看到 HotSpot 与 x86-64,理解 volatile 如何提供可见性和有序性,以及它与 Atomic、Mutex 的边界。 ...
使用 SciPy 库进行时间序列分析
时间序列分析听起来有点学术,但其实干起来挺直接的。 你有一串按时间排列的数据,想知道里面有没有趋势、有没有周期性、噪声有多大,或者两个序列之间有没有延迟关系。 SciPy 这个库在信号处理、统计检验方面提供了不少现成的工具,配合 Matplotlib 画图,基本能覆盖日常分析的大部分需求。 本文不是 ...
C++ 字符数组和string
一、char 数组(C 风格字符串)函数需包含头文件 include <cstring>,数组定义为 char s;,以 \0 结尾 。 长度计算: strlen(s):返回字符串有效长度(不计\0)。 注意与sizeof(s)区分,后者返回数组总字节数 。 例子: char a[6]="abcd" ...
Python datetime 时区的七个坑:naive 和 aware 相等永远为 False、utcnow 差 8 小时、pytz 冒出 +08:06
Python 的 datetime 有个很阴的设计:同一个类型既可以带时区(aware),也可以不带(naive),两种对象长得一样、方法一样,大多数时候混着用也不报错。等它出问题的时候,通常是某个定时任务早跑了八个小时,或者报表里凭空多出一天。 下面七个坑都是实跑出来的,环境 Python 3.1 ...
我用 Qt 写了一个音乐播放器:能播歌、能显示歌词,还能记住歌单
这是我写的一个音乐播放器。它麻雀虽小五脏俱全,支持播放控制、歌词同步高亮、SQLite歌单持久化。本文总结了项目结构,以及信号槽、多线程、数据库等核心代码实现,附踩坑记录。 ...


