- 博客(25)
- 收藏
- 关注
原创 AOP 完整精讲:原理、核心概念、五种通知、切点语法、自定义注解实战
AOP(面向切面编程)是Spring框架的核心拓展思想,与OOP形成互补关系。AOP通过动态代理机制实现非侵入式功能增强,解决OOP难以处理的横切关注点问题(如日志、权限、事务等)。核心概念包括切点、通知、切面等7大要素,提供5种通知类型覆盖方法全生命周期。开发时主要通过execution表达式或自定义注解实现拦截,其中环绕通知(@Around)功能最强大。底层采用JDK动态代理或CGLIB实现,SpringBoot2.0+默认使用CGLIB。需注意AOP只能拦截public方法,且proceed()必须显
2026-04-25 23:23:26
494
原创 MCP 模型上下文协议:概念、适配语言、标准结构、编码模板与实战规范
MCP(模型上下文协议)是为AI设计的标准化工具接口,支持文件读取、数据库查询等操作。推荐使用TypeScript编写,Java和Python也可用但适配性较差。MCP工具必须包含名称、描述、入参定义和执行逻辑四部分,其编写需遵循严格规范:工具名需小写加下划线,参数需明确类型,执行函数必须是异步且做好异常处理。示例展示了读取Java文件的MCP实现,通过标准化结构让AI能稳定调用各类服务。
2026-04-24 14:42:41
402
原创 AI智能体Skills全面入门指南
AI智能体Skills(技能)是实现自主执行任务的核心组件,区别于传统Prompt问答模式。Skills包含明确的执行逻辑、工具调用规则和错误处理机制,能完成多步骤复杂任务。编写Skills需遵循三大步骤:1)YAML格式元数据定义;2)包含角色定义、执行步骤和工具调用的核心指令;3)详细的输入输出规范及异常处理方案。优秀案例需符合单一职责、标准化、可复用等原则,如Excel数据去重技能展示了完整的结构:从文件读取、重复识别到生成报告的全流程,并预设了各类异常应对方案。这种模块化设计使AI能独立完成专业任务
2026-04-23 21:01:00
593
1
原创 Java 调用 Kimi API 实战:实现与大模型的简单对话
本文介绍了如何使用Java调用KimiAPI实现与大模型的完整对话。主要内容包括:1)前期准备:注册Kimi平台获取APIKey,搭建JDK17+开发环境;2)创建Maven项目并引入SpringBoot、OkHttp等核心依赖;3)通过配置文件管理API参数;4)构建请求/响应实体类;5)使用OkHttp封装API调用核心逻辑;6)创建启动类测试对话功能。实现过程中需注意APIKey替换、JDK版本要求等关键点,文章提供了完整的代码示例和常见问题解决方案,帮助开发者快速集成Kimi大模型对话能力。
2026-04-14 22:43:04
679
原创 跨域是什么 有什么影响 怎么解决
摘要:跨域是浏览器同源策略的安全限制,当页面源(协议+域名+端口)与请求接口不一致时触发。虽然请求能到达服务器并执行,但响应会被浏览器拦截,目的是防止CSRF攻击等安全风险。解决方案包括:1)Nginx反向代理(生产首选);2)后端CORS配置(需严格限制来源域名);3)微服务网关统一处理。开发中需注意:严禁使用通配符"*",必须显式配置可信域名,且携带Cookie需特殊设置。跨域本质是浏览器保护机制,而非服务端限制。
2026-04-08 22:16:41
491
原创 Cookie、Session、Token、JWT 原理 + 流程 + 区别 + 实战
HTTP协议的无状态特性导致服务器无法识别用户请求之间的关联性,为解决这一问题产生了Cookie、Session、Token和JWT四种状态管理方案。Cookie是浏览器存储的键值对数据,通过HTTP头自动传输;Session是服务器存储的用户会话数据,依赖Cookie传递SessionID;Token是无状态的身份凭证,服务器通过解密验证;JWT是标准化的Token实现,采用三段式结构(Header、Payload、Signature)确保安全性。四种方案各有特点:Session适合传统Web项目但不利于
2026-04-08 20:20:42
525
原创 Http---详细格式介绍
本文详细介绍了HTTP POST请求的结构与实现原理。HTTP请求由三部分组成:请求行(方法、路径、协议版本)、请求头(Host、Content-Type等键值对)和请求体(JSON数据)。重点解析了请求头中Accept与Content-Type的区别,以及开发中常用的MIME类型。文章还通过Java代码示例展示了如何用原生Socket手动构建HTTP请求,并解释了TCP与HTTP的层级关系(HTTP是应用层协议,基于TCP传输层协议)。最后简要介绍了TCP的三次握手和四次挥手过程,以及全双工通信的概念。全
2026-04-08 00:08:06
802
原创 Java 网络编程全解:TCP、UDP、HTTP、WebSocket
Java网络编程核心涵盖传输层(TCP/UDP)和应用层(HTTP/WebSocket)协议实现。TCP提供可靠连接,适用于文件传输等场景;UDP无连接快速传输,适合实时应用。HTTP基于TCP实现请求-响应模型,WebSocket则支持全双工通信。生产环境需关注:1)连接池优化避免频繁创建;2)超时设置防止线程阻塞;3)心跳机制检测死连接;4)优雅关闭释放资源;5)异常处理全覆盖。高并发场景推荐使用Netty替代原生Socket。关键选择指南:业务接口用HTTP,实时通信用WebSocket,自定义协议用
2026-04-06 23:33:50
912
原创 Java 多线程创建方式
摘要:本文详细介绍了Java中创建线程的四种主要方式:1)继承Thread类,2)实现Runnable接口,3)实现Callable接口配合FutureTask使用,4)线程池方案。重点分析了每种方式的实现原理、代码示例、优缺点及适用场景,特别强调了生产环境推荐使用ThreadPoolExecutor自定义线程池而非Executors工具类。文章还深入解析了Callable需要FutureTask包装的原因、线程池的7大核心参数和工作流程,并提供了线程创建的避坑指南和Lambda表达式简化写法。对于Java
2026-04-06 23:02:13
557
原创 线程池-----Executors
Java线程池使用指南摘要 Java通过Executors工具类提供5种常用线程池,包括固定大小线程池、缓存线程池、单线程池、定时线程池和工作窃取池。这些线程池基于ThreadPoolExecutor实现,但阿里开发规范建议生产环境手动创建ThreadPoolExecutor以避免OOM风险。 核心要点: 5种线程池特性对比 FixedThreadPool:固定线程数,无界队列 CachedThreadPool:自动扩容,适合短任务 SingleThreadExecutor:单线程串行执行 Schedule
2026-04-06 22:14:29
679
原创 MQ---Spring Cloud Stream
消息队列(MQ)是一种异步通信机制,充当系统间的"快递柜",实现解耦和异步处理。常见MQ包括Kafka(大数据)、RabbitMQ(业务系统)、RocketMQ(电商)等。Spring Cloud Stream通过Binder(连接适配器)、Binding(消息通道)、Message(消息结构)和Destination(目标地址)四个核心概念,屏蔽底层MQ差异,开发者只需关注业务逻辑。相比原生RabbitMQ需要处理连接、通道等底层API,Spring Cloud Stream通过配置即
2026-03-31 11:02:36
735
1
原创 LeetCode-Hot100-链表
本文整理了12个常见的链表算法题解,涵盖多种链表操作场景:1)相交链表通过双指针同步遍历;2)反转链表使用迭代法;3)回文链表结合快慢指针和反转;4)环形链表检测采用快慢指针;5)环形链表2在检测基础上定位入口;6)两数相加模拟竖式运算;7)删除倒数第N节点使用双指针;8)两两交换节点通过指针调整;9)K组翻转采用分段处理;10)随机链表复制使用节点插入法;11)排序链表实现归并排序;12)合并K个升序链表采用分治策略;13)LRU缓存通过哈希表+双向链表实现。这些解法展示了链表问题的核心处理技巧。
2026-03-08 00:40:19
54
原创 LeetCode-Hot100-普通数组
本文展示了5个数组处理算法:1)最大子数组和采用动态规划;2)合并区间先排序后遍历;3)轮转数组使用取模运算;4)数组乘积通过左右累积计算;5)缺失正数利用原地哈希。这些算法都实现了O(n)时间复杂度,涵盖了动态规划、排序、索引计算等典型技巧。
2026-03-01 18:17:36
231
原创 LeetCode-Hot100-子串
本文介绍了三个经典算法问题的解决方案:1)和为K的子数组问题使用前缀和与哈希表统计出现次数;2)滑动窗口最大值问题利用双端队列维护窗口内最大值;3)最小覆盖子串问题通过滑动窗口和哈希数组记录字符频率。三个算法均采用优化策略,时间复杂度分别为O(n)、O(n)和O(n),展示了高效处理数组/字符串子区间问题的典型方法。
2026-02-27 16:44:38
169
原创 LeetCode-Hot100-滑动窗口
摘要:本文介绍了两个字符串处理算法。1.无重复字符的最长子串:使用滑动窗口和哈希集合来跟踪字符,当遇到重复字符时移动左边界,最终返回最大窗口长度。示例输入"abcabcbb"输出3。2.查找字母异位词:通过维护两个字符串的字符频率数组,使用滑动窗口比较频率是否相同来找出所有异位词子串的起始索引。示例输入("cbaebabacd","abc")输出[0,6]。两个算法都采用了滑动窗口技术优化时间复杂度。
2026-02-22 20:40:15
217
原创 LeetCode-Hot100-双指针篇
不同的三元组是 [-1,0,1] 和 [-1,-1,2]。的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。前置知识----------数组结构基础知识(后期整理)移动到数组的末尾,同时保持非零元素的相对顺序。,必须在不复制数组的情况下原地对数组进行操作。注意,输出的顺序和三元组的顺序并不重要。轴共同构成的容器可以容纳最多的水。找出其中的两条线,使得它们与。答案中不可以包含重复的三元组。返回容器可以储存的最大水量。个非负整数表示每个宽度为。,判断是否存在三元组。,编写一个函数将所有。
2026-02-22 19:56:00
546
原创 LeetCode-Hot100-哈希篇
本文介绍了三个基于哈希表的算法问题:1.两数之和:使用哈希表存储数值及其索引,通过查找补数实现O(n)时间复杂度;2.字母异位词分组:通过排序字符串生成哈希键,将同组异位词归类;3.最长连续序列:利用哈希集合快速查找,仅从序列起点开始统计长度。三个问题均展示了哈希表在降低时间复杂度方面的优势。
2026-02-20 00:17:48
290
原创 取消windows系统自动更新
本文介绍了通过修改系统注册表延长Windows更新可选延迟时间的方法。具体步骤包括:使用Win+R运行命令,定位特定注册表目录,新建名为"FlightSettingsMaxPauseDay"的DWORD值,并以十六进制格式输入2的倍数数值(如14表示20天)。修改完成后,系统更新界面将显示更多延迟选项供用户选择。该方法适用于需要灵活控制系统更新时间的用户。
2025-11-30 23:10:17
296
原创 自调用导致的事务失效-解决方案
填接口是因为Spring AOP 默认使用 JDK 动态代理只能为 “实现了接口的类” 生成代理。在同一个实现类中 一个添加了事务的方法产生了自调用会导致事务失效。需手动去当前启动类添加注解 开启代理暴露。然后再去调用方的具体调用处使用。
2025-10-03 13:16:30
183
原创 虚拟机docker安装nacos
第二步:#运行镜像 名称 nacos -e 设置环境参数目前为 单例(可以集群) 端口映射 -d 后台运行 --restart 设置自启动。第一步:docker pull nacos/nacos-server:v2.1.1 拉取镜像。
2025-07-28 14:22:59
174
原创 lombok与jdk不适配的问题
【代码】class lombok.javac.apt.LombokProcessor (in unnamed module @0x749330a8) cannot access class com.sun。
2025-07-09 19:08:02
874
原创 JWT令牌如何使用
3.定义了一个Spring组件JwtProperties,用于绑定以ps.jwt为前缀的配置项,包含管理端JWT令牌的密钥、过期时间和令牌名称,供系统使用这些参数进行JWT相关操作。parseJWT:根据提供的密钥和JWT字符串,解析出其中的声明(Claims),用于验证token的合法性。createJWT:根据提供的密钥、过期时间、声明创建一个经过签名的JWT字符串。2.使用jjwt库生成和解析JWT(JSON Web Token)的功能。1. pom.xml添加如下依赖。
2025-05-21 10:31:28
531
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅