Java
-
用 Java 实现一个可用的布隆过滤器(Bloom Filter)
这篇文章不再重复 Bloom Filter 的基础原理,而是把重点放在如何用 Java 实现一个真正可用、可持久化的布隆过滤器。正文先从误算率 False Positive 出发,说明 bits 数量和 hash 函数个数的计算方式,再介绍使用 Murmur Hash 3 作为哈希函数、用 long[] 自定义 Bitset 的实现思路,以及如何通过 protobuf 保存 numHashFunctions 和 bitset 完成序列化。最后文章给出了完整的测试示例,演示如何写入数据、落盘并重新加载后进行成员判断。
-
JDK 动态代理踩坑
这篇文章围绕学习 JDK 动态代理时遇到的几个典型困惑展开,通过一组示例代码解释动态代理背后的运行机制。正文重点讨论了 Proxy.newProxyInstance() 中 ClassLoader 参数为什么看起来“随便填都能用”、为什么代理对象常常会触发 $Proxy0 cannot be cast to xxx 的类型转换错误,以及 InvocationHandler.invoke() 方法里 Object proxy 参数实际指向什么。文章通过逐个分析错误示例和代理类生成后的调用方式,把这些容易混淆的细节串起来,帮助理解 JDK 动态代理的正确用法。
-
有限状态机( Finite State Machine )JAVA 版
这篇文章用空调开关、吹风和制冷三种状态的切换过程,介绍了有限状态机在 Java 中的基本实现方式。正文先展示了使用枚举加 if/else 判断状态流转的传统写法,再给出基于枚举常量内聚状态迁移逻辑的有限状态机实现,并通过同一组测试对比两种方案的效果,说明状态机写法在处理复杂流程控制时更清晰,也更便于维护。
-
Spring Boot 2 + Spring Security 5 + JWT 的单页应用
这篇文章围绕前后端分离场景下的 Spring Security + JWT 鉴权方案展开,目标是用更贴近 Spring Security 官方设计的方式实现无状态认证。正文先梳理登录和请求鉴权的整体流程,再逐步实现用户模型、JWT 工具类、登录过滤器、请求鉴权过滤器、基于 Ehcache 的 UserDetails 缓存、统一异常返回,以及方法级权限注解的使用,最后补充了 token 续期和已签发 token 作废的处理思路。
-
Spring Boot2 + Spring Security + Thymeleaf 简单教程
这篇文章以一个基于 Spring Boot 2、Spring Security 5 和 Thymeleaf 的 MVC 示例项目为主线,讲解了传统服务端页面场景下的权限控制实现。正文先介绍 Spring Security 的过滤器链和项目中的权限模型,再逐步配置表单登录、登出、remember-me、异常页面和方法级注解鉴权,同时补充了自定义权限注解、Thymeleaf 安全标签的使用方式,以及在 Controller 中获取当前登录用户信息的几种常见写法。
-
Shiro + JWT + Spring Boot Restful 简易教程
这篇文章给出了一个基于 Spring Boot、Shiro 和 JWT 的 Restful 鉴权教程,目标是在前后端分离场景下放弃 Session 和 Cookie,改用无状态的 Token 认证。正文从整体登录流程讲起,说明 token 的生成与校验方式,再逐步实现模拟用户数据源、统一返回结构、自定义异常、JWT 工具类、Shiro 的 Realm 与 Filter,以及注解鉴权和跨域支持配置,最后也点出了这套实现仍可继续改进的地方。