自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

原创 关于LeetCode239‘滑动窗口最大值‘的一些思路

这个算法的核心是用单调队列巧妙地维护了窗口内的最大值,避免了重复比较。单调队列如何保证头部始终是最大值如何维护队列元素在窗口范围内通过这种方式,我们把滑动窗口最大值问题的效率提升到了线性级别,非常适合处理大规模数据。

2025-09-03 21:15:08 265

原创 浅聊一下ElasticSearch :从入门到实战

核心原理:倒排索引是 ES 快的关键,按 “词条→文档 ID” 的逻辑,避免全表扫描;概念对应:和 MySQL 对比着记(表→索引、行→文档、列→字段),更容易理解;核心操作:索引库(建删改查,注意 Mapping 不能改旧字段)、文档(增删改查,支持批量操作);查询重点:DSL 是基础,Bool Query 适合复杂场景,分页和排序要注意性能问题;实战建议:MySQL 负责写(事务安全),ES 负责读(查询高效),用工具同步数据。

2025-09-03 21:04:04 634

原创 关于‘Leetcode105:从前序和中序遍历构造二叉树‘的一些个人思路

前序遍历:先访问根节点,再遍历左子树,最后遍历右子树(根 -> 左 -> 右)中序遍历:先遍历左子树,再访问根节点,最后遍历右子树(左 -> 根 -> 右)3/ \9 20/ \15 7前序遍历就是:3,9,20,15,7中序遍历就是:9,3,15,20,7。

2025-09-02 18:27:37 815

原创 浅聊一下RocketMQ的简单使用

简单说,消息中间件就是靠高效可靠的消息传递机制,让不同平台之间能顺畅交换数据,进而把分布式系统整合起来。它提供了 “消息传递” 和 “消息排队” 两种核心模型,能帮分布式环境下的进程扩展通信能力。Producer(生产者):相当于寄件人,负责把消息发出去;Consumer(消费者):相当于收件人,负责订阅消息、接收消息并处理;消息中间件本身:就像快递公司,负责把消息安全送到消费者手里。

2025-09-02 18:01:33 678

原创 浅聊一下JVM垃圾收集器

JVM 垃圾收集器的核心逻辑是 “识别垃圾 - 回收垃圾”,不同算法与收集器的设计本质是在 “回收效率”“响应时间”“内存利用率” 三者间寻找平衡。开发过程中无需深入底层实现,但需掌握主流收集器的特性与适用场景,在遇到内存溢出、GC 频繁等问题时,能快速定位是收集器选型不当还是参数配置问题,为后续调优提供方向。个人见解,如有更深刻的理解,可以评论区交流~

2025-08-23 21:35:58 793

原创 JVM类加载与对象创建全解析

类加载器之间有层次关系,除了启动类加载器,其他类加载器有父类加载器(通过组合关系实现,不是继承 ),这就是双亲委派模型。

2025-08-20 17:45:10 759

原创 浅聊一下AQS机制

waitStatus有不同的值,0是初始化的默认值,1表示线程获取锁的请求取消了(CANCELLED),-2表示节点在等待队列中(CONDITION),-3在SHARED模式下使用(PROPAGATE),-1表示线程准备好了,就等资源释放(SIGNAL)。ReentrantLock的加锁过程是这样的:通过lock()方法加锁,会调用内部类Sync的Lock方法,因为Sync的lock是抽象方法,所以会根据选择的公平锁或非公平锁,执行相应内部类的Lock方法,本质上都会执行AQS的Acquire方法。

2025-08-18 15:58:21 230

原创 聊聊 CAS:不⽤锁也能保证线程安全?

这是个经典问题:线程 1 读到值是 A,线程 2 把 A 改成 B 再改回 A,线程 1 的 CAS 操作会认为值没变化,继续执⾏。理解 CAS 的原理,不仅能帮我们更好地⽤好 JUC ⾥的⼯具,也能让我们对并发编程的底层逻辑有更深的认识,还是很有必要的~听名字就知道,这玩意是个 “不安全” 的底层⼯具,能直接操作内存,JDK 内部⽤它来实现各种⾼性能的并发功能。CAS 是⼀种⽆锁的同步机制,靠 CPU 指令保证原⼦性,性能⽐传统锁好很多,Java ⾥的。,属于⾮阻塞同步,性能上⽐传统的锁机制更轻量。

2025-08-12 18:55:26 712

原创 Spring Bean生命周期详解:从实例化到销毁,一篇讲透!

Spring 扩展性强,靠**“后处理器”**在生命周期中“插一脚”。分两类,作用时机不同:核心点帮你整理好了:是 Bean 的**“蓝图”**,存创建信息;后处理器是扩展关键:→ 改蓝图(BeanDefinition);→ 改实例(Bean 对象);生命周期核心在**“初始化阶段”**,包含:属性填充、Aware 注入、初始化方法、后处理器增强;单例循环依赖靠三级缓存解决,多例不行;单例 Bean 进,多例每次getBean()新创建。

2025-08-04 18:13:29 780

原创 MyBatis的运行原理

将 JDBC 操作封装为简洁的接口调用,同时保留了对 SQL 的完全控制权。:处理 SQL 执行流程(查询缓存、Statement 创建等)一级缓存:SqlSession 级别(默认开启):SQL 映射(SQL 语句与接口方法绑定)二级缓存:Mapper 级别(需手动配置):预编译参数(防止 SQL 注入):定义数据访问方法(无需实现类)自动映射:列名与属性名相同的字段。:执行 SQL 的核心 API。:直接替换(用于表名、列名等):全局配置(数据源、事务等)缺乏高级 ORM 特性。

2025-07-23 18:51:32 329

原创 String类的equals()的作用和源代码解读

可以看到,在String类的equals方法里面传入了一个Object类型的参数anObject,首先第一个if用来判断当前对象的地址和anObject的地址是否相同,如果相同直接返回true——"=="在比较引用类型时,判断的是地址——也就是说,如果地址相同,不再进行多余判断,直接返回true,因为两个对象若是同一个地址,其内容一定是相同的,就像张三手里有把钥匙,李四手里也有把钥匙,他俩的钥匙都能打开这个门,那就说明他俩打开的是同一扇门,门里面的东西自然也是一样的。

2025-02-02 15:22:06 545 2

原创 String为什么是不可变的?

String为什么是不可变的?变化之后又发什么什么?

2025-01-19 19:19:59 300

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除