[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"articles-4-10":3},{"code":4,"msg":5,"data":6},200,"成功",{"list":7,"total":96},[8,21,29,38,47,56,63,71,80,88],{"id":9,"title":10,"slug":11,"summary":12,"wordCount":13,"readingTime":14,"categoryId":15,"tags":16,"coverImage":16,"thumbnail":16,"status":17,"isTop":18,"isRecommended":18,"allowComments":18,"password":16,"viewCount":19,"likeCount":18,"commentCount":18,"publishTime":20},"2002406272140374017","Nuxt Image 模块：现代图像优化与管理指南","nuxt-image-mokuaixiandaituxiangyouhuayuguanlizhinan","## 1. 模块概述 ### 1.1 什么是 @nuxt\u002Fimage？ @nuxt\u002Fimage 是 Nuxt.js 官方推出的图像优化模块，提供了自动化的图像处理、优化和响应式解决方案。它支持多种图像提供商（如 Cloudinary、Imgix 等），并内置了本地图像处理功能。 ### 1.2 核心特性 - **自动优化**：压缩、格式转换（WebP\u002FAVIF） - **响应式图像**：自动生成多尺寸版本 - **懒加载**：提升页面加载性能 - **CDN 集成**：支持主流图像 CDN 服务 - **开发友好**：热重载、TypeScript 支持 ## 2.",4970,16,"0","",2,0,9,"2025-12-20 23:50:29",{"id":22,"title":23,"slug":24,"summary":25,"wordCount":26,"readingTime":14,"categoryId":15,"tags":16,"coverImage":16,"thumbnail":16,"status":17,"isTop":18,"isRecommended":18,"allowComments":18,"password":16,"viewCount":27,"likeCount":18,"commentCount":18,"publishTime":28},"2002406131962540034","Apache Solr 深度解析：全文检索、地理位置搜索与Elasticsearch全面对比","apache-solr-shendujiexiquanwenjiansuodiliweizhisousuoyuelasticsearchquanmianduibi","#### **一、 Apache Solr 简介** Apache Solr 是一个基于 Apache Lucene 构建的高性能、开源的企业级搜索平台。Lucene 是一个强大的Java搜索库，而 Solr 在其基础上提供了更易于使用的 RESTful API、丰富的配置管理和强大的分布式能力。它被广泛应用于需要复杂搜索、数据导航和聚合分析的场景，如电商网站、新闻门户、大数据分析等。 Solr 的核心特性包括： * **全文检索：** 强大的文本索引和查询能力。 * **分词与文本分析：** 丰富的语言处理管道。 * **高性能：** 支持海量数据的近实时搜索。 * **高可用性：** 通过 SolrCloud 提供自动化的分布式索引和容错。 * **灵活的模式定义：** 支持模式化（Schema）和无模式（Schemaless）的数据导入。 * **丰富的查询语法：** 支持布尔查询、...",4841,5,"2025-12-20 23:49:59",{"id":30,"title":31,"slug":32,"summary":33,"wordCount":34,"readingTime":35,"categoryId":15,"tags":16,"coverImage":16,"thumbnail":16,"status":17,"isTop":18,"isRecommended":18,"allowComments":18,"password":16,"viewCount":36,"likeCount":18,"commentCount":18,"publishTime":37},"2002405967373856770","Spring Boot 中的 @Valid 和 @Validated 详解：构建健壮的数据校验体系","spring-boot-zhongde-valid-he-validated-xiangjiegoujianjianzhuangdeshujuxiaoyantixi","## 1. 参数校验概述 在现代化的 Web 应用开发中，参数校验是保障系统健壮性的第一道防线。Spring Boot 通过集成 Bean Validation 规范，为我们提供了强大而灵活的校验机制。其中，`@Valid` 和 `@Validated` 是两个核心注解，它们虽然功能相似，但在不同场景下各有优势。 参数校验的主要目的： - **数据完整性**：确保接收到的数据符合预期格式 - **业务安全**：防止恶意或错误数据进入业务逻辑层 - **用户体验**：前端与后端校验结合，提供即时反馈 - **系统稳定**：减少因数据异常导致的系统崩溃 ## 2.",14622,48,7,"2025-12-20 23:49:19",{"id":39,"title":40,"slug":41,"summary":42,"wordCount":43,"readingTime":44,"categoryId":15,"tags":16,"coverImage":16,"thumbnail":16,"status":17,"isTop":18,"isRecommended":18,"allowComments":18,"password":16,"viewCount":45,"likeCount":18,"commentCount":18,"publishTime":46},"2002405842165493761","Spring Boot 实现文件秒传功能：从原理到实践","spring-boot-shixianwenjianmiaochuangongnengcongyuanlidaoshijian","## 1. 文件秒传技术原理 ### 1.1 什么是文件秒传 文件秒传是指当用户上传一个文件时，如果服务器上已经存在相同的文件，则无需再次上传文件内容，直接返回上传成功。这种技术可以显著减少网络传输量，提升用户体验。 ### 1.2 实现原理 秒传的核心原理是**文件内容指纹比对**： 1. **客户端计算文件哈希值**：在上传前，客户端计算文件的哈希值（如MD5、SHA-1等） 2. **查询服务器文件状态**：将哈希值发送到服务器查询是否已存在 3. **服务器验证**：服务器检查哈希值对应的文件是否存在 4. **决定上传策略**： - 文件已存在：直接返回成功（秒传） - 文件不存在：执行正常上传流程 ### 1.3 哈希算法选择 | 算法 | 安全性 | 速度 | 适用场景 | |------|--------|------|----------| | MD5 | 较低 | 快....",19092,63,10,"2025-12-20 23:48:50",{"id":48,"title":49,"slug":50,"summary":51,"wordCount":52,"readingTime":53,"categoryId":15,"tags":16,"coverImage":16,"thumbnail":16,"status":17,"isTop":18,"isRecommended":18,"allowComments":18,"password":16,"viewCount":54,"likeCount":18,"commentCount":18,"publishTime":55},"2002405596807098369","Hutool JSON 校验的陷阱与最佳实践：深入解析与完整工具类","hutool-json-xiaoyandexianjingyuzuijiashijianshenrujiexiyuwanzhenggongjulei","> 本文深度剖析 Hutool 中 JSON 字符串校验的常见陷阱，提供源码级解析，并给出一个功能完备的 JSON 校验工具类。 ## 引言：JSON 校验的重要性 在现代 Java 开发中，JSON 作为数据交换的标准格式无处不在。Hutool 作为 Java 工具库的瑞士军刀，其 `JSONUtil` 类提供了便捷的 JSON 操作功能。然而，许多开发者在**判断字符串是否为有效 JSON** 时，常常掉入一些陷阱，导致潜在的数据解析错误和安全问题。 本文将深入剖析 Hutool 中 JSON 校验的常见问题，解读源码实现，并提供一个**功能完备的 JSON 校验工具类**，帮助开发者避免常见陷阱。 ## 一、Hutool JSON 校验方法解析 ### 1.",10325,34,6,"2025-12-20 23:47:51",{"id":57,"title":58,"slug":59,"summary":60,"wordCount":61,"readingTime":45,"categoryId":15,"tags":16,"coverImage":16,"thumbnail":16,"status":17,"isTop":18,"isRecommended":18,"allowComments":18,"password":16,"viewCount":27,"likeCount":18,"commentCount":18,"publishTime":62},"2002405153498525697","深入解析RocketMQ核心架构：高可用、高性能背后的设计哲学","shenrujiexirocketmqhexinjiagougaokeyonggaoxingnengbeihoudeshejizhexue","消息队列作为分布式系统的“血液”，承担着应用解耦、削峰填谷、异步处理的重要职责。在众多消息中间件中，RocketMQ 以其在高可用、高性能和高可靠性方面的卓越表现，成为了许多企业级应用的首选。本文将带你一口气深入 RocketMQ 的核心架构，揭秘其如何支撑起庞大的数据洪流。 #### **一、 核心组件概览：四大支柱** RocketMQ 的架构主要由四个核心组件构成，它们各司其职，协同工作： * **NameServer（命名服务）**： 轻量级的注册中心，堪称集群的“通讯录”。它的角色是无状态的，每个 NameServer 实例都保存着完整的集群路由信息。Broker 会向所有 NameServer 定时注册和发送心跳，而生产者和消费者则从 NameServer 获取最新的路由信息，从而找到目标 Broker。 * **Broker（代理服务器）**： 消息的存储和转发中心，是真正干...",3224,"2025-12-20 23:46:04",{"id":64,"title":65,"slug":66,"summary":67,"wordCount":68,"readingTime":69,"categoryId":15,"tags":16,"coverImage":16,"thumbnail":16,"status":17,"isTop":18,"isRecommended":18,"allowComments":18,"password":16,"viewCount":36,"likeCount":18,"commentCount":18,"publishTime":70},"2002404939190562817","Java Stream：现代集合处理的优雅之道","java-streamxiandaijihechulideyouyazhidao","## 引言：从命令式到声明式的转变 在Java 8之前，集合处理通常采用传统的for循环或迭代器模式，代码冗长且意图不够清晰。Java 8引入的Stream API彻底改变了这一现状，让我们能够以声明式、函数式的方式处理数据集合。本文将带你深入探索Stream的强大功能，并通过实际代码示例展示其优雅之处。 ## 什么是Stream？ Stream（流）是Java 8中处理集合（Collection）数据的高级抽象。它不是一个数据结构，而是一个来自数据源（集合、数组等）的元素队列，支持聚合操作和并行处理。 **核心特点**： - 不存储数据：流本身不存储元素，只是传递元素 - 函数式操作：支持lambda表达式，代码更简洁 - 延迟执行：中间操作延迟执行，终端操作触发实际计算 - 可并行化：轻松实现并行处理 ## Stream操作分类 ### 1.",7216,24,"2025-12-20 23:45:14",{"id":72,"title":73,"slug":74,"summary":75,"wordCount":76,"readingTime":77,"categoryId":15,"tags":16,"coverImage":16,"thumbnail":16,"status":17,"isTop":18,"isRecommended":18,"allowComments":18,"password":16,"viewCount":78,"likeCount":18,"commentCount":18,"publishTime":79},"2002404710047346690","高并发秒杀系统架构深度解密：从淘宝实战到SpringBoot实现","gaobingfamiaoshaxitongjiagoushendujiemicongtaobaoshizhandaospringbootshixian","> 本文基于淘宝秒杀系统实战经验，结合SpringBoot技术栈，深度解析高并发秒杀系统的架构设计与实现方案。 ## 引言：从一场价值10亿的秒杀事故说起 \"王工！秒杀活动开始3秒，服务器全挂了！\"凌晨2点接到这个电话时，我后背瞬间湿透。那是2019年双11前夕，我们团队负责的某品牌手机秒杀活动，因并发设计缺陷导致系统雪崩，直接损失预估10亿。正是这次惨痛教训，让我彻底掌握了高并发系统的核心要义。 ## 一、业务场景分析：秒杀系统的四大核心挑战 **真实业务场景**：某品牌新款手机发售，10万台手机，100万人同时抢购。系统要在100毫秒内完成： - 库存精准扣减（不能超卖） - 订单高效创建（不能丢单） - 实时结果返回（不能卡顿） - 异常自动处理（不能崩溃） ## 二、完整秒杀系统架构设计 ### 2.1 系统总体架构 ```mermaid graph TB A[客户端] --> B...",15199,50,8,"2025-12-20 23:44:20",{"id":81,"title":82,"slug":83,"summary":84,"wordCount":85,"readingTime":86,"categoryId":15,"tags":16,"coverImage":16,"thumbnail":16,"status":17,"isTop":18,"isRecommended":18,"allowComments":18,"password":16,"viewCount":36,"likeCount":18,"commentCount":18,"publishTime":87},"2002404172320796674","深入理解MapUtils：Java Map操作利器指南","shenrulijiemaputilsjava-mapcaozuoliqizhinan","## 引言 在Java开发中，Map（映射）是一种极为常用的数据结构，用于存储键值对。虽然Java标准库提供了丰富的Map操作方法，但在实际开发中，我们经常需要更复杂、更便捷的操作。这正是Apache Commons Collections库中`MapUtils`发挥作用的地方。本文将深入探讨`MapUtils`的使用，展示它如何简化Map操作，提高代码的可读性和效率。 ## 一、环境配置与依赖 在开始之前，需要将Apache Commons Collections4添加到项目中： **Maven依赖：** ```xml org.apache.commons commons-collections4 4.4 ``` **Gradle依赖：** ```groovy implementation 'org.apache.commons:commons-collections4:4.4' ```...",12935,43,"2025-12-20 23:31:51",{"id":89,"title":90,"slug":91,"summary":92,"wordCount":93,"readingTime":69,"categoryId":15,"tags":16,"coverImage":16,"thumbnail":16,"status":17,"isTop":94,"isRecommended":18,"allowComments":18,"password":16,"viewCount":78,"likeCount":18,"commentCount":18,"publishTime":95},"2001945207893766145","Spring Boot 封装 MinIO 工具类完整指南","spring-boot-fengzhuang-minio-gongjuleiwanzhengzhinan","> 本文详细介绍了如何在 Spring Boot 项目中封装 MinIO 对象存储工具类，提供完整的配置和工具方法。 ## MinIO 简介 MinIO 是一款高性能、开源、兼容 Amazon S3 API 的分布式对象存储系统，专为云原生架构和大规模非结构化数据场景设计。其核心定位是成为私有云\u002F混合云环境中的标准存储方案，适用于从数据湖到 AI\u002FML、容器化部署等多样化需求。 ## 项目结构 ``` cdkj-minio ├── annotation # 注解 │ └── EnableAutoMinio # 启用自动 MinIO 配置 ├── config # 配置类 │ ├── MinioAutoConfiguration # MinIO 自动配置 │ ├── MinioMarkerConfiguration # MinIO 标记配置 │ └── MinioProperties # M...",7403,1,"2025-12-19 17:18:25","42"]