<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[HardworkingHuang的博客]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/HardworkingHuang</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; HardworkingHuang]]></copyright><item><title><![CDATA[SpringBoot项目里面发起http请求的几种方法]]></title><link>https://blog.csdn.net/HardworkingHuang/article/details/148041885</link><guid>https://blog.csdn.net/HardworkingHuang/article/details/148041885</guid><author>HardworkingHuang</author><pubDate>Sun, 18 May 2025 11:51:11 +0800</pubDate><description><![CDATA[在Spring Boot项目中，发起HTTP请求有多种方法。常用的包括：1. RestTemplate，适用于Spring 5之前的项目，支持GET和POST请求；2. WebClient，Spring 5+推荐的响应式方式，适合新项目；3. HttpClient，Java 11+内置，简单易用；4. Feign Client，声明式REST客户端，适合Spring Cloud项目；5. 第三方库如OkHttp和Apache HttpClient，提供更多控制。选择时，新项目推荐使用WebClient或Ht]]></description><category></category></item><item><title><![CDATA[Spring Boot 整合 Redis 实战]]></title><link>https://blog.csdn.net/HardworkingHuang/article/details/147934656</link><guid>https://blog.csdn.net/HardworkingHuang/article/details/147934656</guid><author>HardworkingHuang</author><pubDate>Tue, 13 May 2025 21:56:16 +0800</pubDate><description><![CDATA[本文详细介绍了如何将Spring Boot与Redis进行整合，以实现高性能缓存、分布式锁和会话共享等功能。首先，文章说明了所需的技术栈，包括Spring Boot 3.1.2、Redis 7.0+以及相关的Maven依赖。接着，文章详细描述了如何启动Redis服务，无论是本地启动还是通过Docker容器。在基础整合部分，文章介绍了如何配置application.yml文件以及如何自定义RedisTemplate的序列化方式。实战案例部分展示了如何使用RedisTemplate进行简单的CRUD操作，以及如]]></description><category></category></item><item><title><![CDATA[深入理解 OAuth 2.0：技术核心与实战场景]]></title><link>https://blog.csdn.net/HardworkingHuang/article/details/147933710</link><guid>https://blog.csdn.net/HardworkingHuang/article/details/147933710</guid><author>HardworkingHuang</author><pubDate>Tue, 13 May 2025 21:14:39 +0800</pubDate><description><![CDATA[选 SSO：当需要在多个自有系统间实现 “一次登录”，且核心需求是身份认证的跨系统共享（如企业内部系统整合）。选 OAuth2（或 OpenID Connect）：当涉及第三方应用访问用户资源，或需要在不同信任域之间进行授权（如 “第三方登录”“API 权限管理”）。结合使用。]]></description><category></category></item><item><title><![CDATA[Vite简单介绍]]></title><link>https://blog.csdn.net/HardworkingHuang/article/details/147723260</link><guid>https://blog.csdn.net/HardworkingHuang/article/details/147723260</guid><author>HardworkingHuang</author><pubDate>Mon, 05 May 2025 21:42:44 +0800</pubDate><description><![CDATA[Vite 是一个现代化的前端构建工具，由 Vue.js 的创始人 Evan You 开发，旨在提供更快的开发体验和更高效的构建流程。Vite 采用无打包（unbundle）机制，利用浏览器原生支持 ES Modules（ESM）的特性，按需编译和加载文件，而不是像 Webpack 那样预先打包整个应用。Vite 凭借其极速的开发体验和现代化的构建方式，已成为前端开发的重要工具，尤其适合追求高效开发的团队。开发模式下，Vite 不会预先打包所有代码，而是根据浏览器的请求动态编译文件，减少不必要的计算68。]]></description><category></category></item><item><title><![CDATA[SpringBoot实战：整合Knife4j]]></title><link>https://blog.csdn.net/HardworkingHuang/article/details/147711195</link><guid>https://blog.csdn.net/HardworkingHuang/article/details/147711195</guid><author>HardworkingHuang</author><pubDate>Mon, 05 May 2025 12:09:23 +0800</pubDate><description><![CDATA[Knife4j 是一个为 Java MVC 框架集成 Swagger 生成 API 文档的增强解决方案，前身是 Swagger-Bootstrap-UI。相比于Swagger，Knife4j提供了更美观、现代化的 UI 界面，增强了交互性。WebMvcConfig配置SpringMVC信息/*** web层配置类,实现静态资源映射，将knife4j相关资源放行，保证生成的接口文档能够正常进行展示*//*** 设置静态资源映射*/@Override// 添加静态资源映射规则。]]></description><category></category></item><item><title><![CDATA[Java 线程池]]></title><link>https://blog.csdn.net/HardworkingHuang/article/details/147709554</link><guid>https://blog.csdn.net/HardworkingHuang/article/details/147709554</guid><author>HardworkingHuang</author><pubDate>Mon, 05 May 2025 10:09:30 +0800</pubDate><description><![CDATA[在 Java 多线程编程中，线程的创建和销毁是有一定开销的，频繁地创建和销毁线程会消耗大量系统资源，降低程序性能。Java 线程池的出现，很好地解决了这个问题，它通过对线程的复用，提高了系统资源的利用率，同时还能对线程进行有效的管理。]]></description><category></category></item><item><title><![CDATA[Java 中使用 Callable 创建线程的方法]]></title><link>https://blog.csdn.net/HardworkingHuang/article/details/147705329</link><guid>https://blog.csdn.net/HardworkingHuang/article/details/147705329</guid><author>HardworkingHuang</author><pubDate>Sun, 04 May 2025 23:25:10 +0800</pubDate><description><![CDATA[Callable接口为 Java 多线程编程带来了更丰富的功能和更高的灵活性，通过与FutureTask或ExecutorService线程池结合使用，我们可以方便地获取线程执行结果并进行异常处理。在实际开发中，当我们需要在多线程任务执行完毕后获取结果，或者需要更精细地处理任务执行过程中的异常时，Callable接口是一个非常好的选择。同时，合理利用线程池来管理Callable任务，能够提高程序的性能和资源利用率，让多线程程序更加高效、稳定地运行。]]></description><category></category></item><item><title><![CDATA[ReentrantLock实现公平锁和非公平锁]]></title><link>https://blog.csdn.net/HardworkingHuang/article/details/147705240</link><guid>https://blog.csdn.net/HardworkingHuang/article/details/147705240</guid><author>HardworkingHuang</author><pubDate>Sun, 04 May 2025 23:18:34 +0800</pubDate><description><![CDATA[在 Java 里，公平锁和非公平锁是多线程编程中用于同步的两种锁机制，它们的主要差异在于获取锁的顺序规则。]]></description><category></category></item><item><title><![CDATA[Java 集合线程安全]]></title><link>https://blog.csdn.net/HardworkingHuang/article/details/147705009</link><guid>https://blog.csdn.net/HardworkingHuang/article/details/147705009</guid><author>HardworkingHuang</author><pubDate>Sun, 04 May 2025 23:01:39 +0800</pubDate><description><![CDATA[在多线程环境下使用 Java 集合类时，一定要充分考虑线程安全问题。对于ArrayList和HashMap这类非线程安全的集合，开发者可以根据具体的业务场景选择合适的解决方案，如使用同步包装类或者 Java 并发包中提供的线程安全集合类。只有正确处理集合的线程安全问题，才能确保程序在多线程环境下稳定、高效地运行。以上从多个方面介绍了 Java 集合的线程安全知识。若你对博客的内容深度、示例类型还有其他想法，欢迎随时和我说。]]></description><category></category></item><item><title><![CDATA[Java中的Synchronized、ReentrantLock和ReentrantReadWriteLock比较]]></title><link>https://blog.csdn.net/HardworkingHuang/article/details/147692741</link><guid>https://blog.csdn.net/HardworkingHuang/article/details/147692741</guid><author>HardworkingHuang</author><pubDate>Sun, 04 May 2025 11:07:16 +0800</pubDate><description><![CDATA[特性锁类型隐式内置锁显式锁显式读写分离锁获取方式自动获取释放手动lock/unlock手动获取读/写锁公平性非公平可选择公平/非公平可选择公平/非公平可重入是是是读写分离否否是条件变量有限的wait/notify支持多个Condition支持多个Condition锁降级不支持不支持支持性能JVM优化后性能较好高竞争时性能较好读多写少场景性能优死锁检测不支持部分支持部分支持。]]></description><category></category></item><item><title><![CDATA[Java中的死锁及解决方法]]></title><link>https://blog.csdn.net/HardworkingHuang/article/details/147442970</link><guid>https://blog.csdn.net/HardworkingHuang/article/details/147442970</guid><author>HardworkingHuang</author><pubDate>Wed, 23 Apr 2025 10:29:10 +0800</pubDate><description><![CDATA[死锁(Deadlock)是指两个或多个线程在执行过程中，因为争夺资源而造成的一种互相等待的现象，导致这些线程都无法继续执行下去。互斥条件：资源一次只能由一个线程占用请求与保持条件：线程在持有至少一个资源的同时又请求其他被占用的资源不剥夺条件：已分配给线程的资源不能被其他线程强行夺取循环等待条件：存在一个线程等待的循环链。]]></description><category></category></item><item><title><![CDATA[盘点各种类型的数据库（除了关系型和非关系型数据库）]]></title><link>https://blog.csdn.net/HardworkingHuang/article/details/146957115</link><guid>https://blog.csdn.net/HardworkingHuang/article/details/146957115</guid><author>HardworkingHuang</author><pubDate>Wed, 02 Apr 2025 17:15:05 +0800</pubDate><description><![CDATA[数据库可以根据不同的标准（如数据模型、用途、架构等）分为多种类型。：基于表格结构，使用 SQL（结构化查询语言），支持 ACID 事务。：兼顾分布式与 ACID，如 TiDB、CockroachDB。高速读写，如 Redis、Memcached、SAP HANA。：用于 AI 向量检索，如 Milvus、Pinecone。：支持多种数据模型，如 ArangoDB（文档+图）。：如 BigchainDB（存储区块链数据）。单机部署，如传统 MySQL、Oracle。：优化时间序列数据（如传感器、日志）。]]></description><category></category></item><item><title><![CDATA[Redis场景问题3：缓存雪崩]]></title><link>https://blog.csdn.net/HardworkingHuang/article/details/146641348</link><guid>https://blog.csdn.net/HardworkingHuang/article/details/146641348</guid><author>HardworkingHuang</author><pubDate>Sat, 29 Mar 2025 10:33:08 +0800</pubDate><description><![CDATA[Redis 缓存雪崩是指在 Redis 缓存中，大量的缓存数据在同一时间内失效，导致大量请求直接涌向数据库，从而可能使数据库不堪重负，甚至引发系统崩溃的情况。]]></description><category></category></item><item><title><![CDATA[Redis场景问题2：缓存击穿]]></title><link>https://blog.csdn.net/HardworkingHuang/article/details/146641295</link><guid>https://blog.csdn.net/HardworkingHuang/article/details/146641295</guid><author>HardworkingHuang</author><pubDate>Sat, 29 Mar 2025 10:31:25 +0800</pubDate><description><![CDATA[Redis 缓存击穿是指在缓存系统中，大量请求同时访问一个不存在于缓存中（一般是因为缓存过期或者数据未被加载到缓存）但在数据库中存在的热点数据，从而导致这些请求直接穿透缓存层，涌向数据库，可能造成数据库压力过大甚至崩溃的情况。]]></description><category></category></item><item><title><![CDATA[Redis场景问题1：缓存穿透]]></title><link>https://blog.csdn.net/HardworkingHuang/article/details/146641090</link><guid>https://blog.csdn.net/HardworkingHuang/article/details/146641090</guid><author>HardworkingHuang</author><pubDate>Sat, 29 Mar 2025 10:27:16 +0800</pubDate><description><![CDATA[Redis 缓存穿透是指在缓存系统（如 Redis）中，当客户端请求的数据既不在缓存中，也不在数据库中时，每次请求都会直接穿透缓存访问数据库，从而给数据库带来巨大压力，甚至可能导致数据库崩溃。下面为你详细介绍其产生原因、解决方案以及示例代码。]]></description><category></category></item><item><title><![CDATA[剖析 Redis 缓存更新策略：保障数据一致性与系统性能的平衡]]></title><link>https://blog.csdn.net/HardworkingHuang/article/details/146640292</link><guid>https://blog.csdn.net/HardworkingHuang/article/details/146640292</guid><author>HardworkingHuang</author><pubDate>Sat, 29 Mar 2025 10:07:05 +0800</pubDate><description><![CDATA[Redis 作为一款高性能的键值对存储数据库，广泛应用于缓存场景，极大地提升了系统响应速度和吞吐量。然而，缓存与后端数据源（如数据库）之间的数据一致性问题一直是个挑战，合理的缓存更新策略至关重要。这篇博客将带你深入探讨 Redis 缓存更新的多种策略及其优缺点，助你在不同业务场景下做出明智抉择。]]></description><category></category></item><item><title><![CDATA[简单聊聊Oracle和MySQL数据库的区别和使用场景]]></title><link>https://blog.csdn.net/HardworkingHuang/article/details/146541839</link><guid>https://blog.csdn.net/HardworkingHuang/article/details/146541839</guid><author>HardworkingHuang</author><pubDate>Wed, 26 Mar 2025 21:53:50 +0800</pubDate><description><![CDATA[对于IT的技术人员，MySQL是非常熟悉的开源数据库，在各个行业被广泛应用。但是对于Oracle数据库，很多专业的IT从业人员不太了解，今天就来聊一聊Oracle和MySQL的一些区别。]]></description><category></category></item><item><title><![CDATA[MyBatis一级缓存和二级缓存]]></title><link>https://blog.csdn.net/HardworkingHuang/article/details/146456859</link><guid>https://blog.csdn.net/HardworkingHuang/article/details/146456859</guid><author>HardworkingHuang</author><pubDate>Sun, 23 Mar 2025 15:31:18 +0800</pubDate><description><![CDATA[在开发基于 MyBatis 的应用时，缓存是提升性能的关键因素之一。MyBatis 提供了一级缓存和二级缓存，合理使用它们可以显著减少数据库的访问次数，提高系统的响应速度和吞吐量。本文将深入探讨 MyBatis 一级缓存和二级缓存的工作原理、使用方式以及注意事项。MyBatis 的一级缓存和二级缓存是提升应用性能的重要手段。一级缓存适用于在同一个SqlSession中多次执行相同查询的场景，而二级缓存适用于多个SqlSession共享数据的场景。]]></description><category></category></item><item><title><![CDATA[Mybatis延迟加载机制]]></title><link>https://blog.csdn.net/HardworkingHuang/article/details/146453192</link><guid>https://blog.csdn.net/HardworkingHuang/article/details/146453192</guid><author>HardworkingHuang</author><pubDate>Sun, 23 Mar 2025 10:55:40 +0800</pubDate><description><![CDATA[MyBatis 的延迟加载（也称为懒加载）是一种优化策略，它允许在真正需要数据时才去数据库中查询，而不是在一开始就把所有关联数据都加载出来。这种机制能显著提升应用的性能，尤其是在处理大量关联数据时。下面详细介绍 MyBatis 延迟加载的机制。]]></description><category></category></item><item><title><![CDATA[MyBatis执行流程]]></title><link>https://blog.csdn.net/HardworkingHuang/article/details/146452903</link><guid>https://blog.csdn.net/HardworkingHuang/article/details/146452903</guid><author>HardworkingHuang</author><pubDate>Sun, 23 Mar 2025 10:38:54 +0800</pubDate><description><![CDATA[通过这些步骤，MyBatis 实现了 Java 代码与数据库之间的高效交互。、获取 Mapper 接口代理对象、执行 SQL 语句、事务管理以及关闭。MyBatis 支持使用 Mapper 接口来执行 SQL 语句。是 MyBatis 与数据库交互的会话对象，类似于 JDBC 中的。综上所述，MyBatis 的执行流程主要包括加载配置文件、创建。在执行 SQL 语句的过程中，MyBatis 支持事务管理。通过 Mapper 接口代理对象调用方法，或者直接使用。方法可以获取 Mapper 接口的代理对象。]]></description><category></category></item></channel></rss>