- 博客(6)
- 收藏
- 关注
原创 ArrayList与LinkedList
在日常的Java开发中,ArrayList和LinkedList是我们最常使用的两种列表结构。它们虽然都实现了List接口,但在性能表现和适用场景上却有着天壤之别。这句话背后隐藏着怎样的底层逻辑?今天,我们就从源码和数据结构的角度,彻底揭开它们的神秘面纱。
2025-08-20 17:50:29
776
原创 MySQL索引详解
索引是数据库性能调优的基石。深刻理解B+树和最左前缀原则是有效使用索引的关键。根据查询模式合理设计索引(类型、列选择、组合索引顺序)。优先考虑覆盖索引,避免昂贵的回表操作。善用EXPLAIN分析查询计划,找出性能瓶颈。警惕导致索引失效的写法。索引是空间换时间的策略,需要根据实际业务场景(读写比例、数据量)进行权衡。
2025-08-09 17:51:24
1325
原创 缓存穿透、缓存击穿、缓存雪崩
名称缓存穿透缓存击穿缓存雪崩核心问题查询不存在的数据单热点Key在失效瞬间高并发大量Key同时失效 或 缓存服务宕机触发条件恶意请求、无效ID热点Key + 缓存过期 + 高并发批量加载同TTL、缓存服务故障影响范围特定不存在的数据单个热点Key大量数据 或 整个缓存服务危害对象数据库 (无效查询冲击)数据库 (热点查询冲击)数据库 (海量查询冲击)类比拿着假通行证硬闯检查站明星出场,通道瞬间挤爆检查站系统瘫痪或大量通行证同时到期关键方案布隆过滤器、缓存空对象、参数校验。
2025-08-03 18:41:44
1261
原创 消息队列(MQ)初步认识——RabbitMQ
采用同步调用,调用者需要等待服务提供者执行完返回结果后,才能继续向下执行,也就是说每次远程调用,调用者都是阻塞等待状态。而且如果业务扩大,新增产品功能,采用同步调用,不好在原有基础代码业务修改,扩展性较差。但是,在某些场景下,我们希望不同的消息被不同的队列消费。 Topic类型的Exchange与Direct相比,都是可以根据RoutingKey把消息路由到不同的队列。消息接收者:接收和处理消息的人,就是原来的服务提供方。消息发送者:投递消息的人,就是原来的调用方。
2025-07-31 18:23:05
743
原创 端口号被占用的解决方法
如果占用 8080 的进程不是关键系统服务,并且你确定可以停止它(比如是你之前启动的测试服务器、IDE 内置服务器、或不再需要的应用),就终止它。首先,确认 8080 端口确实被占用以及被哪个进程占用,会显示端口号使用的进程PID。等你自己启动的服务或已知的非关键服务,通常可以安全终止。在终止进程前,请务必通过步骤 2 确认该进程的身份。(进程 ID),找出是哪个程序或服务占用了端口。: 显示拥有该连接的进程 ID (PID)。: 过滤包含 “:8080” 的行。: 显示所有连接和监听端口。
2025-07-22 18:28:03
444
原创 Git 基础指令手册
Git 的基本使用流程始于开发者在工作目录(粉色)中修改文件,通过 git add 命令将更改提交到暂存区(浅蓝色)进行临时存储;随后使用 git commit 命令将暂存区的内容永久保存到本地仓库(橙色),形成版本快照;当需要团队协作时,通过 git push 将本地仓库的更新推送到远程仓库(绿色),其他开发者既可通过 git clone 复制整个仓库初始化本地环境,也可用 git fetch 从远程仓库获取最新变更同步到本地仓库,从而实现代码的分布式版本控制和多人协同开发。
2025-07-16 16:50:47
659
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人