<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[0]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/m0_74007708</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; m0_74007708]]></copyright><item><title><![CDATA[Spring AOP基础、快速入门(Spring的设计思想之一)]]></title><link>https://blog.youkuaiyun.com/m0_74007708/article/details/144485468</link><guid>https://blog.youkuaiyun.com/m0_74007708/article/details/144485468</guid><author>m0_74007708</author><pubDate>Sun, 15 Dec 2024 12:37:59 +0800</pubDate><description><![CDATA[AOP，面向切面编程，作为面向对象的一种补充，将公共逻辑（事务管理、日志、缓存、权限控制、限流等）封装成切面，跟业务代码进行分离，可以减少系统的重复代码和降低模块之间的耦合度。切面就是那些与业务无关，但所有业务模块都会调用的公共逻辑。]]></description><category></category></item><item><title><![CDATA[手写一个单例模式]]></title><link>https://blog.youkuaiyun.com/m0_74007708/article/details/143906078</link><guid>https://blog.youkuaiyun.com/m0_74007708/article/details/143906078</guid><author>m0_74007708</author><pubDate>Thu, 21 Nov 2024 09:45:00 +0800</pubDate><description><![CDATA[一个私有构造函数 （确保只能单例类自己创建实例）
一个私有静态变量 （确保只有一个实例）
一个公有静态函数 （给使用者提供调用方法）
简单来说就是，单例类的构造方法不让其他人修改和使用；并且单例类自己只创建一个实例，这个实例，其他人也无法修改和直接使用；然后单例类提供一个调用方法，想用这个实例，只能调用。这样就确保了全局只创建了一次实例。]]></description><category></category></item><item><title><![CDATA[数据库锁升级问题]]></title><link>https://blog.youkuaiyun.com/m0_74007708/article/details/143905756</link><guid>https://blog.youkuaiyun.com/m0_74007708/article/details/143905756</guid><author>m0_74007708</author><pubDate>Wed, 20 Nov 2024 11:07:21 +0800</pubDate><description><![CDATA[在 MySQL 的 InnoDB 存储引擎中，锁升级是指将行锁升级为表锁的过程。这种情况通常会影响数据库的并发性能，降低系统的效率。锁升级的主要原因包括索引的使用情况和查询的范围。]]></description><category></category></item><item><title><![CDATA[保证线程安全的处理策列]]></title><link>https://blog.youkuaiyun.com/m0_74007708/article/details/143657843</link><guid>https://blog.youkuaiyun.com/m0_74007708/article/details/143657843</guid><author>m0_74007708</author><pubDate>Mon, 11 Nov 2024 10:00:00 +0800</pubDate><description><![CDATA[weakCompareAndSetInt中会再次通过偏移量offset从对象o中获取字段的当前值，如果这期间字段值被其他线程修改，那么此时获取到的当前值就不等于期望值，就不会执行更新操作，只有确保在修改字段值之前，字段的当前值与预期值依然相等，才能执行更新操作，从而确保了原子操作的安全性。1、单独操作：上述我们的demo中，出现了两个线程A、B，它们分别调用get()、put()方法，虽然看起来像是在组合操作，但实际上对于单个线程而言，这是单独操作，是线程安全的。线程3这不就获取了错误的数据？]]></description><category></category></item><item><title><![CDATA[Redis如何保证数据不丢失（可靠性）]]></title><link>https://blog.youkuaiyun.com/m0_74007708/article/details/143657707</link><guid>https://blog.youkuaiyun.com/m0_74007708/article/details/143657707</guid><author>m0_74007708</author><pubDate>Sun, 10 Nov 2024 11:15:34 +0800</pubDate><description><![CDATA[Redis 保证数据不丢失的主要手段有两个：持久化和集群运行。其中持久化有三种实现：RDB、AOF、混合持久化；而集群（运行）也包含了三种实现：主从复制、哨兵模式和 Redis Cluster。]]></description><category></category></item><item><title><![CDATA[聚簇索引和非聚簇索引]]></title><link>https://blog.youkuaiyun.com/m0_74007708/article/details/142996652</link><guid>https://blog.youkuaiyun.com/m0_74007708/article/details/142996652</guid><author>m0_74007708</author><pubDate>Tue, 29 Oct 2024 09:00:00 +0800</pubDate><description><![CDATA[很简单记住一句话：找到了索引就找到了需要的数据，那么这个索引就是聚簇索引，所以主键就是聚簇索引，修改聚簇索引其实就是修改主键。（索引就是我们要找的数据）

索引的存储和数据的存储是分离的，也就是说找到了索引但没找到数据，需要根据索引上的值(主键)再次回表查询,非聚簇索引也叫做辅助索引。（找到了索引还要根据索引查询数）]]></description><category></category></item><item><title><![CDATA[什么是索引覆盖，索引下推，回表]]></title><link>https://blog.youkuaiyun.com/m0_74007708/article/details/142996608</link><guid>https://blog.youkuaiyun.com/m0_74007708/article/details/142996608</guid><author>m0_74007708</author><pubDate>Tue, 29 Oct 2024 03:00:00 +0800</pubDate><description><![CDATA[它发生在使用非聚集索引（Secondary Index）进行查询时，索引中只包含了索引列的副本以及指向对应主键的引用。当一个查询的所有数据需求都可以通过索引中的数据来满足时，就发生了索引覆盖。的一个关键要求是查询中的所有列都必须在索引中。如果查询引用了索引中没有的列，那么就无法实现索引覆盖。这意味着查询涉及的所有列都包含在索引中，从而避免了第二次查询。在设计索引时，应该考虑查询模式，以便最大限度地利用索引覆盖和索引下推的优势。列有一个普通索引，查询会首先使用这个索引。在MySQL中，如果有一个表，其中。]]></description><category></category></item><item><title><![CDATA[@Autowried privite static User user的输出结果是什么]]></title><link>https://blog.youkuaiyun.com/m0_74007708/article/details/143108941</link><guid>https://blog.youkuaiyun.com/m0_74007708/article/details/143108941</guid><author>m0_74007708</author><pubDate>Mon, 28 Oct 2024 09:45:00 +0800</pubDate><description><![CDATA[在控制台上的输出结果是 Null]]></description><category></category></item><item><title><![CDATA[线上问题排查-线程池异常]]></title><link>https://blog.youkuaiyun.com/m0_74007708/article/details/143148870</link><guid>https://blog.youkuaiyun.com/m0_74007708/article/details/143148870</guid><author>m0_74007708</author><pubDate>Sun, 27 Oct 2024 20:42:16 +0800</pubDate><description><![CDATA[Java 线程池以有界队列的线程池为例，当新任务提交时，如果运行的线程少于 corePoolSize，则创建新线程来处理请求。如果正在运行的线程数等于 corePoolSize 时，则新任务被添加到队列中，直到队列满。当队列满了后，会继续开辟新线程来处理任务，但不超过 maximumPoolSize。当任务队列满了并且已开辟了最大线程数，此时又来了新任务，ThreadPoolExecutor 会拒绝服务。]]></description><category></category></item><item><title><![CDATA[线程本地变量-ThreadLocal]]></title><link>https://blog.youkuaiyun.com/m0_74007708/article/details/143231888</link><guid>https://blog.youkuaiyun.com/m0_74007708/article/details/143231888</guid><author>m0_74007708</author><pubDate>Fri, 25 Oct 2024 13:13:14 +0800</pubDate><description><![CDATA[ThreadLocal叫做线程变量，意思是ThreadLocal中填充的变量属于当前线程，该变量对其他线程而言是隔离的，也就是说该变量是当前线程独有的变量。ThreadLocal为变量在每个线程中都创建了一个副本，那么每个线程可以访问自己内部的副本变量。]]></description><category></category></item><item><title><![CDATA[再通过for循环遍历list集合时，怎么删除list集合中的元素]]></title><link>https://blog.youkuaiyun.com/m0_74007708/article/details/143231818</link><guid>https://blog.youkuaiyun.com/m0_74007708/article/details/143231818</guid><author>m0_74007708</author><pubDate>Fri, 25 Oct 2024 12:54:59 +0800</pubDate><description><![CDATA[在Java中，如果你尝试在一个迭代过程中直接修改正在迭代的集合（如使用remove），可能会遇到ConcurrentModificationException异常。这是因为迭代器检测到了集合的结构性修改（比如添加或删除元素）。
]]></description><category></category></item><item><title><![CDATA[线上问题排查-频繁GC]]></title><link>https://blog.youkuaiyun.com/m0_74007708/article/details/143148638</link><guid>https://blog.youkuaiyun.com/m0_74007708/article/details/143148638</guid><author>m0_74007708</author><pubDate>Thu, 24 Oct 2024 20:39:03 +0800</pubDate><description><![CDATA[一个常常被讨论的问题（惯性思维）是在生产环境中GC日志是否应该开启。因为它所产生的开销通常都非常有限，因此我的答案是需要。你也可以从full GC 的效果来推断问题，正常情况下，一次full GC应该会回收大量内存，所以。获取到gc日志之后，可以上传到GC easy帮助分析，得到可视化的图表分析结果。接前面的内容，这个情况下，我们自然而然想到去查看gc 的具体情况。至于内存分析之后的步骤，就需要小伙伴们根据具体问题具体分析啦。在了解下面内容之前，请先花点时间回顾一下GC的整个流程。]]></description><category></category></item><item><title><![CDATA[线上问题排查解决思路-CPU 利用率高/飙升]]></title><link>https://blog.youkuaiyun.com/m0_74007708/article/details/143147761</link><guid>https://blog.youkuaiyun.com/m0_74007708/article/details/143147761</guid><author>m0_74007708</author><pubDate>Thu, 24 Oct 2024 14:59:29 +0800</pubDate><description><![CDATA[不管处于应急的哪个阶段，我们首先必须想到的是恢复问题，恢复问题不一定能够定位问题，也不一定有完美的解决方案，也许是通过经验判断，也许是预设开关等，但都可能让我们达到快速恢复的目的，然后。在大多数情况下，我们都是先优先恢复服务，保留下当时的异常信息（内存dump、线程dump、gc log等等，在紧急情况下甚至可以不用保留，等到事后去复现），等到服务正常，再去复盘问题。这里为了演示，用一个最简单的死循环来模拟CPU飙升的场景，下面是模拟代码，通过第一步，找出有问题的代码之后，观察到线程栈之后。]]></description><category></category></item><item><title><![CDATA[RabbitMQ如何防止消息丢失及重复消费]]></title><link>https://blog.youkuaiyun.com/m0_74007708/article/details/143180190</link><guid>https://blog.youkuaiyun.com/m0_74007708/article/details/143180190</guid><author>m0_74007708</author><pubDate>Thu, 24 Oct 2024 09:15:00 +0800</pubDate><description><![CDATA[解释：RabbitMQ可以开启 confirm 模式，在生产者那里设置开启 confirm 模式之后，生产者每次写的消息都会分配一个唯一的 id，如果消息成功写入 RabbitMQ 中，RabbitMQ 会给生产者回传一个 ack 消息，告诉你说这个消息 ok 了。消息丢失之后的处理：消息自动重新入队。confirm机制是异步的，生成者发送完一个消息之后，不需要等待RabbitMQ的回调，就可以发送下一个消息，当RabbitMQ成功接收到消息之后会自动异步的回调生产者的一个接口返回成功与否的消息。]]></description><category></category></item><item><title><![CDATA[Spring中的循环依赖]]></title><link>https://blog.youkuaiyun.com/m0_74007708/article/details/143108806</link><guid>https://blog.youkuaiyun.com/m0_74007708/article/details/143108806</guid><author>m0_74007708</author><pubDate>Wed, 23 Oct 2024 11:43:25 +0800</pubDate><description><![CDATA[1.Spring首先从一级缓存singletonObjects中获取。

2.如果获取不到，并且对象正在创建中，就再从二级缓存earlySingletonObjects中获取。

3.如果还是获取不到且允许singletonFactories通过getObject()获取，就从三级缓存singletonFactory.getObject()(三级缓存)获取.

4.如果从三级缓存中获取到就从singletonFactories中移除，并放入earlySingletonObjects中。其实也就是从三级缓存移]]></description><category></category></item><item><title><![CDATA[插入数据时遇到主键重复问题怎么办？——insert into数据库技巧 (insert into主键重复数据库)]]></title><link>https://blog.youkuaiyun.com/m0_74007708/article/details/143169338</link><guid>https://blog.youkuaiyun.com/m0_74007708/article/details/143169338</guid><author>m0_74007708</author><pubDate>Tue, 22 Oct 2024 21:51:13 +0800</pubDate><description><![CDATA[在使用数据库时，主键的作用非常重要，它可以确保数据的唯一性，避免重复插入数据。针对这种情况，我们可以采取忽略重复行、更新重复行、指定插入某些数据等处理方式，有效避免主键重复的问题。另外，在设计数据库表时，应该合理设计主键，并为需要唯一性约束的字段添加唯一索引，以及将主键设置成自增长，这样可以有效地避免主键重复的问题。但是在插入数据的过程中，有时候会遇到主键重复的问题，当这种情况发生时，该怎么处理呢？当我们执行插入数据的操作时，如果插入的数据的主键已经在表中存在，就会出现主键重复的情况。]]></description><category></category></item><item><title><![CDATA[线上问题排查-常见的线上问题]]></title><link>https://blog.youkuaiyun.com/m0_74007708/article/details/143149043</link><guid>https://blog.youkuaiyun.com/m0_74007708/article/details/143149043</guid><author>m0_74007708</author><pubDate>Tue, 22 Oct 2024 12:27:08 +0800</pubDate><description><![CDATA[明确问题：首先，需要明确线上出现了什么问题。这包括了解问题的具体表现、发生的时间、影响的范围等。通过收集用户反馈、查看监控系统告警等方式，收集问题相关信息。
收集信息：收集与问题相关的各种信息，如日志、指标、用户反馈等。这些信息是排查问题的关键，可以帮助我们了解问题的来龙去脉。
分析问题：根据收集到的信息，对问题进行深入分析。这包括分析日志、指标等数据，找出异常点，进一步定位问题原因。
解决问题：在定位问题原因后，采取相应的解决措施。这可能涉及到修改代码、调整配置、优化系统架构等。]]></description><category></category></item><item><title><![CDATA[MySQL的多列索引问题：最左匹配原则]]></title><link>https://blog.youkuaiyun.com/m0_74007708/article/details/143147331</link><guid>https://blog.youkuaiyun.com/m0_74007708/article/details/143147331</guid><author>m0_74007708</author><pubDate>Tue, 22 Oct 2024 12:02:03 +0800</pubDate><description><![CDATA[最左匹配原则是数据库索引设计中的一个重要概念，尤其是在使用MySQL数据库时。这个原则指出，在创建多列索引时，索引会从最左边的列开始匹配，直到遇到范围查询（如>、]]></description><category></category></item><item><title><![CDATA[在Spring中，什么是配置类]]></title><link>https://blog.youkuaiyun.com/m0_74007708/article/details/143108721</link><guid>https://blog.youkuaiyun.com/m0_74007708/article/details/143108721</guid><author>m0_74007708</author><pubDate>Mon, 21 Oct 2024 12:03:30 +0800</pubDate><description><![CDATA[配置类是用来配置 Spring 应用程序上下文的 Java 类。它通过使用特定的注解和方法，为应用程序提供各种配置信息，使得 Spring 容器能够正确地初始化和管理应用程序的各个组件。]]></description><category></category></item><item><title><![CDATA[@Component 和 @Bean 的区别与联系]]></title><link>https://blog.youkuaiyun.com/m0_74007708/article/details/143108608</link><guid>https://blog.youkuaiyun.com/m0_74007708/article/details/143108608</guid><author>m0_74007708</author><pubDate>Mon, 21 Oct 2024 11:56:41 +0800</pubDate><description><![CDATA[@Component 和 它的子类型（@Controller, @Service and @Repository）注释在类上。告诉Spring，我是一个bean，通过类路径扫描自动检测并注入到Spring容器中。

@Bean不能注释在类上，只能用于在配置类（@Configuration）中显式声明单个bean。意思就是，我要获取这个bean的时候，spring要按照这种方式去获取这个bean。默认情况下@Bean注释的方法名作为对象的名字，也可以用name属性定义对象的名字。]]></description><category></category></item></channel></rss>