- 博客(434)
- 收藏
- 关注
原创 如何优化 Vite 项目中的 Lodash 引入:从 Tree Shaking 到自动化测试
在现代前端开发中,优化代码的体积和构建速度是非常重要的。特别是在使用 Vite 作为构建工具时,如何正确地处理 Lodash 这种通用的工具库,变得尤为关键。在本文中,我将分享我们如何在 Vite 项目中优化 Lodash 的引入方式,并确保优化后的代码能够正常运行。我们分析了几个优化 Lodash 引入方式的解决方案,并最终决定采用更适合我们项目需求的方案。
2024-08-16 19:16:29
2748
原创 vue3的自定义hooks
Vue3 的 hook函数的出现,可以让我们更好抽离重复逻辑,聚合相同的功能。它与vue2 中的mixins有点类似,但是相对 mixins 而言, hooks 函数 更清楚复用功能代码的来源,更清晰易懂。使用 Vue3 的组合 API 封装的可复用,高内聚低耦合。1、具备可复用功能,才需要抽离为 hooks 独立文件2、函数名/文件名以 use 开头,形如: useXX3、引用时将响应式变量或者方法显式解构暴露出来;vue3 hooks 现在使用比较广泛,介绍基本概念与原理。
2024-01-11 16:57:04
2627
1
原创 前端本地覆盖资源(local override)调试
Chrome 65 中的开发者工具将包含以下新功能:本地替换新的无障碍工具更改标签页新的搜索引擎优化 (SEO) 和性能审核Performance 面板中的多个录制内容使用 worker 和异步代码执行可靠的代码单步调试本篇文章主要学习与实践下本地替换这个功能提示:以下是本篇文章正文内容,下面案例可供参考官网详细描述。
2024-01-11 09:40:18
2296
原创 vue3项目使用pako库解压后端返回zip数据
外部接口返回一个图片数据是经过zip压缩的,前端需要把这个数据处理成可以显示的图片。大概思路:zip解压-> 转换为base64数据 -> img标签显示。pako详细描述🚀 npm 直达pako 是一个流行的 JavaScript 库,用于在浏览器中进行数据压缩和解压缩操作。它提供了对常见的压缩算法(如 Deflate 和 Gzip)的实现,使开发者能够在客户端上轻松进行数据压缩和解压缩,以减少数据传输大小和网络带宽消耗。
2023-12-29 18:03:04
3214
原创 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
3787
6
原创 TF-IDF 与 BM25 深度解析:从理论到项目实战
本文深入解析了信息检索领域的两大经典算法TF-IDF和BM25,从数学原理到实际应用进行了全链路拆解。TF-IDF通过词频与逆文档频率的乘积评估词的重要性,但其存在长文档偏差、词频线性增长等局限。BM25在TF-IDF基础上引入词频饱和控制、文档长度非线性归一化等改进,使排序更符合直觉。文章详细对比了两者的差异,并以next-mobile项目为例展示了实际应用方案:采用分层架构,先通过TF-IDF提取关键词,再用BM25风格进行文档打分,最终融合其他检索结果。该方案结合了算法优势与工程实践,为搜索排序提供了
2026-06-13 17:53:01
371
原创 @node-rs/jieba与serverExternalPackages 的作用原理
本文深入解析了Node.js原生模块.node文件的加载机制及在Webpack/Next.js中的处理方式。核心要点包括:1) .node文件是N-API标准的二进制扩展,需通过process.dlopen加载;2) Webpack默认无法处理二进制文件导致解析错误;3) serverExternalPackages配置的作用是跳过打包,保留运行时require;4) Vercel部署时通过平台匹配的二进制子包实现跨平台兼容。文章对比了@node-rs/jieba和nodejieba的差异,强调原生模块必须
2026-06-05 01:35:34
395
原创 B-tree vs GIN Trigram vs HNSW
索引类型类比解决什么问题B-tree按拼音排序的「关键词 → 页码」表精确查找按字组合拆分的「"退货"出现在哪些页」表模糊搜索HNSW根据主题相似度画的「相邻概念地图」语义搜索三者解决的是完全不同的问题,不存在谁替代谁,而是互补关系。没有万能的索引,只有合适的选择:B-tree是基础设施,就像马路上的车道线——必须有,但只解决基础问题是精确制导,专门对付这种"文本里找字"的需求HNSW是"智能联想",让计算机理解"苹果手机 ≈ iPhone"这种人类直觉。
2026-06-04 23:34:52
411
原创 Hybrid Search + RRF + Reranker:打造电商 RAG 的精准检索三件套
本文介绍了电商RAG系统中混合检索(Hybrid Search)的优化方案,通过结合向量搜索和关键词搜索解决单一检索方式的不足。主要采用三段式架构:1)并行检索阶段,同时进行向量搜索(使用qwen3-8b模型)和关键词搜索(基于jieba分词和BM25算法);2)RRF融合阶段,通过Reciprocal Rank Fusion算法合并两路结果,突出精准匹配;3)LLM重排阶段,使用qwen3-8b模型对候选文档进行精排。该方案有效解决了电商场景中同时需要语义理解和精确匹配的需求,如"iPhone 15 Pr
2026-06-04 17:46:56
506
原创 学习GitNexus中优雅的自动滚动:useAutoScroll Hook 实现
本文剖析了AI聊天应用中流式输出与用户滚动交互的实现细节,提出了基于useAutoScroll Hook的精妙解决方案。核心设计包括:1) 分离State与Ref职责,避免闭包陷阱;2) 智能滚动方向检测,通过阈值判断用户意图;3) 三重rAF节流体系优化性能;4) 选择ResizeObserver监听内容变化;5) 运用useLayoutEffect消除视觉闪烁。该方案实现了AI流式输出时用户自由查看历史消息且无闪烁的流畅体验,为类似交互场景提供了可复用的设计模式。
2026-06-03 20:36:47
541
1
原创 Next.js中App Router 全部特殊文件一览
Next.js App Router提供多种约定式文件用于页面功能和路由控制。主要包括: 页面渲染相关:如loading.tsx(加载状态)、error.tsx(错误处理)、not-found.tsx(404页面)等6个文件,分别在不同时机触发; 导航路由相关:middleware.ts(请求拦截)、route.ts(API路由)等4个文件; SEO元数据:通过layout/page中的metadata导出配置。文件遵循层级优先级,如error.tsx同级优先并向上冒泡。loading.tsx本质是通过Su
2026-06-03 19:56:59
270
原创 AI客服聊天记录优化:从全量加载到游标分页
记录我在一个 Next.js + Prisma + PostgreSQL 的 AI 聊天项目中,对聊天记录加载逻辑进行深度优化的完整过程。涉及 SSE 滚动劫持、游标分页、无限加载、闭包陷阱等多个真实踩坑经历。LIMIT是 SQL 语法,OFFSET是 SQL 语法,也是 SQL 语法。Prisma 只是把包装成了这样更声明式的写法。如果 Prisma 的限制让你束手束脚(比如 cursor 字段必须唯一),直接写就行了,完全绕过 Prisma 的 cursor API。维度Offset (skip。
2026-05-31 19:28:33
403
原创 Graph RAG Agent 系统深度分析
本文介绍了 gitnexus-web 的核心智能层 Graph RAG Agent,这是一个基于 LangGraph 的浏览器端智能代理系统。该系统通过7个专用图数据库工具与知识图谱交互,实现对代码库的深度分析。架构分为用户配置层、Agent引擎、工具执行层、流式输出层和UI渲染层,采用模块化设计。类型系统方面,通过适配器模式支持9种LLM供应商配置,并使用判别联合类型定义7种流式输出协议,确保类型安全和最小信息传递。系统实现了从用户配置到工具调用再到结果展示的完整流程。
2026-05-28 17:37:49
526
原创 GitNexus Web深度模块分析
GitNexus-Web 是一个基于浏览器的代码知识图谱可视化工具,集成了AI对话分析功能。作为GitNexus的前端界面,它提供代码库的可视化浏览(使用Sigma.js WebGL渲染)、AI辅助分析(内置Graph RAG Agent)以及两种连接模式:通过CLI后端或纯浏览器WASM模式运行。项目采用React 19 + TypeScript + Vite技术栈,核心架构包含三视图状态机(引导/加载/探索)和全局状态管理(1300+行超级Hook)。主要功能模块包括图可视化面板、代码查看器、AI聊天界
2026-05-28 17:31:07
384
原创 GitNexus Monorepo 是如何维护
本文介绍了一种基于原生 npm 的 monorepo 管理方案,通过 workspaces 特性和手动依赖链接(file:../)实现多包管理。方案特点包括: 根目录 package.json 管理共享开发工具和全局脚本,设置 private: true 避免发布 子包分为三类: 可发布的 CLI 包(gitnexus) 私有的 Web UI 包(gitnexus-web) 共享类型库(gitnexus-shared) 使用 file:../ 协议实现本地依赖链接,无需额外工具 包含独立的 Python 评
2026-05-27 23:25:31
373
原创 GitNexus是Monorepo单体仓库
一般Monorepo 可以看 /app 来看有些应用,workspace 可以看主次包的关联。而这里GitNexus 只有一个产品,其他都是 设置private为true,不对外发布的。所以,在 Monorepo(单体仓库)架构中,并没有绝对的物理标准来区分“主包”和“子包”,它们的地位在代码仓库层面是平等的。但通过工程依赖关系(谁引用谁)和产品功能定位,可以清晰地梳理出它们的层级。扫谁里引用了或开头的包?——它是子包(应用层)。谁的name出现在别人的里?——它是主包(库/核心层)。看。
2026-05-27 23:17:52
410
原创 GitNexus 完整技术栈分析
GitNexus是一个基于Monorepo架构的代码智能分析平台,包含CLI核心(Node.js)、Web UI(React+Vite)、共享类型(TypeScript)、评估框架(Python)和编辑器集成等模块。核心技术栈采用Tree-sitter进行多语言AST解析,结合Hugging Face模型实现语义搜索,使用LadybugDB存储知识图谱,并集成LangChain支持多种AI代理。前端采用Sigma.js实现WebGL图可视化,支持ForceAtlas2等布局算法。平台提供本地推理(ONNX)
2026-05-27 23:03:04
484
原创 GitNexus 图文使用教程:为你的代码库构建知识图谱
GitNexus是一款为代码项目生成知识图谱的工具,可将代码文件转化为可视化关联节点,并支持生成向量索引(Embedding)供AI编辑器使用。安装只需npm全局安装gitnexus包,进入项目目录后运行分析命令即可生成图谱,通过serve命令可本地查看。该工具能提升AI对代码的理解能力,减少生成错误,支持Cursor、Codex等主流AI编辑器集成。核心功能包括代码索引、解析、聚类和图构建,所有处理均在本地完成,不消耗API token。
2026-05-27 18:38:50
452
原创 数据库-引用完整性(referential integrity)
本文解析了SQL标准中的外键约束ON DELETE CASCADE机制及其应用场景。该功能在主流数据库(PostgreSQL/MySQL等)中通用,当父表记录被删除时自动删除关联的子表记录。文章通过作者-文章的示例演示了四种处理方式:CASCADE(级联删除)、SET NULL(设为空值)、RESTRICT(禁止删除)和SET DEFAULT(设为默认值)。重点分析了AI客服项目中文档与文档块的级联删除实现,展示了从API调用到数据库自动清理的完整流程。这种设计适用于子记录无独立存在意义的场景,确保数据一致
2026-05-25 23:33:48
362
原创 Chunking 实现迁移经验:从自实现到 LangChain TextSplitters
本文对比了RAG系统中文档分块策略的自实现方案与LangChain TextSplitters方案。自实现方案需手动处理Markdown标题识别、状态管理和边界条件,代码量达107行;而LangChain方案仅需44行,通过声明式配置即可实现更智能的分割,支持所有标题层级、chunk overlap和递归分割。关键差异包括:LangChain内置鲁棒性处理、灵活配置和生态兼容性,显著减少60%代码量并降低维护成本。建议在标准文档结构和需要chunk overlap的场景优先采用LangChain方案,仅在特
2026-05-25 18:27:08
398
原创 codex接入deepseek
本文介绍了如何在Mac系统上配置和使用CCX工具连接DeepSeek API。主要内容包括:下载CCX并解决权限问题、获取DeepSeek API Key、安装cc-switch切换工具,以及最终测试验证流程。通过详细的操作步骤和截图说明,指导用户完成从环境搭建到实际使用的全过程,最终实现通过Codex App成功调用DeepSeek API进行问答交互。
2026-05-25 17:43:13
1816
原创 003-RAG 优化实战:从“能用“到“好用“的蜕变
本文分享了RAG系统从"能用"到"好用"的优化实践。针对相似度阈值、关键词提取、上下文位置和用户提问模糊等问题,提出了四项优化方案:1)简化Prompt并引入相似度阈值过滤噪音;2)用nodejieba替代手工词典实现关键词提取;3)调整RAG上下文位置以增强注意力;4)动态调整相似度阈值以适应不同场景。这些优化显著提升了系统回答的准确性和用户体验,为RAG系统的优化提供了实用参考。
2026-05-24 17:01:55
408
原创 从查询到生成:RAG 优化策略全指南
摘要: 本文系统梳理了RAG(检索增强生成)的优化策略,涵盖查询、索引、检索、生成和架构五个维度。查询端优化(如改写、HyDE、多查询分解)成本低见效快;索引优化强调分块策略与分层设计;检索阶段推荐混合检索(BM25+向量)与多阶段重排序;生成环节需压缩上下文并优化提示词。架构层面需平衡长上下文与RAG的性价比,企业部署需关注监控体系。最后提出分阶段实施建议:优先查询改写和混合检索,再逐步引入高级策略。前沿方向包括GraphRAG和Agent化RAG,为复杂场景提供解决方案。
2026-05-24 12:37:30
562
原创 002-AI客服-RAG优化分析
摘要:该项目是基于Next.js 15的全栈电商AI助手,已实现RAG知识库核心功能,包括用户系统、AI聊天、文档管理等。技术栈涵盖PostgreSQL+pgvector、Prisma、Supabase等。当前处于Naive RAG阶段,存在认证、文档编辑等问题待修复。优化建议分四个层次:检索前查询改写、检索中混合搜索、检索后重排序、生成优化引用标注。推荐优先实施Prompt优化、混合搜索等5项高性价比改进,分阶段提升RAG效果,最终实现从简单检索到融合多策略的增强型问答流程。(149字)
2026-05-24 12:08:12
426
原创 数据库的第三范式(3NF)
本文介绍了数据库第三范式(3NF)的概念及应用。3NF要求满足2NF且消除非主属性间的传递依赖,通过拆分表结构减少数据冗余。文中以学生信息表为例,展示了原始表存在的传递依赖问题(学号→班级→班主任),并通过拆分为学生表和班级表实现3NF规范化。最后提供了MySQL实现代码,演示了符合3NF的数据库设计如何提高数据一致性和查询效率。英文版补充说明了从1NF到3NF的完整规范化过程,强调通过分解表结构消除数据依赖关系的重要性。
2026-05-20 11:47:22
402
原创 DBeaver 的Explain 执行计划,分析sql的性能
摘要:DBeaver执行计划通过表格展示SQL查询的详细操作步骤,核心关注Operation(操作类型)、Object(操作对象)、Rows(预估扫描行数)和Cost(成本估算)。其中Rows是关键指标,数值越大性能越差;Operation中Full Table Scan最慢,Index Lookup最快。优化时先定位Rows最大的行,检查是否为全表扫描或重复操作,通过添加索引、优化条件等方式减少扫描量。执行计划如同SQL的体检报告,Rows异常处即性能瓶颈所在。
2026-05-15 11:44:50
633
原创 sql优化思维
本文总结了SQL优化的核心思维与方法:1)优化原则是减少查询数据量,提前过滤;2)通过三个关键问题(查哪些行、重复查询次数、能否先缩小范围)分析SQL;3)使用EXPLAIN等工具分析执行计划;4)只需了解基本业务场景即可优化;5)实战步骤包括定位慢SQL、分析执行计划、重构查询逻辑。核心心法是"先过滤无用数据,再处理必要数据",将全表扫描改为精准查询,典型优化案例使查询从3秒降至200毫秒。
2026-05-15 11:30:20
400
原创 Java 8 引入的Stream API-stream()
Java 8引入的Stream API通过声明式、函数式的方式简化集合处理。相比传统for循环,Stream具有代码简洁、可读性强、支持并行处理等优势。其工作原理基于惰性求值和短路优化,包含中间操作(如filter、map)和终端操作(如findFirst、collect)。性能上,Stream在小数据量时与传统循环相当,但大数据量或多核环境下更具优势。Stream的核心价值在于提升代码表达力,支持函数式编程范式,并能轻松实现并行化处理。
2026-05-14 23:50:57
565
原创 JetBrains IDE(如 IntelliJ IDEA)的 Git 面板
JetBrains IDE中执行git pull对应两种操作: Pull Using Merge(默认模式,最接近标准git pull) Pull Using Rebase(变基方式拉取) 其他关键操作包括: 创建分支(本地/远程) 比较/合并分支 变基操作 推送/删除远程分支 建议通过顶部工具栏的Git→Pull图标快速执行拉取操作。根据需求选择合并或变基方式同步代码。
2026-05-14 23:14:45
542
2
原创 深入研究 yudao-framework 模块:Java 编程能力提升指南
本文分析了yudao-framework项目的架构设计与安全实现。项目采用分层架构,包含通用组件、MyBatis增强、Redis缓存、Web层等模块。重点剖析了Spring Security的实现:通过自动配置类管理认证组件,配置安全过滤器链禁用CSRF和Session,采用Token认证机制。Token过滤器从请求获取Token并验证,构建登录用户信息存入安全上下文。该设计体现了企业级框架的分层思想和安全认证的最佳实践。
2026-05-10 23:46:23
391
原创 `@interface` 解析
本文介绍了Java注解机制的核心内容:1)@interface是Java声明自定义注解的语法;2)通过@Select示例展示了完整注解定义,包含@Retention、@Target等元注解;3)对比了自定义注解与普通接口的区别;4)列举了Java内置注解及其用途。重点说明这些特性都是Java标准库(java.lang.annotation)原生支持,MyBatis等框架只是基于此机制实现功能。全文150字,概括了Java注解的核心概念和应用场景。
2026-05-08 00:01:50
204
原创 静态工厂方法-Static Factory Method
静态工厂方法(Static Factory Method)是一种通过静态方法创建对象的设计模式,相比直接使用构造器具有多项优势。其核心特点包括:1)通过有意义的命名(如of/create)增强代码可读性;2)支持对象缓存复用,避免重复创建;3)可返回子类实现多态;4)支持参数化创建和默认值设置,简化调用。在项目中,如TemplateDataItem.of()方法就体现了提供默认值、语义清晰等优点。虽然存在无法继承、不够直观等缺点,但通过规范命名(valueOf/getInstance等)可提升可维护性。该模
2026-05-07 17:46:12
39
原创 《发送公众号消息项目》学面向对象特性
本文分析了项目中应用的面向对象特性:主要使用了封装(隐藏实现细节,通过接口访问)、单例模式(Spring Bean)、建造者模式(Lombok @Builder)和工厂方法(静态工厂),但未使用继承和多态。作者建议可通过定义接口和多个实现类来引入多态特性。整体体现了良好的封装设计,但缺乏继承和多态的应用场景。
2026-05-07 17:31:50
75
原创 `@Recover` 注解的触发机制
摘要:@Recover注解在重试机制中当达到最大尝试次数(如3次)仍失败时触发。其方法参数需严格匹配原方法:首参数为异常类型,后续参数须与原方法参数顺序、类型和数量完全一致。设计上支持通过不同异常类型和方法重载进行差异化处理,也可简化为统一异常处理。关键点包括触发时机、参数匹配规则和返回值一致性要求。
2026-05-07 15:52:52
94
原创 Actuator 监控--健康检测
这篇文章介绍了如何使用Spring Boot Actuator实现应用监控功能,主要包括三个步骤:添加依赖、配置端点和自定义健康检查。核心功能是通过/actuator/health端点实时监控应用状态,特别是自定义的TokenHealthIndicator会检查access_token有效性。文章还说明了监控系统在开发调试和线上运维中的重要性,当微信接口异常时能及时报警。其他端点如/actuator/metrics和/actuator/info可查看系统指标和应用信息,为应用维护提供了有效工具。
2026-05-07 14:27:16
142
原创 Jackson JSON 处理库的核心类ObjectMapper
摘要: ObjectMapper是Jackson库的核心类,负责JSON与Java对象的相互转换。主要功能包括序列化(对象→JSON字符串)和反序列化(JSON字符串→对象),在项目中广泛应用于处理微信API的JSON数据交互。通过注解如@JsonProperty和@JsonIgnoreProperties解决字段映射问题,且建议以单例模式使用以保证性能。作为线程安全的JSON翻译工具,它简化了前后端数据交换流程,是Java生态中处理JSON的高效解决方案。(150字)
2026-05-07 12:14:33
339
原创 深入分析 Spring Bean 生命周期和 `@PostConstruct` 背后的核心原理
本文深入分析了Spring Bean生命周期中@PostConstruct和@PreDestroy注解的实现原理。核心是通过CommonAnnotationBeanPostProcessor处理JSR-250注解,在Bean初始化阶段(initializeBean()方法)调用postProcessBeforeInitialization()反射执行@PostConstruct方法,在销毁阶段调用postProcessBeforeDestruction()执行@PreDestroy方法。完整的调用链展示了从
2026-05-07 12:05:15
312
空空如也
lodop 如何自适应布局?
2023-12-19
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅