2.过滤器链加载原理
通过分析DelegatingFilterProxy、FilterChainProxy与SecurityFilterChain源码,揭示了Spring Security过滤器链的加载机制:由web.xml中配置的DelegatingFilterProxy通过bean名称获取FilterChainProxy,再由其封装多个SecurityFilterChain,最终将十五个过滤器逐一加载执行,实现安全控制。
5-MongoDB实战演练
基于SpringDataMongoDB实现头条文章评论功能,涵盖增删改查、按文章ID查询评论及点赞功能。采用MongoDB存储,通过索引优化查询效率,支持分页查询子评论,构建高并发评论系统。
RocketMQ:底层Netty频繁OS OOM
本文记录了一例Java应用因多ClassLoader加载多个Netty的PooledByteBufAllocator,导致堆外内存超限引发OS OOM的排查过程。虽设MaxDirectMemorySize为1G,但7个独立实例各自占用近1G,总量远超限制。通过NMT、Arthas等工具定位问题,最终确认为中间件类加载隔离所致。建议短期调小堆内存腾出空间,长期推动中间件优化。
Docker
本文介绍Docker基础操作,涵盖镜像与容器管理、Dockerfile编写及自定义镜像构建。通过实例演示Java项目打包、编写Dockerfile、生成镜像、运行容器并映射端口,最终验证服务运行状态,适合初学者快速掌握Docker核心技能。(238字)
一场FullGC故障排查
本文记录了一次由Full GC引发的CPU使用率异常问题排查过程。通过分析JVM堆内存发现,大对象(List<Map>)导致老年代频繁占满,触发Full GC,进而引起CPU飙升。结合JPofiler工具定位到代码中Excel数据加载逻辑存在内存膨胀问题,最终提出优化方案并总结排查思路。
七、ThreadLocal
ThreadLocal是线程本地变量,为每个线程提供独立的变量副本,避免线程间竞争。每个线程可独立操作自己的数据,互不干扰。适用于如任务耗时统计等场景,提升性能。子线程无法继承父线程的ThreadLocal值,但可通过InheritableThreadLocal实现数据传递。底层通过ThreadLocalMap存储,线程退出时自动清理,也可手动remove释放内存。
Linux
本文介绍如何将SpringBoot项目打包并部署至Linux服务器。包含工程搭建、JDK安装配置、应用上传启动及通过心跳接口验证服务健康状态的完整流程,适用于Java应用的Linux部署测试场景。(238字)
5-MongoDB实战演练
基于SpringDataMongoDB实现头条文章评论功能,涵盖增删改查、按文章ID查询及评论点赞。通过MongoTemplate优化点赞操作,提升性能,并利用索引提高查询效率,构建高效稳定的微服务模块。
ArrayList扩容机制
ArrayList 添加元素时,先调用 `ensureCapacityInternal` 检查容量,首次添加时默认扩容至 10。`grow()` 方法实现自动扩容,新容量为原容量的 1.5 倍(位运算优化),确保添加高效。`length` 用于数组,`length()` 用于字符串,`size()` 用于集合。
Java泛型类型擦除以及类型擦除带来的问题
Java泛型在编译时会进行类型擦除,即泛型信息被移除,替换为原始类型(如Object或限定类型)。擦除后,List<String>和List<Integer>均变为List,导致 getClass() 相同,反射可绕过类型限制。原始类型由泛型定义决定,无限制则默认Object,有限制则取上限。擦除带来多态冲突、无法使用基本类型、静态成员不能引用类泛型等问题,编译器通过桥方法、自动强转等机制解决。类型检查基于引用,instanceof不可用于泛型类型判断,泛型方法可独立声明类型参数。