<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[卷王: 乌-鸦的博客]]></title><description><![CDATA[卷王: 乌-鸦的博客]]></description><link>https://blog.youkuaiyun.com/m0_49093968</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; m0_49093968]]></copyright><item><title><![CDATA[CAS机制原理]]></title><link>https://blog.youkuaiyun.com/m0_49093968/article/details/139968298</link><guid>https://blog.youkuaiyun.com/m0_49093968/article/details/139968298</guid><author>m0_49093968</author><pubDate>Tue, 25 Jun 2024 20:58:10 +0800</pubDate><description><![CDATA[什么是原子操作？原子操作(atomic operation)是不需要synchronized"，这是多线程编程的老生常谈了。所谓原子操作是指不会被线程调度机制打断的操作；这种操作一旦开始，就一直运行到结束，中间不会有任何 context switch [1]（切换到另一个线程）。CAS（比较并交换）操作是一种原子性操作。原子性是指一个操作要么完全执行成功，要么完全不执行，没有中间状态。]]></description><category></category></item><item><title><![CDATA[负载均衡Ribbon和Feign的使用与区别]]></title><link>https://blog.youkuaiyun.com/m0_49093968/article/details/134535760</link><guid>https://blog.youkuaiyun.com/m0_49093968/article/details/134535760</guid><author>m0_49093968</author><pubDate>Tue, 21 Nov 2023 17:06:28 +0800</pubDate><description><![CDATA[Feign 和 Ribbon 是 Spring Cloud 的 Netflix 中提供的两个实现软负载均衡的组件，Ribbon 和 Feign 都是用于调用其他服务的，方式不同，Feign 则是在 Ribbon 的基础上进行了一次改进，采用接口的方式，将需要调用的其他服务的方法定义成抽象方法即可，不需要自己构建 Http 请求，不过要注意的是抽象方法的注解，方法名要和提供服务的方法对应上。简单点说，Feign 是对 Ribbon 的封装，而且 Feign 和 Ribbon 的作用位置不同。]]></description><category></category></item><item><title><![CDATA[RocketMQ分布式事务 -＞ 最终一致性实现]]></title><link>https://blog.youkuaiyun.com/m0_49093968/article/details/131854674</link><guid>https://blog.youkuaiyun.com/m0_49093968/article/details/131854674</guid><author>m0_49093968</author><pubDate>Fri, 21 Jul 2023 16:34:29 +0800</pubDate><description><![CDATA[分布式事务的问题常在业务与面试中被提及, 近日摸鱼看到这篇文章, 阐述的非常通俗易懂, 固持久化下来我博客中, 也以便于我二刷转载源基于RocketMQ分布式事务 - 完整示例本文代码不只是简单的demo，考虑到一些异常情况、幂等性消费和死信队列等情况，尽量向可靠业务场景靠拢。目前已经完成了订单服务的业务逻辑。我们总结流程如下：第一次调用createOrder，发送事务消息。如果发送失败，导致报错，则将异常返回，此时不会涉及到任何数据安全。]]></description><category></category></item><item><title><![CDATA[Java-透析 -＞ 查找算法]]></title><link>https://blog.youkuaiyun.com/m0_49093968/article/details/128717333</link><guid>https://blog.youkuaiyun.com/m0_49093968/article/details/128717333</guid><author>m0_49093968</author><pubDate>Tue, 17 Jan 2023 16:19:16 +0800</pubDate><description><![CDATA[根据给定的某个值，在查找表中确定一个其关键字等于给定值的数据元素（或记录）顺序查找又称为线性查找，是一种最简单的查找方法。适用于线性表的顺序存储结构和链式存储结构。基本思路从第一个元素m开始逐个与需要查找的元素x进行比较，当比较到元素值相同(即m=x)时返回元素m的下标，如果比较到最后都没有找到，则返回-1。复杂度分析查找成功时的平均查找长度为： ASL = 每个元素被查找的概率 * 总的元素的个数=1/n*(1+2+3+…+n) = (n+1)/2;]]></description><category></category></item><item><title><![CDATA[Java-Jstack-生产问题的排查死锁/泄露/cpu负载]]></title><link>https://blog.youkuaiyun.com/m0_49093968/article/details/128674797</link><guid>https://blog.youkuaiyun.com/m0_49093968/article/details/128674797</guid><author>m0_49093968</author><pubDate>Fri, 13 Jan 2023 15:40:02 +0800</pubDate><description><![CDATA[首先如果是本地开发环境可以通过JVisualVM查看是否有长时间休眠的线程。]]></description><category></category></item><item><title><![CDATA[Java-GC和JVM垃圾回收器]]></title><link>https://blog.youkuaiyun.com/m0_49093968/article/details/128564281</link><guid>https://blog.youkuaiyun.com/m0_49093968/article/details/128564281</guid><author>m0_49093968</author><pubDate>Thu, 05 Jan 2023 17:26:48 +0800</pubDate><description><![CDATA[JVM在进行GC时，并非每次都对上面三个内存区域一起回收的，大部分时候回收的都是指新生代因此GC按照回收的区域又分了两种类型，一种是普通GC（minor GC），一种是全局GC（major GC or Full GC）普通GC（minor GC）：只针对新生代区域的GC全局GC（major GC or Full GC）：针对年老代的GC，偶尔伴随对新生代的GC以及对永久代的GC内存效率：复制算法>标记清除算法>标记整理算法（此处的效率只是简单的对比时间复杂度，实际情况不一定如此）内存整齐度。]]></description><category></category></item><item><title><![CDATA[Java分析-对象头]]></title><link>https://blog.youkuaiyun.com/m0_49093968/article/details/128469363</link><guid>https://blog.youkuaiyun.com/m0_49093968/article/details/128469363</guid><author>m0_49093968</author><pubDate>Wed, 28 Dec 2022 15:44:48 +0800</pubDate><description><![CDATA[HotSpot虚拟机中，对象在内存中存储的布局可以分为三块区域：对象头（Header）、实例数据（Instance Data）和对齐填充（Padding）HotSpot虚拟机的对象头(Object Header)包括两部分信息，第一部分用于存储对象自身的运行时数据， 如哈希码（HashCode）、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等等，这部分数据的长度在32位和64位的虚拟机（暂 不考虑开启压缩指针的场景）中分别为32个和64个Bits，官方称它为“Mark Word”]]></description><category></category></item><item><title><![CDATA[Java核心地基-反射]]></title><link>https://blog.youkuaiyun.com/m0_49093968/article/details/128400091</link><guid>https://blog.youkuaiyun.com/m0_49093968/article/details/128400091</guid><author>m0_49093968</author><pubDate>Thu, 22 Dec 2022 11:12:30 +0800</pubDate><description><![CDATA[使用的前提条件必须获到类的class字节码文件, 想操控其则需要提前获取到.java的最终形态, 再对其操控才可改变其形态。]]></description><category></category></item><item><title><![CDATA[Java-IO/NIO至高并发编程]]></title><link>https://blog.youkuaiyun.com/m0_49093968/article/details/128313591</link><guid>https://blog.youkuaiyun.com/m0_49093968/article/details/128313591</guid><author>m0_49093968</author><pubDate>Wed, 14 Dec 2022 17:33:01 +0800</pubDate><description><![CDATA[Java IO类概述表
将PipedInputStream和PipedOutputStream关联起来
代码示例:

管道和线程

管道的替代

阻塞IO模型

非阻塞IO模型
当用户线程发起一个read操作后，并不需要等待，而是马上就得到了一个结果。如果结果是一个Error时，它就知道数据还没准备好，于是它可以再次发送read操作。一旦内核中的数据准备好了，并且又再次受到了用户线程的请求，那么它马上就将数据拷贝到了用户线程，然后返回。所以事实上，在非阻塞IO模型中，用户线程需要不断地询问内核数据是否就绪，]]></description><category></category></item><item><title><![CDATA[稳扎稳打-数据结构--链表--树]]></title><link>https://blog.youkuaiyun.com/m0_49093968/article/details/128199722</link><guid>https://blog.youkuaiyun.com/m0_49093968/article/details/128199722</guid><author>m0_49093968</author><pubDate>Tue, 06 Dec 2022 16:39:26 +0800</pubDate><description><![CDATA[简单地说，数据结构是以某种特定的布局方式存储数据的容器。这种“布局方式”决定了 数据结构对于某些操作是高效的，而对于其他操作则是低效的。所以我们需要理解各种数据 结构，才能在处理实际问题时选取最合适的数据结构
数据结构=逻辑结构+物理结构（） 。
逻辑结构：数据元素间抽象化的相互关系 。
物理结构：（存储结构），在计算机存储器中的存储形式。数据结构从逻辑上划分为三种基本类型：手动实现一个栈结构

添加元素



获取栈的元素



判断栈容器是否为空



测试


链表结构
链表结构是由许多节点构成的，每]]></description><category></category></item><item><title><![CDATA[Java面向对象]]></title><link>https://blog.youkuaiyun.com/m0_49093968/article/details/128039856</link><guid>https://blog.youkuaiyun.com/m0_49093968/article/details/128039856</guid><author>m0_49093968</author><pubDate>Wed, 30 Nov 2022 22:07:50 +0800</pubDate><description><![CDATA[先行版本, JAVA编程核心: 面向对象, 热身第一枪
《Java编程思想》中提到“万物皆为对象”的概念。它将对象视为一种奇特的变量，它除了可以存储数据之外还可以对它自身进行操作。它能够直接反映现实生活中的事物，例如人、车、小鸟等，将其表示为程序中的对象。每个对象都具有各自的状态特征（也可以称为属性）及行为特征（方法），java就是通过对象之间行为的交互来解决问题的。面向对象就是把构成问题的事物分解成一个个对象，建立对象不是为了实现一个步骤，而是为了描述某个事物在解决问题中的行为。类是面向对象中的一个很重要]]></description><category></category></item><item><title><![CDATA[深扒SQL的执行过程-MySQL]]></title><link>https://blog.youkuaiyun.com/m0_49093968/article/details/127887397</link><guid>https://blog.youkuaiyun.com/m0_49093968/article/details/127887397</guid><author>m0_49093968</author><pubDate>Wed, 16 Nov 2022 16:42:26 +0800</pubDate><description><![CDATA[mysql学习第二期, 让sql在你脑海里也能生成执行计划MySQL 的 crash-safe 原理解析MySQL官方中文文档第26章。]]></description><category></category></item><item><title><![CDATA[Java多线程实战教学]]></title><link>https://blog.youkuaiyun.com/m0_49093968/article/details/127189639</link><guid>https://blog.youkuaiyun.com/m0_49093968/article/details/127189639</guid><author>m0_49093968</author><pubDate>Wed, 09 Nov 2022 23:54:19 +0800</pubDate><description><![CDATA[在面向对象编程中，创建和销毁对象是很费时间的，因为创建一个对象要获取内存资源或者其它更多资源。在 Java 中更是如此，虚拟机将试图跟踪每一个对象，以便能够在对象销毁后进行垃圾回收。所以提高服务程序效率的一个手段就是尽可能减少创建和销毁对象的次数，特别是一些很耗资源的对象创建和销毁。如何利用已有对象来服务就是一个需要解决的关键问题，其实这就是一些「池化资源」技术产生的原因。比如大家所熟悉的数据库连接池正是遵循这一思想而产生的！]]></description><category></category></item><item><title><![CDATA[统一捕获异常的熔错]]></title><link>https://blog.youkuaiyun.com/m0_49093968/article/details/127259403</link><guid>https://blog.youkuaiyun.com/m0_49093968/article/details/127259403</guid><author>m0_49093968</author><pubDate>Tue, 11 Oct 2022 10:52:52 +0800</pubDate><description><![CDATA[【代码】统一捕获异常的熔错。]]></description><category></category></item><item><title><![CDATA[参与感极强-SpringBoot自定义starter与健康监控]]></title><link>https://blog.youkuaiyun.com/m0_49093968/article/details/125882956</link><guid>https://blog.youkuaiyun.com/m0_49093968/article/details/125882956</guid><author>m0_49093968</author><pubDate>Tue, 19 Jul 2022 23:54:02 +0800</pubDate><description><![CDATA[当导入redis坐标时，SpringBoot自动创建Jedis的Bean。创建RedisTemplateBean，并完成序列化和反序列化操作创建heima-redis-spring-boot-starter模块，添加依赖添加配置属性类添加配置类（创建JedisBean和RedisTemplateBean）并定义META-INF/spring.factories文件中，让SpringBoot自动加载目的验证自定义starter是否可以使用实现新建项目中引入依赖。............]]></description><category></category></item><item><title><![CDATA[特殊-硬钢源码-SpringBoot自动化配置源码阅读]]></title><link>https://blog.youkuaiyun.com/m0_49093968/article/details/125826833</link><guid>https://blog.youkuaiyun.com/m0_49093968/article/details/125826833</guid><author>m0_49093968</author><pubDate>Sun, 17 Jul 2022 00:36:50 +0800</pubDate><description><![CDATA[SpringBoot自动装配源码解读]]></description><category></category></item><item><title><![CDATA[轻松学习-JVM-堆-掰碎分解]]></title><link>https://blog.youkuaiyun.com/m0_49093968/article/details/125602023</link><guid>https://blog.youkuaiyun.com/m0_49093968/article/details/125602023</guid><author>m0_49093968</author><pubDate>Mon, 04 Jul 2022 15:56:53 +0800</pubDate><description><![CDATA[堆是一种满足以下条件的树：堆中的每一个节点值都大于等于（或小于等于）子树中所有节点的值。或者说，任意一个节点的值都大于等于（或小于等于）所有子节点的值。!!!特别提示：大家可以尝试判断下面给出的图是否是堆？第1个和第2个是堆。第1个是最大堆，每个节点都比子树中所有节点大。第2个是最小堆，每个节点都比子树中所有节点小。第3个不是，第三个中，根结点1比2和15小，而15却比3大，19比5大，不满足堆的性质。当我们只关心所有数据中的最大值或者最小值，存在多次获取最大值或者最小值，多次插入或删除数据时，就可以使用堆]]></description><category></category></item><item><title><![CDATA[即兴MQ-Rabbit]]></title><link>https://blog.youkuaiyun.com/m0_49093968/article/details/125578358</link><guid>https://blog.youkuaiyun.com/m0_49093968/article/details/125578358</guid><author>m0_49093968</author><pubDate>Sat, 02 Jul 2022 23:31:26 +0800</pubDate><description><![CDATA[MQ作为中大型项目中作用于异步处理，应用解耦，流量削锋和消息通讯等场景，尤其重要，今天就即兴选择RabbitMQ来吹一下怎么玩儿MQ的本质 大概地讲就是（一发一存一消费），在直白点就是一个（转发器）如今我们最常用的消息队列产品（RocketMQ，Kafka等等），你会发现：它们都在最原始的消息模型上做了扩展，同时提出了一些新名词，比如：主题（topic），分区（partition），队列（queue）等等最初的消息队列就是上一节讲的原始模型，它是一个严格意义上的队列（Queue）。消息按照什么顺序写进去，就]]></description><category></category></item><item><title><![CDATA[MyBatis-PLUS使用教程]]></title><link>https://blog.youkuaiyun.com/m0_49093968/article/details/125566825</link><guid>https://blog.youkuaiyun.com/m0_49093968/article/details/125566825</guid><author>m0_49093968</author><pubDate>Fri, 01 Jul 2022 23:59:34 +0800</pubDate><description><![CDATA[这是一篇mybatis-plus的使用记录博客，源码等分析就不做了，帮助学习mybatis-plus的人懂得使用技巧MyBatis-Plus (opens new window)（简称 MP）是一个 MyBatis (opens new window)的增强工具，在 MyBatis 的基础上只做增强不做改变，为简化开发、提高效率而生。官网：https://baomidou.com无侵入：只做增强不做改变，引入它不会对现有工程产生影响，如丝般顺滑损耗小：启动即会自动注入基本 CURD，性能基本无损耗，直接面向]]></description><category></category></item><item><title><![CDATA[随手笔记-Jackson -＞ @JsonFormat -＞ 失真问题解决]]></title><link>https://blog.youkuaiyun.com/m0_49093968/article/details/125559981</link><guid>https://blog.youkuaiyun.com/m0_49093968/article/details/125559981</guid><author>m0_49093968</author><pubDate>Fri, 01 Jul 2022 16:13:17 +0800</pubDate><description><![CDATA[关于使用雪花算法作为主键id生成, 19位数return给前端出现数据失真, 导致id与数据库中不对应, 极有可能出现缓存穿透问题更多可参考github项目官网解决问题, 也可直接传送到Jackson文档
浏览器开发者模式看到的接口返回数据, 此ID为失真状态的value

postman中测试的接口真实ID为正确的value

数据库中对比下来
使用了@JsonFormat注解解决失真问题
官方文档这样对此做出解释

JsonFormat: 具有每种类型行为的一般注释；例如，可用于指定序列化日期/时间值时]]></description><category></category></item></channel></rss>