自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(129)
  • 收藏
  • 关注

原创 MyBatis 一级缓存默默开着,这个坑你踩过吗?

本文揭示了MyBatis一级缓存在实际开发中容易引发的数据不一致问题。一级缓存默认开启且无法完全关闭,当同一SqlSession内重复查询时直接从缓存返回结果,可能导致以下问题:1)修改查询对象属性会污染缓存数据;2)其他Session的更新无法及时感知。建议通过设置localCacheScope=STATEMENT或使用flushCache强制清空缓存,并谨慎使用二级缓存。在分布式或高并发场景下,推荐关闭二级缓存改用Redis等分布式方案。开发者需根据项目特点权衡缓存策略,避免因默认配置导致隐蔽性数据一致

2026-07-01 12:19:21 249

原创 LangChain4j Guardrails:给你的 AI Service 装上输入输出双层卡口

文章摘要:LangChain4j的Guardrails机制为AI服务提供了结构化的输入输出校验方案。InputGuardrails拦截用户输入的敏感内容(如竞品名称、PII信息),OutputGuardrails校验模型响应格式(如JSON)及业务合规性。该机制支持多级校验链、分类模型辅助判断,并通过reprompt实现自动重试。实施时需注意职责拆分、Token消耗监控及流式场景适配,为企业级AI应用提供了统一的安全防护框架。

2026-06-30 09:39:27 332

原创 Spring AI 的 RAG 检索结果到底插在了哪里?聊聊 Advisor 链顺序这个隐形坑

本文分析了SpringAI中Advisor执行顺序对RAG检索效果的影响。作者通过实际案例发现,当RetrievalAugmentationAdvisor与记忆、日志等Advisor组合使用时,若未正确设置执行顺序,检索结果可能被后续Advisor覆盖,导致模型回答未使用知识库内容。关键点在于Advisor采用栈结构处理:请求阶段后注册的先执行,响应阶段则相反。文章建议:(1)显式指定order值而非依赖注册顺序;(2)RAG Advisor应设为较小order值确保优先执行;(3)日志类Advisor应最

2026-06-29 09:47:57 340

原创 微软撤回Claude Code授权,截止日期就是今天——这场“工具战争“和你的技术选型有什么关系

微软内部因工程师更倾向使用Anthropic的ClaudeCode而非自家GitHub Copilot CLI,决定在财年末(6月30日)取消其授权,引发行业热议。事件折射出三大关键趋势:1)企业级AI选型核心从性能转向可控性,即使竞品更优也需优先考虑审计、定制与数据安全;2)Token计费模式暴露成本隐患,如Uber工程师月均AI开支达500-2000美元;3)AI编程工具已从尝鲜品升级为基建级依赖。启示开发者需平衡模型能力与成本管控,重视多模型路由设计,并通过RAG/MCP等技术在AI效率与自主权间寻求

2026-06-28 10:30:45 221

原创 MCP 工具不是接口搬运:Java 项目该怎样设计一个可用的 Tool

本文探讨了如何正确设计MCPServer工具接口,避免简单包装现有REST接口的常见误区。核心观点包括:1)工具应面向任务而非资源,提供聚合能力而非碎片化接口;2)设计需考虑三个关键:明确任务目标、精简可校验参数、模型友好的返回值;3)示例展示了SpringAI中的工具实现细节;4)强调错误处理应模型可理解,工具要屏蔽内部复杂性;5)建议从只读工具开始,谨慎开放写操作;6)指出工具契约比代码更重要,需要建立明确的接口规范。文章旨在帮助开发团队构建安全、稳定且模型友好的MCP服务边界。

2026-06-27 14:16:24 193

原创 LangChain4j 工具调用别一上来就全量暴露:ToolProvider 才是工程化入口

文章摘要: Java开发者在LangChain4j中滥用静态@Tool注解暴露大量工具会引发提示词膨胀、权限模糊、误调用率升高等问题。动态ToolProvider方案能根据用户身份、问题场景等条件实时筛选工具,实现精准权限控制(如仅对客服开放工单工具)。工具设计需明确边界:读操作可放宽,写操作需二次校验;参数应结构化而非自由文本。动态工具选择还能降低Token成本,避免无关工具干扰模型决策。核心原则是工具“少而精”,通过代码层而非提示词约束权限,将AI调用融入现有工程体系(如审计、幂等),而非仅视作Demo

2026-06-26 12:49:09 349

原创 RAG 知识库别只会追加:Java 项目里如何做增量更新

摘要:RAG系统在实际应用中面临文档增量更新的挑战,核心问题是索引一致性管理。当文档版本更新时(如售后政策从v1到v2),传统方法会导致新旧内容同时被召回,造成模型生成错误答案。解决方案需实现三点:1)为每个chunk添加包含文档ID、版本号等元数据;2)建立独立的状态表管理索引生命周期;3)采用"先删后写"或"版本切换"策略更新数据。检索时需通过元数据过滤确保只查询有效版本,防止旧知识污染。SpringAI框架通过VectorStore接口和metadata机制支持

2026-06-25 10:35:32 334

原创 AI 编程代理把 GitHub 顶到容量压力:这事和 Java 后端有什么关系?

微软GitHub因AI编程需求激增,不得不借助AWS资源扩容,反映出AI代理正将软件开发从人工编码转向批量自动化变更,显著增加了代码提交量和基础设施负载。这一变化不仅挑战传统研发流程(如代码审查、CI/CD效率),也凸显了AI生成代码的质量与维护风险。开发者需关注如何将AI安全整合到团队流程中,优先在低风险任务中应用,并强化测试、审查等环节,以平衡效率与质量。未来,AI编程工具的成功应用将取决于团队能否有效管理其带来的工程化挑战。

2026-06-23 12:40:38 341

原创 LangChain4j 接入多个模型时,别让 AI Service 自动“猜”该用谁

本文探讨了Java项目使用LangChain4j时多模型场景下的最佳实践。文章指出,虽然@AiService注解让AI调用像普通Service一样简单,但在实际多模型项目中(如同时使用在线和本地模型),自动装配会导致模型选择不明确、配置混乱等问题。作者建议采用显式布线方式,通过@AiService(wiringMode=EXPLICIT)明确指定每个业务接口绑定的模型,并按业务边界拆分不同的AIService接口。这种设计既能保持代码清晰,又便于成本控制、问题排查和功能扩展。对于初接入团队,建议从基础的三件

2026-06-22 09:22:40 374

原创 RAG 不是先向量检索再回答:Metadata Filter 才是企业知识库的第一道门

在企业级RAG(检索增强生成)系统中,向量数据库选型并非最关键问题,真正的挑战在于检索过程中如何精准控制内容边界。本文指出,开发者常忽视元数据过滤(MetadataFilter)的重要性,导致系统召回无关内容(如跨部门、过期版本或未授权文档)。通过结构化元数据(如租户ID、部门、文档状态等)实现业务隔离,结合SpringAI示例展示如何在检索前基于用户权限构建过滤条件。重点强调:权限控制必须前置到检索阶段而非依赖Prompt,文档入库时就要规范元数据设计,并配套建立日志记录和评估机制。这是RAG系统从演示走

2026-06-21 18:56:51 338

原创 Spring AI 上线前,先把 ChatClient 调用链看清楚

【摘要】SpringAI为Java项目接入大模型提供了工程化解决方案,其核心价值在于将AI调用纳入Spring可观测体系。文章指出,上线时需关注模型调用链路的细粒度监控(如耗时拆解、Token统计、工具调用追踪),并通过SpringBoot自动配置保留观测能力。关键建议包括:使用注入式ChatClient.Builder、对接Actuator/Prometheus监控、关闭生产环境敏感日志、设置超时降级策略,并推荐优先监控5类指标(客户端/模型耗时、Token用量、Advisor及工具调用性能)。通过标准化

2026-06-18 16:27:34 409

原创 AI 网关不是多套 SDK 的封装:Java 项目先把超时、降级和观测做扎实

很多 Java 团队接入大模型时,第一版很容易写成这样:业务服务里直接注入 ChatClient,调用模型,拿到结果返回。Demo 没问题,一上线就会遇到另一类问题:某个模型变慢、流式响应中断、Token 成本突然上涨、用户投诉“偶尔没返回”,但日志里只看到一段 prompt 和一个异常。这时再补“AI 网关”,就不要把它理解成普通反向代理。

2026-06-15 16:12:53 347

原创 MyBatis 动态排序别乱用 ${}:ORDER BY 的安全写法

摘要:MyBatis中的SQL注入风险常出现在动态SQL部分(如排序字段、表名等),而非普通条件参数。关键在于区分#{}(参数占位符)和${}(字符串替换):前者用于值传递,后者用于SQL结构。正确处理动态排序应采用白名单机制,将前端参数映射为预定义的数据库列名和排序方向,在Service层完成校验转换后再传入Mapper。同时需注意分页参数限制、索引匹配等问题,既保证安全性又兼顾性能。${}并非完全禁用,但必须确保其内容来自可信的枚举值而非原始用户输入。

2026-06-12 16:20:06 439

原创 LangChain4j 的 @Tool 不是贴个注解:工具参数才是稳定性的关键

本文针对Java开发者在LangChain4j工具调用中的常见误区,指出@Tool方法本质是面向大模型的接口契约而非普通Service方法。文章强调工具调用的稳定性关键在于清晰的契约设计:工具名需明确(如getOrderStatus而非query),描述应具体说明使用场景,参数需规范命名和说明格式限制。给出了SpringBoot项目中的最佳实践:安全参数应从上下文获取而非依赖模型传递,可选参数使用defaultValue或Optional<T>,返回值建议使用结构化的DTO。特别提醒开发者需自行

2026-06-11 21:19:13 360

原创 RAG 多租户知识库:权限隔离不能只靠 Prompt

很多团队第一次做企业知识库问答时,流程都差不多:文档入库、切分、向量化、接一个 ChatClient,再用 RAG 把检索结果塞给大模型。Demo 很快能跑通,但一旦进入真实项目,最先暴露的问题往往不是“模型答得不聪明”,而是“它不该看到的内容也被召回了”。对 Java 后端开发者来说,这个问题很好理解:权限不能只写在页面上,也不能只写在提示词里。RAG 的权限边界应该尽量前置到检索阶段,而不是等文档片段已经进入上下文之后,再祈祷模型遵守“不要回答无权限内容”。

2026-06-09 15:56:02 279

原创 GitHub Copilot App 刷屏:AI 编程真正进入“多 Agent 协作”了吗?

微软Build2026大会聚焦AI编程工具革新,GitHub Copilot从代码补全转向全流程开发协作者。新发布的Copilot App支持多任务并行处理,集成开发全流程工具,但工程责任仍需开发者把控。对于Java后端开发,关键挑战在于如何为AI Agent设置工程边界,确保其在不越权、可审计的前提下工作。AI工具正从个人玩具转向团队成本项,需要像云资源一样治理。开发者需培养任务拆解能力,将复杂需求转化为可验证的工程单元。AI工程化重点转向治理体系,后端开发者的系统架构经验将更关键。未来开发者角色将扩展为

2026-06-07 19:26:44 403

原创 Spring AI 应用上线前,先把大模型调用变成可观测链路

本文探讨了Java团队在AI应用开发中常见的可观测性挑战,指出单纯实现API调用远远不够。核心观点包括:1. 生产环境需要结构化监控AI特有的指标(延迟、token成本、工具调用等);2. 通过SpringAI+Micrometer构建可观测边界,将AI调用纳入业务链路追踪;3. 分层处理敏感数据,默认只记录聚合指标,受控环境下才采集详细内容;4. 建议从基础监控起步,逐步完善token成本分析、RAG耗时等关键指标。文章强调AI工程化的核心在于故障定位能力,需要将传统Java工程实践扩展到prompt、模

2026-06-07 11:04:53 408

原创 Java AI 应用别只做转发:先给模型调用建一本“成本账”

文章摘要:Java团队接入大模型时,初版实现往往只关注功能调用而忽略工程化管理。作者提出应将模型调用从"黑盒接口"转化为可统计、可追踪、可限制的业务调用,核心建议包括:1)构建AI网关记录用户、场景、token消耗等关键维度;2)封装统一调用边界集中管理;3)基于token预算而非简单限流;4)设计业务语义化降级策略;5)复用现有监控体系。初期应聚焦基础可观测性建设,避免过度设计,待核心指标完善后再扩展高级功能,实现生成式AI调用与传统后端工程体系的融合。

2026-06-06 11:55:15 362

原创 别再把 Prompt 写成散落的字符串:Java 项目里的提示词工程应该像接口一样管理

很多 Java 项目接入大模型时,第一版代码通常长这样:在 Service 里拼一个字符串,塞几个变量,然后调用模型。Demo 能跑,效果也还行。问题出现在上线以后:产品改了口径,运营加了规则,模型输出偶尔不符合 JSON,排查时没人知道当前 Prompt 改过几次。Prompt Engineering 在工程里不是“写一句更聪明的话”,而是把模型输入变成一份可维护的协议。它应该和接口参数、SQL、配置文件一样,被版本管理、被校验、被测试,而不是藏在 Java 字符串拼接里。

2026-06-03 22:30:25 334

原创 RAG 知识库越用越脏?先把“增量更新”设计清楚

文章摘要:RAG系统上线后最大的挑战在于知识库的增量更新与维护。许多团队初期只关注文档切块和向量化,却忽略了内容变更管理,导致系统逐渐积累过期数据。有效的增量更新需解决三个核心问题:识别文档变更、处理旧数据、维护版本一致性。关键设计包括:为文档定义唯一标识(doc_id)和内容哈希(source_hash),实现文档级原子更新(先删旧chunk再写新chunk),以及查询时添加租户过滤条件。同时需注意分块策略变更、Embedding模型升级等场景下的数据重建,并建议采用异步更新机制提升稳定性。RAG系统的长

2026-06-02 22:26:20 466

原创 Spring AI 工具调用别只会 @Tool:真正难的是把调用链管起来

SpringAI 2.0.0-M7版本将ToolCallAdvisor设为默认工具调用处理器,标志着AI工具调用进入工程化治理阶段。开发者通过@Tool注解暴露方法给大模型时,需从单纯的功能暴露转向全链路管理。该变化使工具调用过程(参数校验、审计日志、结果处理等)融入Spring标准拦截链,支持与RAG、记忆等组件组合。关键实践包括:结构化结果使用returnDirect减少模型二次调用、谨慎配置默认工具、区分读写操作权限,并将工具调用视为需校验和观测的内部接口调用。这一升级提示AI能力需像传统服务一样具备

2026-06-01 15:51:25 411

原创 Anthropic 650 亿美元融资刷屏:后端开发者真正该看的不是估值,而是 Agent 开始进生产系统了

Anthropic完成650亿美元融资,估值达9650亿美元,标志着AI竞争进入新阶段。核心看点不是融资规模,而是AI Agent正从对话能力转向企业系统执行层,重点在于如何安全稳定地接入业务系统。技术人应关注:1)企业级AI需要完整的供应链支持;2)Agent将重构系统边界,涉及工具调用、执行控制、成本管理等领域;3)Java后端开发者的工程能力(权限/接口/事务设计)将成为关键竞争力。趋势表明,AI应用正从模型调用转向系统集成,未来需求将聚焦"稳定系统构建能力"而非单纯Prompt技

2026-05-31 11:55:48 371

原创 Spring AI 接入 MCP 工具:真正要管住的不是协议,而是工具边界

MCP协议在企业AI应用中的关键在于工具治理而非简单连接。SpringAI已提供MCP集成能力,但实际应用需注意:1)避免全局暴露所有工具,应建立工具白名单机制;2)工具设计要语义明确,避免万能入口;3)返回值需结构化处理;4)加强调用审计和权限控制。核心观点是MCP解决了工具连接标准化问题,但生产环境仍需沿用传统API治理原则,包括权限校验、参数验证、审计日志等关键环节。

2026-05-29 16:13:42 387

原创 Spring AI 接入 MCP:工具调用不是“能调就行”,关键是边界治理

很多 Java 团队第一次做 AI 工具调用时,容易把问题简化成一句话:把内部接口注册成工具,让大模型自己决定什么时候调用。Demo 阶段这没问题,但一进入企业系统,很快会遇到三个现实问题:哪些工具能被调用、调用前后怎么审计、模型误调用时怎么兜底。MCP 的价值不只是“让模型能调用工具”。它更像一层工具协议,把文件、数据库、内部 API、业务系统能力包装成 AI 应用可发现、可调用的上下文能力。而 Spring AI 的价值,是把这些能力纳入 Spring Boot 熟悉的配置、Bean、Advisor

2026-05-28 16:14:08 542

原创 用 Spring AI 暴露 MCP 工具:Java 后端别把内部 API 直接丢给 Agent

摘要:企业级MCP(模型调用协议)服务器不应简单封装REST API,而需构建具备权限控制、语义清晰、审计完备的业务工具层。SpringAI 2.0.0-M7版本通过StreamableHTTP协议和ToolCallAdvisor标准化工具调用流程。最佳实践是将工具设计为结构化业务动作(如queryOrderStatus),而非通用接口(如executeSql),并确保:1)返回值最小化;2)服务端权限校验;3)完整调用审计。工具应按风险分级管理,描述需明确使用边界,同时复用现有安全治理体系。MCP的核心价

2026-05-26 16:05:09 593 1

原创 Spring AI 2.0 之后,MCP Server 该按远程企业服务来设计

摘要:SpringAI最新版本将StreamableHTTP作为MCPServer的默认协议,标志着企业级AI工具调用应从临时插件转向可治理的远程服务。MCPServer应作为独立HTTP服务运行,提供统一鉴权、审计和限流能力,而非简单暴露Java方法。开发时需注意:工具设计要面向任务最小化、按业务场景收敛工具、服务端实现安全校验、建立完善的可观测体系。MCP适用于需要跨应用复用业务能力的场景,其核心价值在于将企业系统能力转化为AI可安全调用的服务接口,而非替代原有API。Java开发者应发挥工程化优势,构

2026-05-25 17:33:55 1122

原创 MyBatis 连接缓慢问题排查与解决实战

摘要: 文章记录了一个老项目中MyBatis连接缓慢问题的排查与解决过程。问题表现为项目启动后首次数据库连接异常缓慢,影响开发效率和用户体验。排查过程分为三个阶段:首先怀疑Redis配置问题,经检查排除;接着聚焦MySQL连接,调整参数未果;最后通过新建测试项目复现问题,定位到MyBatis 3.5.2版本的已知Bug。解决方案是升级MyBatis及相关组件至稳定版本,修改pom.xml中的版本配置后问题解决。文章总结了排查思路优化、版本管理重要性及版本选择建议,强调定期升级依赖版本以避免技术债务。

2025-12-30 21:46:43 533

原创 Java中的泛型:从入门到精通

本文摘要: Java泛型是增强类型安全和减少类型转换的核心特性。文章首先通过非泛型集合的示例说明其必要性,然后介绍泛型擦除机制(编译后替换为原始类型)。详细解释了常见泛型符号(E、T、K、V、N、?)及其应用场景,重点分析了通配符?的特性。最后探讨了限定通配符:上界<? extends T>用于安全读取,下界<? super T>用于安全写入。全文通过动物类继承体系的示例代码,清晰展示了泛型在实际开发中的应用价值。

2025-11-23 13:52:57 470

原创 List.subList() 返回值为什么不能强转成 ArrayList

摘要: List.subList()返回的是原List的视图(SubList内部类),而非独立ArrayList,因此不能强转为ArrayList。SubList通过引用原List数据实现高效操作,同步影响原List。但原List的结构修改会导致SubList抛出ConcurrentModificationException(快速失败机制)。实际使用时,若需独立副本应通过new ArrayList<>(list.subList())创建;若需视图操作则避免同时修改原List结构。该方法适用于高效

2025-10-17 21:33:28 1059

原创 为什么不该用 Double 表示金额及解决方案

浮点数在计算时存在精度丢失问题,如0.1+0.2≠0.3,这源于十进制数无法精确转换为二进制存储。Java中提供了BigDecimal类来处理精确计算,它通过无标度值和标度来准确表示数值。使用时需注意:1)避免用equals比较而改用compareTo;2)创建时应使用字符串构造方法或valueOf();3)除法运算需指定精度和舍入模式。在金融等需要精确计算的场景中,必须使用BigDecimal替代double/float类型。

2025-10-10 18:31:35 4890

原创 避坑指南:Java 中字段的命名 “陷阱”—success和isSuccess

在Java开发中,布尔类型字段的getter命名规范容易引发问题。当布尔字段以"is"开头时(如isSuccess),按照规范生成的getter方法名会去掉"is"前缀,导致序列化后JSON字段名与原始字段名不一致(如success而非isSuccess)。这会造成前后端数据对接失败。推荐两种解决方案:1)去掉布尔字段的"is"前缀(如改为success),保持规范命名;2)自定义getter方法(如getIsSuccess),但这种方式不符合Ja

2025-09-24 21:54:31 415

原创 Java平台无关性的实现原理

摘要: Java通过JVM、语言规范和Class文件实现平台无关性。JVM将字节码编译为特定平台机器码,语言规范统一数据类型大小,Class文件提供标准化中间格式。尽管云原生时代容器化部署降低了平台差异,Java这一特性仍支持多环境开发、多云部署和边缘计算,提升开发效率。核心在于"一次编写,到处运行"的设计理念,使同一代码可跨操作系统和设备运行,减少维护成本。

2025-08-07 17:36:34 576

原创 面向对象三大特性---封装

面向对象编程中的封装特性是将数据和方法包装在类中,通过访问修饰符(private/public/protected等)控制访问权限。封装的核心目的是保护数据安全、隐藏实现细节和提高代码可维护性。常见实现方式包括:使用private修饰属性防止直接访问,通过getter/setter方法控制数据访问,以及合理设计类的公共接口。封装遵循最小权限原则,不是简单地隐藏所有内容,而是根据需求合理控制访问级别。典型应用场景如银行账户类,通过封装确保账户余额等敏感数据的安全性。同时,封装也需要注意避免过度设计,并非所有属

2025-08-01 11:40:35 318

原创 面向对象的三大特性---多态

本文介绍了面向对象编程的核心特性——多态。多态分为编译期多态(如方法重载)和运行期多态(如方法重写),主要实现方式包括参数多态(泛型)和子类多态。Java中实现多态需要满足继承关系、方法重写和父类引用指向子类对象三个条件。文章通过具体代码示例展示了多态的静态(方法重载)和动态(方法重写)实现形式,并分析了多态提高代码可扩展性、降低耦合度等优势。最后指出多态在数据库操作、消息处理、UI组件等实际开发场景中的广泛应用,是多态是面向对象编程的重要技能。

2025-07-24 10:11:32 1010

原创 面向对象三大特性---继承

本文介绍了Java中的继承机制及其应用。继承是面向对象编程的重要特性,允许子类复用父类的属性和方法,实现代码复用和扩展。Java采用单继承模式,通过接口弥补多继承的不足。文章分析了继承的优缺点:优点包括代码复用、扩展性和多态支持;缺点是增加耦合度和维护难度。最佳实践建议遵循里氏替换原则,优先使用组合而非继承,并控制继承层次深度。Java 8后接口支持默认方法和静态方法,增强了灵活性。一句话总结:继承应作为行为契约而非代码复用工具。

2025-07-18 21:29:08 791

原创 Java中的对象一定在堆上分配内存吗?

Java中的对象不一定在堆上分配内存。HotSpot虚拟机通过JIT编译器进行逃逸分析,若发现局部对象未逃逸出方法或线程,可能进行栈上分配而非堆分配。逃逸分析判断对象是否被外部代码使用,包括方法逃逸、线程逃逸和静态逃逸三种情况。JIT优化还包括标量替换(用局部变量代替对象字段)、同步消除和方法内联。栈分配比堆分配更快且无GC开销,但仅适用于生命周期短的局部对象。开发时应考虑对象作用范围,为JVM优化创造条件,但无需过度优化。

2025-07-16 22:27:27 729

原创 MyBatis防SQL注入:#{}和${}的爱恨情仇

MyBatis中#{}和${}的区别及安全使用 #{}是预编译参数,会防止SQL注入,适用于普通参数值;${}是直接拼接SQL,适用于动态表名/列名等场景,但需严格校验。防止SQL注入的关键在于:普通参数必须用#{},动态部分用${}时需配合白名单、枚举或正则验证。最佳实践包括:表名/列名使用白名单,排序字段使用枚举,参数格式进行正则校验。两者各有适用场景,不能完全替代,合理使用才能兼顾灵活性与安全性。

2025-07-04 16:40:33 443

原创 面向过程 VS 面向对象:洗衣服的两种人生

本文通过洗衣服的例子生动对比了面向过程与面向对象编程思想。面向过程如流水线作业,将任务分解为步骤(放衣服→洗涤→脱水),适合简单问题但扩展性差;面向对象则通过对象(人、洗衣机)的分工协作,更贴近现实思维,具有封装、继承、多态三大特征和五大设计原则,虽然学习成本高但扩展性强。前者代表语言是C,后者包括Java等现代语言。这种对比帮助理解两种编程范式的本质区别和应用场景。

2025-07-03 14:21:10 485

原创 SpringBoot中的异常处理器

我们在以上的开发中,统一使用Result返回固定的数据格式给到前端,但是由于程序可能会出现BUG等问题,会导致最终返回给前端的数据,在异常情况下就又不统一了。但是以上使用,@ExceptionHandler(Exception.class)来处理异常,就太宽泛了,怎么能处理更加精确的异常呢?使用了以上注解的类,就可以接收系统中出现的异常了,但是异常出现以后,怎么处理就需要专门的处理方法来处理了.在出现异常的地方捕获异常后,再抛出我们自己定义的异常即可.此时我们就可以统一接收自己的异常了。

2024-03-07 15:00:00 464

原创 Git命令(持续更新中...)

命令说明git config --globl user.name “用户名”配置本地git用户git config --global user.email “邮箱”配置本地git邮箱git init初始化git代码仓库git add .把当前目录的所有改动提交至暂存区git add xxx.txt只把xxx.txt某个指定的文件提交至暂存区git commit -m “提交信息”将暂存区的内容提交至版本库形成一个版本git reset --

2024-03-06 21:57:29 695

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除