- 博客(106)
 - 收藏
 - 关注
 
原创 AOP(面向切面编程)实战
本文介绍了使用AOP实现标题唯一性校验的解决方案。通过定义自定义注解@UniqueTitleCheck和切面类UniqueTitleAspect,实现了对消防演练、知识文库和节能减排案例库模块的标题重复校验。主要步骤包括:1)定义切面注解标注需要校验的方法;2)使用SpEL表达式动态提取标题参数;3)通过TitleValidationService校验标题是否存在。该方法避免了重复代码,提高了代码复用性,并通过枚举类型区分不同业务模块的校验逻辑。当标题为空或已存在时,切面会抛出异常中断操作。
          2025-09-22 15:48:00
          
405
        
原创 【面试题】- 使用CompletableFuture实现多线程统计策略工厂模式
本文介绍了一种结合CompletableFuture多线程和策略工厂模式实现的统计查询方案。通过自定义线程池执行异步任务,利用工厂模式创建不同时间维度(时/周/月)的统计策略,并行查询后汇总结果。方案包含:1)接口层接收查询时间参数;2)业务层使用CompletableFuture异步执行三种统计策略;3)策略工厂根据类型返回具体实现类;4)各策略类实现统一接口完成具体统计逻辑。该设计实现了线程安全的高效查询,同时通过策略模式保证代码可扩展性,适用于需要多维度并行统计的业务场景。
          2025-09-17 22:18:50
          
304
        
原创 分片上传断点续传秒传功能实现
摘要: 本文介绍了大文件上传中的断点续传和秒传功能实现方案。针对网络抖动、断网等导致上传失败的问题,系统采用分片上传机制,通过检查文件状态接口判断是否已上传(秒传)或部分上传(断点续传)。核心流程包括:1)前端上传前调用状态检查接口;2)服务端返回已上传分片信息;3)前端仅上传缺失分片。代码展示了文件状态检查和分片上传两个核心接口,采用MD5标识文件唯一性,通过文件分片记录表实现断点续传,通过文件库表实现秒传功能。
          2025-09-17 18:02:17
          
563
        
原创 MAC Typora 1.8.10无法打开多个md档
现象无法同时打开多个md文档,网上找了许多版本,最终选择升级版本到1.10.8 最终解决无法打开多个文档问题。
          2025-09-17 16:21:03
          
290
        
原创 Tesseract,Tika 解析文件内容保存到ES
本文介绍了使用Tika和Tesseract实现文件内容解析并存储到Elasticsearch的技术方案。主要内容包括:1)Maven依赖配置,集成了Spring Boot WebFlux、Tika文档解析库和Tesseract OCR图片识别库;2)Tesseract的详细配置类,包含中文识别路径设置、语言包检查、引擎参数优化等;3)通过YML文件配置Tesseract数据目录。该方案支持图片和文档的内容提取,为后续存入Elasticsearch提供了基础解析能力。
          2025-09-07 23:01:14
          
476
        
原创 多线程之HardCodedTarget(type=OssFileClient, name=file, url=http://file)异常
摘要: 文档描述了多线程环境下调用Feign客户端OssFileClient时出现的HardCodedTarget异常。异常发生在异步保存文件到ES时,Feign调用未返回预期结果而直接打印了客户端对象。问题分析指出可能原因:1)Feign调用失败但未被捕获;2)异步线程缺少Spring上下文导致认证失败。解决方案包括:1)配置支持上下文传播的线程池TaskDecorator;2)手动传递请求和Security上下文到异步线程。文中提供了ThreadPoolConfig配置类和ContextCopyingT
          2025-09-07 22:16:47
          
943
        
原创 Spring WebFlux 流式数据拉取与推送的实现
本文介绍了使用Spring WebFlux实现流式数据拉取与推送的方案。文章首先展示了流式返回数据的格式(类似DeepSeek大模型的推送模式),然后详细讲解了三个核心实现部分:1)通过Flux.create实现流式响应数据的桥接转发;2)配置OkHttpClient的HTTP客户端参数(特别是readTimeout和callTimeout设为0以支持流式传输);3)核心数据获取方法queryDifficultFaultMessage的实现,包括异步请求处理、错误处理和取消订阅机制。该方案实现了后端对原始数
          2025-09-04 23:07:06
          
1058
          
2
        
原创 Feign 调用为服务报 `HardCodedTarget(type=xxxClient, name=xxxfile, url=http://file)`异常
摘要 文章描述了在微服务架构中使用Feign客户端调用文件服务时遇到的HardCodedTarget异常问题。主要涉及以下内容: 业务场景:需要在当前服务中新增文案数据,并关联存储在另一个smart_app_file服务中的文件 技术实现: 使用线程池进行异步操作 通过Feign客户端调用文件服务接口 在异步线程中将数据索引到Elasticsearch 问题现象: Feign客户端打印出HardCodedTarget类型的对象信息 调用结果异常但未捕获到相关错误日志 可能原因包括Feign调用失败或线程上下
          2025-08-26 23:16:41
          
707
        
原创 ES 7.8
The Elastic Stack, 包括 Elasticsearch、Kibana、Beats 和 Logstash(也称为 ELK Stack)。能够安全可靠地获取任何来源、任何格式的数据,然后实时地对数据进行搜索、分析和可视化。Elaticsearch,简称为 ES,ES 是一个开源的高扩展的分布式全文搜索引擎,是整个 ElasticStack 技术栈的核心。它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理 PB 级别的数据。
          2025-07-27 22:36:15
          
834
        
原创 行为设计模式之Visitor(访问者)
访问者模式(Visitor)是一种行为设计模式,允许在不改变对象结构的情况下定义新操作。其核心思想是将算法与对象结构分离,通过"访问者"对象来实现对元素的操作。该模式包含Visitor(访问者)、ConcreteVisitor(具体访问者)、Element(元素)和ConcreteElement(具体元素)等角色。示例代码展示了两种不同的访问者(ConcreteVisitorOne和ConcreteVisitorTwo)分别对学生和教师对象执行不同的统计操作(如年龄总和、最高成绩等)。访问者模式适用于对象结
          2025-06-16 14:51:40
          
868
        
原创 策略模式和模板方法模式的区别【面试题】
摘要:策略模式和模板方法模式均属于行为设计模式,但核心差异显著。策略模式通过组合实现,支持运行时动态切换完整算法(如支付方式切换),变化维度大;模板方法模式通过继承实现,固定算法骨架但允许子类定制特定步骤(如文档生成流程不变,数据源可变),变化维度小。前者由调用方主动选择策略(控制权在客户端),后者遵循“好莱坞原则”由父类控制流程调用子类方法(控制权在父类)。选择依据:需灵活替换整套逻辑用策略模式;需复用流程但微调步骤用模板方法模式。
          2025-06-16 09:44:26
          
878
        
原创 行为设计模式之Template Method(模板方法)
摘要:模板方法模式是一种行为设计模式,通过定义算法骨架并将特定步骤延迟到子类实现,实现代码复用和扩展控制。该模式包含抽象类(定义原语操作和模板方法)和具体类(实现特定步骤)。适用于固定流程但需灵活步骤的场景,如框架开发、GUI工具包和数据处理。示例展示了订单处理中用户、商家和快递服务的差异化实现。该模式能消除重复代码,严格管控扩展点,并通过钩子方法提供灵活性,常见于Spring、JUnit等框架中。
          2025-06-16 09:27:49
          
957
        
原创 行为设计模式之Strategy(策略)
策略模式是一种行为设计模式,它定义一系列算法并封装为独立对象,使它们可以相互替换。该模式让算法独立于使用它的客户端而变化,适用于需要动态切换算法、避免大量条件语句、实现算法与使用代码分离的场景。文章通过Java代码示例展示了加减乘三种算法的策略实现,并列举了电商定价、游戏AI、金融投资等典型应用领域。策略模式的核心优势在于提高代码扩展性和维护性,符合开闭原则。
          2025-06-15 22:50:20
          
993
        
原创 行为设计模式之State(状态)设计模式
本文介绍了行为设计模式中的State(状态)模式。该模式允许对象在内部状态改变时改变行为,解决对象行为依赖于状态的多分支条件判断问题。文章展示了状态模式的结构、适用场景以及一个售货机状态转换的代码示例。典型应用场景包括对象行为随状态显著变化、需避免大量条件分支、状态转换规则明确且可能变化、状态数量较多或可能增加等情况。常见应用领域涵盖游戏开发、用户界面、工作流引擎、网络协议和嵌入式系统等。状态模式通过将状态和行为封装到独立类中,提高了代码的可读性、可维护性和扩展性,符合开闭原则。
          2025-06-15 20:29:21
          
1151
        
原创 行为设计模式之Observer(观察者)
摘要:Observer(观察者)模式定义对象间一对多的依赖关系,当被观察者状态改变时,自动通知所有观察者。适用于RBAC权限同步、消息队列(如RabbitMQ)、游戏状态更新、监控报警等场景。结构包含Subject(目标)、Observer(观察者)及具体实现类,通过注册/通知机制实现解耦。典型应用包括:GUI事件处理、MVC数据同步、发布订阅系统、库存监控、游戏开发等。代码示例展示了Java实现,其中ConcreteSubject维护观察者列表并在状态变更时触发通知,ConcreteObserver更新
          2025-06-11 23:07:24
          
1275
        
原创 行为设计模式之Memento(备忘录)
*备忘录模式(Memento Pattern)**的核心思想是在不破坏对象封装性的前提下,捕获并外部化(存储)一个对象的内部状态,以便以后可以将该对象恢复到原先保存的状态。它的主要使用场景围绕着需要保存对象状态并在未来某个时刻恢复该状态的需求,同时要求不能直接暴露对象的内部实现细节(封装性原则)。
          2025-06-10 21:08:35
          
1021
        
原创 行为型设计模式之Mediator(中介者)
用一个中介对象来封装一系列的对象的交互。中介者使各对象不需要显示的相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
          2025-06-08 22:43:21
          
878
        
原创 行为设计模式之Iterator(迭代器)
摘要: 迭代器模式(Iterator)是一种行为设计模式,它提供顺序访问聚合对象元素的方法,同时不暴露内部结构。该模式由迭代器接口(Iterator)、具体迭代器(ConcreteIterator)、聚合接口(Aggregate)和具体聚合(ConcreteAggregate)组成,适用于需要遍历不同聚合结构的场景。示例代码展示了通过BookIterator遍历BookAggregate中的图书信息,实现了数据存储与遍历逻辑的分离。这种模式支持多种遍历方式,并为不同聚合提供统一访问接口,提高了代码的灵活性和
          2025-06-08 22:35:03
          
525
        
原创 行为型设计模式之Interpreter(解释器)
给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语音中的句子。
          2025-06-07 22:18:46
          
568
        
原创 行为设计模式之Command (命令)
需要发出请求的对象(调用者)和接收并执行请求的对象(执行者)之间没有直接依赖关系时。比如遥控器 每个按钮绑定一个command对象,这个Command对象内部持有真正执行操作的Receiver(如文档编辑器、打印服务)的引用,并知道调用Receiver的哪个方法。改变按钮功能只需更换绑定的Command对象。
          2025-06-07 21:06:49
          
1091
        
原创 行为型设计模式之Chain of Responsibility(责任链)
摘要:责任链模式是一种行为型设计模式,允许请求沿着处理链传递,直到被某个对象处理。该模式由Handler抽象类定义处理接口,ConcreteHandler具体实现处理逻辑,每个处理者决定处理请求或传递给下个处理者。适用于多个对象可处理请求、请求接收者不明确或需动态指定处理集合的场景。示例代码展示了请假审批链,从小组长到部门经理逐级审批,体现了责任链的动态处理机制。
          2025-06-06 09:42:21
          
881
        
原创 结构型设计模式之Proxy(代理)
本文介绍了结构型设计模式中的Proxy(代理)模式,其核心思想是为对象提供代理以控制访问。代理模式适用于远程代理、虚代理、保护代理和智能引用等场景。文中通过Java代码示例演示了代理模式的实现:Proxy类作为RealSubject的代理,控制对真实对象的访问,并在请求前后添加额外操作。该模式在AOP环绕通知、动态/静态代理等场景中都有应用。
          2025-06-04 15:09:01
          
551
        
原创 结构性设计模式之Flyweight(享元)
享元模式是一种结构性设计模式,通过共享对象来减少内存使用和对象创建开销。该模式将对象属性分为内部状态(可共享)和外部状态(不可共享),适用于大量相似对象场景。典型案例包括图形游戏(粒子效果、地图瓦片)、文本处理(字符样式)和UI控件。模式结构包含享元接口、具体享元类、享元工厂和客户端。文中以Java代码示例展示了如何实现共享圆形对象的颜色属性,而坐标作为外部状态单独处理,有效减少了对象创建数量。
          2025-06-04 14:50:48
          
859
        
原创 结构性设计模式之Facade(外观)设计模式
Facade(外观)模式是一种结构性设计模式,它通过提供一个统一的高层接口来简化复杂子系统的使用。该模式的意图是为子系统中的一组接口提供一致的界面,使其更容易被调用。主要特点包括:Facade类了解子系统的内部结构,将客户端请求代理给适当的子系统对象子系统类实现具体功能,但不知道Facade的存在适用于需要简化复杂系统接口、降低系统耦合度或构建层次化子系统的情况示例代码展示了如何通过Facade类统一调用多个子系统的功能方法(methodOne、methodTwo等)。这种模式特别适合需要隐藏
          2025-06-04 10:11:41
          
540
        
原创 结构型设计模式之Decorator(装饰器)
摘要: 装饰器模式是一种结构型设计模式,允许动态地为对象添加功能而不改变其源代码。本文通过李四的才艺展示案例演示了该模式的应用。关键点包括:1)意图是动态添加职责,比继承更灵活;2)结构包含Component、ConcreteComponent、Decorator和ConcreteDecorator四个角色;3)适用于需要透明扩展对象功能、支持功能撤销或无法使用子类扩展的场景。代码示例展示了如何通过DecoratorA和DecoratorB在原有"画画"才艺基础上逐步添加"唱歌"和"跳舞"功能,体现了装饰器
          2025-06-03 11:48:55
          
1195
        
原创 结构性设计模式之Composite(组合)
摘要:Composite(组合)模式通过树形结构表示"部分-整体"层次关系,使得用户能够统一处理单个对象和组合对象。该模式包含Component(组件接口)、Leaf(叶子节点)和Composite(组合节点)三个核心角色,适用于需要表示对象层次结构并统一操作的场景。示例代码展示了文件夹结构的实现,Folder类管理子组件,File类作为叶子节点,通过递归遍历实现统一处理。该模式简化了客户端代码,使系统更易扩展和维护。
          2025-06-03 09:50:17
          
589
        
原创 结构性设计模式之Bridge(桥接)
桥接模式是一种结构性设计模式,其核心思想是将抽象部分与实现部分分离,使二者能够独立变化。本文通过汽车产品生产案例(产品A/B与颜色红/蓝/黄)展示了桥接模式的应用:将颜色作为独立接口实现,产品类通过组合方式调用颜色功能。关键结构包括抽象产品类(Product)、具体产品类(ProductA)和颜色接口(Color)及其实现类(Red/Blue/Yellow)。该模式适用于需要避免抽象与实现固定绑定的场景,支持通过子类扩展功能,且修改实现不影响客户端代码。代码示例演示了如何为不同产品动态配置颜色。
          2025-05-29 22:02:49
          
859
        
原创 结构性设计模式之Adapter(适配器)
本文介绍了结构性设计模式中的适配器模式(Adapter Pattern)。适配器模式分为类适配器和对象适配器两种形式,其核心思想是将一个接口转换为客户期望的另一个接口,类似"狸猫换太子"的替换逻辑。文章通过电影主角和替身演员的类比,生动解释了该模式的工作原理。代码示例展示了如何通过Adapter类将Adaptee(替身演员)的接口适配到Target(主角)接口,使不兼容的接口能够协同工作。适配器模式适用于需要让现有类与新接口协同工作的场景。
          2025-05-29 09:58:59
          
463
        
原创 创建型设计模式之Singleton(单例)设计模式
Singleton(单例)设计模式确保一个类仅有一个实例,并提供全局访问点。其结构包含一个静态方法getInstance()用于获取唯一实例,构造方法私有化防止外部实例化。适用于需要控制实例数量(如配置管理、线程池等)或需通过子类扩展但客户端无需修改代码的场景。示例代码展示了通过静态变量实现线程安全的单例模式,多次调用getInstance()返回同一实例,验证了唯一性。
          2025-05-28 14:29:44
          
525
        
原创 创建型设计模式之Prototype(原型)
摘要:Prototype(原型)设计模式通过复制现有对象来创建新对象,避免重复初始化操作。该模式包含Prototype接口声明克隆方法、ConcretePrototype实现具体克隆逻辑,以及Client客户端调用克隆操作。示例代码展示了Product类实现Prototype接口,通过clone()方法复制对象属性。这种模式适用于创建成本较高的对象,能提高性能并简化对象创建过程。(149字)
          2025-05-28 11:47:37
          
702
        
原创 创建型模式之 Builder (生成器)
本文介绍了生成器(Builder)设计模式,属于创建型模式之一。该模式通过将复杂对象的构建与表示分离,使同一构建过程能创建不同表现形式。文章以小米汽车不同配置版本为例说明了模式意图,并提供了Java代码实现示例,展示了如何通过Director管理Builder来构建不同的Product。核心包括抽象Builder类、具体Builder实现类以及最终产品类,实现了通过相同构建过程生成不同配置产品的目标。
          2025-05-28 10:49:18
          
553
        
原创 创建型模式之Abstract Factory(抽象工厂)
本文介绍了抽象工厂模式(Abstract Factory),它是一种创建型设计模式,提供了一种创建一系列相关对象的接口而无需指定具体类。文章通过手机工厂示例进行说明,展示小米和华为两个工厂分别生产不同类型产品(屏幕、芯片、键盘等)的实现过程。代码演示了如何定义抽象工厂接口、具体工厂类和产品类,并展示了运行结果。该模式适用于需要创建产品族且不依赖具体产品类的情况,能够提高系统的灵活性和可扩展性。
          2025-05-27 15:04:41
          
538
        
原创 创建型模式之Factory Method(工厂方法)
工厂方法模式是一种创建型设计模式,通过将对象实例化延迟到子类来实现解耦。该模式包含抽象工厂接口、具体工厂类、抽象产品和具体产品四个要素,相比简单工厂模式更具扩展性。文章展示了工厂方法模式的结构图,并提供了Java代码示例,演示如何通过不同工厂(FactoryA/FactoryB)创建对应产品(ProductA/ProductB)的过程,体现了多态特性。这种模式适用于需要灵活扩展产品类型的场景,遵循开闭原则,但会引入更多类。
          2025-05-26 15:12:43
          
746
        
原创 Simple Factory(简单工厂)
摘要:简单工厂模式是一种创建型设计模式,通过定义工厂类根据参数返回不同产品实例,这些产品通常具有共同父类。示例展示了使用静态工厂方法创建ProductA和ProductB的Java实现,但该模式违反了开放封闭原则,因为新增产品类型需要修改工厂类代码。
          2025-05-26 15:00:52
          
474
        
原创 项目报 OutOfMemoryError 、GC overhead limit exceeded 问题排查以及解决思路实战
项目报 OutOfMemoryError 、GC overhead limit exceeded 问题排查以及解决思路实战
          2024-12-27 22:11:16
          
4522
        
        
      
空空如也
        
      
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅