<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[colspanprince的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/colspanprince</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; colspanprince]]></copyright><item><title><![CDATA[Vue学习笔记四]]></title><link>https://blog.youkuaiyun.com/colspanprince/article/details/125785740</link><guid>https://blog.youkuaiyun.com/colspanprince/article/details/125785740</guid><author>colspanprince</author><pubDate>Sat, 20 Aug 2022 10:11:30 +0800</pubDate><description><![CDATA[非单文件组件、vue cli的安装、render函数、ref函数、props配置、mixin混入、插件、scoped样式]]></description><category></category></item><item><title><![CDATA[Vue学习笔记三]]></title><link>https://blog.youkuaiyun.com/colspanprince/article/details/125741466</link><guid>https://blog.youkuaiyun.com/colspanprince/article/details/125741466</guid><author>colspanprince</author><pubDate>Thu, 14 Jul 2022 15:33:24 +0800</pubDate><description><![CDATA[监测数据原理、收集表单数据，内置指令，自定义指令，生命周期]]></description><category></category></item><item><title><![CDATA[Vue学习笔记二]]></title><link>https://blog.youkuaiyun.com/colspanprince/article/details/125399006</link><guid>https://blog.youkuaiyun.com/colspanprince/article/details/125399006</guid><author>colspanprince</author><pubDate>Mon, 11 Jul 2022 16:51:57 +0800</pubDate><description><![CDATA[监视属性、绑定样式、条件渲染、列表渲染]]></description><category></category></item><item><title><![CDATA[Vue学习笔记一]]></title><link>https://blog.youkuaiyun.com/colspanprince/article/details/125305760</link><guid>https://blog.youkuaiyun.com/colspanprince/article/details/125305760</guid><author>colspanprince</author><pubDate>Thu, 16 Jun 2022 22:34:09 +0800</pubDate><description><![CDATA[模板语法、数据绑定、MVVM、Object.defineProperty、事件处理、计算属性]]></description><category></category></item><item><title><![CDATA[Spring 事务回滚实现原理]]></title><link>https://blog.youkuaiyun.com/colspanprince/article/details/124381389</link><guid>https://blog.youkuaiyun.com/colspanprince/article/details/124381389</guid><author>colspanprince</author><pubDate>Sun, 24 Apr 2022 16:15:10 +0800</pubDate><description><![CDATA[比如Controller调Service的方法，在Service层的方法上加了@Transaction注解，那么Controller调的这个Service对象就会变成代理对象，



核心类：TransactionAspectSupport




	protected Object invokeWithinTransaction(Method method, @Nullable Class&lt;?&gt; targetClass,
			final InvocationCallback invocati]]></description><category></category></item><item><title><![CDATA[面试题 MySQL]]></title><link>https://blog.youkuaiyun.com/colspanprince/article/details/123674120</link><guid>https://blog.youkuaiyun.com/colspanprince/article/details/123674120</guid><author>colspanprince</author><pubDate>Fri, 01 Apr 2022 10:57:19 +0800</pubDate><description><![CDATA[一、MyISAM和InnoDB存储引擎的区别

1、MyISAM

不支持事务，不支持外键约束，索引文件和数据文件分开，这样在内存里可以缓存更多的索引，对查询的性能更好，适用于少量的插入，大量查询的场景。报表系统是比较适合MyISAM存储引擎的

2、Innodb 

支持事务，支持外键约束，有成熟的高并发、高可用、分库分表、读写分离、主从切换的方案
...]]></description><category></category></item><item><title><![CDATA[面试题 网络]]></title><link>https://blog.youkuaiyun.com/colspanprince/article/details/123585674</link><guid>https://blog.youkuaiyun.com/colspanprince/article/details/123585674</guid><author>colspanprince</author><pubDate>Tue, 22 Mar 2022 22:43:21 +0800</pubDate><description><![CDATA[一、TCP/IP四层模型

四层模型是从七层模型简化而来的

1、OSI七层模型

应用层、表示层、会话层、传输层、网络层、数据链路层、物理层

2、TCP/IP四层模型

物理层：将两台设备通过网线、光缆等方式，通过物理方式连通，用来传输0和1的电路信号

数据链路层：物理层传输0和1的电信号后，还需要根据协议，来辨别这些0和1的电信号代表什么意思，以太网协议就是这种公共的协议。以太网协议规定，每个设备都有个网卡，数据就是从一个电脑的网卡发往另一个电脑的网卡。这个网卡地址就是所谓的MAC地址，每个网卡都有]]></description><category></category></item><item><title><![CDATA[面试题 分库分表、主从同步]]></title><link>https://blog.youkuaiyun.com/colspanprince/article/details/122972715</link><guid>https://blog.youkuaiyun.com/colspanprince/article/details/122972715</guid><author>colspanprince</author><pubDate>Thu, 03 Mar 2022 16:55:16 +0800</pubDate><description><![CDATA[二 系统
]]></description><category></category></item><item><title><![CDATA[面试题四 如何设计一个高并发的架构系统]]></title><link>https://blog.youkuaiyun.com/colspanprince/article/details/122774076</link><guid>https://blog.youkuaiyun.com/colspanprince/article/details/122774076</guid><author>colspanprince</author><pubDate>Thu, 03 Feb 2022 09:19:28 +0800</pubDate><description><![CDATA[一、系统拆分

使用dubbo、SpringCloud实现分布式，拆分系统，不同业务访问不同数据库

二、缓存

大量读请求直接从缓存里取

三、MQ

读请求解决好后，就要解决写请求，加入MQ进行削峰

四、分库分表

加入MQ可以针对平时数据量不大，但秒杀时数据量很大的场景，但如果平时数据量就很大，那MQ削峰了也没用。这时进行分库分表，将请求分摊到各个库

五、读写分离

要更新缓存中的数据，所以主库负责写，从库负责读

六、ELK

分布式系统上ELK

七、简述

阿里云ECS弹性伸缩，高峰特别是秒]]></description><category></category></item><item><title><![CDATA[面试题三 分布式事务方案]]></title><link>https://blog.youkuaiyun.com/colspanprince/article/details/122709572</link><guid>https://blog.youkuaiyun.com/colspanprince/article/details/122709572</guid><author>colspanprince</author><pubDate>Fri, 28 Jan 2022 22:33:37 +0800</pubDate><description><![CDATA[一、两阶段提交

1、介绍：

有一个事务管理器的概念，负责协调多个数据库的事务，事务管理器先问各个数据库是否可以存储数据，如果都可以，那就正式提交事务，否则就回滚事务

2、缺点：

严重依赖数据库层面来搞定事务，效率很低，绝对不适合高并发的场景。在实际的分布式系统中，基本不可能使用。因为分布式服务中的每个服务按规定只能访问自己的库，所以没法使用两阶段提交

二、TCC方案

1、介绍：

用业务代码实现分布式事务，TCC全称try、confirm、cancel

1）try阶段：对各个服务的资源做检测和]]></description><category></category></item><item><title><![CDATA[面试题二 分布式锁和分布式session]]></title><link>https://blog.youkuaiyun.com/colspanprince/article/details/122705236</link><guid>https://blog.youkuaiyun.com/colspanprince/article/details/122705236</guid><author>colspanprince</author><pubDate>Wed, 26 Jan 2022 17:00:13 +0800</pubDate><description><![CDATA[一、Zookeeper的作用

1、分布式系统间的协调

A系统发消息到MQ，并在zk的某个节点注册监听器，B系统消费后修改zk那个节点的值，A立马就可以收到通知

2、分布式锁

节点尝试创建临时的znode，创建成功了就获取锁。别的节点尝试获取锁，却获取不到，就对这个锁注册一个监听器，当原来的节点释放锁后，新的节点就会感知到，然后尝试重新获取锁

3、注册中心、配置信息管理

kafka、storm、dubbo选用zk做一些元数据、配置信息的管理

4、HA高可用

重要进程做主备两个机器，主机器挂了就]]></description><category></category></item><item><title><![CDATA[《12个真实项目实战带你玩转Java并发编程》 笔记三 ThreadPoolExecutor与生产者消费者模式]]></title><link>https://blog.youkuaiyun.com/colspanprince/article/details/121752819</link><guid>https://blog.youkuaiyun.com/colspanprince/article/details/121752819</guid><author>colspanprince</author><pubDate>Mon, 27 Dec 2021 14:25:42 +0800</pubDate><description><![CDATA[一、第十三、十四课 两阶段终止模式

既要保证线程灵活的切换运行状态，又要保证线程优雅的处理完当前任务，就是两阶段终止模式的核心思想

两个阶段总结起来分别为：

发出信号，告知正在运行的线程将被终止（通过volatile定义的bool变量实现）
	接收到此信号的线程，做完善后工作，停止运行（比如把未处理完的数据写入持久化缓存，等待下次处理）
二、第十五课 ThreadPoolExecutor的shutdown和shutdownNow

两者都会尝试中止线程，但都只能中止阻塞状态的线程，正在运行的线程无法中]]></description><category></category></item><item><title><![CDATA[《12个真实项目实战带你玩转Java并发编程》 笔记五 ThreadLocal]]></title><link>https://blog.youkuaiyun.com/colspanprince/article/details/122086793</link><guid>https://blog.youkuaiyun.com/colspanprince/article/details/122086793</guid><author>colspanprince</author><pubDate>Thu, 23 Dec 2021 17:21:10 +0800</pubDate><description><![CDATA[一、ThreadLocal解密

如果让我们自己实现ThreadLocal功能，我们第一反应想到的应该是这么做

新建一个类名为MyThreadLocal
	在类种创建一个Map类型的成员变量，key是Thread，value是Object
但这样会有一个很严重的问题，内存泄漏。只要这个MyThreadLocal对象不回收，那Map中的对象也不会被回收，除非每次手动删除，但这样太麻烦了，一不注意就会导致OOM。所以这样设计是有很严重的缺陷的，那JDK中的ThreadLocal是如何是实现的呢？

通过观察.]]></description><category></category></item><item><title><![CDATA[《12个真实项目实战带你玩转Java并发编程》 笔记四 FutureTask]]></title><link>https://blog.youkuaiyun.com/colspanprince/article/details/121752850</link><guid>https://blog.youkuaiyun.com/colspanprince/article/details/121752850</guid><author>colspanprince</author><pubDate>Thu, 23 Dec 2021 14:17:42 +0800</pubDate><description><![CDATA[一、第十六课Promise模式

以烧水、泡茶这个过程举例，烧水耗时3分钟，泡茶耗时1分钟。用代码实现该功能，有下图所示的三种方式



1）单线程模式，先烧水再泡茶，那么会耗时4分钟，即上图中第一行

2）多线程模式，即最基础的Thread线程，烧水是一个线程，泡茶是一个线程，2个线程同时start，但这样的话主线程会很快结束，无法统计总共耗时，即上图中第二行

3）使用FutureTask，烧水是一个FutureTask，喝茶是一个FutureTask，总共耗时3分钟，并且全部执行完后主线程才会结束..]]></description><category></category></item><item><title><![CDATA[《12个真实项目实战带你玩转Java并发编程》 笔记二 等待-通知机制]]></title><link>https://blog.youkuaiyun.com/colspanprince/article/details/121649676</link><guid>https://blog.youkuaiyun.com/colspanprince/article/details/121649676</guid><author>colspanprince</author><pubDate>Mon, 06 Dec 2021 18:17:12 +0800</pubDate><description><![CDATA[一、第九、十课 实现智能安防报警功能

这2课主要介绍了通过Lock、Condition的await、singal方法来实现的“等待-通知”机制，具体要看文章中的代码。多线程编程之保护性暂挂模式_爱宝贝丶的博客-优快云博客这篇博客和文章中的设计思路基本一样

二、第十一课Guarded Suspension模式在BlockingQueue源码中的应用场景

主要介绍了ArrayBlockingQueue的阻塞式的put和take方法。当队列满了后，put方法会触发notFull.await阻塞，直到...]]></description><category></category></item><item><title><![CDATA[《12个真实项目实战带你玩转Java并发编程》 笔记一 不可变类]]></title><link>https://blog.youkuaiyun.com/colspanprince/article/details/121505445</link><guid>https://blog.youkuaiyun.com/colspanprince/article/details/121505445</guid><author>colspanprince</author><pubDate>Tue, 30 Nov 2021 10:10:38 +0800</pubDate><description><![CDATA[一、第二课 解决并发问题的方法有哪些



不可变对象：类似String

CAS原子类：如Atomic为前缀的一系列类

二、第三课 如何快速实现一个不可变类

1、使用final关键字修饰所有成员变量，避免其被修改，也可以保证多线程环境下被final关键字修饰的变量所引用的对象的初始化安全，即final修饰的字段在其他线程可见时，必定是初始化完成的。

2、使用private修饰所有成员变量，可以防止子类及其他地方通过引用直接修改变量值。

3、禁止提供修改内部状态的公开接口(比如我们前面例子中...]]></description><category></category></item><item><title><![CDATA[RocketMQ源码解读四 生产者发送数据]]></title><link>https://blog.youkuaiyun.com/colspanprince/article/details/115306369</link><guid>https://blog.youkuaiyun.com/colspanprince/article/details/115306369</guid><author>colspanprince</author><pubDate>Wed, 28 Apr 2021 16:51:37 +0800</pubDate><description><![CDATA[一、创建DefaultMQProducerImpl

DefaultMQProducer默认Topic是TBW102

二、开始发送

DefaultMQProducerImpl类，从namesrv获取Topic信息


    private TopicPublishInfo tryToFindTopicPublishInfo(final String topic) {
        TopicPublishInfo topicPublishInfo = this.topicPublishInfoTab]]></description><category></category></item><item><title><![CDATA[SpringCloud refresh之finishBeanFactoryInitialization源码分析]]></title><link>https://blog.youkuaiyun.com/colspanprince/article/details/114573128</link><guid>https://blog.youkuaiyun.com/colspanprince/article/details/114573128</guid><author>colspanprince</author><pubDate>Tue, 09 Mar 2021 15:09:51 +0800</pubDate><description><![CDATA[一、整体流程

首先进入preInstantiateSingletons方法，这段代码只需知道有mergedBeanDefinitions这个集合，它的key是beanName，value是RootBeanDefinition，其他部分源码都比较简单。大部分类最终都是进入了doGetBean方法


	@Override
	public void preInstantiateSingletons() throws BeansException {
		if (logger.isTraceEnabled().]]></description><category></category></item><item><title><![CDATA[RocketMQ源码解读四 Broker写入数据]]></title><link>https://blog.youkuaiyun.com/colspanprince/article/details/114264640</link><guid>https://blog.youkuaiyun.com/colspanprince/article/details/114264640</guid><author>colspanprince</author><pubDate>Fri, 05 Mar 2021 17:06:12 +0800</pubDate><description><![CDATA[存储的核心逻辑是CommitLog类的asyncPutMessage方法，截取关键源码如下


    public CompletableFuture&lt;PutMessageResult&gt; asyncPutMessage(final MessageExtBrokerInner msg) {
        
        /*
         * 删除了部分不重要的代码
         */

        putMessageLock.lock();
        try {
  .]]></description><category></category></item><item><title><![CDATA[RocketMQ源码解读三  Broker启动篇]]></title><link>https://blog.youkuaiyun.com/colspanprince/article/details/114140238</link><guid>https://blog.youkuaiyun.com/colspanprince/article/details/114140238</guid><author>colspanprince</author><pubDate>Mon, 01 Mar 2021 15:17:46 +0800</pubDate><description><![CDATA[Broker的启动也和NameSrv一样，主要有createBrokerController和start这2个方法


    public static void main(String[] args) {
        start(createBrokerController(args));
    }

createBrokerController方法源码如下，这边根据brokerRole的值，对brokerId和accessMessageInMemoryMaxRatio进行了特殊设置，暂不清楚这.]]></description><category></category></item></channel></rss>