- 博客(405)
- 收藏
- 关注
原创 如何优化 Vite 项目中的 Lodash 引入:从 Tree Shaking 到自动化测试
在现代前端开发中,优化代码的体积和构建速度是非常重要的。特别是在使用 Vite 作为构建工具时,如何正确地处理 Lodash 这种通用的工具库,变得尤为关键。在本文中,我将分享我们如何在 Vite 项目中优化 Lodash 的引入方式,并确保优化后的代码能够正常运行。我们分析了几个优化 Lodash 引入方式的解决方案,并最终决定采用更适合我们项目需求的方案。
2024-08-16 19:16:29
2731
原创 vue3的自定义hooks
Vue3 的 hook函数的出现,可以让我们更好抽离重复逻辑,聚合相同的功能。它与vue2 中的mixins有点类似,但是相对 mixins 而言, hooks 函数 更清楚复用功能代码的来源,更清晰易懂。使用 Vue3 的组合 API 封装的可复用,高内聚低耦合。1、具备可复用功能,才需要抽离为 hooks 独立文件2、函数名/文件名以 use 开头,形如: useXX3、引用时将响应式变量或者方法显式解构暴露出来;vue3 hooks 现在使用比较广泛,介绍基本概念与原理。
2024-01-11 16:57:04
2610
1
原创 前端本地覆盖资源(local override)调试
Chrome 65 中的开发者工具将包含以下新功能:本地替换新的无障碍工具更改标签页新的搜索引擎优化 (SEO) 和性能审核Performance 面板中的多个录制内容使用 worker 和异步代码执行可靠的代码单步调试本篇文章主要学习与实践下本地替换这个功能提示:以下是本篇文章正文内容,下面案例可供参考官网详细描述。
2024-01-11 09:40:18
2269
原创 vue3项目使用pako库解压后端返回zip数据
外部接口返回一个图片数据是经过zip压缩的,前端需要把这个数据处理成可以显示的图片。大概思路:zip解压-> 转换为base64数据 -> img标签显示。pako详细描述🚀 npm 直达pako 是一个流行的 JavaScript 库,用于在浏览器中进行数据压缩和解压缩操作。它提供了对常见的压缩算法(如 Deflate 和 Gzip)的实现,使开发者能够在客户端上轻松进行数据压缩和解压缩,以减少数据传输大小和网络带宽消耗。
2023-12-29 18:03:04
3194
原创 Vue3+hooks快速接入Lodop打印插件
上面文章《Vue快速接入菜鸟打印组件》讲了vue3如何快速集成菜鸟打印组件,这篇讲讲vue3如何集成lodop组件。在项目的hooks 文件夹下创建一个hook。根据自己的项目,按实际情况命名。这里是 useLodop.ts// 引入上一步骤创建的lodopfuns})try {} else {rawRow: {}) => {if (!LODOP) {return ElMessage.warning('请安装/启动Lodop 打印插件')// 根据打印的类型,获取设置的打印机字符串。
2023-12-15 14:22:59
3758
6
原创 Actuator 监控--健康检测
这篇文章介绍了如何使用Spring Boot Actuator实现应用监控功能,主要包括三个步骤:添加依赖、配置端点和自定义健康检查。核心功能是通过/actuator/health端点实时监控应用状态,特别是自定义的TokenHealthIndicator会检查access_token有效性。文章还说明了监控系统在开发调试和线上运维中的重要性,当微信接口异常时能及时报警。其他端点如/actuator/metrics和/actuator/info可查看系统指标和应用信息,为应用维护提供了有效工具。
2026-05-07 14:27:16
原创 Jackson JSON 处理库的核心类ObjectMapper
摘要: ObjectMapper是Jackson库的核心类,负责JSON与Java对象的相互转换。主要功能包括序列化(对象→JSON字符串)和反序列化(JSON字符串→对象),在项目中广泛应用于处理微信API的JSON数据交互。通过注解如@JsonProperty和@JsonIgnoreProperties解决字段映射问题,且建议以单例模式使用以保证性能。作为线程安全的JSON翻译工具,它简化了前后端数据交换流程,是Java生态中处理JSON的高效解决方案。(150字)
2026-05-07 12:14:33
77
原创 深入分析 Spring Bean 生命周期和 `@PostConstruct` 背后的核心原理
本文深入分析了Spring Bean生命周期中@PostConstruct和@PreDestroy注解的实现原理。核心是通过CommonAnnotationBeanPostProcessor处理JSR-250注解,在Bean初始化阶段(initializeBean()方法)调用postProcessBeforeInitialization()反射执行@PostConstruct方法,在销毁阶段调用postProcessBeforeDestruction()执行@PreDestroy方法。完整的调用链展示了从
2026-05-07 12:05:15
10
原创 实例化 → 依赖注入 → @PostConstruct → 初始化 → 使用中 → @PreDestroy → 销毁
本文介绍了Spring框架中@PostConstruct和@PreDestroy注解的使用场景和实现原理。通过微信token刷新的实际案例,详细解析了这两个注解的执行时机:@PostConstruct在Bean初始化完成后执行,用于启动定时刷新token的任务;@PreDestroy在Bean销毁前执行,用于关闭线程池释放资源。文章重点讲解了定时任务的配置策略(110分钟刷新间隔)、守护线程的设置原因,以及线程池的优雅关闭方式,同时对比了不同实现方案的优劣。这些注解配合线程池管理,实现了token的自动刷新
2026-05-07 11:53:36
202
原创 经典的Java双重检查锁代码
本文解析了Java双重检查锁在获取AccessToken中的典型应用。通过提前5分钟刷新token的设计,结合定时任务形成双保险机制。重点分析了volatile关键字保证变量可见性和禁止指令重排序的关键作用,以及双重检查锁如何平衡性能与线程安全。文章通过流程图对比三种方案优劣,指出该设计在高并发场景下既能避免频繁加锁的性能损耗,又能确保线程安全。最后建议分阶段学习:从单线程到同步版本,再到双重检查锁优化,并推荐相关学习资料。
2026-05-07 11:37:47
137
原创 从0到1:手把手教你开发微信公众号模板消息推送服务
本文介绍了一个基于Spring Boot的微信公众号模板消息推送服务Demo。项目实现了access_token自动获取与刷新(有效期7200秒,提前10分钟刷新)、模板消息发送(支持自定义数据和颜色)、获取关注者列表以及OAuth2授权回调等功能。技术栈包括Java 1.8、Spring Boot 2.7.18、OkHttp 4.12.0和Lombok。核心功能通过AccessTokenService实现token的自动管理,采用双重检查锁保证线程安全;WxPushService负责构造模板数据并调用微信
2026-05-07 11:11:46
42
原创 mvn test
surefire-reports是Maven测试报告目录,由Surefire插件在mvn test时自动生成,存储在target/surefire-reports/下,包含文本报告、XML报告和调试转储文件(.dump)。其中.dump文件记录JVM执行过程,用于调试测试问题,可安全删除。此外,mvn package会生成两个jar包:可执行的Fat JAR(含依赖)和备份的原始jar(.original)。Fat JAR可直接运行,而.original文件通常无需使用。这些文件都不需要提交到版本控制。
2026-05-07 11:03:57
74
原创 Lombok‘s `@Builder` && 配置类使用
本文介绍了Lombok的@Builder注解在Java项目中的应用及其优势。@Builder通过自动生成Builder内部类,支持链式调用构建对象,提升代码可读性和灵活性。相比传统方式,它能避免构造函数参数顺序问题,支持可选字段设置,并可实现不可变对象。文中通过微信消息推送示例展示了实际用法,并对比了Java与JavaScript的JSON序列化操作。此外,还讲解了配置类的使用,通过@ConfigurationProperties将可变参数集中管理,实现代码与配置分离。最后比较了Lombok自动生成的Bui
2026-05-06 15:14:18
262
原创 Yudao项目中 Quartz 架构的使用方式
本文介绍了Yudao项目中Quartz定时任务框架的架构设计和使用方法。系统采用分层架构,包含管理界面层、REST API层、业务服务层和Quartz核心调度层。核心组件JobHandler接口定义了任务执行规范,开发者只需实现该接口并添加@Component注解即可创建定时任务。文中提供了访问日志清理Job和ERP采购同步Job两个具体实现示例,展示了如何通过注入服务和实现execute方法来完成任务逻辑。整体架构通过SchedulerManager统一管理任务调度,并配套完善的日志记录功能,实现了定时任
2026-05-04 01:41:53
332
原创 微服务下 DTO 设计核心原则
本文总结了微服务架构下DTO设计的核心原则和实践建议。关键点包括:1)服务间调用应使用独立的Request/Response对象,避免直接暴露数据库实体;2)推荐建立独立的API模块存放DTO和Feign接口;3)DTO应按场景细分(如Create/Query/Response);4)需保持版本兼容性,避免破坏性修改;5)建议采用统一响应结构(如RpcResult)。文中还提供了服务调用示例和推荐的目录结构,强调DTO应作为服务契约而非数据库对象来维护。
2026-04-27 12:14:52
139
原创 Java后端对象分层设计
本文介绍了后端开发中接近大厂标准的对象分层设计方法。核心分层包括Controller(接收DTO/返回VO)、Service(业务逻辑)、BO(业务对象)、DO(数据库对象)和DAO(数据访问层)。文章重点阐述了各层职责与转换关系,强调通过DTO→BO→DO→VO的分层转换实现解耦、安全和灵活扩展。同时指出了常见错误做法,如Controller直接使用DO、DTO与DO混用等,并提供了正确的命名规范和电商下单流程的完整示例。最后指出小项目可适当简化,但中大型系统必须严格分层,以达到更好的可维护性和安全性。
2026-04-27 12:08:41
146
原创 JavaBean
摘要: JavaBean 是遵循特定规范(如无参构造、getter/setter)的普通 Java 类(POJO),用于数据载体(DTO/VO等);Spring Bean 则是被 Spring 容器管理的对象,支持依赖注入、AOP等功能。两者本质不同:JavaBean 是数据结构规范,Spring Bean 是运行时对象管理机制。JavaBean 可被 Spring 管理成为 Spring Bean,但 Spring Bean 不一定符合 JavaBean 规范(如无 getter/setter)。早期 S
2026-04-27 11:47:18
193
原创 Spring Bean
本文深入解析Spring框架中的核心概念——Bean。文章首先明确Bean是由Spring容器管理的对象,通过与普通对象的对比(创建方式、生命周期、依赖注入等)突出其特性。随后详细介绍了Bean的三种创建方式(组件扫描、@Bean声明、自动配置)、底层存储结构(Map形式)及命名规则。重点剖析了Bean生命周期的五个阶段(实例化、属性注入、初始化、使用、销毁),并强调Bean在依赖注入和AOP增强中的关键作用。最后指出Bean是Spring IOC和DI的基础载体,贯穿组件管理、自动配置等核心功能,为理解S
2026-04-27 11:41:44
339
原创 Spring自动配置分析
Spring Boot自动配置机制解析:@SpringBootApplication组合了@EnableAutoConfiguration等三个注解,其核心是通过AutoConfigurationImportSelector读取META-INF/spring/*.imports文件中的配置类。这些配置类使用@Conditional条件注解(如@ConditionalOnClass、@ConditionalOnMissingBean)进行筛选,仅在满足条件时才会生效。启动时可通过--debug参数查看生效的自
2026-04-27 11:37:23
295
原创 Spring最核心扩展点:BeanPostProcessor
本文深入解析Spring框架的4个核心机制:1. BeanPostProcessor作为核心扩展点,在Bean初始化前后介入处理,AOP代理正是在此阶段生成;2. 详细剖析@Transactional注解的底层调用链,展示事务拦截器如何通过代理模式实现;3. 解释构造器注入无法解决循环依赖的原因,对比字段注入的"半成品"机制;4. 三级缓存如何解决代理对象的循环依赖问题。文章指出Spring通过延迟创建、动态增强和生命周期钩子三大设计,构建了灵活的企业级框架,并建议后续可深入事务传播机制
2026-04-27 11:30:32
300
原创 Spring 高级机制:循环依赖 + AOP + @Transactional 失效原理
Spring通过三级缓存机制解决循环依赖问题,允许半成品Bean提前暴露。AOP通过动态代理实现,在方法调用前后插入增强逻辑。@Transactional失效常见原因包括同类内部调用、非public方法、异常被吞没等。Spring的设计哲学在于将业务与技术解耦,三级缓存同时支持AOP和循环依赖处理。核心机制涉及对象构建、依赖解析和生命周期管理,通过代理模式实现事务、缓存等横切关注点。
2026-04-27 11:25:01
499
原创 Spring学习-@Component
本文深入解析了Spring框架中@Component注解的核心作用与实现原理。该注解是Spring IOC容器的基础,用于将Java类交由Spring管理,实现控制反转(IOC)和依赖注入(DI)。文章从五个维度展开:1)基础功能:自动创建对象并纳入容器管理;2)解决的问题:解耦对象创建和统一生命周期管理;3)与@Service等衍生注解的关系;4)底层机制:包括组件扫描、Bean定义、实例化等Spring启动流程;5)设计价值:解耦、可扩展性、AOP支持等。最后揭示了Spring作为"对象操作系
2026-04-27 11:17:36
360
原创 电商订单id设计思路
本文介绍了在Spring Boot中实现「业务前缀 + Snowflake ID」生成订单号的方法。核心思路是组合业务前缀(如"OD")、日期和Snowflake算法生成的唯一ID。文章提供了Java版的Snowflake实现工具类,包含时间戳、机器ID、序列号等处理逻辑,并解决了时钟回拨问题。通过OrderNoGenerator服务类封装生成逻辑,最终生成类似"OD202604271789237498127349823"的订单号。生产环境需注意机器ID分配、时钟同步
2026-04-27 11:04:12
184
原创 Spring 定时任务的执行原理
Spring的@Scheduled注解驱动定时任务执行,无需显式调用。Spring Boot启动时自动扫描带该注解的方法,通过内置任务调度器按规则执行。示例中refreshLocalCache()方法配置为延迟60秒启动,之后每60秒执行一次;cleanup()方法通过cron表达式每小时清理一次Redis Stream旧消息,防止内存溢出。两种定时任务均由@EnableScheduling启用,通过不同参数配置执行频率,实现自动调度。分布式锁确保集群环境下仅一个节点执行清理操作,保证数据一致性。
2026-04-25 19:40:22
396
原创 Maven install 的原理
Maven install原理解析:通过依赖树机制自动下载并管理项目所需的所有jar包。构建流程分为四个步骤:解析依赖(从配置的镜像源下载)、编译代码、打包成jar、安装到本地仓库。多模块项目必须按依赖顺序从底层到上层依次构建。首次构建必须下载所有依赖,后续构建会优先使用本地仓库缓存。整个过程由pom.xml声明的依赖和Maven的传递依赖机制驱动,确保项目完整构建。
2026-04-25 15:29:49
451
原创 小程序发体验版
本文介绍了微信小程序的发布流程:首先在HBuilder X中选择发行到微信小程序,配置完成后登录微信开发者平台(需管理员权限)。在小程序后台选择对应程序进行编辑,通过版本管理设置体验版本。体验用户扫码后,后续更新无需重新扫码。此外,也可直接通过微信开发者工具上传发布。整个流程展示了从开发到体验版发布的关键步骤。
2026-04-22 12:20:47
27
原创 PHP入门指南
本文为PHP和ThinkPHP框架快速入门指南,主要包含五个步骤:1)PHP语法速查(1-2小时),对比Java/JS/Python的语法差异;2)ThinkPHP核心概念映射(2小时),类比Spring Boot等框架;3)项目核心代码阅读顺序(3小时);4)动手创建完整CRUD模块(2小时);5)PHP生态工具速查(30分钟)。重点介绍了PHP的独有特性、ThinkPHP的约定和关键差异,如同步阻塞特性、无内存常驻、Facade模式等,并提供了语法速查清单。通过对比学习和实践指导,帮助开发者快速掌握PH
2026-04-10 20:57:53
211
原创 ThinkPHP入门
ThinkPHP是一款国产PHP开发框架,采用MVC架构模式,提供模块化设计和路由映射功能,帮助开发者快速构建Web应用。框架通过内置数据库操作、请求处理、安全防护等核心功能,避免了重复造轮子。其目录结构清晰划分应用模块、配置文件和运行时资源,支持数据库CRUD操作、缓存管理、会话控制等常用功能。ThinkPHP采用分层配置策略,模块配置优先于全局配置,并通过路由机制将URL映射到对应的控制器方法,实现请求生命周期的自动化处理。
2026-04-10 12:06:30
219
原创 在 ThinkPHP 5.1 项目中创建一个新的模块
本文介绍了在ThinkPHP框架中创建新模块的完整流程。首先展示了典型的ThinkPHP模块结构,包含controller、model、view等目录。然后详细说明了创建Test测试模块的步骤:1)创建模块目录结构;2)编写控制器类;3)创建视图模板文件;4)演示访问方法。文章还提供了一个包含增删改查功能的完整模块示例,包括模型定义、控制器实现和视图模板代码。最后总结了URL访问路径规则和注意事项,如控制器命名规范、视图目录结构等。整个过程清晰地展示了ThinkPHP模块化开发的基本方法。
2026-04-10 11:59:50
202
原创 结合登录页-PHP基础知识点解析
本文通过一个PHP登录页面的代码示例,介绍了PHP的基础知识要点。主要内容包括:PHP开始标签<?php的作用、命名空间的概念与用途、使用use导入类文件、类定义与继承、变量作用域、构造函数__construct()的自动执行特性、方法定义与视图渲染流程,以及登录请求处理中的表单数据获取、变量验证、数据库查询、密码校验和会话管理等核心功能实现。文章采用类比方式(如图书馆、收件员等)帮助理解编程概念,适合PHP初学者快速掌握基础语法和ThinkPHP框架的基本使用。
2026-04-10 11:43:06
399
原创 使用FlyEnv启动PHP项目
FlyEnv是一款高效的全栈开发环境管理工具,具有原生速度、项目级版本切换和一体化界面等特点。它支持多种技术栈,包括PHP、Node.js、数据库等。针对PHP缺少pdo_mysql扩展的问题,可通过FlyEnv启用相关扩展并重启服务解决。此外,还提供了Redis扩展测试方法,确保开发环境配置正确。FlyEnv通过简化环境管理,帮助开发者更专注于业务代码。
2026-04-09 18:16:12
519
原创 安卓应用(uniapp开发)分享微信-申请appid
本文介绍了在uni-app中配置微信分享功能时获取APPID的详细流程。首先需通过DCloud官网生成自定义证书文件并查看MD5指纹,然后在微信开放平台注册移动应用获取APPID。文中提供了具体操作命令和参考链接,并指出常见审核被拒原因(如主体与ICP备案不一致),整个审核过程通常需要1-7个工作日。附有各步骤的界面截图和命令行操作方法,为开发者提供了完整的配置指引。
2026-04-01 17:32:55
230
原创 从零到1:构建一个完整的知识库 RAG 系统
本文分享了从零构建电商知识库RAG系统的实践经验。采用Supabase+pgvector作为向量数据库,Qwen3-8B模型生成Embedding,结合Prisma和Next.js实现全栈开发。重点解决了数据库迁移、Embedding维度匹配、Prisma原生查询等关键技术难题,并提供了向量搜索的完整实现方案。系统支持基于业务类别的智能检索,当向量搜索失败时可自动降级为文本搜索,确保服务可用性。该方案为电商场景下的AI问答系统提供了可靠的知识检索支持。
2026-03-29 14:26:48
395
原创 AI聊天机器人 / 轻量级对话系统(调用闭源API)
本文介绍了一个基于TypeScript和Next.js的轻量级AI聊天机器人系统。技术栈采用Next.js全栈架构,使用OpenRouter API调用多种免费大模型,Prisma ORM管理SQLite数据库存储用户数据,前端使用React 19和Tailwind CSS构建。系统目前具备基础对话功能和数据持久化,但尚未集成RAG知识库和Agent框架。文章建议未来可扩展方向包括:添加LlamaIndex等RAG支持、引入LangGraph实现复杂对话流程、集成pgvector等向量数据库。该系统是从基础
2026-03-28 19:07:49
210
原创 Chatbot应用开发日志-修改用户信息
本文记录了2026年3月28日的开发工作,主要包括三个任务:修复ChatMarkdown组件的HTML结构错误、尝试实现图片问答功能(因模型可用性问题暂未实现),以及完整的个人资料功能开发。重点描述了个人资料功能的实现过程,包括数据库设计(扩展User表)、创建迁移、API接口开发(GET/PUT请求)和Profile页面更新,并分享了Prisma工作流程、React+Next.js最佳实践等技术收获。文章展示了从问题定位到解决方案的全过程,特别强调了正确处理Schema变更和客户端生成的重要性。
2026-03-28 17:55:54
427
原创 微信开放平台申请移动应用 AppID
本文介绍了在微信开放平台注册账号、创建移动应用并获取AppID的完整流程。主要内容包括:1)使用企业邮箱注册账号,推荐完成开发者资质认证;2)创建应用时填写基本信息与平台信息,特别注意安卓应用的包名和MD5签名必须与项目配置一致;3)提交审核的注意事项及常见被拒原因;4)在uni-app中配置AppID的方法,强调必须云打包才能生效;5)常见问题排查要点,如签名不一致、分享失败等情况的解决方法。文章提供了详细的操作指引和官方参考链接,帮助开发者顺利完成微信功能接入。
2026-03-26 22:14:26
458
空空如也
lodop 如何自适应布局?
2023-12-19
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅