<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[意田天的博客]]></title><description><![CDATA[每天进步一点点]]></description><link>https://blog.youkuaiyun.com/A_Java_Dog</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; A_Java_Dog]]></copyright><item><title><![CDATA[mysql如何避免幻读]]></title><link>https://blog.youkuaiyun.com/A_Java_Dog/article/details/127586420</link><guid>https://blog.youkuaiyun.com/A_Java_Dog/article/details/127586420</guid><author>A_Java_Dog</author><pubDate>Sat, 29 Oct 2022 15:01:46 +0800</pubDate><description><![CDATA[mysql如何实现避免幻读]]></description><category></category></item><item><title><![CDATA[根据根节点和子节点构造树形结构]]></title><link>https://blog.youkuaiyun.com/A_Java_Dog/article/details/123478354</link><guid>https://blog.youkuaiyun.com/A_Java_Dog/article/details/123478354</guid><author>A_Java_Dog</author><pubDate>Mon, 14 Mar 2022 14:45:32 +0800</pubDate><description><![CDATA[package com.cyc.basic.test.list;

import com.alibaba.fastjson.JSON;
import lombok.Data;

import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

/**
 * @description: 遍历构造树形结构{根节点, 子节点}
 * @version 1.0
]]></description><category></category></item><item><title><![CDATA[详解spring事务失效和回滚失败的场景]]></title><link>https://blog.youkuaiyun.com/A_Java_Dog/article/details/120429840</link><guid>https://blog.youkuaiyun.com/A_Java_Dog/article/details/120429840</guid><author>A_Java_Dog</author><pubDate>Thu, 23 Sep 2021 10:41:23 +0800</pubDate><description><![CDATA[详解spring事务失效的12种场景详解spring事务失效的12种场景前言一 事务不生效1.访问权限问题2. 方法用final修饰3.方法内部调用3.1 新加一个Service方法3.2 在该Service类中注入自己3.3 通过AopContent类4.未被spring管理5.多线程调用6.表不支持事务7.未开启事务二 事务不回滚1.错误的传播特性2.自己吞了异常3.手动抛了别的异常4.自定义了回滚异常5.嵌套事务回滚多了三 大事务与编程式事务1 大事务问题2 编程式事务
详解spring事务失效的12]]></description><category></category></item><item><title><![CDATA[Mysql调优总结]]></title><link>https://blog.youkuaiyun.com/A_Java_Dog/article/details/120172713</link><guid>https://blog.youkuaiyun.com/A_Java_Dog/article/details/120172713</guid><author>A_Java_Dog</author><pubDate>Wed, 08 Sep 2021 09:54:18 +0800</pubDate><description><![CDATA[@TOC
数据类型优化
更小的通常更好
应该尽量使用可以正确存储数据的最小数据类型，更小的数据类型通常更快，因为它们占用更少的磁盘、内存和CPU缓存，并且处理时需要的CPU周期更少，但是要确保没有低估需要存储的值的范围，如果无法确认哪个数据类型，就选择你认为不会超过范围的最小类型
案例：
设计两张表，设计不同的数据类型，查看表的容量
简单就好
简单数据类型的操作通常需要更少的CPU周期，例如，
1、整型比字符操作代价更低，因为字符集和校对规则是字符比较比整型比较更复杂，
2、使用mysql自建类型而不是字符]]></description><category></category></item><item><title><![CDATA[多线程---线程池的使用]]></title><link>https://blog.youkuaiyun.com/A_Java_Dog/article/details/119859004</link><guid>https://blog.youkuaiyun.com/A_Java_Dog/article/details/119859004</guid><author>A_Java_Dog</author><pubDate>Sun, 22 Aug 2021 22:18:02 +0800</pubDate><description><![CDATA[线程池的使用

]]></description><category></category></item><item><title><![CDATA[多线程---并发容器的使用]]></title><link>https://blog.youkuaiyun.com/A_Java_Dog/article/details/119681837</link><guid>https://blog.youkuaiyun.com/A_Java_Dog/article/details/119681837</guid><author>A_Java_Dog</author><pubDate>Fri, 13 Aug 2021 18:26:41 +0800</pubDate><description><![CDATA[多线程---并发容器的使用1. 容器概览2. 容器的使用1. Map1. HashTable2. HashMap3. SynchronizedHashMap4. ConcurrentHashMap2. Collection1. ArrayList2. Vector3. LinkedList4. ConcurrentLinkedQueue3. 并发容器的使用1. ConcurrentHashMap2. CopyOnWriteArrayList3. ConcurrentLinkedQueue4. LinkedB]]></description><category></category></item><item><title><![CDATA[多线程---详解各种锁和AQS原理]]></title><link>https://blog.youkuaiyun.com/A_Java_Dog/article/details/119519119</link><guid>https://blog.youkuaiyun.com/A_Java_Dog/article/details/119519119</guid><author>A_Java_Dog</author><pubDate>Sun, 08 Aug 2021 19:17:53 +0800</pubDate><description><![CDATA[多线程-进阶1. synchronized可重入同一个线程不同线程2. volatile保证线程可见性禁止指令重排序查看结果3. 锁优化锁细化锁粗化锁对象4. CAS(无锁优化, 自旋)5. JUC同步锁1. ReentrantLock(可重入锁)同一个线程不同线程tryLocklockInterruptibly()公平锁2. ReadWriteLock(读写锁)3. LangAdder(分段锁)4. CountDownLatch(倒数门栓)5. CyclicBarrier(循环栅栏)应用场景6. Coun]]></description><category></category></item><item><title><![CDATA[多线程---多线程基础知识]]></title><link>https://blog.youkuaiyun.com/A_Java_Dog/article/details/119421389</link><guid>https://blog.youkuaiyun.com/A_Java_Dog/article/details/119421389</guid><author>A_Java_Dog</author><pubDate>Thu, 05 Aug 2021 16:34:44 +0800</pubDate><description><![CDATA[多线程基础知识2. 线程的基本概念2.1 启动线程的5中方法2.2 线程的状态2.2.1 JAVA的6种线程状态1. NEW2. RUNNABLE (RUNNING+READY)3. WAITING4. TIMED_WAITING5. BLOCKEDTERMINATED2.2 线程的打断2.2.1 interrupt的三个方法2.2.2 interrupt和sleep() wait() join()2.2.3 interrupt 是否能中断正在竞争锁的线程synchronized锁Lock锁如何打断锁竞争的]]></description><category></category></item><item><title><![CDATA[JVM---垃圾回收器CMS 和G1解析]]></title><link>https://blog.youkuaiyun.com/A_Java_Dog/article/details/119000739</link><guid>https://blog.youkuaiyun.com/A_Java_Dog/article/details/119000739</guid><author>A_Java_Dog</author><pubDate>Thu, 22 Jul 2021 15:39:56 +0800</pubDate><description><![CDATA[CMS 和G1解析CMS 和G1解析基本概念CardTableCSetRSet（G1）CMS清理过程1. 初始标记(CMS-initial-mark)2. 并发标记(CMS-concurrent-mark)3. 重新标记(CMS-remark)4.并发清理(CMS-concurrent-sweep)线程角度理解G1介绍G1特点新老年代比例GC何时触发MixedGCMixedGC的过程初始标记并发标记最终标记筛选回收相关问题标记算法三色标记算法漏标产生漏标打破漏标RSet与赋值的效率
CMS 和G1解析
基本]]></description><category></category></item><item><title><![CDATA[synchronized解析]]></title><link>https://blog.youkuaiyun.com/A_Java_Dog/article/details/118679431</link><guid>https://blog.youkuaiyun.com/A_Java_Dog/article/details/118679431</guid><author>A_Java_Dog</author><pubDate>Mon, 12 Jul 2021 17:11:18 +0800</pubDate><description><![CDATA[synchronized解析1. 用户态与内核态2. CAS3. UnsafeAtomicInteger解析4. 了解对象的内存布局（hotspot）1. 对象头2. 成员变量（实例数据）3. 对齐数据工具：JOL = Java Object Layout6. synchronized的横切面详解重量级锁java源码层级字节码层级JVM层级（Hotspot）7. 锁升级过程7.1 JDK8 markword实现表：7.2 锁重入7.3 synchronized最底层实现7.4 synchronized vs]]></description><category></category></item><item><title><![CDATA[JVM---一个简单的压栈和弹栈操作指令解析]]></title><link>https://blog.youkuaiyun.com/A_Java_Dog/article/details/118274509</link><guid>https://blog.youkuaiyun.com/A_Java_Dog/article/details/118274509</guid><author>A_Java_Dog</author><pubDate>Sun, 27 Jun 2021 15:52:06 +0800</pubDate><description><![CDATA[JVM-一个简单的压栈和弹栈操作指令解析
i++ 操作
package com.cyc.jvm.c4_RuntimeDataAreaAndInstructionSet;

public class TestIPulsPlus {
    public static void main(String[] args) {
        int i = 8;
        i = i++;
//        i = ++i;
        System.out.println(i);
    }
}
//]]></description><category></category></item><item><title><![CDATA[JVM---Java内存屏障和JMM]]></title><link>https://blog.youkuaiyun.com/A_Java_Dog/article/details/118251798</link><guid>https://blog.youkuaiyun.com/A_Java_Dog/article/details/118251798</guid><author>A_Java_Dog</author><pubDate>Sat, 26 Jun 2021 17:15:50 +0800</pubDate><description><![CDATA[Java内存屏障-JMMJava内存屏障-JMM硬件层数据一致性伪共享乱序问题如何保证特定情况下不乱序volatile的实现细节synchronized实现细节
Java内存屏障-JMM
硬件层数据一致性
协议很多
intel 用MESI
https://www.cnblogs.com/z00377750/p/9180644.html
现代CPU的数据一致性实现 = 缓存锁(MESI …) + 总线锁
伪共享
读取缓存以cache line为基本单位，目前64bytes
位于同一缓存行的两个不同数据，被两个]]></description><category></category></item><item><title><![CDATA[23种设计模式总结]]></title><link>https://blog.youkuaiyun.com/A_Java_Dog/article/details/117957651</link><guid>https://blog.youkuaiyun.com/A_Java_Dog/article/details/117957651</guid><author>A_Java_Dog</author><pubDate>Wed, 16 Jun 2021 14:53:09 +0800</pubDate><description><![CDATA[23种设计模式总结

创建型模式
Abstract Factory(抽象工厂)

应用场景: spring 的beanFactory ,spring容器就是个大型的抽象工厂,不仅可以创建普通的bean实例，也可以创建bean工厂。

Builder(建造者)
描述: 将一个复杂的对象的构建与它的表示分离
Factory Method(工厂方法)
面向对象六大原则









...]]></description><category></category></item><item><title><![CDATA[设计模式之模板方法模式(TemplateMethod)]]></title><link>https://blog.youkuaiyun.com/A_Java_Dog/article/details/117956182</link><guid>https://blog.youkuaiyun.com/A_Java_Dog/article/details/117956182</guid><author>A_Java_Dog</author><pubDate>Wed, 16 Jun 2021 13:52:20 +0800</pubDate><description><![CDATA[设计模式之模板方法模式模板方法模式代码实现模式的应用
模板方法模式
在模板模式（Template Pattern）中，一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现，但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。
定义一个操作中的算法的骨架，而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
代码实现
package com.cyc.design.template;
public class Main {
 ]]></description><category></category></item><item><title><![CDATA[设计模式之原型模式(Prototype)]]></title><link>https://blog.youkuaiyun.com/A_Java_Dog/article/details/117927826</link><guid>https://blog.youkuaiyun.com/A_Java_Dog/article/details/117927826</guid><author>A_Java_Dog</author><pubDate>Tue, 15 Jun 2021 16:29:33 +0800</pubDate><description><![CDATA[原型模式原型模式浅克隆深克隆字符串需要深克隆吗StringBuilder 克隆
原型模式
原型模式（Prototype Pattern）是用于创建重复的对象，同时又能保证性能。这种类型的设计模式属于创建型模式，它提供了一种创建对象的最佳方式。
这种模式是实现了一个原型接口，该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时，则采用这种模式。

浅克隆
package com.cyc.design.prototype.v1;

/**
 * 浅克隆
 */

public class Test {
 ]]></description><category></category></item><item><title><![CDATA[设计模式之访问者模式(Visitor)]]></title><link>https://blog.youkuaiyun.com/A_Java_Dog/article/details/117911387</link><guid>https://blog.youkuaiyun.com/A_Java_Dog/article/details/117911387</guid><author>A_Java_Dog</author><pubDate>Mon, 14 Jun 2021 19:03:21 +0800</pubDate><description><![CDATA[访问者模式(Visitor)
在访问者模式（Visitor Pattern）中，我们使用了一个访问者类，它改变了元素类的执行算法。通过这种方式，元素的执行算法可以随着访问者改变而改变
主要将数据结构与数据操作分离。 在结构不变的情况下动态改变对于内部元素的动作
需求描述： 有一电脑组装机门店，需要将CPU，内存条，主板等，给与不同的客户不同的折扣。

package com.cyc.design.visitor;

/**
 * 电脑对象
 */
public class Computer {
    //]]></description><category></category></item><item><title><![CDATA[设计模式之迭代器模式(Iterator)]]></title><link>https://blog.youkuaiyun.com/A_Java_Dog/article/details/117906991</link><guid>https://blog.youkuaiyun.com/A_Java_Dog/article/details/117906991</guid><author>A_Java_Dog</author><pubDate>Mon, 14 Jun 2021 17:33:08 +0800</pubDate><description><![CDATA[迭代器模式迭代器模式数组演示链表演示相互替换容器遍历自己的遍历方式泛型版迭代JDK的迭代器
迭代器模式
迭代器模式（Iterator Pattern）是 Java 和 .Net 编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素，不需要知道集合对象的底层表示, 主要用于容器和容器遍历
数据结构中的物理结构只有两种:
第一种: 连续存储, 数组
第二种: 不连续存储, 链表 每个储存位置不但储存当前值, 还储存一个内存地址, 指向下个值的地址
数组演示
package com.cyc.desig]]></description><category></category></item><item><title><![CDATA[设计模式之代理模式(Proxy)]]></title><link>https://blog.youkuaiyun.com/A_Java_Dog/article/details/117880636</link><guid>https://blog.youkuaiyun.com/A_Java_Dog/article/details/117880636</guid><author>A_Java_Dog</author><pubDate>Sun, 13 Jun 2021 23:58:53 +0800</pubDate><description><![CDATA[设计模式之代理模式代理模式方案一方案二方案三方案四方案五方案六(动态代理)方案七(动态代理)JDK动态代理逻辑图源码分析CGLIB动态代理spring aop基础注解的AOP
代理模式
需求: 有一辆坦克 , 想要记录坦克的移动时间和移动记录
原始代码如下
package com.cyc.design.proxy.v01;

import java.util.Random;

/**
 * 问题：我想记录坦克的移动时间
 */
public class Tank implements Movable {

]]></description><category></category></item><item><title><![CDATA[设计模式之享元模式(Flyweight)]]></title><link>https://blog.youkuaiyun.com/A_Java_Dog/article/details/117880068</link><guid>https://blog.youkuaiyun.com/A_Java_Dog/article/details/117880068</guid><author>A_Java_Dog</author><pubDate>Sun, 13 Jun 2021 16:21:26 +0800</pubDate><description><![CDATA[享元模式

享元模式（Flyweight Pattern）主要用于减少创建对象的数量，以减少内存占用和提高性能。这种类型的设计模式属于结构型模式，它提供了减少对象数量从而改善应用所需的对象结构的方式。
享元模式尝试重用现有的同类对象，如果未找到匹配的对象，则创建新对象
**意图：**运用共享技术有效地支持大量细粒度的对象。
**主要解决：**在有大量对象时，有可能会造成内存溢出，我们把其中共同的部分抽象出来，如果有相同的业务请求，直接返回在内存中已有的对象，避免重新创建
应用实例:

JAVA 中的 Str]]></description><category></category></item><item><title><![CDATA[设计模式之组合模式(Composite)]]></title><link>https://blog.youkuaiyun.com/A_Java_Dog/article/details/117817458</link><guid>https://blog.youkuaiyun.com/A_Java_Dog/article/details/117817458</guid><author>A_Java_Dog</author><pubDate>Fri, 11 Jun 2021 14:55:17 +0800</pubDate><description><![CDATA[组合模式
介绍
组合模式（Composite Pattern），又叫部分整体模式，是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象，用来表示部分以及整体层次。这种类型的设计模式属于结构型模式，它创建了对象组的树形结构。

代码演示
package com.cyc.design.composite;

import java.util.ArrayList;
import java.util.List;

/**
 * 组合模式
 */

abstract class Node {
  ]]></description><category></category></item></channel></rss>