【力扣LeetCode热题h100】子串、普通数组、矩阵
本文总结了LeetCode热题中的子串相关题目,包括滑动窗口和前缀和等解法。重点介绍了三个典型问题:1)和为K的子数组,通过前缀和+哈希表统计满足条件的子数组个数;2)滑动窗口最大值,使用优先队列或单调队列高效获取每个窗口的最大值;3)最小覆盖子串,通过滑动窗口和哈希表寻找覆盖目标字符串的最小子串。这些题目考察了数组处理、滑动窗口优化等技巧,在笔试面试...
使用Spring AMQP优化技术派RabbitMQ部分
本文介绍了使用Spring AMQP优化技术派RabbitMQ的实现方案。原方案采用连接池方式存在长连接问题和单线程处理瓶颈,优化后通过Spring AMQP内置的CachingConnectionFactory管理连接池和Channel缓存。主要改进包括:使用@RabbitListener实现消费监听、配置生产者确认和失败回调机制、引入Redis分布...
【力扣LeetCode热题h100】哈希、双指针、滑动窗口
本文总结了力扣LeetCode热题H100中关于哈希、双指针和滑动窗口的解题方法。主要内容包括: 两数之和问题:介绍了暴力解法(O(n²))、排序+双指针法(O(nlogn))和哈希表法(O(n))三种解决方案,比较了不同方法的时间复杂度。 字母异位词分组:通过将字符串排序作为哈希表的键,将异位词分组,时间复杂度为O(nklogk)。 最长连续序列:讨...
【JVM】类加载阶段&类加载器
本文介绍了JVM类加载机制与运行优化。类加载分为加载、链接和初始化三个阶段:加载阶段将字节码载入方法区;链接阶段包括验证、准备和解析;初始化阶段执行类构造方法,采用懒加载策略。类加载器采用双亲委派模型,分为启动类、扩展类和应用类加载器,JDBC等场景通过线程上下文类加载器打破该机制。JVM采用分层编译优化,包括解释执行、C1编译和C2编译等5个层次,通...
【JVM】垃圾回收
本文介绍了JVM垃圾回收的关键机制。判断对象可回收的方法包括引用计数法(存在循环引用问题)和可达性分析算法(通过GC Roots遍历)。垃圾回收算法主要有标记清除(产生碎片)、标记整理(无碎片但慢)和复制算法(无碎片但占用双倍空间)。分代回收将堆分为新生代(Minor GC)和老年代(Full GC),采用不同策略。… 本文最初发布于 CSDN,...
Guava整合本地缓存
本文介绍了Guava缓存在项目中的几种应用场景:1) CategoryServiceImpl使用Guava Cache缓存分类信息,避免频繁查询数据库;2) UserSessionHelper使用Redis存储会话信息;3) WxLoginHelper使用Guava缓存验证码和长连接关系;4) ImageServiceImpl利用缓存避免重复上传相同图...
【JVM】内存结构
本文介绍了JVM内存结构的关键组成部分及其特性。程序计数器是线程私有的指令地址记录器;虚拟机栈存储方法调用的栈帧;本地方法栈支持Native方法调用;堆是对象分配的主区域,线程共享且支持GC;方法区存储类信息等元数据,1.8后改为元空间实现;直接内存用于NIO操作,不受JVM管理。重点分析了StringTable在不同JDK版本的实现差异及调优方法,以...
静态工具类封装和Spring Bean依赖注入两种模式的区别
本文对比了静态工具类封装与Spring Bean依赖注入两种模式的实现与使用差异。静态工具类通过手动初始化将Spring管理的Bean注入到静态变量中,使用时直接调用类方法,适合纯粹的功能性操作;而Spring Bean模式由容器托管生命周期,支持依赖注入和AOP等特性,适合包含业务逻辑的组件。实际开发中应根据场景选择:工具类操作使用静态封装提升简洁性...





