- 博客(11)
- 收藏
- 关注
原创 值传递和引用传递的区别:Java程序员必须掌握的基础知识
值传递是指将实际参数的值复制一份传递给形式参数,在方法内部对形式参数的修改不会影响实际参数。引用传递是指将实际参数的引用(地址)传递给形式参数,在方法内部对形式参数的修改会影响实际参数。Java只有值传递:无论是基本类型还是对象类型基本类型:传递值的副本,方法内修改不影响原值对象类型:传递引用地址的副本,但指向同一对象,方法内修改会影响原对象String特殊性:由于不可变性,修改会创建新对象,原引用不变。
2025-07-08 15:01:13
827
原创 慢SQL优化:从发现到解决的完整实战指南
慢SQL(Slow Query)是指执行时间超过预设阈值的SQL查询语句。在线业务:执行时间超过100ms的查询报表系统:执行时间超过5秒的查询数据分析:执行时间超过30秒的查询简单来说:慢SQL = 执行时间长 + 影响系统性能// SQL性能分析器@Componenttry {// 1. 执行EXPLAIN// 2. 分析执行计划// 3. 检查索引使用情况// 4. 评估查询复杂度log.error("SQL分析失败", e);
2025-07-07 11:06:45
1044
原创 ThreadLocal详解:解决多线程数据共享的神器
ThreadLocal,顾名思义,就是线程本地变量。它为每个线程提供独立的变量副本,使得每个线程都可以独立地改变自己的副本,而不会影响其他线程。Thread:线程Local:本地的、私有的ThreadLocal是Java多线程编程中的重要工具,它通过为每个线程提供独立的变量副本来解决线程安全问题。ThreadLocal为每个线程提供独立的变量副本使用简单:set()、get()、remove()三个主要方法应用广泛:用户上下文、数据库连接、日期格式化等。
2025-07-05 08:45:00
955
原创 MySQL查询执行顺序:一张图看懂SQL是如何工作的
避免语法错误- 知道什么时候可以使用别名优化查询性能- 合理安排过滤条件的位置正确使用聚合函数- 区分WHERE和HAVING的使用场景编写高效SQL- 让数据库引擎更好地优化查询写出更高效的SQL语句快速定位SQL错误更好地理解数据库的工作原理在面试中从容应对相关问题下次写SQL的时候,不妨在心里默念一遍执行顺序,相信你会发现很多之前困惑的问题都迎刃而解了!关注【一只划水的程序猿】,每天分享实用的编程技巧和职场经验!你的支持是我继续创作的动力!
2025-07-04 09:15:28
653
原创 SpringBoot扩展点全攻略:让你的代码像积木一样灵活组装
扩展点就像是代码中预留的"插座",当你需要新功能时,直接"插"一个组件进去就行,而不用动原有代码。// ❌ 传统做法:到处修改代码@Service// 登录逻辑// 新需求来了,要发短信// 直接在这里加代码// 又来需求,要记录日志// 又在这里加代码// 再来需求,要统计登录次数// 继续加代码...// ✅ 扩展点做法:优雅解决@Service@Autowired// 核心登录逻辑// 发布事件,让扩展点处理其他逻辑// 各种扩展功能独立实现。
2025-07-02 08:45:20
1127
原创 Java应用防止商品超卖:从理论到实战的完整解决方案
超卖:指在高并发场景下,实际销售的商品数量超过了库存数量的现象。商品库存:10件同时有100个用户抢购如果没有合适的并发控制,可能卖出15件甚至20件结果:商家亏损,用户投诉,系统崩溃// 推荐:数据库原子操作// 推荐:乐观锁 + 重试// 推荐:Redis原子操作 + 异步处理// 推荐:多层防护 + 限流 + 预热fill:#333;color:#333;color:#333;fill:none;防超卖核心要点原子性保证并发控制性能优化监控告警数据库事务。
2025-06-30 09:31:34
564
原创 MySQL索引完全指南:让你的查询速度飞起来
不要被这个名字吓到,B+树其实很好理解。想象一下一个倒置的大树:fill:#333;color:#333;color:#333;fill:none;根节点: 50, 100叶子节点: 1-50叶子节点: 51-100叶子节点: 101-150数据: 1,2,3...50数据: 51,52,53...100数据: 101,102,103...150主键索引是必须的经常WHERE查询的字段要建索引经常ORDER BY的字段要建索引区分度高的字段适合建索引遵循最左前缀原则。
2025-06-27 17:13:00
1065
原创 JVM调优实战指南:让你的Java应用性能飞跃
JVM调优是指通过调整JVM参数和配置,优化Java应用程序的性能表现,主要包括内存使用、垃圾回收、启动时间等方面的优化。合理设置堆内存大小,避免过大或过小根据对象特点调整年轻代和老年代比例选择适合的垃圾收集器和相关参数定期分析GC日志,持续优化GC性能建立完善的监控体系,及时发现性能问题使用多种工具进行全方位性能分析重点关注GC频率、停顿时间、内存使用率等指标结合业务场景设定合理的性能目标遵循循序渐进的原则,避免一次性大幅调整建立性能基线,量化调优效果。
2025-06-25 15:15:44
696
原创 接口设计的原则:构建优雅API的完整指南
接口设计是定义系统不同组件之间交互方式的过程。它包括方法签名、参数定义、返回值、异常处理等方面的设计。好的接口设计能够隐藏实现细节,提供清晰的调用方式。每个接口应该只负责一个明确的功能,不应该承担多个不相关的职责。这是接口设计的基础原则。接口应该对扩展开放,对修改关闭。设计时要考虑未来的扩展需求,避免频繁修改已有接口。子类对象应该能够替换父类对象,而不影响程序的正确性。接口的实现类应该完全遵循接口的契约。不应该强迫客户依赖于它们不使用的方法。设计小而专一的接口,而不是大而全的接口。
2025-06-24 17:17:36
705
原创 ThreadLocal详解:线程私有变量的正确使用姿势
张三往自己口袋里放钱,不会影响李四的口袋李四从自己口袋里拿钱,也不会拿到张三的钱ThreadLocal就像给每个线程发了一个专属保险箱,让多线程编程变得简单安全。
2025-06-20 17:25:49
384
原创 Java线程池详解:高效并发编程的核心利器
线程池就像一个"线程工厂",它预先创建一定数量的工作线程并放在"池子"里待命。当有任务需要执行时,不需要重新创建线程,而是直接从池子里取一个空闲线程来干活。任务完成后,线程不会被销毁,而是重新回到池子里等待下一个任务。这就好比一个餐厅,与其每来一个客人就临时招聘一个服务员,不如提前雇好几个服务员待命,这样既节省了招聘成本,又能保证服务质量。线程池是Java并发编程的核心工具,掌握其原理和配置对于构建高性能应用至关重要。
2025-06-19 18:00:41
707
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅