- 博客(126)
- 收藏
- 关注
原创 设计模式笔记_行为型_解释器模式
摘要:解释器模式是一种行为型设计模式,用于定义和解析简单语言的语法。它包含抽象表达式、终结符表达式、非终结符表达式和上下文等组件,适用于数学表达式解析等简单场景。示例展示了如何通过实现接口构建解释器来计算表达式"x+(x-y)"的值。该模式虽易于扩展但性能较低,不适合复杂语法解析。
2025-08-19 19:19:13
382
原创 设计模式笔记_行为型_命令模式
命令模式是一种行为设计模式,它将请求封装为对象,实现发送者和接收者的解耦。该模式包含Command接口、具体命令类、接收者和调用者四个组件。以遥控器控制智能灯为例,遥控器是调用者,按钮命令是具体命令类,灯是接收者。优点包括解耦、扩展性强和支持撤销操作,缺点是可能增加类数量和系统复杂度。代码演示展示了通过命令模式实现灯的开关控制,包括命令接口、具体命令类、接收者类和调用者类的实现。
2025-08-19 18:09:54
301
1
原创 设计模式笔记_行为型_备忘录模式
备忘录模式是一种行为设计模式,用于在不破坏封装的情况下保存和恢复对象状态。它由发起人(保存状态)、备忘录(存储状态)和负责人(管理备忘录)三部分组成,适用于实现撤销/恢复功能。该模式优点在于保持封装性,简化状态恢复,但可能消耗较大内存。示例展示了编辑器内容版本的回滚实现,通过栈结构管理历史状态。
2025-08-19 10:48:54
322
原创 设计模式笔记_行为型_访问者模式
访问者模式是一种行为设计模式,允许在不修改对象结构的情况下定义新操作。该模式将操作逻辑与对象结构分离,通过Visitor接口定义操作,由具体访问者(如ArtLoverVisitor)实现不同行为。被访问对象(如Painting)实现Element接口的accept方法,接受访问者访问。ObjectStructure(如Museum)管理元素集合并提供遍历访问的接口。优点是新增操作方便、符合单一职责原则,缺点是对象结构必须稳定且易导致类爆炸。适用于对象结构稳定的场景。
2025-08-18 20:06:21
1309
原创 设计模式笔记_行为型_迭代器模式
迭代器模式是一种行为设计模式,用于顺序访问聚合对象中的元素而不暴露其内部结构。该模式通过分离集合遍历与集合存储,提供统一的遍历接口。主要包含迭代器接口、具体迭代器、聚合接口和具体聚合类四个组件。优点是遵循单一职责和开闭原则,简化客户端代码;缺点是可能带来额外开销。示例展示了书本阅读器的实现,通过BookIterator遍历BookCollection中的书页。适用于需要多种遍历方式或统一遍历不同集合的场景。
2025-08-18 16:02:42
551
原创 设计模式笔记_行为型_状态模式
状态模式是一种行为设计模式,允许对象在内部状态改变时改变其行为。本文以电风扇档位切换为例,介绍了状态模式的结构和实现。模式包含Context(上下文)、State(接口)和多个ConcreteState(具体状态类)三个核心组件,通过Fan类维护当前状态,由各具体状态类实现档位切换逻辑。该模式优点是可扩展性强、状态转换清晰,但会增加类数量。示例代码展示了从关闭到高速四档的完整切换过程,演示了如何通过状态模式优雅地替代条件语句,实现对象行为随状态变化的场景。
2025-08-14 20:28:33
483
原创 设计模式笔记_行为型_责任链模式
责任链模式是一种行为设计模式,通过将多个处理对象连接成链来解耦请求发送者和处理者。该模式包含抽象处理者、具体处理者和处理器链三个核心组件,支持链表和列表两种实现方式。典型应用场景如客户服务中心的层级处理机制,请求会沿着处理链传递直到被某个处理器处理。模式优点在于降低耦合度和支持动态组合处理者,但可能存在请求未被处理和性能问题。演示案例展示了初级客服、高级客服和经理处理客诉的场景,包括标准实现和“所有handler都处理一遍”的变体实现。
2025-08-14 14:47:31
615
原创 设计模式笔记_行为型_策略模式
策略模式是一种行为设计模式,通过定义算法族并将其封装为可互换的策略对象,实现运行时动态切换算法。本文以出行方式选择为例,演示策略模式的结构和实现:策略接口定义统一方法,具体策略类(开车/火车/飞机)实现具体算法,上下文类管理策略执行。通过Java代码展示常规用法后,进一步引入策略工厂优化,将策略创建逻辑集中管理,降低客户端复杂度。该模式具有灵活性高、扩展性强、代码解耦等优势,特别适合需要动态选择算法的场景。策略工厂虽非必需,但能有效提升复杂项目的可维护性。
2025-08-13 19:04:56
895
原创 设计模式笔记_行为型_观察者模式
观察者模式是一种行为设计模式,实现一对多的依赖关系,让多个观察者监听主题对象的状态变化并自动更新。该模式包含主题(维护观察者列表)、观察者(定义更新方法)及其具体实现。以社交媒体为例,博主(主题)发布新内容时,关注者(观察者)会自动收到通知。代码演示通过博客系统实现:Blog类作为主题管理关注者列表,Follower类作为观察者在博客更新时接收通知。该模式降低了对象耦合度,适用于事件处理、数据同步等场景,提高了系统的可扩展性和维护性。
2025-08-13 10:55:33
410
原创 设计模式笔记_行为型_模板模式
摘要:模板模式是一种行为设计模式,定义算法骨架并允许子类重写特定步骤。以蛋糕制作为例,抽象类Cake定义了固定流程(准备、混合、烘烤),而装饰步骤由子类ChocolateCake和FruitCake分别实现。这种模式提高了代码复用性,确保核心流程不变的同时支持步骤定制。类图展示了抽象类与具体子类间的继承关系,客户端通过调用模板方法触发完整算法流程。
2025-08-13 10:51:26
380
原创 设计模式笔记_结构型_享元模式
享元模式是一种用于减少内存消耗的结构型设计模式,通过共享对象内部状态来优化性能。该模式将对象状态分为可共享的内部状态(如字符本身)和可变的外部状态(如字体、颜色)。示例展示了文字处理场景中共享字符对象的实现:Glyph接口定义绘制方法,GlyphCharacter存储内部状态,GlyphFactory管理共享对象缓存。客户端通过工厂获取共享字符,传递不同外部状态进行绘制,有效减少了重复对象的创建。该模式适用于需要处理大量相似对象且内存有限的场景。
2025-08-11 15:50:06
377
原创 设计模式笔记_结构型_组合模式
组合模式是一种结构型设计模式,用于将对象组织成树形结构,以统一处理单个对象和组合对象。本文通过文件系统示例演示了该模式的实现,定义FileSystemComponent接口作为通用组件,File类表示叶子节点,Directory类表示组合节点(可包含子组件)。该模式简化了客户端代码,支持统一操作,易于扩展新组件类型,且能灵活构建复杂层次结构。示例代码展示了目录和文件的嵌套处理,体现了组合模式的核心优势:对整体和部分的一致性处理能力。
2025-08-11 15:04:01
314
原创 设计模式笔记_结构型_门面模式
文章摘要: 门面模式是一种简化复杂系统交互的结构型设计模式,通过提供统一的高层接口隐藏子系统细节。以家庭影院为例,未使用门面模式时需手动操作电视、音响、DVD等组件;而通过门面类(如HomeTheaterFacade)封装开关逻辑后,用户只需调用单一方法即可完成整套操作。该模式降低了耦合度,提升代码维护性,类似于智能手机界面简化内部复杂性的设计思想。
2025-08-11 11:59:06
379
原创 git环境配置_笔记
Git环境配置简明指南:1.安装Git(官网下载或参考安装文档);2.配置用户名和邮箱(必设项);3.设置SSH密钥:生成密钥对,复制公钥到代码托管平台(如GitHub),完成后测试连接。推荐配置:禁用自动换行符转换,使用simple推送模式。配置完成后即可开始使用Git进行版本控制。
2025-08-08 18:14:06
518
原创 HandlerInterceptor、okhttp3.Interceptor、feign.RequestInterceptor 三个拦截器对比
本文对比分析了Spring MVC的HandlerInterceptor、OkHttp的Interceptor和Feign的RequestInterceptor三种拦截器。三者均基于责任链模式处理横切关注点,但定位不同:HandlerInterceptor作用于服务端Web层,处理Controller执行过程;OkHttp的Interceptor负责网络请求/响应的原始字节流处理;Feign的Interceptor则在接口方法转HTTP请求时介入。
2025-07-25 18:08:16
1219
原创 SpringMVC注解与SpringCloudOpenFeign注解对比
本文对比了SpringMVC与SpringCloud OpenFeign的核心注解差异。SpringMVC注解用于服务端处理HTTP请求,包括路由、参数解析等;OpenFeign则用于客户端构建HTTP请求。主要区别体现在:1)URL路径处理上,Feign需完整路径;2)参数处理上,SpringMVC自动绑定POJO,OpenFeign需显式注解;3)路径变量上,Feign必须显式命名;4)查询参数上,Feign需@SpringQueryMap。
2025-07-25 16:33:57
545
原创 Spring Cloud OpenFeign 常用注解_笔记
摘要:SpringCloud OpenFeign提供了声明式HTTP客户端调用,通过常用注解简化微服务间通信。这些注解配合使用可实现RESTful调用,同时支持错误处理和熔断降级机制。使用时需注意Feign与Spring MVC注解的差异,如@PathVariable必须显式命名变量。
2025-07-24 23:15:54
1038
原创 Spring MVC中常用注解_笔记
本文介绍了Spring MVC中的11种常用注解及其适用场景,在REST API开发中推荐使用@PathVariable+@RequestBody+@ResponseBody组合,传统Web应用常用@ModelAttribute+@RequestParam,文件上传需用@RequestPart。这些注解能显著提升开发效率和代码可维护性。
2025-07-24 22:19:48
477
原创 AspectJ用法_笔记
AspectJ是一个功能强大的Java面向切面编程(AOP)框架,它能将横切关注点(如日志、事务等)与核心业务逻辑分离,提高代码模块化和可维护性。文章演示了AspectJ的5种通知方法:@Before前置通知、@After后置通知、@AfterReturning返回通知、@AfterThrowing异常通知和@Around环绕通知。此外,还介绍了通过自定义注解@MyTag实现AOP的方式,使切面逻辑更加灵活。
2025-07-21 21:44:01
315
原创 设计模式笔记_结构型_装饰器模式
装饰器模式是一种动态扩展对象功能的结构型设计模式。它通过将对象放入"包装器"来添加新行为,而不改变原对象。以咖啡为例,通过MilkDecorator和SugarDecorator等具体装饰器,可动态添加牛奶、糖等配料。该模式包含四个角色:Component定义基础接口,ConcreteComponent是被装饰对象,Decorator是抽象装饰器类,ConcreteDecorator实现具体扩展功能。这种模式保持了开闭原则,原有类无需修改即可灵活扩展功能。
2025-07-17 20:46:57
395
原创 设计模式笔记_结构型_适配器模式
适配器模式是一种结构型设计模式,用于解决接口不兼容问题。它通过创建适配器类(如MediaAdapter)将旧接口(OldMediaPlayer)转换为目标接口(MediaPlayer),使不兼容的类能协同工作。示例中,MediaAdapter包装了Mp4Player和VlcPlayer,让AudioPlayer能播放多种音频格式。这种模式无需修改原有代码即可实现功能复用,类似电源插头转换器的作用,常用于整合旧系统或第三方库。
2025-07-15 20:53:48
351
原创 设计模式笔记_结构型_桥接模式
桥接模式是一种结构型设计模式,通过分离抽象部分(功能定义)和实现部分(具体执行)来解决类爆炸问题。以遥控器和电视机为例,传统方式会导致每增加一个电视品牌或遥控器类型都需要创建新类。而桥接模式将遥控器(抽象)与电视机(实现)解耦,通过组合方式连接二者,使它们可以独立变化:新增电视品牌只需实现TV接口,扩展遥控器功能只需继承RemoteControl类。这种设计提高了系统灵活性,避免了因一个维度的变化导致另一个维度被迫修改的问题。
2025-07-14 15:57:27
610
原创 设计模式笔记_结构型_代理模式
代理模式是一种结构型设计模式,通过代理对象控制对目标对象的访问,在不修改目标对象的前提下增强功能。文章介绍了四种代理实现方式:1)基于接口的静态代理,需手动创建代理类;2)基于继承的静态代理,通过类继承实现;3)JDK动态代理,利用反射机制运行时生成;4)CGLIB动态代理,通过继承目标类实现。四种方式各有优劣:静态代理性能高但代码冗余,动态代理更灵活但需考虑反射开销。选择代理方式需根据具体场景,如接口实现、性能要求等。文章通过代码示例详细演示了每种实现方式,并对比分析了适用场景。
2025-07-11 17:25:47
836
原创 设计模式笔记_创建型_建造者模式
建造者模式是一种将复杂对象构建过程分离的设计模式,适用于多属性对象创建。它通过Builder类逐步设置参数,支持属性校验(如必填项、约束条件)和默认值设置,确保对象创建时的完整性。该模式提高了代码可读性和可维护性,特别适合属性多、构造逻辑复杂或需要创建不可变对象的场景。示例展示了如何用建造者模式构建Computer对象,包括必填属性校验和链式调用,最终通过build()方法完成对象创建。
2025-07-08 20:29:59
464
原创 mysql-笔记
本文介绍了MySQL数据库的安装、启动、登录及基本操作指南。主要内容包括:1)使用brew安装MySQL并验证;2)启动MySQL服务命令;3)本地/远程登录方式;4)数据库创建、切换、删除等操作;5)数据表的结构查看、创建、修改、清空及备份恢复;6)用户创建、权限分配及管理;7)IDE连接MySQL数据库的配置方法。文章提供了完整的MySQL基础操作命令集,涵盖数据库、表结构、用户权限等核心功能,并包含IDE连接数据库的配置示例。
2025-07-08 17:36:47
411
原创 TypeReference解决Fastjson反序列化时泛型擦除问题-笔记
Fastjson的TypeReference类用于解决Java泛型类型擦除问题,在JSON反序列化时保留完整的泛型信息。通过创建匿名内部类(如new TypeReference<List<String>>(){})指定目标类型,支持解析复杂嵌套结构如List<Map<K,V>>和自定义泛型对象。相比直接使用Class参数,它能精确还原元素类型,避免手动类型转换,适用于多层泛型处理和通用API响应解析场景,提升代码安全性和可读性。
2025-07-04 15:08:26
393
原创 POST请求url放参数场景-笔记
摘要:POST请求中URL参数和请求体参数各有用途。URL参数(查询字符串)适用于非敏感数据如ID、过滤条件,长度有限且可见;请求体参数适合敏感信息(如密码)、大数据(如表单/文件),支持多种格式。规范不禁止URL参数,但最佳实践是将敏感数据放请求体,非敏感元数据放URL。服务器通过不同方法获取这两类参数(如req.query vs req.body)。设计时应合理分配:URL参数控制行为,请求体传输核心内容。
2025-07-03 20:58:17
434
原创 设计模式笔记_创建型_工厂模式
工厂模式是一种创建型设计模式,分为简单工厂和工厂方法两种形式。简单工厂通过单一工厂类根据参数创建不同对象,而工厂方法将创建逻辑延迟到子类实现。以咖啡店为例,通过抽象Coffee类和具体的AmericanoCoffee、LatteCoffee实现产品层次。工厂方法模式通过定义CoffeeFactory接口和对应的工厂子类,实现了对象创建的解耦和扩展性,但会增加系统复杂度。这种模式适用于需要灵活创建多种类型对象的场景,虽然提高了代码的可维护性,但也带来了更多的类数量。
2025-06-17 20:50:23
365
原创 设计模式笔记_创建型_单例模式
单例模式是一种确保类只有一个实例并提供全局访问点的设计模式,适用于日志记录器、配置管理等场景。文章介绍了五种单例实现方式:1)饿汉式(类加载时立即初始化,线程安全但非延迟加载);2)懒汉式(按需初始化但同步锁影响性能);3)双重检测(延迟加载且高并发,但实现复杂);4)静态内部类(JVM保证线程安全,推荐默认方式);5)枚举(绝对线程安全,天然防反射攻击)。综合对比后,静态内部类实现最平衡,枚举方式适用于关键系统。选择时需权衡延迟加载、线程安全和性能需求。
2025-06-17 20:08:22
400
原创 大模型笔记_模型微调 vs RAG
模型微调(Fine-tuning)和检索增强生成(RAG)是提升大模型性能的两种主要方法。微调通过调整模型参数使其适配特定任务,适合数据稳定的垂直领域,但需训练成本和静态知识限制;RAG通过实时检索外部知识库增强输出准确性,适合需要动态信息的场景,但依赖知识库质量和检索效率。两者各有优势:微调提升任务性能,RAG增强时效性和可信度。实际应用中可结合使用,微调优化模型基础能力,RAG补充实时知识,实现更强大的领域适配与动态响应能力。选择时需考虑知识更新频率、任务复杂度及资源限制等因素。
2025-06-11 20:52:39
907
原创 大模型笔记_检索增强生成(RAG)
RAG(检索增强生成)是结合信息检索与大语言模型的技术架构,通过实时检索外部知识库提升生成结果的准确性和时效性。其核心流程包括检索相关文档、生成融合上下文信息的内容,并进行持续优化。RAG优势在于无需微调模型即可动态整合最新数据,适用于智能问答、企业知识管理等场景,但也面临检索效率、数据质量等挑战。典型案例如电商客服系统,RAG可准确回答保修政策等问题,显著提升服务效率。该技术有效解决了大模型知识过时问题,正成为企业智能化转型的重要工具。
2025-06-11 20:43:01
837
原创 大模型笔记_模型微调
大模型微调是指基于预训练大语言模型(如GPT、BERT等),使用特定领域或任务的小量数据进行二次训练,使其适配具体应用场景的技术。其核心价值在于提升任务性能、实现领域适配、减少数据需求并定制输出风格。典型应用包括医疗问答、金融分析等垂直领域。关键步骤涵盖数据准备、模型选择、训练配置和评估迭代。面临数据不足、领域差异等挑战时,可采用数据增强、迁移学习等解决方案。例如,医疗问答系统通过微调可将准确率从65%提升至90%。该技术以较低成本实现模型定制化,是企业智能化转型和行业深度应用的重要工具。
2025-06-11 20:34:47
747
原创 BaseTypeHandler用法-笔记
MyBatis的BaseTypeHandler是实现Java类型与数据库类型双向转换的抽象类,适用于枚举、JSON等特殊类型映射。核心方法是setNonNullParameter和三个getNullableResult实现类型转换。典型场景包括枚举映射(如Status枚举与字符串互转)、JSON对象转换等。使用时需注意空值处理、线程安全和性能优化。示例展示了枚举TypeHandler的实现过程,包括XML配置和ResultMap应用。JSON转换示例则演示了JSONObject与数据库字符串的互转。
2025-05-30 18:33:02
692
原创 单点登陆(SSO)简介-笔记
本文介绍了单点登录(SSO)的概念与实现方案。SSO允许用户通过一次登录访问多个系统,其核心是通过身份验证服务提供商(IdP)管理认证信息,常见实现方式包括SAML、OAuth和OpenID Connect。文章重点展示了基于Spring Boot的OAuth2+JWT实现方案,包含Maven依赖配置、application.properties设置、安全配置类和受保护资源Controller的代码示例,并说明了测试流程。该方案适用于微服务架构下的统一身份认证场景,用户只需登录一次即可访问所有授权资源。
2025-05-28 20:48:52
984
原创 Cookie与Session简介-笔记
会话跟踪技术是Web开发中解决HTTP无状态问题的关键方案,主要通过Cookie和Session实现。两者通常协同工作:Cookie存储SessionID,Session存储敏感数据。需注意安全性(如HttpOnly/Secure属性)、隐私合规及分布式系统的Session共享问题(如Redis)。技术对比显示,Cookie适合客户端小数据存储,Session适合服务器端安全敏感场景。
2025-05-28 19:54:36
833
原创 对象属性复制BeanCopier-笔记
是 Spring 框架中用于高效复制 Java Bean 属性的工具类。它基于 CGLIB 库实现,相比传统的。方法,具有更高的性能,尤其在需要频繁复制对象属性的场景中表现更优。不会递归复制嵌套对象,Converter 也仅用于简单属性转换。
2025-05-20 15:09:46
445
原创 TransmittableThreadLocal实现上下文传递-笔记
TransmittableThreadLocal(TTL) 是阿里巴巴开源的工具类,用于解决 ThreadLocal 在线程池中无法传递上下文变量的问题。本文通过完整示例,展示了如何在异步调用中传递用户上下文信息,并对比了 ThreadLocal 的局限性。
2025-05-19 18:53:30
1018
原创 WebMvcConfigurer介绍-笔记
WebMvcConfigurer 是 Spring MVC 提供的一个接口,用于自定义 Web 应用的配置。通过实现该接口,开发者可以灵活地添加拦截器、配置视图解析器、设置静态资源处理规则、定义消息转换器等,从而对 Spring MVC 的行为进行深度定制。该接口提供了一系列默认方法,开发者可以通过重写这些方法来实现自定义配置。常见的功能包括添加拦截器、配置视图控制器、设置消息转换器、处理静态资源以及配置跨域请求等。
2025-05-16 19:19:42
488
原创 LocaleContextResolver实现多语言切换-笔记
LocaleContextResolver是Spring MVC中用于解析和管理用户语言环境(Locale)的核心接口。其主要功能包括从HTTP请求中提取用户指定的语言/地区信息,并将解析后的Locale信息存储在当前线程的上下文中,确保整个请求链使用一致的Locale。典型使用场景包括国际化支持、动态语言切换、自动语言检测和持久化语言偏好。
2025-05-16 17:53:43
815
原创 大模型笔记-“训练”和“推理”概念
在大模型的资源管理和开发流程中,训练和推理是两个核心阶段。训练是模型通过大量数据和计算资源学习数据规律的过程,需要高性能GPU集群和长时间计算,目标是生成模型权重参数。推理则是将训练好的模型应用于实际场景,对新数据进行预测或生成结果,要求高效和低成本,通常使用单卡GPU或专用推理芯片。
2025-05-16 15:13:01
1342
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人