- 博客(95)
- 收藏
- 关注
原创 SpringBoot启动流程图文详解
Spring Boot是一个流行的Java框架,用于简化Spring应用的创建和部署。其启动流程高度自动化,核心在于SpringApplication类的执行。以下是启动流程的关键步骤摘要,基于Spring Boot 3.1.2及以上版本的标准实现。
2025-07-19 15:30:37
3527
原创 Spring AI(一): Deepseek对话案例快速开始
摘要: Spring AI是面向Java生态的原生生成式AI框架,基于Spring设计理念,提供统一接口支持多模型切换(如OpenAI、DeepSeek等)。本文介绍快速集成Spring AI与DeepSeek模型的步骤:1)创建Spring Boot 3.x项目;2)配置Maven依赖及仓库;3)设置API密钥与模型参数;4)通过ChatClient实现对话接口。开发者只需简单配置即可调用AI能力,显著降低企业级智能应用开发门槛。
2026-01-28 23:31:47
651
原创 Spring 将对象注册到 IOC 容器的 6 种方式
Spring 框架注册对象的 6 种方式总结 @ComponentScan + @Component:通过注解扫描自动注册组件,适用于项目内部类。 @Configuration + @Bean:手动配置第三方类或需自定义初始化的对象。 @Import:快速导入单个类或配置类,支持模块化开发。 FactoryBean 接口:通过工厂模式创建复杂对象,如 MyBatis 的 SqlSessionFactory。 编程式注册:运行时动态注册 Bean,适用于插件化系统。 XML 配置:传统方式,通过 <be
2026-01-19 23:25:53
535
原创 一文了解Ollama
Ollama本地大模型引擎指南:提供跨平台安装方法(macOS/Linux/Windows),支持GPU加速配置;详解模型管理(官方仓库+自定义模型创建);开发集成方案含REST API/Python SDK示例;生产环境部署支持Docker/K8s;高级应用场景包括RAG系统实现和多模型路由;提供量化策略对比和GPU加速优化方案;涵盖企业级安全实践与监控方案。核心优势:开源、轻量、高性能本地化部署,支持主流大模型运行。
2026-01-14 21:34:18
606
原创 Spring AI 整合 DeepSeek 聊天模型实战指南
本文介绍了如何通过Spring AI整合DeepSeek聊天模型的实战指南。主要内容包括:环境准备与配置(引入依赖、基础配置)、核心组件初始化(Java配置类)、基础聊天功能实现(简单对话服务、REST接口)以及高级功能(带历史上下文的对话)。文章提供了详细的代码示例,帮助开发者快速集成DeepSeek模型到Spring应用中,实现角色定制对话和历史上下文维护等功能。关注微信公众号「思客潘」获取更多技术干货。
2026-01-12 22:40:25
285
原创 Deepseek:AI先淘汰前端开发还是后端开发?
AI技术正深刻影响软件开发领域,前端和后端开发将面临不同变革路径。前端开发中视觉化、组件化的特性更易被AI理解和生成,标准化页面和基础组件工作可能最先被替代;后端开发中复杂业务逻辑和系统设计仍需要人类判断,但标准化API和简单业务代码生成效率将显著提升。综合来看,前端开发可能更早经历工作方式转变,但两者都不会被完全取代,而是向"AI协作工程师"角色演进。开发者应积极拥抱AI工具,同时深化架构设计和业务理解能力,以适应人机协作的新开发范式。
2026-01-10 22:58:35
794
原创 MyBatis 二级缓存详解
MyBatis二级缓存是Mapper级别的缓存,支持多个SqlSession共享,生命周期贯穿整个应用。与一级缓存相比,二级缓存具有更广的作用域和共享性,默认关闭需手动开启。配置方式包括全局开启和Mapper级别配置,支持XML和注解两种方式。二级缓存提供多种回收策略(LRU、FIFO等)和读写模式,并可通过flushCache属性控制缓存刷新。使用时需要注意事务提交后数据才会进入二级缓存,且增删改操作会自动清空对应namespace缓存。此外,MyBatis支持集成Ehcache、Redis等第三方缓存实
2026-01-06 19:00:00
918
原创 深入理解MyBatis 二级缓存
摘要: MyBatis二级缓存通过装饰器模式实现,核心由CachingExecutor和Cache接口体系构成。缓存键CacheKey通过SQL语句、参数等要素生成唯一哈希值,确保查询准确性。实际缓存对象采用多层装饰链(如SynchronizedCache→LoggingCache→LruCache→PerpetualCache),支持LRU淘汰、序列化等功能。TransactionalCacheManager管理事务性缓存操作,在查询时优先检查缓存,未命中则委托底层执行器并缓存结果。该机制需注意事务隔离与
2026-01-06 14:43:24
994
原创 深入理解MyBatis 一级缓存
MyBatis一级缓存摘要 MyBatis一级缓存是SqlSession级别的本地缓存,默认开启且无法关闭。它通过在同一个SqlSession中缓存查询结果,减少数据库访问次数,提高性能。缓存键由MapperId、SQL、参数等元素组成,保证查询唯一性。当执行增删改操作、调用commit/rollback或关闭SqlSession时,缓存会被清空。一级缓存适用于短会话、重复查询场景,但需要注意缓存污染问题,建议控制SqlSession生命周期,合理配置localCacheScope参数。通过代码示例展示了缓
2026-01-06 10:38:56
671
原创 MyBatis-Plus 代码生成器(AutoGenerator)使用指南
MyBatis-Plus AutoGenerator 代码生成器使用指南 摘要:MyBatis-Plus AutoGenerator 是一款高效的工具,可自动生成实体类、Mapper、Service 和 Controller 等分层代码。本文详细介绍了其核心优势、依赖配置、FastAutoGenerator 流式 API 的使用方法,以及完整的 Spring Boot 集成案例。通过全局配置、包配置和策略配置三个核心步骤,开发者可以快速生成符合项目规范的代码,大幅提升开发效率。文章还提供了基于 MySQL
2026-01-01 11:10:53
1356
原创 一文了解MyBatis Generator
MyBatis Generator (MBG) 是 MyBatis 官方提供的代码生成工具,能够自动生成数据库表对应的实体类、Mapper接口和XML映射文件,显著提升开发效率。本文详细介绍了MBG的核心概念、配置方法和使用技巧,包括: 核心优势:减少重复CRUD代码编写,保证代码一致性,支持迭代开发 生成风格:对比了MyBatis3DynamicSql(推荐)、MyBatis3等不同targetRuntime的特点 运行方式:重点推荐Maven插件方式,提供完整配置示例 配置文件:详解generatorC
2026-01-01 10:38:03
822
原创 Git:如何将一个分支的特定提交合并到另一个分支?
Git分支合并指南摘要 本文详细介绍了将特定提交从一个Git分支合并到另一个分支的多种方法。主要内容包括: 核心方法: cherry-pick:最常用方式,可合并单个或多个提交 merge --no-ff:通过临时分支合并部分功能 补丁应用:使用format-patch和apply 操作场景: 合并连续/不连续的提交 处理远程分支提交 选择性合并文件或目录 修改提交信息 冲突解决: 使用--continue、--skip或--abort 配置合并工具(vimdiff/vscode等) 最佳实践: 先拉取最新
2025-12-26 16:33:54
2004
1
原创 Apache Shiro 安全框架入门教程
Apache Shiro 是一个功能强大的 Java 安全框架,提供身份验证、授权、会话管理和加密等安全功能。本文全面介绍了 Shiro 的核心组件与架构,包括 Subject、SecurityManager 和 Realm 等核心概念,以及认证和授权流程。文章详细展示了如何通过 Maven 依赖和 Spring Boot 配置集成 Shiro,并提供了一个完整的员工管理系统实战案例,包含实体类设计、自定义 Realm 实现和权限管理方案。该教程适合 Java 开发者快速掌握 Shiro 框架的实际应用,构
2025-12-25 23:40:20
942
原创 RBAC 基于角色的访问控制模型详解与实践指南
RBAC(基于角色的访问控制)是一种权限管理模型,通过角色关联用户和权限,实现权限管理的解耦。RBAC模型分为多个层级:RBAC0(基础模型)、RBAC1(支持角色继承)、RBAC2(增加约束条件)和RBAC3(完整模型)。核心要素包括用户、角色、权限和会话,其中角色作为中间层简化权限分配。系统设计需考虑数据库表结构(用户表、角色表、权限表及其关联表)以及约束条件(如互斥角色、基数约束等)。RBAC模型广泛应用于企业系统,提供灵活且安全的权限控制方案。
2025-12-25 22:56:02
1369
原创 Spring Boot Email 邮件发送完全指南
Spring Boot提供了强大的邮件发送功能,支持SMTP协议、HTML模板和异步发送。配置简单,只需添加spring-boot-starter-mail依赖并设置SMTP参数即可。支持多种邮件服务商如Gmail、腾讯企业邮箱等。核心API包括JavaMailSender接口,可发送文本、HTML邮件及带附件的邮件。实战场景包含用户注册验证邮件等常见用例,支持异步发送提升性能。Spring Mail还提供调试模式和字符编码配置,确保邮件发送稳定可靠。
2025-12-24 16:22:47
806
原创 UUID vs 自增ID做主键,哪个好?
UUID与自增ID的核心差异在于:自增ID(4-8字节)具有存储紧凑、插入高效、索引友好等优势,适合单体高吞吐应用;而UUID(16字节)具有全局唯一性,适合分布式系统和需要前端生成ID的场景。性能测试显示自增ID插入速度比UUID快2-3倍,因其避免了B+树页分裂。实际应用中,单体系统推荐自增ID,分布式系统推荐UUID,混合方案则可结合两者优势。有序UUID(如UUIDv7)能部分解决性能问题,是折中选择。
2025-12-22 22:18:27
1202
原创 Kafka、ActiveMQ、RabbitMQ、RocketMQ对比
本文对四大主流消息队列(Kafka、RabbitMQ、ActiveMQ、RocketMQ)进行了全面对比分析。从核心特性看,Kafka吞吐量最高适合流处理,RabbitMQ协议支持最广,ActiveMQ是传统JMS实现,RocketMQ具备金融级可靠性。架构设计上,Kafka采用分布式日志,RabbitMQ侧重灵活路由,RocketMQ提供主从高可用。适用场景方面,Kafka适合大数据日志,RabbitMQ适合企业集成,ActiveMQ适合传统系统,RocketMQ适合电商金融。文章还对比了消息模型、保证语
2025-12-22 17:09:52
849
原创 为什么Spring 推荐使用构造器注入而非@Autowired字段注入?
摘要:Spring推荐构造器注入优于@Autowired字段注入,主要因为构造器注入支持不可变对象、明确依赖关系、便于测试、提前检测循环依赖,并提升代码可维护性。Spring官方文档强调构造器注入是首选方法,自4.3版本起单构造器可省略@Autowired。实际案例显示构造器注入能避免NPE,性能更优且内存开销更小,特殊场景下可通过Optional处理可选依赖。迁移时可使用Lombok简化代码,循环依赖问题应优先重构而非依赖@Lazy。
2025-12-19 22:00:39
971
原创 @Autowired 与 @Resource区别解析
本文深度解析了Spring框架中@Autowired与@Resource注解的核心区别与使用场景。主要内容包括: 核心对比:@Autowired是Spring原生注解,默认按类型注入;@Resource是JSR-250标准注解,默认按名称注入。 工作原理:分别通过AutowiredAnnotationBeanPostProcessor和CommonAnnotationBeanPostProcessor实现注入逻辑。 使用场景: @Autowired需配合@Qualifier处理多实现情况 @Resource
2025-12-19 17:12:10
569
原创 技术选型分析:MySQL、Redis、MongoDB、ElasticSearch与大数据怎么选?
本文系统对比了MySQL、Redis、MongoDB、ElasticSearch和大数据技术的核心特性与应用场景。通过数据结构模型、性能指标和扩展能力等维度分析,为不同业务需求提供选型指南:MySQL适合结构化事务处理,Redis用于高性能缓存,MongoDB处理半结构化数据,ElasticSearch专注文本搜索,大数据技术应对海量数据处理。文章包含典型应用案例、技术决策树和混合架构示例,并指出常见选型误区。最后强调应根据事务需求、性能要求、数据规模和一致性级别等关键因素选择技术栈,多数实际项目需要组合使
2025-12-11 15:19:02
1101
原创 Elasticsearch 入门指南
Elasticsearch 是一个开源的分布式搜索引擎,适用于快速搜索海量数据、日志分析和智能搜索建议。它具有速度快、易扩展和简单易用的特点,通过 RESTful API 操作。核心概念包括索引(类似数据库)、文档(类似表行)和字段(类似表列)。安装简单,只需下载解压后启动即可。基础操作包括创建索引、添加文档和搜索文档。实战案例展示了如何构建商品搜索系统,支持模糊搜索、价格过滤和分类筛选。常见应用场景包括网站搜索、日志分析和自动补全。学习路径建议从基础操作开始,逐步掌握分词器、组合查询和聚合分析。
2025-12-11 10:54:15
1016
原创 HTTP的请求方式到底有多少种?
HTTP协议提供了多种请求方法,包括GET、POST、PUT、DELETE等核心方法,以及OPTIONS、PATCH等扩展方法。GET用于安全获取资源,POST用于创建资源,PUT完整更新,DELETE删除资源。不常用的HEAD只返回头信息,OPTIONS用于CORS预检请求,PATCH实现局部更新。此外还有WebDAV扩展的PROPFIND、MKCOL等方法用于文件管理。不同方法在安全性、幂等性和缓存特性上各有特点,开发者应根据RESTful规范合理选用,如Java和JavaScript示例所示,通过不同
2025-12-03 23:13:08
1229
2
原创 HTTP请求方法全面解析:从基础到面试实战
本文全面解析HTTP请求方法,从基础概念到实际应用。首先介绍HTTP请求方法在RESTful架构中的关键作用,详细讲解GET(安全、幂等、可缓存)和POST(不安全、非幂等)等核心方法的特性,包括请求结构示例和Java实现代码。特别对比了PUT与PATCH的更新操作差异,提供了电商下单等商业级实现案例。文章涵盖HTTP协议演进、方法特性比较和实战编码示例,适合开发人员系统学习HTTP请求方法的应用场景和实现技术。
2025-12-02 23:29:59
610
1
原创 DFA算法深度解析与技术实践
DFA(确定有限状态自动机)是一种高效的模式匹配算法,广泛应用于敏感词过滤等领域。本文详细解析了DFA的核心概念,包括五元组定义、状态转移图和工作流程。重点介绍了DFA在敏感词过滤中的应用,提供了完整的Java实现方案,包含敏感词检测、查找和替换功能。代码示例展示了如何构建DFA树结构,实现O(n)时间复杂度的多模式匹配,并包含性能测试结果。该算法具有匹配效率高、内存占用低等优势,特别适合大规模文本处理场景。
2025-11-30 22:01:56
1103
1
原创 Java分词器深度评测与实战指南
/ 添加用户词典// 动态添加词CustomDictionary.add("量子计算机");CustomDictionary.add("神经网络模型", "nz 1024");// 强制扫描(使新词立即生效)需求首选备选避免搜索索引Ansjjieba实体识别HanLPAnsjIK实时处理AnsjIKHanLP移动端jieba轻量版HanLP学术研究THULACHanLPIK。
2025-11-27 23:23:36
532
1
原创 雪花算法(Snowflake)技术详解与实战应用
雪花算法(Snowflake)是Twitter开源的分布式ID生成方案,通过64位结构(1位符号+41位时间戳+5位数据中心ID+5位工作节点ID+12位序列号)实现高性能、全局唯一的ID生成。核心优势包括时间有序性(支持排序)、每秒26万+的生成能力,以及通过工作节点配置实现分布式扩展。算法需处理时钟回拨问题,并提供Java实现示例。典型应用场景包括订单系统、用户注册和日志追踪,通过预生成ID缓冲池可进一步优化性能。工作节点ID可通过ZooKeeper动态分配,确保分布式环境下的唯一性。
2025-11-23 16:31:34
1107
原创 Redis 命令详解与实战案例
Redis是一个高性能的内存键值数据库,支持字符串、哈希、列表、集合和有序集合等多种数据结构。摘要介绍Redis核心命令及实战案例:字符串用于缓存和计数器(SET/GET/INCR);哈希存储对象(HSET/HGET);列表实现队列(LPUSH/RPOP);集合处理唯一值(SADD/SINTER);有序集合构建排行榜(ZADD/ZREVRANGE)。还包含事务、Lua脚本和发布订阅等高级功能,以及键命名规范、内存优化和批量操作等最佳实践。Redis凭借丰富的数据类型和原子操作,成为缓存、会话管理和实时系统的
2025-11-23 10:09:45
1024
原创 IntelliJ IDEA 快捷键全解析与高效使用指南
本文系统梳理了IntelliJ IDEA的核心快捷键,分为基础编辑、代码补全、导航跳转、重构优化、调试运行、搜索替换和版本控制七大类,涵盖Windows/Mac双平台操作。重点介绍了撤销(Ctrl+Z)、跳转定义(Ctrl+B)、提取方法(Ctrl+Alt+M)、调试(Shift+F9)等高频快捷键的使用场景,并提供了冲突解决方案和自定义配置方法。通过掌握这些快捷键组合,开发者可显著提升编码效率,减少对鼠标的依赖,实现更流畅的开发体验。
2025-11-12 23:52:10
1650
1
原创 Java 枚举类(Enum)技术文档
Java枚举类技术摘要 Java枚举类(enum)是一种特殊的类,用于表示固定集合的常量,提供类型安全和结构化设计。枚举类隐式继承java.lang.Enum,不能继承其他类但可实现接口。基本用法包括定义枚举值、遍历(values()方法)、比较(==运算符)和获取序号(ordinal())。高级特性支持添加字段方法、重写方法、实现接口。典型应用场景包括状态表示、策略模式、单例模式和状态机实现。枚举实例是静态final的,天生线程安全且支持序列化。注意避免过度设计,适用于固定常量集合的场景。
2025-11-10 22:04:42
488
原创 Maven POM标签,这一篇就够了
本文系统介绍了Maven核心配置文件pom.xml的关键标签及其功能。主要内容包括:1)基础项目信息标签如modelVersion、groupId等;2)依赖管理标签dependencies和dependencyManagement;3)构建配置标签build和pluginManagement;4)模块化项目标签modules和parent;5)环境配置标签profiles;6)高级配置标签如distributionManagement和reporting。通过具体案例演示了各标签的配置方法,帮助开发者全面
2025-11-09 22:37:26
951
原创 Git 命令大全:从基础到高级操作
本文全面介绍了Git的核心命令,涵盖基础操作、分支管理、远程操作、撤销修改和高级功能。主要内容包括:仓库初始化(git init)、提交管理(git add/commit)、分支操作(branch/merge)、远程协作(push/pull)、撤销修改(restore/reset)以及高级技巧(rebase/cherry-pick)。同时提供了冲突解决、标签管理和子模块等实用功能,附有常用命令速查表。这些内容为开发者提供了完整的Git工作流指南,适用于日常开发和团队协作场景。
2025-11-09 20:57:29
973
原创 Windows系统不关闭防火墙,允许某个端口的访问怎么设置?
摘要:本文详细介绍了在 Windows 系统中开放特定端口而不关闭防火墙的方法。通过 Windows Defender 防火墙 的 入站规则 配置,可使用图形界面或命令行(netsh 或 PowerShell)添加端口规则。具体步骤包括选择协议(TCP/UDP)、指定端口号、设置允许连接,并验证规则生效。还提供了测试端口连通性(telnet、PowerShell)和常见问题解决方案,如规则未生效、第三方防火墙冲突等。最后以开放 3389 端口(远程桌面)为例说明操作流程,强调仅开放必要端口的安全原则。
2025-11-08 15:37:26
1286
原创 CentOS7安装Docker及配置代理
本文详细介绍了在CentOS 7系统上安装Docker并配置代理的完整步骤。主要内容包括:1) 系统更新和依赖安装;2) Docker CE的安装与验证;3) 系统级和Docker服务级代理配置方法;4) 代理测试与常见问题处理。同时提供了代理服务器类型说明和配置示例,帮助用户解决网络访问问题,确保Docker在代理环境下正常运行。全文包含具体命令和配置示例,适合需要配置代理的Docker用户参考。
2025-11-08 15:23:34
492
原创 Linux 常用命令详解与使用规则
本文详细介绍了Linux系统中20多个常用命令的使用方法,涵盖文件管理、系统监控、网络操作、权限控制等核心功能。每个命令均提供语法格式、常用选项、典型示例及注意事项,包括基础命令(ls/cd/pwd)、文件操作(cp/mv/rm)、系统管理(top/df/du)、网络工具(ping/ip)、权限管理(chmod/chown)以及查找工具(find/grep)等。特别强调了一些危险命令(如rm -rf)的使用规范和安全建议,并推荐了现代替代工具(如用ip替代ifconfig)。这些命令是Linux系统管理、开
2025-11-05 21:44:07
657
原创 Java Optional 类详解
Java 8引入的Optional是一个容器类,用于处理可能为null的对象,以减少空指针异常并提升代码可读性。它提供了创建实例(of()、ofNullable()、empty())、检查值存在(isPresent()、isEmpty())、获取值(get()、orElse()、orElseThrow())和转换值(map()、flatMap())等核心方法。Optional适用于方法返回值和链式调用,但不建议作为方法参数或字段类型。合理使用Optional能提升代码健壮性,但需避免过度使用。
2025-11-01 17:54:07
859
原创 Java Stream 流式编程
摘要: Java 8 的 Stream API 提供了一种声明式数据处理方式,通过链式操作(过滤、映射、排序等)简化集合操作,提升代码可读性。Stream 分为 中间操作(如 filter()、map())和 终端操作(如 collect()、forEach()),支持顺序或并行处理(parallelStream())。核心功能包括数据分组(groupingBy)、统计(summarizingInt)、归约(reduce)等,适用于集合、数组等数据源。注意:Stream 不存储数据且仅消费一次,并行流需注意
2025-10-31 22:52:26
633
原创 Java中 String为什么设计成不可变的?
Java的String类被设计为不可变对象,主要基于安全性、性能优化、线程安全和字符串常量池等考量。不可变性体现在String为final类、内部字符数组为final,任何修改操作都会返回新对象。这种设计确保了哈希缓存、线程安全共享和常量池优化,但也带来频繁修改时的性能问题,为此Java提供了StringBuilder和StringBuffer作为可变字符串方案。不可变特性使String成为安全可靠的编程基础,在密钥、网络连接等场景尤为重要,同时通过配套工具实现了灵活高效的字符串处理。
2025-10-30 21:59:40
359
原创 Java Stream Collectors主要 API 详解
Java 8 的 Collectors 工具类提供强大的流数据收集功能,包括转换为集合(toList/toSet)、映射(toMap)、字符串拼接(joining)、统计计算(summarizingInt/averagingInt)以及分组聚合(groupingBy/partitioningBy)。支持自定义集合类型、处理键冲突,并可结合collectingAndThen进行结果二次处理。通过示例展示了用户数据按性别/城市分组、年龄统计等典型用法,是Stream API数据转换的核心工具。
2025-10-30 21:52:15
658
原创 为什么要避免使用 `SELECT *`?
避免使用SELECT *查询数据库,因其存在性能、安全性和可维护性问题。它会不必要地增加网络传输、内存占用和CPU开销,无法利用覆盖索引优化查询,且可能暴露敏感字段。表结构变更时易导致兼容性问题,降低代码可读性。建议显式列出所需字段或使用视图封装,仅在调试等特殊场景谨慎使用SELECT *。明确指定字段可提升查询效率、系统稳定性和代码质量。
2025-10-28 22:52:48
598
Java面试分模块总结.md
2025-10-08
Java 常见 HTTP 客户端及使用示例
2025-10-06
基于Cursor开发SpringBoot项目
2025-07-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅