<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[lrh35的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/lrh35</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; lrh35]]></copyright><item><title><![CDATA[MySQL 主从同步延迟：原因剖析与解决之道]]></title><link>https://blog.youkuaiyun.com/lrh35/article/details/145838401</link><guid>https://blog.youkuaiyun.com/lrh35/article/details/145838401</guid><author>lrh35</author><pubDate>Mon, 24 Feb 2025 21:02:50 +0800</pubDate><description><![CDATA[MySQL 主从同步延迟是一个复杂的问题，涉及硬件资源、配置差异和业务逻辑等多个方面。通过深入分析延迟的原因，并采取相应的解决办法，如优化硬件资源、统一主从库配置、优化业务逻辑等，可以有效减少主从同步延迟，提高数据库系统的可用性和性能。同时，建立完善的监控和预警机制，能及时发现和解决同步延迟问题，保障业务的正常运行。希望本文能为解决 MySQL 主从同步延迟问题提供一些有益的参考。分享如何监控和排查 MySQL 主从同步延迟问题？详细介绍一下 MySQL 主从同步延迟的监控指标。]]></description><category></category></item><item><title><![CDATA[数据库索引：缺点与类型全解析]]></title><link>https://blog.youkuaiyun.com/lrh35/article/details/145785652</link><guid>https://blog.youkuaiyun.com/lrh35/article/details/145785652</guid><author>lrh35</author><pubDate>Fri, 21 Feb 2025 21:02:41 +0800</pubDate><description><![CDATA[创建索引需要额外的存储空间来存储索引数据结构。以 B 树索引为例，它需要存储节点信息，包括键值和指向子节点的指针。随着数据量的增加，索引所占用的空间也会迅速增长。例如，在一个拥有数百万条记录的数据库表中，若为多个列创建索引，索引文件的大小可能会达到甚至超过数据文件本身的大小，这无疑会对数据库服务器的存储资源造成较大压力。]]></description><category></category></item><item><title><![CDATA[Redis 存在线程安全问题吗？为什么？]]></title><link>https://blog.youkuaiyun.com/lrh35/article/details/145762914</link><guid>https://blog.youkuaiyun.com/lrh35/article/details/145762914</guid><author>lrh35</author><pubDate>Thu, 20 Feb 2025 20:47:49 +0800</pubDate><description><![CDATA[在 Redis 6.0 之前，Redis 主要采用单线程模型来处理客户端的命令请求。这里的单线程指的是 Redis 使用一个线程来处理网络 I/O 和执行命令。也就是说，在同一时刻，Redis 只会执行一个客户端的命令请求，并且按照命令到达的顺序依次处理。]]></description><category></category></item><item><title><![CDATA[深入理解 Spring Bean 生命周期的执行流程]]></title><link>https://blog.youkuaiyun.com/lrh35/article/details/145738550</link><guid>https://blog.youkuaiyun.com/lrh35/article/details/145738550</guid><author>lrh35</author><pubDate>Wed, 19 Feb 2025 20:54:57 +0800</pubDate><description><![CDATA[Spring Bean 的生命周期是一个复杂而有序的过程，涵盖了从准备创建到最终销毁的各个阶段。每个阶段都有其特定的任务和扩展点，开发者可以利用这些扩展点来满足不同的业务需求。通过深入理解 Spring Bean 的生命周期，我们可以更好地掌握 Spring 框架的运行机制，编写出更加高效、灵活的代码。希望本文能帮助大家对 Spring Bean 的生命周期有更深入的认识。]]></description><category></category></item><item><title><![CDATA[Spring Boot 自动装配原理深度剖析]]></title><link>https://blog.youkuaiyun.com/lrh35/article/details/145714650</link><guid>https://blog.youkuaiyun.com/lrh35/article/details/145714650</guid><author>lrh35</author><pubDate>Tue, 18 Feb 2025 21:03:24 +0800</pubDate><description><![CDATA[Spring Boot 的自动装配，简单来说，就是能根据项目中引入的依赖，自动配置 Spring 应用所需的各种 Bean。例如，当我们引入依赖时，Spring Boot 会自动配置好 Spring MVC 相关的 Bean，包括、视图解析器等，让我们能够快速开发 Web 应用。Spring Boot 的自动装配原理通过核心注解、读取配置文件、筛选和导入自动配置类以及条件装配等一系列机制，实现了根据项目依赖自动配置 Spring 应用的功能。]]></description><category></category></item><item><title><![CDATA[Spring 如何解决循环依赖以及那些无法解决的循环依赖]]></title><link>https://blog.youkuaiyun.com/lrh35/article/details/145691625</link><guid>https://blog.youkuaiyun.com/lrh35/article/details/145691625</guid><author>lrh35</author><pubDate>Mon, 17 Feb 2025 21:00:14 +0800</pubDate><description><![CDATA[循环依赖，简单来说，就是两个或两个以上的 bean 相互持有对方的引用，最终形成一个闭环。比如，A bean 依赖 B bean，而 B bean 又依赖 A bean，这就像两个人互相拉着对方的手，谁也没办法先迈出第一步。在 Spring 中，注入 bean 的方式主要有构造器注入和 field 属性注入，不同的注入方式在面对循环依赖时表现各异。Spring 通过三级缓存机制巧妙地解决了 field 属性注入的循环依赖问题，同时借助动态代理（@Scope的proxyMode属性和@Lazy。]]></description><category></category></item><item><title><![CDATA[Spring Boot 的约定优于配置，你的理解是什么？]]></title><link>https://blog.youkuaiyun.com/lrh35/article/details/145641247</link><guid>https://blog.youkuaiyun.com/lrh35/article/details/145641247</guid><author>lrh35</author><pubDate>Fri, 14 Feb 2025 20:37:18 +0800</pubDate><description><![CDATA[对于更复杂的定制需求，可以创建自定义的配置类。例如，要自定义数据源的连接池配置，可以创建一个配置类：java@Bean// 其他自定义配置这样，Spring Boot 会使用自定义的数据源配置，而不是默认配置。]]></description><category></category></item><item><title><![CDATA[布隆过滤器（简单介绍）]]></title><link>https://blog.youkuaiyun.com/lrh35/article/details/145620070</link><guid>https://blog.youkuaiyun.com/lrh35/article/details/145620070</guid><author>lrh35</author><pubDate>Thu, 13 Feb 2025 20:35:30 +0800</pubDate><description><![CDATA[仅需约1GB内存，即可在极短时间内判断用户名是否可能被注册（即使有1%的误判率，也能通过二次数据库查询确认）。是一种高效的概率型数据结构，用于快速判断一个元素是否可能存在于某个集合中。：直接删除会导致其他元素的哈希位被误清除（但可通过改进方案如计数布隆过滤器解决）。在查询数据库前，先用布隆过滤器过滤不存在的请求，避免无效查询压垮数据库。个独立的哈希函数，每个函数将输入元素映射到位数组的某个位置。个哈希函数计算位置，若所有位置的值均为1，则认为元素。个位置，将这些位置的值设为1。]]></description><category></category></item><item><title><![CDATA[Netty 核心原理与高并发场景实践]]></title><link>https://blog.youkuaiyun.com/lrh35/article/details/145481255</link><guid>https://blog.youkuaiyun.com/lrh35/article/details/145481255</guid><author>lrh35</author><pubDate>Thu, 06 Feb 2025 20:17:25 +0800</pubDate><description><![CDATA[在当今的网络编程领域，随着互联网应用的不断发展，对高并发、高性能网络通信的需求日益增长。Netty 作为一款基于 Java 的异步事件驱动的网络应用框架，凭借其卓越的性能和丰富的功能，成为了实现高并发网络应用的首选工具。无论是在分布式系统、游戏服务器，还是实时通信应用中，Netty 都发挥着重要作用。本文将深入探讨 Netty 的核心组件与线程模型，分享其性能优化技巧，以及在 RPC 框架中的应用实践。]]></description><category></category></item><item><title><![CDATA[JVM 性能调优与垃圾回收机制]]></title><link>https://blog.youkuaiyun.com/lrh35/article/details/145481231</link><guid>https://blog.youkuaiyun.com/lrh35/article/details/145481231</guid><author>lrh35</author><pubDate>Thu, 06 Feb 2025 20:15:33 +0800</pubDate><description><![CDATA[在 Java 应用开发中，JVM（Java 虚拟机）如同幕后的 “大管家”，管理着内存分配、对象生命周期以及程序的执行效率。深入理解 JVM 的内存模型与垃圾回收机制，并掌握 JVM 性能调优的技巧，对于开发高效、稳定的 Java 应用至关重要。本文将全方位剖析 JVM 内存模型、垃圾回收算法、主流垃圾收集器，以及 JVM 调优的实战方法。]]></description><category></category></item><item><title><![CDATA[分布式事务实战 ——Seata 与最终一致性方案]]></title><link>https://blog.youkuaiyun.com/lrh35/article/details/145481213</link><guid>https://blog.youkuaiyun.com/lrh35/article/details/145481213</guid><author>lrh35</author><pubDate>Thu, 06 Feb 2025 20:14:52 +0800</pubDate><description><![CDATA[在分布式系统蓬勃发展的当下，各个服务之间相互协作完成复杂业务操作的场景愈发普遍。然而，这种架构下的事务管理成为了一个极具挑战性的问题。分布式事务需要保证在多个服务参与的业务操作中，要么所有操作都成功提交，要么全部回滚，以确保数据的一致性和完整性。本文将深入探讨分布式事务的挑战与理论基础，详细介绍 Seata 这一分布式事务解决方案的核心架构与使用方法，以及最终一致性方案的实践案例。]]></description><category></category></item><item><title><![CDATA[Spring Boot 自动装配原理与优化实践]]></title><link>https://blog.youkuaiyun.com/lrh35/article/details/145481201</link><guid>https://blog.youkuaiyun.com/lrh35/article/details/145481201</guid><author>lrh35</author><pubDate>Thu, 06 Feb 2025 20:14:10 +0800</pubDate><description><![CDATA[在 Java 开发领域，Spring Boot 以其 “约定优于配置” 的理念，极大地简化了 Spring 应用的开发和部署过程，成为了众多开发者的首选框架。它通过自动装配机制，让开发者能够快速搭建一个功能完备的应用，而无需进行繁琐的配置。本文将深入探讨 Spring Boot 自动装配的核心机制、性能优化策略以及常见问题与解决方案。]]></description><category></category></item><item><title><![CDATA[Redis 深度解析 —— 高频面试题与核心知识点]]></title><link>https://blog.youkuaiyun.com/lrh35/article/details/145481183</link><guid>https://blog.youkuaiyun.com/lrh35/article/details/145481183</guid><author>lrh35</author><pubDate>Thu, 06 Feb 2025 20:13:08 +0800</pubDate><description><![CDATA[在当今的互联网技术领域，Redis 作为一款高性能的内存数据库，被广泛应用于各种场景。无论是在大型互联网公司还是小型创业项目中，Redis 都扮演着至关重要的角色。本文将深入探讨 Redis 的核心特性、应用场景、分布式锁的实现与优化，以及与 MySQL 数据一致性的方案，帮助读者全面掌握 Redis 相关的高频面试题与核心知识点。]]></description><category></category></item><item><title><![CDATA[MySQL索引详解]]></title><link>https://blog.youkuaiyun.com/lrh35/article/details/144383134</link><guid>https://blog.youkuaiyun.com/lrh35/article/details/144383134</guid><author>lrh35</author><pubDate>Tue, 10 Dec 2024 20:43:54 +0800</pubDate><description><![CDATA[索引是一种用于快速查询和检索数据的数据结构，其本质可以看成是一种排序好的数据结构。索引的作用就相当于书的目录。打个比方: 我们在查字典的时候，如果没有目录，那我们就只能一页一页的去找我们需要查的那个字，速度很慢。如果有目录了，我们只需要先去目录里查找字的位置，然后直接翻到那一页就行了。索引底层数据结构存在很多种类型，常见的索引结构有: B 树， B+树 和 Hash、红黑树。在 MySQL 中，无论是 Innodb 还是 MyIsam，都使用了 B+树作为索引结构。]]></description><category></category></item><item><title><![CDATA[mysql基础知识]]></title><link>https://blog.youkuaiyun.com/lrh35/article/details/144249355</link><guid>https://blog.youkuaiyun.com/lrh35/article/details/144249355</guid><author>lrh35</author><pubDate>Wed, 04 Dec 2024 20:36:57 +0800</pubDate><description><![CDATA[能表示的整数范围当然也是依次递增，如 果我们想要对某个整数列建立索引的话，在表示的整数范围允许的情况下，尽量让索引 列使用较小的类型，比如我们能使用INT就不要使用BIGINT，能使用NEDIUMINT就不要使 用INT，这是因为: ·数据类型越小，在查询时进行的比较操作越快（CPU层次) ·数据类型越小，索引占用的存储空间就越少，在一个数据页内就可以放下更多的记 录，从而减少磁盘/0带来的性能损耗，也就意味着可以把更多的数据页缓存在内存中， 从而加快读写效率。在我们的查询中发挥着什么样的作用呢？]]></description><category></category></item><item><title><![CDATA[redis机制详解]]></title><link>https://blog.youkuaiyun.com/lrh35/article/details/144145708</link><guid>https://blog.youkuaiyun.com/lrh35/article/details/144145708</guid><author>lrh35</author><pubDate>Fri, 29 Nov 2024 21:00:34 +0800</pubDate><description><![CDATA[开启混合持久化后，AOF 在重写时，不再仅仅是把内存数据转换为 RESP 命令写入 AOF 文件，而是会先对重写这一刻之前的内存做 RDB 快照处理，然后将 RDB 快照内容与增量的 AOF 修改内存数据的命令整合在一起，一同写入新的 AOF 文件。例如，执行 “set zhuge 666” 命令后，在 aof 文件里会按照 resp 协议格式记录相应数据，其中星号后面的数字表示命令包含的参数个数，“$” 号后面的数字代表对应参数的字符个数。在实际生产环境中，既可以启用 RDB，也可以启用 AOF。]]></description><category></category></item><item><title><![CDATA[什么是线程和进程?]]></title><link>https://blog.youkuaiyun.com/lrh35/article/details/143981529</link><guid>https://blog.youkuaiyun.com/lrh35/article/details/143981529</guid><author>lrh35</author><pubDate>Fri, 22 Nov 2024 19:50:36 +0800</pubDate><description><![CDATA[由于绿色线程和原生线程比起来在使用时有一些限制（比如绿色线程不能直接使用操作系统提供的功能如异步 I/O、只能在一个内核线程上运行无法利用多核），在 JDK 1.2 及以后，Java 线程改为基于原生线程（Native Threads）实现，也就是说 JVM 直接使用操作系统原生的内核级线程（内核线程）来实现 Java 线程，由操作系统内核进行线程的调度和管理。在 Windows 和 Linux 等主流操作系统中，Java 线程采用的是一对一的线程模型，也就是一个 Java 线程对应一个系统内核线程。]]></description><category></category></item><item><title><![CDATA[Java 反射机制详解]]></title><link>https://blog.youkuaiyun.com/lrh35/article/details/143923748</link><guid>https://blog.youkuaiyun.com/lrh35/article/details/143923748</guid><author>lrh35</author><pubDate>Wed, 20 Nov 2024 19:51:25 +0800</pubDate><description><![CDATA[让我们在运行时有了分析操作类的能力，这同样也增加了安全问题。另外，反射的性能也要稍差点，不过，对于框架来说实际是影响不大的。这些都是因为你可以基于反射分析类，然后获取到类/属性/方法/方法的参数上的注解。反射之所以被称为框架的灵魂，主要是因为它赋予了我们在运行时分析类以及执行类中方法的能力。像咱们平时大部分时候都是在写业务代码，很少会接触到直接使用反射机制的场景。通过反射你可以获取任意一个类的所有属性和方法，你还可以调用这些方法和属性。比如下面是通过 JDK 实现动态代理的示例代码，其中就使用了反射类。]]></description><category></category></item><item><title><![CDATA[Java 值传递详解]]></title><link>https://blog.youkuaiyun.com/lrh35/article/details/143779312</link><guid>https://blog.youkuaiyun.com/lrh35/article/details/143779312</guid><author>lrh35</author><pubDate>Thu, 14 Nov 2024 20:00:42 +0800</pubDate><description><![CDATA[通过上面例子，我们已经知道了一个方法不能修改一个基本数据类型的参数，而对象引用作为参数就不一样，请看案例 2。引用传递看似很好，能在方法内就直接把实参的值修改了，但是，为什么 Java 不引入引用传递呢？看到这里，相信你已经知道了 Java 中只有值传递，是没有引用传递的。实际上，并不是的，这里传递的还是值，不过，这个值是实参的地址罢了！函数中对形参的修改，可以影响到实参的值。的副本，副本的内容无论怎么修改，都不会影响到原件本身。的互换只是拷贝的两个地址的互换罢了，并不会影响到实参。]]></description><category></category></item><item><title><![CDATA[什么是I/O流]]></title><link>https://blog.youkuaiyun.com/lrh35/article/details/143750615</link><guid>https://blog.youkuaiyun.com/lrh35/article/details/143750615</guid><author>lrh35</author><pubDate>Wed, 13 Nov 2024 19:42:44 +0800</pubDate><description><![CDATA[语法糖（Syntactic sugar）代指的是编程语言为了方便程序员开发程序而设计的一种特殊语法，这种语法对编程语言的功能并没有影响。实现相同的功能，基于语法糖写出来的代码往往更简单简洁且更易阅读。举个例子，Java 中的for-each就是一个常用的语法糖，其原理其实就是基于普通的 for 循环和迭代器。String[] strs = {"JavaGuide", "公众号：JavaGuide", "博客：https://javaguide.cn/"};]]></description><category></category></item></channel></rss>