<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[LIva_的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/LIva_</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; LIva_]]></copyright><item><title><![CDATA[浅谈分布式事务解决方案两段提交（2PC）]]></title><link>https://blog.youkuaiyun.com/LIva_/article/details/124826489</link><guid>https://blog.youkuaiyun.com/LIva_/article/details/124826489</guid><author>LIva_</author><pubDate>Thu, 19 May 2022 10:45:00 +0800</pubDate><description><![CDATA[两阶段提交协议(Two Phase Commitment Protocol)
首先讲一下分布式事务的作用：为了保证各个事务、各个微服务之间的事务的数据一致性。
两阶段提交协议(Two Phase Commitment Protocol)中，涉及到两种角色
一个事务协调者（coordinator）：负责协调多个参与者进行事务投票及提交(回滚)
多个事务参与者（participants）：即本地事务执行者
总共处理步骤有两个
（1）投票阶段（voting phase）：协调者将通知事务参与者准备提交或取消事务，]]></description><category></category></item><item><title><![CDATA[Java虚拟机中的内存模型]]></title><link>https://blog.youkuaiyun.com/LIva_/article/details/124837682</link><guid>https://blog.youkuaiyun.com/LIva_/article/details/124837682</guid><author>LIva_</author><pubDate>Wed, 18 May 2022 10:45:48 +0800</pubDate><description><![CDATA[栈 堆 方法区

Java虚拟机运行时内存所有的类的实例（不包括局部变量与方法参数）都存储在Java堆中，每条线程有自己的工作内存（Java栈），不同线程之间无法直接访问对方工作内存中的变量。
方法区用于存储被虚拟机加载的类信息、常量、static变量等数据，堆用于存储对象实例，比如通过 new创建的对象实例就保存在堆中，堆中的对象的由垃圾回收器负责回收。
Java栈用于实现方法调用，每次方法调用就对应栈中的一个栈帧，栈帧包含局部变量表、操作数栈、方法接口等于方法相关的信息，栈中的数据当没有引用指向数据时，]]></description><category></category></item><item><title><![CDATA[微服务之间的拦截器令牌传递问题]]></title><link>https://blog.youkuaiyun.com/LIva_/article/details/124825811</link><guid>https://blog.youkuaiyun.com/LIva_/article/details/124825811</guid><author>LIva_</author><pubDate>Tue, 17 May 2022 17:22:57 +0800</pubDate><description><![CDATA[微服务之间的认证（令牌传递）
在使用拦截器进行微服务之间的令牌传递时，我在获取当前线程所有的request属性数据时遇到了 attributes始终为空的情况，经过反复检查代码排查逻辑，仍找不到问题所在。
最终我在琢磨hystrix时发现：如果使用Feign并开启熔断，则默认会采取线程池隔离，而feign调用和请求的线程不属于同一个线程，无法获取请求的线程数据，最终会导致无法获取请求的线程数据，会造成空指针异常。
我们知道微服务与微服务之间实现认证，只需要将用户传递的令牌Authorization传递给其他]]></description><category></category></item><item><title><![CDATA[FastDFS技术总结]]></title><link>https://blog.youkuaiyun.com/LIva_/article/details/124822599</link><guid>https://blog.youkuaiyun.com/LIva_/article/details/124822599</guid><author>LIva_</author><pubDate>Tue, 17 May 2022 15:28:24 +0800</pubDate><description><![CDATA[什么是FastDFS
FastDFS是一套分布式文件管理系统，为互联网量身定制，充分考虑了冗余备份、负载均衡、线性扩容等机制，并注重高可用、高性能等指标，使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。

1.Tracker:
负责任务调度，负载均衡管理以及Storage的注册中心功能
2.Storage:
负责文件上传和下载以及文件的删除等管理功能
FastDFS有什么缺点
1.不支持文件分片，FastDFS不适合大文件存储
2.同步机制不支持文件正确性校验，降低了系统的可]]></description><category></category></item><item><title><![CDATA[Unable to find instance for system]]></title><link>https://blog.youkuaiyun.com/LIva_/article/details/124550651</link><guid>https://blog.youkuaiyun.com/LIva_/article/details/124550651</guid><author>LIva_</author><pubDate>Tue, 03 May 2022 09:23:29 +0800</pubDate><description><![CDATA[在学习Spring Boot时很容易遇到下面这个错误
新开一个system服务并进行访问
此时碰到错误不要立刻就去网上寻求答案，应该自己仔细分析一下这个问题的根源所在。
unable to find instance  翻译中文为找不到服务。那么我们就该立刻想到是eureka注册中心或者是我们的服务注册到eureka时没配置好。
但其实我们应该知道eureka client服务注册是需要时间的，也就是说有一定的延迟，并不会你启动服务然后访问就能够成功的。
解决方法就是等一会在进行访问啦！

发这个博客的目的]]></description><category></category></item><item><title><![CDATA[Spring Boot Redis 令牌桶限流]]></title><link>https://blog.youkuaiyun.com/LIva_/article/details/124542618</link><guid>https://blog.youkuaiyun.com/LIva_/article/details/124542618</guid><author>LIva_</author><pubDate>Mon, 02 May 2022 16:52:01 +0800</pubDate><description><![CDATA[Redis令牌桶限流的实现
##令牌桶算法是比较常见的限流算法之一，其步骤大致如下：
1.在请求处理之前，都要拿到一个令牌，请求才回被处理
2.根据限流的多大小，我们可以设置按照一定速率往桶里添加令牌
3.设置最大的桶令牌限制，当令牌桶满时，新的令牌就会被丢弃或拒绝
4.请求达到后首先要获取令牌桶中的令牌，只有拿着令牌才可以进行其他的业务逻辑，业务完毕，令牌删除
5.令牌桶有最低限额，达到最低限额时，请求处理完毕后则不会删除，这样保证了有足够的限流

##能实现该算法的封装有很多，个人认为redis的最友好]]></description><category></category></item><item><title><![CDATA[跨域解决方案CORS]]></title><link>https://blog.youkuaiyun.com/LIva_/article/details/124518240</link><guid>https://blog.youkuaiyun.com/LIva_/article/details/124518240</guid><author>LIva_</author><pubDate>Sat, 30 Apr 2022 20:37:14 +0800</pubDate><description><![CDATA[#什么是跨域
出于浏览器的同源策略限制。同源策（Sameoriginpolicy）是一种约定，它是浏览器最核心也最基本的安全功能，如果缺少了同源策略，则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的，浏览器只是针对同源策略的一种实现。同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。所谓同源（即指在同一个域）就是两个页面具有相同的协议（protocol），主机（host）和端口
号（port）
如果跨域调用，会出现如下错误：
No 'Access-Contr]]></description><category></category></item><item><title><![CDATA[Spring Boot 统一的处理异常类]]></title><link>https://blog.youkuaiyun.com/LIva_/article/details/124517901</link><guid>https://blog.youkuaiyun.com/LIva_/article/details/124517901</guid><author>LIva_</author><pubDate>Sat, 30 Apr 2022 20:18:29 +0800</pubDate><description><![CDATA[Spring Boot 电商项目总结
统一的处理异常类
在用户访问的时候，如果系统出现错误就显示Spring的原生错误则会显得非常不专业。此时我们需要一个统一的异常处理类来管理可能遇到的所有异常。
如代码所示：
/**
 * 统一异常处理类
 */
@ControllerAdvice  //声明该类是一个增强类
public class BaseExceptionHandler {

    @ExceptionHandler(value = Exception.class)
    @ResponseBo]]></description><category></category></item><item><title><![CDATA[python多任务print时文本错乱]]></title><link>https://blog.youkuaiyun.com/LIva_/article/details/122382327</link><guid>https://blog.youkuaiyun.com/LIva_/article/details/122382327</guid><author>LIva_</author><pubDate>Wed, 19 Jan 2022 20:44:14 +0800</pubDate><description><![CDATA[在学习python多任务的时候遇到了这样一个奇怪的问题。
两个线程并行start，睡眠时间设定为1秒，下面是具体代码。
import multiprocessing
import time


def task1(count):
    for i in range(count):
        print('task1-', i+1)
        time.sleep(1)


def task2(content, count):
    for i in range(count):
       ]]></description><category></category></item></channel></rss>