- 博客(549)
- 资源 (1)
- 收藏
- 关注
原创 Spring Bean 生命周期中的 @PostConstruct 注解
摘要:@PostConstruct是Spring框架中用于Bean初始化的JSR-250注解,在依赖注入完成后执行特定方法。它确保所有依赖资源就绪后才执行初始化逻辑,具有只执行一次、无参数无返回值等特点。该注解方法在Bean生命周期中位于实例化和依赖注入之后,Bean可用之前。使用时需注意方法签名限制和异常处理,适用于单例等作用域Bean,是实现可靠初始化的有效工具。
2025-09-01 17:57:55
117
原创 mysql中的常见的索引类型及其特点
MySQL索引类型包括B-Tree、哈希、全文和空间索引等。B-Tree适合范围查询和排序,哈希适用于等值查找但限制较多,全文索引支持文本搜索,空间索引用于地理数据。每种索引有不同适用场景,合理选择能显著提升数据库性能。
2025-08-12 20:57:28
431
原创 B树索引和B+树索引有什么区别?
B树和B+树索引是数据库常用的树形结构,主要区别在于:B树所有节点存储数据,而B+树仅叶子节点存储数据,内部节点只作索引;B+树叶子节点通过链表连接,支持高效范围查询。示例中,B树内部节点包含数据,而B+树将所有数据集中在叶子层并链式连接,使B+树在范围查询和顺序访问时性能更优,因此被MySQL等数据库广泛采用。
2025-08-12 20:49:52
446
原创 【设计模式】建造者模式
/ 电脑产品类// 私有构造函数,只能由 Builder 创建@Override'}';// 静态内部类 Builder// 必填参数// 可选参数(默认值)private String gpu = "集成显卡";// 构造函数:必填参数// 设置可选参数的方法(链式调用)// 构建最终对象。
2025-08-08 20:30:00
971
原创 【设计模式】工厂方法模式 (虚拟构造器模式,多态工厂模式)
/ 数据库连接接口(产品)// 抽象工厂类(创建者)// 工厂方法:由子类实现,决定创建哪种连接// 其他通用逻辑(可选)
2025-08-08 15:20:24
881
原创 【设计模式】模板方法模式
/ 饮品制作模板(抽象类)// 模板方法:定义制作饮品的通用流程(不可被重写)// 煮水brew();// 冲泡// 倒入杯中// 添加调料// 公共方法(所有饮品都一样)System.out.println("✅ 正在煮水...");System.out.println("✅ 正在倒入杯中...");// 抽象方法:由子类实现// 冲泡方式不同// 添加的调料不同。
2025-08-07 21:15:00
816
原创 JVM中年轻代、老年代、永久代(或元空间)、Eden区和Survivor区概念介绍
在Java虚拟机(JVM)中,内存管理是自动化的,这主要通过垃圾回收机制实现。JVM将堆内存划分为不同的区域,以便更高效地管理和回收对象。以下是关于年轻代、老年代、永久代(或元空间)、Eden区和Survivor区等概念的详细介绍。
2025-08-02 11:46:24
559
原创 JVM中的垃圾回收暂停是什么,为什么会出现暂停,不同的垃圾回收机制暂停对比
JVM中的垃圾回收暂停(GC Pause)是执行垃圾回收时应用程序线程的暂停,主要为了保证数据一致性。不同垃圾收集器表现出不同的暂停特性:Serial GC完全串行执行导致长时间停顿;Parallel GC通过多线程缩短停顿;CMS和G1通过并发标记减少停顿,但仍需短暂STW;ZGC和Shenandoah实现了毫秒级极低停顿。优化手段包括选择合适的收集器(如低延迟的ZGC)、调整堆大小和分代比例。完全消除停顿不可行,但现代收集器已大幅降低停顿影响,需根据应用需求(吞吐量或延迟)选择合适的GC策略。
2025-08-02 11:36:59
1248
原创 MySQL中索引失效的常见场景
MySQL索引失效常见场景及解决方法:1.对索引列使用函数或计算会导致失效,应避免在条件中使用函数;2.数据类型不匹配会禁用索引,需确保查询与列类型一致;3.LIKE以通配符开头无法使用索引,建议将通配符放在末尾;4.OR条件中若有一边无索引会导致整体失效,可改用UNION ALL;5.隐式转换会破坏索引使用;6.不等于操作符可能导致失效;7.对索引列进行NULL判断可能失效;8.复合索引未包含查询列需回表查询。使用EXPLAIN分析执行计划可验证索引使用情况。
2025-08-02 11:06:48
387
原创 常见的JVM虚拟机的参数详解
JVM参数用于配置Java应用程序运行时的内存、垃圾回收等行为,主要分为标准参数(如-version)、非标准X参数(如-Xmx设置堆大小)和高级XX参数(如-XX:+UseG1GC选择垃圾收集器)。通过合理配置这些参数可以优化性能,但需注意不同JVM版本的差异。调试工具(如VisualVM)可帮助监控参数效果。
2025-07-28 19:13:55
376
原创 Java类加载机制详解
本文详细介绍了Java类加载机制,包括类加载的基本概念、时机、过程(加载、连接、初始化)及类加载器体系(启动类、扩展类、应用类和自定义类加载器)。重点解析了双亲委派模型的工作原理、优势及实现代码,同时探讨了打破该模型的特殊场景。文章还列举了类加载中的常见问题及解决方案,并提供了自定义类加载器的实践示例。最后提到了JDK模块化系统对类加载机制的影响。这些知识对Java开发中的类冲突解决、性能优化和系统设计具有重要意义。
2025-07-28 19:10:35
688
原创 Java类加载机制
Java类加载机制是JVM的核心功能,遵循"按需加载"原则,主要分为加载、链接(验证/准备/解析)、初始化三个阶段。加载阶段读取.class文件并创建Class对象;链接阶段验证字节码合法性并分配静态变量内存;初始化阶段执行静态代码块和变量赋值。类加载器采用双亲委派模型,确保核心类库安全。整个过程具有线程安全性,且支持动态加载和卸载(极少发生)。该机制确保了Java程序的动态性和安全性,是JVM运行的基础支撑。
2025-07-28 19:09:08
651
原创 MySQL 查询重复数据的方式总结
本文介绍了在MySQL中查询重复数据的几种方法:1.使用GROUP BY和HAVING查找特定字段的重复值;2.通过子查询或连接获取重复记录的详细信息;3.同时显示重复数据及其出现次数。文中提供了具体SQL示例,并提醒注意处理大数据集时的性能问题,建议添加索引并备份数据。适用于需要识别和管理数据库中重复记录的场景。
2025-07-28 18:58:03
364
原创 【设计模式】观察者模式 (发布-订阅模式,模型-视图模式,源-监听器模式,从属者模式)
观察者模式是一种行为型设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听一个主题对象。当主题对象状态变化时,会自动通知所有观察者进行更新。这种模式实现了对象间的松耦合,常用于以下场景:1) GUI事件处理;2) 发布/订阅系统;3) MVC架构中的模型-视图同步;4) 实时数据监控。模式包含四个核心角色:主题、具体主题、观察者和具体观察者。典型实现中,主题维护观察者列表并提供注册/注销方法,观察者实现更新接口响应状态变化。该模式优势在于解耦和自动通知,但需要注意避免循环调用和更新效率问题。
2025-07-21 21:34:59
1251
原创 【设计模式】迭代器模式 (游标(Cursor)模式)
迭代器模式是一种行为型设计模式,用于顺序访问聚合对象中的元素而不暴露其内部结构。核心思想是将遍历行为从聚合类中分离,封装在迭代器对象中,实现单一职责原则。该模式包含迭代器接口、具体迭代器、聚合接口和具体聚合类四个角色。典型应用场景包括集合类库、自定义数据结构等。优点在于简化遍历、增强封装性、支持多种遍历方式;缺点是增加了系统复杂度。代码示例展示了如何实现一个基本的迭代器模式,通过统一接口遍历不同数据结构。该模式符合开闭原则,便于扩展新的聚合类和迭代器。
2025-07-21 21:16:41
697
原创 【设计模式】备忘录模式(标记(Token)模式)
备忘录模式是一种行为型设计模式,用于在不暴露对象内部结构的情况下保存和恢复对象状态。它由三个核心角色组成:Originator(原发器)负责创建和恢复状态,Memento(备忘录)存储状态,Caretaker(负责人)管理备忘录。该模式适用于需要撤销/重做、游戏存档或版本控制等场景,通过封装状态信息保护数据隐私。典型的实现方式包括将备忘录类设为原发器的内部类或限制其访问权限,确保只有原发器能操作备忘录数据。代码示例展示了文本编辑器的状态保存和恢复过程,实现了撤销功能。
2025-07-13 20:23:14
1147
原创 【设计模式】策略模式(政策(Policy)模式)
策略模式摘要(149字) 策略模式是一种行为型设计模式,通过定义可互换的算法族来优化代码结构。核心思想是将算法封装为独立策略类(如支付方式、排序算法等),由环境类动态选择使用。该模式包含三个角色:抽象策略接口、具体策略实现类和持有策略引用的上下文类。主要优势在于解耦算法实现与使用,支持运行时策略切换,避免条件分支,符合开闭原则。典型应用场景包括支付系统、折扣计算和物流配送等需要灵活切换业务规则的场景。通过Java代码示例展示了微信/支付宝支付策略的实现过程,体现了模式的可扩展性和易维护性。
2025-07-13 16:36:15
907
原创 【设计模式】命令模式 (动作(Action)模式或事务(Transaction)模式)宏命令
命令模式是一种行为型设计模式,将请求封装为对象,实现发送者和接收者的解耦。它包含四个核心角色:命令接口(Command)、具体命令类(ConcreteCommand)、调用者(Invoker)和接收者(Receiver)。这种模式支持撤销/重做、任务队列等功能,常见于智能家居控制、文本编辑器等场景。通过Java代码示例展示了遥控器控制家电的实现,其中命令对象封装了具体操作,调用者只需触发命令执行而无需了解实现细节,体现了"封装请求"的设计思想。
2025-07-13 16:18:48
1143
原创 【设计模式】职责链模式(责任链模式) 行为型模式,纯与不纯的职责链模式
职责链模式是一种行为型设计模式,用于将请求的发送者和接收者解耦,通过构建处理对象链来动态分配请求。该模式适用于多级审批、事件处理等场景,如请假审批系统可按照请假天数由不同管理者处理(经理≤5天,主管≤10天,HR>10天)。核心组件包括抽象处理者(定义处理接口和链结构)和具体处理者(实现请求处理逻辑)。模式优势在于灵活调整处理流程,支持动态增减处理节点,降低系统耦合度。典型实现包含设置后继处理者方法和请求传递机制。
2025-07-13 15:53:06
640
原创 【设计模式】代理模式
代理模式是一种结构型设计模式,通过引入代理对象来控制对目标对象的访问。它包含三个核心角色:抽象主题(Subject)、代理(Proxy)和真实主题(RealSubject)。代理模式的主要应用场景包括:远程代理(访问远程对象)、虚拟代理(延迟加载大资源)、保护代理(权限控制)、智能引用代理(附加操作)和缓冲代理(共享结果)。典型应用包括图片懒加载、权限管理系统和收费查询系统等。代码实现上,代理类通常持有对真实对象的引用,并在调用前后执行额外操作。该模式在不修改原对象的情况下增强了功能,提高了系统灵活性和安全
2025-07-13 11:14:42
1044
原创 【设计模式】享元模式(轻量级模式) 单纯享元模式和复合享元模式
享元模式是一种结构型设计模式,通过共享技术实现相同或相似对象的重用,以减少内存占用和提高性能。它将对象分为内部状态(可共享)和外部状态(不可共享),通过享元池管理共享对象。典型应用场景包括字符串池、缓存管理、游戏开发等。该模式通过分离对象内部和外部状态,让多个对象共享相同的内部状态,减少对象创建数量。代码示例展示了如何用享元模式优化文本编辑器字体样式管理,通过工厂类缓存和复用相同样式的字符对象,验证了共享实例的实现效果。
2025-07-13 10:46:58
779
原创 【设计模式】原型模式 原型管理器
摘要:原型模式(Prototype Pattern) 原型模式是一种创建型设计模式,通过复制已有对象(原型)来创建新对象,而非通过构造函数。它适用于频繁创建相似对象、隐藏创建细节或动态配置对象的场景。核心概念包括Cloneable接口、clone()方法,以及浅拷贝(仅复制基本类型)和深拷贝(递归复制所有对象)的区别。Java实现示例展示了如何通过重写clone()方法实现对象克隆,并区分浅拷贝与深拷贝的不同效果。该模式提高了对象创建效率,尤其在创建成本高或需要保持对象独立性的情况下特别有用。
2025-07-13 10:22:18
976
原创 【设计模式】单例模式 饿汉式单例与懒汉式单例
单例模式是一种创建型设计模式,确保类只有一个实例并提供全局访问点。它主要用于解决资源浪费、全局唯一访问入口和重复初始化问题,适用于配置中心、日志记录器等场景。Java实现方式包括懒汉式、饿汉式、双重检查锁定、静态内部类和枚举(推荐方式)。单例模式优点包括节省资源和全局访问,但也存在违反单一职责原则、不利于测试等缺点。实际应用中,枚举实现是最佳选择,其次是静态内部类实现。
2025-07-12 21:48:22
1243
原创 【设计模式】装饰(器)模式 透明装饰模式与半透明装饰模式
装饰模式摘要 装饰模式是一种结构型设计模式,允许动态地为对象添加功能而不改变其结构或使用继承。它通过组合对象的方式扩展功能,比继承更灵活。该模式包含四个角色:抽象构件、具体构件、抽象装饰类和具体装饰类。典型应用场景包括Java I/O流系统、需要动态添加功能的系统以及替代多重继承的情况。以咖啡加料为例,装饰模式可以灵活组合各种配料而不需创建大量子类。代码实现时,装饰器类继承自同一抽象构件,并持有构件对象的引用,通过嵌套调用实现功能叠加。这种模式符合开闭原则,提高了系统的可扩展性和维护性。
2025-07-12 21:32:05
655
原创 【设计模式】组合模式(部分-整体”(Part-Whole)模式)透明组合模式,安全组合模式
组合模式是一种结构型设计模式,用于处理树形结构的对象层次关系。它允许客户端统一对待单个对象和对象组合,简化了复杂结构的操作。模式包含抽象构件(Component)、叶子构件(Leaf)和容器构件(Composite)三个核心角色。
2025-07-12 21:09:44
558
原创 【设计模式】桥接模式(柄体模式,接口模式)
摘要:桥接模式是一种结构型设计模式,通过将抽象部分与实现部分分离,使两者能独立变化。它解决了多维度变化导致的"类爆炸"问题,适用于需灵活扩展抽象和实现的场景(如跨平台系统)。典型应用包括图形渲染、视频播放器等,通过组合替代继承,提高系统扩展性。该模式优点在于解耦抽象与实现、增强灵活性,但会增加系统复杂度。实现时需定义抽象类、实现接口及具体实现类,并通过组合关系建立连接。
2025-07-12 20:39:31
1001
原创 【设计模式】外观模式(门面模式)
摘要:外观模式是一种结构型设计模式,通过提供统一接口简化复杂子系统使用。它包含外观角色(Facade)和子系统角色(SubSystem),遵循迪米特法则降低耦合度。适用场景包括简化系统访问、解耦客户端与子系统、分层设计等。典型应用如智能家居系统通过"回家模式"统一控制多个设备。代码示例展示家庭影院系统中,外观类封装投影仪、音响等子系统的复杂操作,提供watchMovie()和endMovie()等简洁接口。该模式使客户端无需了解子系统细节,只需与外观交互即可完成功能。
2025-07-12 20:13:27
741
原创 【设计模式】适配器模式(包装器模式),缺省适配器模式,双向适配器模式
适配器模式是一种结构型设计模式,用于解决接口不兼容问题。它通过将一个类的接口转换成客户端期望的另一个接口,使原本不兼容的类能够协同工作。模式包含目标抽象类、适配器类和适配者类三个角色,可分为类适配器和对象适配器两种实现方式。 适配器模式适用于需要使用现有类但其接口不符合需求的情况,或是创建可复用类与其他不相关类协作的场景。优点包括解耦目标类和适配者类、提高复用性和灵活性,但类适配器有只能适配一个类的限制。经典应用案例是JDBC数据库驱动,它作为适配器连接Java程序与不同数据库引擎。
2025-07-12 19:54:07
1326
原创 Spring Bean 控制销毁顺序的方法总结
Spring提供了多种控制Bean销毁顺序的方法。主要包括:1)实现DisposableBean接口;2)使用@PreDestroy注解;3)通过@DependsOn指定依赖关系;4)配置destroy-method属性;5)实现SmartLifecycle接口进行精细控制;6)使用@Order注解。最佳实践建议根据场景选择合适方法,简单销毁逻辑推荐@PreDestroy,复杂生命周期管理考虑SmartLifecycle,明确依赖关系时使用@DependsOn。销毁顺序通常为创建顺序的逆序,这些方法可单独或
2025-07-05 22:06:41
289
原创 Spring Bean 生命周期 SmartLifecycle接口介绍和使用场景 和 Lifecycle对比
本文介绍了 Spring Boot 中 SmartLifecycle 接口的使用,该接口扩展了 Lifecycle 功能,提供更细粒度的生命周期控制。
2025-07-05 21:58:58
750
原创 我的创作纪念日 2025-7
从知识分享到自我成长:一位开发者的创作之路 作者回顾了自己从最初为减轻行李负担而撰写技术博客,到逐渐养成创作习惯的心路历程。通过持续分享开发经验和踩坑记录,不仅收获了阅读量和排名的正向反馈,更显著提升了代码水平和项目设计能力。如今技术写作已成为生活的一部分,作者希望未来能将编程能力拓展到更多领域,实现从"码农"到具备综合能力的技术人的转变,最终摆脱工具人身份,开创自己的事业。这段经历证明,持续的知识输出不仅能帮助他人,更是自我提升的有效途径。
2025-07-05 21:52:31
249
原创 【算法】分支限界
摘要: 分支限界法是一种在解空间树上搜索最优解的算法,采用广度优先或最小耗费优先策略,通过设计限界函数剪枝无效分支以提高效率。与回溯法不同,它旨在找到特定意义的最优解而非所有解。其核心包括:设计限界函数(如上界/下界函数)、组织活结点表(队列式或优先队列式)及确定解向量。队列式分支限界法按FIFO原则扩展结点,而优先队列式基于优先级(如最大堆/最小堆)。案例以装载问题为例,展示了两种方法的实现及剪枝优化。分支限界法适用于组合优化问题,通过扩展结点和限界策略高效求解。
2025-06-02 17:55:06
885
原创 【算法】回溯法
问题的解:都是向量形式搜索空间:树,可能是n叉树、子集树、排列树等,树的结点对应于部分向量,可行解在叶结点搜索方法:深度优先,跳跃式遍历搜索树,找到可行解或最优解适用:求解搜索问题和优化问题搜索空间:树,结点对应部分解向量,可行解在树叶上搜索过程:采用系统的方法隐含遍历搜索树搜索策略:深度优先结点分支判定条件满足约束条件,分支扩张解向量不满足约束条件,回溯到该结点的父结点结点状态:动态生成存储:当前路径。
2025-06-02 17:26:51
854
原创 【算法】贪心算法
贪心法适用于组合优化问题。求解过程是多步判断过程,最终的判断序列对应于问题的最优解。判断依据某种“短视的”贪心选择性质,性质的好坏决定了算法的正确性。贪心性质的选择往往依赖于直觉或者经验。贪心法的优势:算法简单,时间和空间复杂性低。贪心法正确性证明方法:(1) 直接计算优化函数,贪心法的解恰好取得最优值(2) 数学归纳法(对算法步数或者问题规模归纳)证明贪心策略不对:举反例。
2025-05-31 22:16:22
1182
原创 【算法】动态规划
动态规划算法,其基本思想也是将待求解的较大规模问题,再从这些子问题的解得到原问题的解。但。。。如果能够,而在需要时再找出已求得的答案,就可以避免大量重复计算。
2025-05-31 17:23:31
937
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人