<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[java_nnnn的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/java_nnnn</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; java_nnnn]]></copyright><item><title><![CDATA[Spring Boot 实战：基于 Hutool + Session 实现图形验证码（从原理到完整项目）]]></title><link>https://blog.youkuaiyun.com/java_nnnn/article/details/170146942</link><guid>https://blog.youkuaiyun.com/java_nnnn/article/details/170146942</guid><author>java_nnnn</author><pubDate>Thu, 05 Nov 2026 21:37:21 +0800</pubDate><description><![CDATA[本文实现了一个基于Hutool工具包的图形验证码系统，前后端协同完成验证码生成、校验与跳转功能。后端使用Hutool-captcha生成带干扰线的验证码，通过Session存储验证码及有效期（1分钟），并提供接口返回图片和校验结果；前端利用Ajax提交用户输入，通过jQuery动态刷新验证码图片并实时校验，错误时弹窗提示，正确则跳转至成功页面。整体设计解耦清晰，安全有效，适用于常见登录验证场景。]]></description><category></category></item><item><title><![CDATA[Spring Boot 配置文件详解：从基础语法到 YAML 配置]]></title><link>https://blog.youkuaiyun.com/java_nnnn/article/details/169842599</link><guid>https://blog.youkuaiyun.com/java_nnnn/article/details/169842599</guid><author>java_nnnn</author><pubDate>Mon, 02 Nov 2026 19:33:51 +0800</pubDate><description><![CDATA[配置文件用于将程序中易变的配置信息（如端口、数据库连接、密钥等）与代码分离，避免硬编码带来的维护困难。SpringBoot支持application.properties和application.yml两种格式，前者语法简单但冗长，后者结构清晰、可读性强，支持复杂数据类型如对象、列表、映射，且层级关系通过缩进体现。使用@Value或@ConfigurationProperties可实现配置注入。YML虽可读性高、跨语言通用，但对格式敏感，不适用于极复杂配置。]]></description><category></category></item><item><title><![CDATA[Spring IoC & DI 从入门到理解：控制反转、依赖注入与 Bean 管理详解]]></title><link>https://blog.youkuaiyun.com/java_nnnn/article/details/169745363</link><guid>https://blog.youkuaiyun.com/java_nnnn/article/details/169745363</guid><author>java_nnnn</author><pubDate>Mon, 02 Nov 2026 14:31:05 +0800</pubDate><description><![CDATA[本章系统讲解Spring IoC与DI核心概念，通过汽车制造案例对比传统开发与控制反转（IoC）的差异，阐明对象创建与依赖管理由容器接管的优势。结合SpringBoot项目，介绍IoC容器的Bean存储（@Component、@Bean等注解）与获取（ApplicationContext），并详细说明依赖注入（DI）的三种方式：属性注入、构造方法注入和Setter注入，分析其适用场景与优缺点。最后，将理论应用于图书管理系统，实现Controller、Service、Dao层的自动装配，验证IoC/DI在实际]]></description><category></category></item><item><title><![CDATA[spring web mvc图书管理小案例]]></title><link>https://blog.youkuaiyun.com/java_nnnn/article/details/169451267</link><guid>https://blog.youkuaiyun.com/java_nnnn/article/details/169451267</guid><author>java_nnnn</author><pubDate>Thu, 29 Oct 2026 21:34:18 +0800</pubDate><description><![CDATA[本文通过实现一个基于Spring Web MVC的图书管理系统，演示前后端数据互通的完整流程。前端通过AJAX请求与后端交互，实现用户登录及图书列表展示；后端采用分层架构（Controller、Service、Dao、Entity），各层职责分明：Controller接收请求，Service处理业务逻辑，Dao操作数据，Entity定义数据模型。通过层层调用，实现了从数据库模拟数据到前端页面动态渲染的全过程，强化了对MVC模式的理解与应用。]]></description><category></category></item><item><title><![CDATA[LeetCode刷题二分查找（x的平方根+搜索插入位置+山脉数组的登峰索引）Java]]></title><link>https://blog.youkuaiyun.com/java_nnnn/article/details/169058566</link><guid>https://blog.youkuaiyun.com/java_nnnn/article/details/169058566</guid><author>java_nnnn</author><pubDate>Wed, 28 Oct 2026 21:58:33 +0800</pubDate><description><![CDATA[本文总结二分查找核心要点：关键在于分析 left 与 right 的更新方式，决定 mid 的取法（向上或向下取整）。通过三道经典题——求平方根、搜索插入位置、山脉数组峰顶索引，详解边界处理逻辑。强调 mid = left + (right - left + 1) / 2 避免死循环，掌握“left=mid”与“right=mid-1”等更新规则，提升二分查找的准确应用能力。]]></description><category></category></item><item><title><![CDATA[Spring MVC小案例（1）]]></title><link>https://blog.youkuaiyun.com/java_nnnn/article/details/168028178</link><guid>https://blog.youkuaiyun.com/java_nnnn/article/details/168028178</guid><author>java_nnnn</author><pubDate>Sun, 25 Oct 2026 19:11:43 +0800</pubDate><description><![CDATA[本文介绍了三个基于Spring Boot的Web应用实现：加法计算器、用户登录系统和留言板。加法计算器通过HTML表单提交数据，后端使用@RequestParam接收参数并返回计算结果；用户登录采用AJAX异步请求与Session机制，结合jQuery实现无刷新验证，正确则跳转页面显示用户名；留言板利用Lombok简化实体类编写，通过@RequestBody接收JSON数据，前端用AJAX动态加载和发布留言，实现局部更新。三者均体现了前后端分离、异步通信与状态管理的核心思想。]]></description><category></category></item><item><title><![CDATA[LeetCode刷题二分查找（二分查找+在排序数组中寻找元素的第一个和最后一个位置）Java]]></title><link>https://blog.youkuaiyun.com/java_nnnn/article/details/168967590</link><guid>https://blog.youkuaiyun.com/java_nnnn/article/details/168967590</guid><author>java_nnnn</author><pubDate>Sat, 24 Oct 2026 20:34:51 +0800</pubDate><description><![CDATA[朴素二分查找模板：在有序数组中通过比较中间元素，每次排除一半区间，时间复杂度O(log n)，空间复杂度O(1)。核心为left &lt;= right循环，mid = left + (right - left)/2，根据nums[mid]与目标值比较调整边界。若找到返回下标，否则返回-1。扩展题如找首尾位置时需分别处理左右边界，注意中点计算和循环条件差异。]]></description><category></category></item><item><title><![CDATA[Linux 学习第二篇：从零认识 Linux 文件系统、目录结构与基本命令]]></title><link>https://blog.youkuaiyun.com/java_nnnn/article/details/168885013</link><guid>https://blog.youkuaiyun.com/java_nnnn/article/details/168885013</guid><author>java_nnnn</author><pubDate>Sat, 24 Oct 2026 16:29:36 +0800</pubDate><description><![CDATA[本文介绍了学习Linux的第一步——理解文件系统与目录结构。通过WSL进入Ubuntu后，需掌握pwd、cd、ls等基础命令，明确当前路径、切换目录及查看文件。重点讲解了Linux根目录/下的常见目录（如/home、/etc、/var/log、/tmp等）及其用途，并强调目录规范的重要性。结合实际开发场景，说明熟悉目录结构是高效操作Linux的前提。]]></description><category></category></item><item><title><![CDATA[Redis 核心特性与应用场景：从底层原理到分布式系统应用]]></title><link>https://blog.youkuaiyun.com/java_nnnn/article/details/168971075</link><guid>https://blog.youkuaiyun.com/java_nnnn/article/details/168971075</guid><author>java_nnnn</author><pubDate>Sat, 24 Oct 2026 15:07:33 +0800</pubDate><description><![CDATA[Redis基于内存存储，具备高速访问、多种数据结构（如String、Hash、List等）、Lua脚本支持、模块扩展、RDB/AOF持久化、集群分片与高可用机制。其单线程+IO多路复用设计进一步提升性能。广泛应用于缓存热点数据、共享Session、消息队列等场景，是分布式系统中高效处理高并发与低延迟需求的核心组件。]]></description><category></category></item><item><title><![CDATA[分布式系统进阶：数据库分库分表、微服务与架构演进总结]]></title><link>https://blog.youkuaiyun.com/java_nnnn/article/details/168884398</link><guid>https://blog.youkuaiyun.com/java_nnnn/article/details/168884398</guid><author>java_nnnn</author><pubDate>Fri, 23 Oct 2026 23:40:11 +0800</pubDate><description><![CDATA[随着系统规模扩大，单体架构难以应对高并发与海量数据挑战。仅靠增加服务器、读写分离和缓存无法彻底解决数据库瓶颈与代码臃肿问题。分库分表可分散数据压力，但带来查询复杂、全局ID冲突、跨库事务及迁移难题；微服务则通过拆分业务模块，实现独立开发、部署与扩展，提升团队协作效率。二者结合，从数据与架构双维度优化系统，是构建高可用、可扩展分布式系统的必经之路。]]></description><category></category></item><item><title><![CDATA[LeetCode刷题滑动窗口（串联所有单词的子串+最小覆盖的子串）Java]]></title><link>https://blog.youkuaiyun.com/java_nnnn/article/details/168772301</link><guid>https://blog.youkuaiyun.com/java_nnnn/article/details/168772301</guid><author>java_nnnn</author><pubDate>Fri, 23 Oct 2026 16:14:27 +0800</pubDate><description><![CDATA[本文解析了滑动窗口的两类经典问题：串联所有单词的子串与最小覆盖子串。前者通过固定窗口大小（单词长度）遍历起始位置，利用哈希表统计词频匹配异位词；后者采用动态窗口，维护有效字符种类数，通过收缩窗口找最小覆盖。两者均遵循“进、判、出”逻辑，关键在于合理维护计数与边界条件。代码实现中，使用哈希表或数组优化效率，适用于字符串匹配场景。]]></description><category></category></item><item><title><![CDATA[Linux 学习第一篇：从零认识 Linux，使用 WSL + Ubuntu 搭建学习环境]]></title><link>https://blog.youkuaiyun.com/java_nnnn/article/details/168758277</link><guid>https://blog.youkuaiyun.com/java_nnnn/article/details/168758277</guid><author>java_nnnn</author><pubDate>Thu, 22 Oct 2026 19:36:37 +0800</pubDate><description><![CDATA[命令作用pwd查看当前工作目录cd ~切换到当前用户的主目录之后我们想使用Linux，可以使用powershell输入wsl -d Ubuntu，也可以直接用Ubuntu。]]></description><category></category></item><item><title><![CDATA[数据库读写分离与 Redis 缓存：从 MySQL 查询压力到缓存机制]]></title><link>https://blog.youkuaiyun.com/java_nnnn/article/details/168561840</link><guid>https://blog.youkuaiyun.com/java_nnnn/article/details/168561840</guid><author>java_nnnn</author><pubDate>Thu, 22 Oct 2026 10:57:42 +0800</pubDate><description><![CDATA[应用服务器与数据库分离后，数据库仍可能成为性能瓶颈。通过读写分离，将读请求分发至从库，写请求由主库处理，可缓解压力。但存在数据复制延迟导致的不一致问题。引入Redis缓存可存储热点数据，减少对MySQL的重复访问，提升响应速度。缓存命中时直接读取，未命中则回源查询并写入缓存。为保证一致性，通常采用“更新数据库后删除缓存”策略。读写分离与缓存协同使用，能有效提升系统性能与可扩展性。]]></description><category></category></item><item><title><![CDATA[LeetCode刷题滑动窗口（水果成篮+找到字符串中所有字母的异位词）Java]]></title><link>https://blog.youkuaiyun.com/java_nnnn/article/details/168552267</link><guid>https://blog.youkuaiyun.com/java_nnnn/article/details/168552267</guid><author>java_nnnn</author><pubDate>Wed, 21 Oct 2026 21:33:44 +0800</pubDate><description><![CDATA[本文解析了两个滑动窗口经典题：水果成篮与异位词查找。前者通过哈希表维护窗口内水果种类，保持最多两种，用双指针扩展收缩窗口，求最长子数组；后者用数组代替哈希表统计字符频次，匹配目标字符串的字母组成，当窗口大小等于目标长度且有效字符数相等时记录结果。两者均从暴力解法优化至O(n)滑动窗口，体现“由简入繁”的解题思维。]]></description><category></category></item><item><title><![CDATA[Redis 初识：从单体架构到分布式架构的演进]]></title><link>https://blog.youkuaiyun.com/java_nnnn/article/details/167922066</link><guid>https://blog.youkuaiyun.com/java_nnnn/article/details/167922066</guid><author>java_nnnn</author><pubDate>Thu, 15 Oct 2026 13:35:35 +0800</pubDate><description><![CDATA[本文介绍了在Java后端开发中，随着用户量增长，单机架构面临性能瓶颈，引出Redis与分布式系统的重要性。Redis作为内存型键值存储，擅长高速缓存热点数据，缓解MySQL查询压力；而分布式架构通过分离应用与数据库、引入负载均衡和多服务器协作，提升系统扩展性与稳定性。两者结合，实现高效、可扩展的后端系统设计。]]></description><category></category></item><item><title><![CDATA[Spring Web MVC 入门：从一个 URL 到 Java 后端完整处理请求]]></title><link>https://blog.youkuaiyun.com/java_nnnn/article/details/167281636</link><guid>https://blog.youkuaiyun.com/java_nnnn/article/details/167281636</guid><author>java_nnnn</author><pubDate>Wed, 14 Oct 2026 19:10:18 +0800</pubDate><description><![CDATA[本文系统介绍了SpringMVC的入门基础，涵盖三大核心要点：准备工作（Tomcat作为Servlet容器监听8080端口，实现HTTP请求处理）、SpringMVC本质（基于Servlet封装，简化请求映射与参数解析）及MVC设计模式（模型、视图、控制器分离）。重点讲解了路由映射（@RequestMapping）、请求参数接收（如@RequestParam、@PathVariable、@RequestBody）、响应返回（静态页面、JSON、状态码设置）等内容，并对比@Controller与@RestCo]]></description><category></category></item><item><title><![CDATA[LeetCode刷题滑动窗口（最大连续1的个数三+将x减到0的最小操作数）Java]]></title><link>https://blog.youkuaiyun.com/java_nnnn/article/details/167796576</link><guid>https://blog.youkuaiyun.com/java_nnnn/article/details/167796576</guid><author>java_nnnn</author><pubDate>Tue, 13 Oct 2026 19:32:29 +0800</pubDate><description><![CDATA[本文介绍了两道使用滑动窗口技巧的算法题。第一题“最大连续1的个数”通过维护窗口内0的个数，确保不超过k次翻转，动态调整窗口大小以求最长连续1序列。第二题“将x减到0的最小操作数”反向思考，转化为寻找和为sum - x的最长子数组，同样用滑动窗口实现。两题均体现滑动窗口在优化区间问题中的高效性：进窗口、判断、出窗口、更新结果。]]></description><category></category></item><item><title><![CDATA[LeetCode刷题滑动窗口（长度最小的子数组）]]></title><link>https://blog.youkuaiyun.com/java_nnnn/article/details/167696007</link><guid>https://blog.youkuaiyun.com/java_nnnn/article/details/167696007</guid><author>java_nnnn</author><pubDate>Mon, 12 Oct 2026 20:45:30 +0800</pubDate><description><![CDATA[滑动窗口是一种高效解决连续子数组/子串问题的双指针技巧，通过维护一个动态区间，利用单调性避免重复计算。核心思想：右指针扩展窗口，左指针收缩窗口，仅在满足条件时更新结果。适用于求最短/最长连续区间（如最小长度子数组、无重复字符最长子串），时间复杂度由暴力$O(n^2)$优化至$O(n)$。关键在于：正数和或唯一性保证无需回溯，确保最优解不被遗漏。]]></description><category></category></item><item><title><![CDATA[LeetCode刷题双指针（有效三角形的个数+三数之和）Java]]></title><link>https://blog.youkuaiyun.com/java_nnnn/article/details/167487447</link><guid>https://blog.youkuaiyun.com/java_nnnn/article/details/167487447</guid><author>java_nnnn</author><pubDate>Sat, 10 Oct 2026 23:44:17 +0800</pubDate><description><![CDATA[本文介绍了两个经典算法题的解法：有效三角形个数与三数之和。前者通过排序后固定最大边，利用双指针查找满足“两边之和大于第三边”的组合，高效统计答案；后者先排序，固定首个元素，再用双指针寻找两数之和为负的当前数，通过跳过重复元素实现去重。两者均依赖排序与双指针技巧，时间复杂度分别为O(n²)。]]></description><category></category></item><item><title><![CDATA[LeetCode刷题双指针（快乐数+盛最多水的容器）Java]]></title><link>https://blog.youkuaiyun.com/java_nnnn/article/details/167397109</link><guid>https://blog.youkuaiyun.com/java_nnnn/article/details/167397109</guid><author>java_nnnn</author><pubDate>Fri, 09 Oct 2026 22:07:58 +0800</pubDate><description><![CDATA[本文介绍了两道经典算法题的解题思路与实现。第一题“快乐数”利用快慢指针检测循环，通过计算各位数字平方和，判断是否进入1的循环；第二题“盛最多水的容器”采用双指针法，从两端向内收缩，每次移动较短边，维护最大容积。两者均通过巧妙的指针策略优化时间复杂度，提升效率。]]></description><category></category></item></channel></rss>